From ff1769defb9de14a80792aed16652451a29f03da Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 24 Jun 2012 15:21:26 +0200 Subject: another input wrapper fix --- inc/parserutils.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'inc/parserutils.php') diff --git a/inc/parserutils.php b/inc/parserutils.php index 9384929bf..25d7cf131 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -739,7 +739,7 @@ function p_get_first_heading($id, $render=METADATA_RENDER_USING_SIMPLE_CACHE){ * @author Andreas Gohr */ function p_xhtml_cached_geshi($code, $language, $wrapper='pre') { - global $conf, $config_cascade; + global $conf, $config_cascade, $INPUT; $language = strtolower($language); // remove any leading or trailing blank lines @@ -747,7 +747,7 @@ function p_xhtml_cached_geshi($code, $language, $wrapper='pre') { $cache = getCacheName($language.$code,".code"); $ctime = @filemtime($cache); - if($ctime && !$_REQUEST['purge'] && + if($ctime && !$INPUT->bool('purge') && $ctime > filemtime(DOKU_INC.'inc/geshi.php') && // geshi changed $ctime > @filemtime(DOKU_INC.'inc/geshi/'.$language.'.php') && // language syntax definition changed $ctime > filemtime(reset($config_cascade['main']['default']))){ // dokuwiki changed -- cgit v1.2.3 From 3d6feb16238ee969cb2ba14a592124052f0c4bc2 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Sat, 7 Jul 2012 23:06:12 +0200 Subject: Remove useless condition in p_get_metadata and add explanation --- inc/parserutils.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'inc/parserutils.php') diff --git a/inc/parserutils.php b/inc/parserutils.php index 25d7cf131..55b451c76 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -318,8 +318,9 @@ function p_get_metadata($id, $key='', $render=METADATA_RENDER_USING_CACHE){ // only update the file when the metadata has been changed if ($meta == $old_meta || p_save_metadata($id, $meta)) { // store a timestamp in order to make sure that the cachefile is touched + // this timestamp is also stored when the meta data is still the same $cachefile->storeCache(time()); - } elseif ($meta != $old_meta) { + } else { msg('Unable to save metadata file. Hint: disk full; file permissions; safe_mode setting.',-1); } } -- cgit v1.2.3 From 0d24b616cdb7336b978e6ecd0c1f845c1804f85f Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Wed, 25 Jul 2012 18:26:35 +0200 Subject: Disable some parser and renderer caches during tests FS#2564 This disables some caches which use static variables in order to prevent parsing or rendering of the same page more than once during a run and also disables the cache of parser modes. This means we can no longer test this behavior but at least it fixes syntax plugin tests and tests which change pages in order to test certain caching behaviors. --- inc/parserutils.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'inc/parserutils.php') diff --git a/inc/parserutils.php b/inc/parserutils.php index 55b451c76..bbe0db1c0 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -212,7 +212,7 @@ function p_cached_instructions($file,$cacheonly=false,$id='') { $cache = new cache_instructions($id, $file); - if ($cacheonly || $cache->useCache() || isset($run[$file])) { + if ($cacheonly || $cache->useCache() || (isset($run[$file]) && !defined('DOKU_UNITTEST'))) { return $cache->retrieveCache(); } else if (@file_exists($file)) { // no cache - do some work @@ -311,8 +311,10 @@ function p_get_metadata($id, $key='', $render=METADATA_RENDER_USING_CACHE){ } } if ($do_render) { - ++$render_count; - $rendered_pages[$id] = true; + if (!defined('DOKU_UNITTEST')) { + ++$render_count; + $rendered_pages[$id] = true; + } $old_meta = $meta; $meta = p_render_metadata($id, $meta); // only update the file when the metadata has been changed @@ -547,7 +549,7 @@ function p_get_parsermodes(){ //reuse old data static $modes = null; - if($modes != null){ + if($modes != null && !defined('DOKU_UNITTEST')){ return $modes; } -- cgit v1.2.3 From 6340dabc82297548ab6a8cfe3e913cdec0cac928 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 28 Jul 2012 11:12:27 +0200 Subject: avoid warnings when instructions with no parameters are rendered see http://irc.dokuwiki.org/index.php?d=2012-07-28#msg403531 --- inc/parserutils.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'inc/parserutils.php') diff --git a/inc/parserutils.php b/inc/parserutils.php index bbe0db1c0..9f5473d47 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -664,7 +664,7 @@ function p_render($mode,$instructions,&$info){ // Loop through the instructions foreach ( $instructions as $instruction ) { // Execute the callback against the Renderer - call_user_func_array(array(&$Renderer, $instruction[0]),$instruction[1]); + call_user_func_array(array(&$Renderer, $instruction[0]), $instruction[1] ? $instruction[1] : array()); } //set info array -- cgit v1.2.3 From 92a5d12663ce0d2371a16a0b894f9796f020146c Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Sat, 28 Jul 2012 10:49:13 +0200 Subject: Remove unused variables --- inc/parserutils.php | 1 - 1 file changed, 1 deletion(-) (limited to 'inc/parserutils.php') diff --git a/inc/parserutils.php b/inc/parserutils.php index 9f5473d47..f182b84c4 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -206,7 +206,6 @@ function p_cached_output($file, $format='xhtml', $id='') { * @author Andreas Gohr */ function p_cached_instructions($file,$cacheonly=false,$id='') { - global $conf; static $run = null; if(is_null($run)) $run = array(); -- cgit v1.2.3 From e3ab6fc5cbab1aaf365e73abaa3d91c03eebdd47 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Sat, 28 Jul 2012 11:06:10 +0200 Subject: Fixed and extended PHPDoc comments and added additional @var comments --- inc/parserutils.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'inc/parserutils.php') diff --git a/inc/parserutils.php b/inc/parserutils.php index f182b84c4..107c42eb0 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -92,8 +92,11 @@ function p_wiki_xhtml($id, $rev='', $excuse=true){ * If $excuse is true an explanation is returned if the file * wasn't found * - * @param string wiki page id - * @param reference populated with page title from heading or page id + * @param string $id wiki page id + * @param string $title populated with page title from heading or page id + * @param string $rev revision string + * @param bool $excuse if an excuse shall be renderer when no content is found + * @return string xhtml code * @deprecated * @author Harry Fuecks */ @@ -565,6 +568,7 @@ function p_get_parsermodes(){ global $PARSER_MODES; $obj = null; foreach($pluginlist as $p){ + /** @var DokuWiki_Syntax_Plugin $obj */ if(!$obj =& plugin_load('syntax',$p)) continue; //attempt to load plugin into $obj $PARSER_MODES[$obj->getType()][] = "plugin_$p"; //register mode type //add to modes @@ -675,7 +679,12 @@ function p_render($mode,$instructions,&$info){ return $Renderer->doc; } +/** + * @param $mode string Mode of the renderer to get + * @return null|Doku_Renderer The renderer + */ function & p_get_renderer($mode) { + /** @var Doku_Plugin_Controller $plugin_controller */ global $conf, $plugin_controller; $rname = !empty($conf['renderer_'.$mode]) ? $conf['renderer_'.$mode] : $mode; @@ -723,6 +732,7 @@ function & p_get_renderer($mode) { * METADATA_RENDER_USING_CACHE, * METADATA_RENDER_UNLIMITED * + * @return string|null The first heading * @author Andreas Gohr * @author Michael Hamann */ @@ -737,6 +747,7 @@ function p_get_first_heading($id, $render=METADATA_RENDER_USING_SIMPLE_CACHE){ * @param string $language language to provide highlighting * @param string $wrapper html element to wrap the returned highlighted text * + * @return string xhtml code * @author Christopher Smith * @author Andreas Gohr */ -- cgit v1.2.3 From 0a6ae52f7430e50a9680c9a927d460c63395087c Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Sat, 28 Jul 2012 11:14:09 +0200 Subject: Initialize more variables and test if others are set (no functional changes) --- inc/parserutils.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'inc/parserutils.php') diff --git a/inc/parserutils.php b/inc/parserutils.php index 107c42eb0..20f992ba2 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -103,6 +103,7 @@ function p_wiki_xhtml($id, $rev='', $excuse=true){ function p_wiki_xhtml_summary($id, &$title, $rev='', $excuse=true){ $file = wikiFN($id,$rev); $ret = ''; + $ins = null; //ensure $id is in global $ID (needed for parsing) global $ID; @@ -712,7 +713,7 @@ function & p_get_renderer($mode) { $Renderer =& $plugin_controller->load('renderer',$rname); } - if(is_null($Renderer)){ + if(!isset($Renderer) || is_null($Renderer)){ msg("No renderer '$rname' found for mode '$mode'",-1); return null; } -- cgit v1.2.3 From 31b10b49cde775ab7d0196b7824403dc45fcf370 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Sat, 28 Jul 2012 13:58:00 +0200 Subject: Be more careful when setting metadata values FS#2514 This fixes a warning when setting $meta['relation']['firstimage'] using p_set_metadata. --- inc/parserutils.php | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'inc/parserutils.php') diff --git a/inc/parserutils.php b/inc/parserutils.php index 20f992ba2..54ccb05f3 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -386,9 +386,18 @@ function p_set_metadata($id, $data, $render=false, $persistent=true){ if ($key == 'relation'){ foreach ($value as $subkey => $subvalue){ - $meta['current'][$key][$subkey] = !empty($meta['current'][$key][$subkey]) ? array_merge($meta['current'][$key][$subkey], $subvalue) : $subvalue; - if ($persistent) - $meta['persistent'][$key][$subkey] = !empty($meta['persistent'][$key][$subkey]) ? array_merge($meta['persistent'][$key][$subkey], $subvalue) : $subvalue; + if(isset($meta['current'][$key][$subkey]) && is_array($meta['current'][$key][$subkey])) { + $meta['current'][$key][$subkey] = array_merge($meta['current'][$key][$subkey], (array)$subvalue); + } else { + $meta['current'][$key][$subkey] = $subvalue; + } + if($persistent) { + if(isset($meta['persistent'][$key][$subkey]) && is_array($meta['persistent'][$key][$subkey])) { + $meta['persistent'][$key][$subkey] = array_merge($meta['persistent'][$key][$subkey], (array)$subvalue); + } else { + $meta['persistent'][$key][$subkey] = $subvalue; + } + } } // be careful with some senisitive arrays of $meta @@ -396,10 +405,10 @@ function p_set_metadata($id, $data, $render=false, $persistent=true){ // these keys, must have subkeys - a legitimate value must be an array if (is_array($value)) { - $meta['current'][$key] = !empty($meta['current'][$key]) ? array_merge($meta['current'][$key],$value) : $value; + $meta['current'][$key] = !empty($meta['current'][$key]) ? array_merge((array)$meta['current'][$key],$value) : $value; if ($persistent) { - $meta['persistent'][$key] = !empty($meta['persistent'][$key]) ? array_merge($meta['persistent'][$key],$value) : $value; + $meta['persistent'][$key] = !empty($meta['persistent'][$key]) ? array_merge((array)$meta['persistent'][$key],$value) : $value; } } -- cgit v1.2.3 From 7c62086b7b95a10cc08ceb137ea5861d7cd78437 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 28 Jul 2012 18:37:24 +0200 Subject: only execute valid instructions FS#2432 --- inc/parserutils.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'inc/parserutils.php') diff --git a/inc/parserutils.php b/inc/parserutils.php index 54ccb05f3..3dbfc726f 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -677,7 +677,9 @@ function p_render($mode,$instructions,&$info){ // Loop through the instructions foreach ( $instructions as $instruction ) { // Execute the callback against the Renderer - call_user_func_array(array(&$Renderer, $instruction[0]), $instruction[1] ? $instruction[1] : array()); + if(method_exists($Renderer, $instruction[0])){ + call_user_func_array(array(&$Renderer, $instruction[0]), $instruction[1] ? $instruction[1] : array()); + } } //set info array -- cgit v1.2.3