diff options
author | Christopher Smith <chris@jalakai.co.uk> | 2014-02-25 02:58:58 +0000 |
---|---|---|
committer | Christopher Smith <chris@jalakai.co.uk> | 2014-02-25 02:58:58 +0000 |
commit | 11ac6abdb90a812687d7db7df99aa02f843dd12a (patch) | |
tree | 1568cc6cd55cab7c6a641289fc5b4f5ff7dad82f /inc/parserutils.php | |
parent | ae6c41cb69b692db7b450c68aab26ffe8f041ad4 (diff) | |
download | rpg-11ac6abdb90a812687d7db7df99aa02f843dd12a.tar.gz rpg-11ac6abdb90a812687d7db7df99aa02f843dd12a.tar.bz2 |
if configured renderer is not found, try to fallback to a bundled renderer
Diffstat (limited to 'inc/parserutils.php')
-rw-r--r-- | inc/parserutils.php | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/inc/parserutils.php b/inc/parserutils.php index 4df273f11..2fb523d0c 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -631,27 +631,43 @@ function & p_get_renderer($mode) { return $Renderer; } - // try default renderer first: - $file = DOKU_INC."inc/parser/$rname.php"; - if(@file_exists($file)){ - require_once $file; - - if ( !class_exists($rclass) ) { - trigger_error("Unable to resolve render class $rclass",E_USER_WARNING); - msg("Renderer '$rname' for $mode not valid",-1); - return null; - } - $Renderer = new $rclass(); - }else{ - // Maybe a plugin/component is available? + // assuming the configured renderer is bundled, construct its file name + $default = DOKU_INC."inc/parser/$rname.php"; + if (!file_exists($default)) { + // not bundled, see if its an enabled plugin for rendering $mode $Renderer = $plugin_controller->load('renderer',$rname); + if (is_a($Renderer, 'Doku_Renderer') && ($mode == $Renderer->getFormat())) { + return $Renderer; + } - if(!isset($Renderer) || is_null($Renderer)){ + // there is a configuration error! + // not bundled, not an enabled plugin, try to fallback to a bundled renderer + $fallback = DOKU_INC."inc/parser/$mode.php"; + if (!file_exists($fallback)) { msg("No renderer '$rname' found for mode '$mode'",-1); return null; + } else { + $default = $fallback; + $rclass = "Doku_Renderer_$mode"; + + // viewers should see renderered output, so restrict the warning to admins only + $msg = "No renderer '$rname' found for mode '$mode', check your plugins"; + if ($mode == 'xhtml') { + $msg .= " and the 'renderer_xhtml' config setting"; + } + $msg .= ".<br/>Attempting to fallback to the bundled renderer."; + msg($msg,-1,'','',MSG_ADMIN_ONLY); } } + require_once $default; + if ( !class_exists($rclass) ) { + trigger_error("Unable to resolve render class $rclass",E_USER_WARNING); + msg("Renderer '$rname' for $mode not valid",-1); + return null; + } + $Renderer = new $rclass(); + return $Renderer; } |