diff options
author | lisps <stummp@loewen.de> | 2014-02-22 03:13:10 +0100 |
---|---|---|
committer | lisps <stummp@loewen.de> | 2014-02-22 03:13:10 +0100 |
commit | 90bee6003f3d7160fb936d01511a35eeb5bc708c (patch) | |
tree | 5fe544bd428f523a84df5fc18b96d3c7a2310cd6 | |
parent | 4cd9f7913e21f3115fb7ff8d8820473613a39576 (diff) | |
download | rpg-90bee6003f3d7160fb936d01511a35eeb5bc708c.tar.gz rpg-90bee6003f3d7160fb936d01511a35eeb5bc708c.tar.bz2 |
fix check link existence, have to call getLastRevisionAt for every link
-rw-r--r-- | inc/pageutils.php | 33 | ||||
-rw-r--r-- | inc/parser/xhtml.php | 2 |
2 files changed, 27 insertions, 8 deletions
diff --git a/inc/pageutils.php b/inc/pageutils.php index 20fe54a8e..4504fdd2b 100644 --- a/inc/pageutils.php +++ b/inc/pageutils.php @@ -231,7 +231,13 @@ function sectionID($title,&$check) { * * @author Chris Smith <chris@jalakai.co.uk> */ -function page_exists($id,$rev='',$clean=true) { +function page_exists($id,$rev='',$clean=true, $data_at=false) { + if($rev !== '' && $date_at) { + $pagelog = new PageChangeLog($page); + $pagelog_rev = $pagelog->getLastRevisionAt($rev); + if($pagelog_rev !== false) + $rev = $pagelog_rev; + } return @file_exists(wikiFN($id,$rev,$clean)); } @@ -432,7 +438,14 @@ function resolve_id($ns,$id,$clean=true){ * * @author Andreas Gohr <andi@splitbrain.org> */ -function resolve_mediaid($ns,&$page,&$exists,$rev='' ){ +function resolve_mediaid($ns,&$page,&$exists,$rev='',$date_at=false){ + if($rev !== '' && $date_at){ + $medialog = new MediaChangeLog($media_id); + $medialog_rev = $medialog->getLastRevisionAt($rev); + if($medialog_rev !== false) { + $rev = $medialog_rev; + } + } $page = resolve_id($ns,$page); $file = mediaFN($page,$rev); $exists = @file_exists($file); @@ -443,7 +456,7 @@ function resolve_mediaid($ns,&$page,&$exists,$rev='' ){ * * @author Andreas Gohr <andi@splitbrain.org> */ -function resolve_pageid($ns,&$page,&$exists,$rev='' ){ +function resolve_pageid($ns,&$page,&$exists,$rev='',$date_at=false ){ global $conf; global $ID; $exists = false; @@ -463,20 +476,26 @@ function resolve_pageid($ns,&$page,&$exists,$rev='' ){ $page = resolve_id($ns,$page,false); // resolve but don't clean, yet // get filename (calls clean itself) + if($rev !== '' && $date_at) { + $pagelog = new PageChangeLog($page); + $pagelog_rev = $pagelog->getLastRevisionAt($rev); + if($pagelog_rev !== false)//something found + $rev = $pagelog_rev; + } $file = wikiFN($page,$rev); // if ends with colon or slash we have a namespace link if(in_array(substr($page,-1), array(':', ';')) || ($conf['useslash'] && substr($page,-1) == '/')){ - if(page_exists($page.$conf['start'],$rev)){ + if(page_exists($page.$conf['start'],$rev,true,$date_at)){ // start page inside namespace $page = $page.$conf['start']; $exists = true; - }elseif(page_exists($page.noNS(cleanID($page),$rev))){ + }elseif(page_exists($page.noNS(cleanID($page)),$rev,true,$date_at)){ // page named like the NS inside the NS $page = $page.noNS(cleanID($page)); $exists = true; - }elseif(page_exists($page,$rev)){ + }elseif(page_exists($page,$rev,true,$date_at)){ // page like namespace exists $page = $page; $exists = true; @@ -493,7 +512,7 @@ function resolve_pageid($ns,&$page,&$exists,$rev='' ){ }else{ $try = $page.'s'; } - if(page_exists($try,$rev)){ + if(page_exists($try,$rev,true,$date_at)){ $page = $try; $exists = true; } diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index 73de507b5..2bfa894ac 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -589,7 +589,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer { $default = $this->_simpleTitle($id); // now first resolve and clean up the $id - resolve_pageid(getNS($ID),$id,$exists,$this->date_at); + resolve_pageid(getNS($ID),$id,$exists,$this->date_at,true); $name = $this->_getLinkTitle($name, $default, $isImage, $id, $linktype); if ( !$isImage ) { |