add parameter at($DATE_AT) and mind revisions
This commit is contained in:
parent
ee33e0c562
commit
5c2eed9a19
15
doku.php
15
doku.php
|
@ -34,6 +34,7 @@ $QUERY = trim($INPUT->str('id'));
|
|||
$ID = getID();
|
||||
|
||||
$REV = $INPUT->int('rev');
|
||||
$DATE_AT= $INPUT->int('at');
|
||||
$IDX = $INPUT->str('idx');
|
||||
$DATE = $INPUT->int('date');
|
||||
$RANGE = $INPUT->str('range');
|
||||
|
@ -47,7 +48,19 @@ $PRE = cleanText(substr($INPUT->post->str('prefix'), 0, -1));
|
|||
$SUF = cleanText($INPUT->post->str('suffix'));
|
||||
$SUM = $INPUT->post->str('summary');
|
||||
|
||||
//make info about the selected page available
|
||||
if($DATE_AT) {
|
||||
$rev_t = getProperRevision($ID,$DATE_AT);
|
||||
if($rev_t === '') {
|
||||
$REV = '';
|
||||
} else if ($rev_t === false) {
|
||||
msg('Seite gab es zu diesem Zeitpunkt noch nicht');
|
||||
$REV = $DATE_AT;
|
||||
} else {
|
||||
$REV = $rev_t;
|
||||
}
|
||||
}
|
||||
|
||||
//make infos about the selected page available
|
||||
$INFO = pageinfo();
|
||||
|
||||
//export minimal info to JS, plugins can add more
|
||||
|
|
|
@ -814,3 +814,26 @@ function getRevisions($id, $first, $num, $chunk_size=8192, $media=false) {
|
|||
$log = new PageRevisionLog($id, $chunk_size);
|
||||
return $log->getRevisions($first, $num, $media);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an existing revision for a specific date which is
|
||||
* the current one or less or equal then the date
|
||||
*
|
||||
* @param string $id
|
||||
* @param number $date_at
|
||||
* @param boolean $media
|
||||
* @return string revision ('' for current)
|
||||
*/
|
||||
function getProperRevision($id,$date_at,$media = false){
|
||||
$create_time = @filemtime($media?mediaFN($id):wikiFN($id));
|
||||
if(((int)$date_at) >= $create_time) { //requestet REV older then time($id) => load current
|
||||
return '';
|
||||
} else {
|
||||
$log = new PageRevisionLog($id);
|
||||
if($rev = $log->getRelativeRevision($date_at+1, -1,$media)) {
|
||||
return $rev;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -161,7 +161,7 @@ function pageinfo() {
|
|||
if($REV) {
|
||||
//check if current revision was meant
|
||||
if($info['exists'] && (@filemtime($info['filepath']) == $REV)) {
|
||||
$REV = '';
|
||||
//$REV = ''; //if we enter a rev we want to see that revision (inc media files)
|
||||
} elseif($RANGE) {
|
||||
//section editing does not work with old revisions!
|
||||
$REV = '';
|
||||
|
|
|
@ -207,6 +207,7 @@ function html_show($txt=null){
|
|||
global $REV;
|
||||
global $HIGH;
|
||||
global $INFO;
|
||||
global $DATE_AT;
|
||||
//disable section editing for old revisions or in preview
|
||||
if($txt || $REV){
|
||||
$secedit = false;
|
||||
|
@ -226,8 +227,8 @@ function html_show($txt=null){
|
|||
echo '</div></div>';
|
||||
|
||||
}else{
|
||||
if ($REV) print p_locale_xhtml('showrev');
|
||||
$html = p_wiki_xhtml($ID,$REV,true);
|
||||
if ($REV||$DATE_AT) print p_locale_xhtml('showrev');
|
||||
$html = p_wiki_xhtml($ID,$REV,true,$DATE_AT);
|
||||
$html = html_secedit($html,$secedit);
|
||||
if($INFO['prependTOC']) $html = tpl_toc(true).$html;
|
||||
$html = html_hilight($html,$HIGH);
|
||||
|
|
|
@ -28,6 +28,8 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
// @access public
|
||||
var $doc = ''; // will contain the whole document
|
||||
var $toc = array(); // will contain the Table of Contents
|
||||
var $rev = '';
|
||||
var $date_at = '';
|
||||
|
||||
var $sectionedits = array(); // A stack of section edit data
|
||||
private $lastsecid = 0; // last section edit id, used by startSectionEdit
|
||||
|
@ -618,6 +620,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
}
|
||||
$link['more'] = '';
|
||||
$link['class'] = $class;
|
||||
if($this->date_at) {
|
||||
$params['at'] = $this->date_at;
|
||||
} else if($this->rev) {
|
||||
//$params['at'] = $this->rev;
|
||||
}
|
||||
$link['url'] = wl($id, $params);
|
||||
$link['name'] = $name;
|
||||
$link['title'] = $id;
|
||||
|
@ -792,7 +799,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
|
||||
list($ext,$mime,$dl) = mimetype($src,false);
|
||||
if(substr($mime,0,5) == 'image' && $render){
|
||||
$link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),($linking=='direct'));
|
||||
if(($this->rev||$this->date_at)) {
|
||||
$link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache,'rev'=>$this->_getProperMediaRevision($src)),($linking=='direct'));
|
||||
} else {
|
||||
$link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),($linking=='direct'));
|
||||
}
|
||||
}elseif($mime == 'application/x-shockwave-flash' && $render){
|
||||
// don't link flash movies
|
||||
$noLink = true;
|
||||
|
@ -800,7 +811,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
// add file icons
|
||||
$class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
|
||||
$link['class'] .= ' mediafile mf_'.$class;
|
||||
$link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),true);
|
||||
if(($this->rev||$this->date_at)) {
|
||||
$link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache,'rev'=>$this->_getProperMediaRevision($src)),true);
|
||||
} else {
|
||||
$link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),true);
|
||||
}
|
||||
if ($exists) $link['title'] .= ' (' . filesize_h(filesize(mediaFN($src))).')';
|
||||
}
|
||||
|
||||
|
@ -1048,7 +1063,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
$height=null, $cache=null, $render = true) {
|
||||
|
||||
$ret = '';
|
||||
|
||||
$intern = !is_externalmedia($src);
|
||||
list($ext,$mime,$dl) = mimetype($src);
|
||||
if(substr($mime,0,5) == 'image'){
|
||||
// first get the $title
|
||||
|
@ -1073,7 +1088,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
return $title;
|
||||
}
|
||||
//add image tag
|
||||
$ret .= '<img src="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache)).'"';
|
||||
if($intern && ($this->rev||$this->date_at)) {
|
||||
$ret .= '<img src="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache,'rev'=>$this->_getProperMediaRevision($src))).'"';
|
||||
} else {
|
||||
$ret .= '<img src="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache)).'"';
|
||||
}
|
||||
$ret .= ' class="media'.$align.'"';
|
||||
|
||||
if ($title) {
|
||||
|
@ -1221,6 +1240,23 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
|
||||
return $link;
|
||||
}
|
||||
|
||||
/**
|
||||
* _getProperMediaRevision is a helperfunction to internalmedia() and _media()
|
||||
* which returns an existing media revision less or equal to rev or date_at
|
||||
*
|
||||
* @author lisps
|
||||
* @param string $media_id
|
||||
* @access protected
|
||||
* @return string revision ('' for current)
|
||||
*/
|
||||
function _getProperMediaRevision($media_id){
|
||||
$rev = $this->rev;
|
||||
if($this->date_at){
|
||||
$rev = $this->date_at;
|
||||
}
|
||||
return getProperRevision($media_id,$rev,true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ define('METADATA_RENDER_UNLIMITED', 4);
|
|||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function p_wiki_xhtml($id, $rev='', $excuse=true){
|
||||
function p_wiki_xhtml($id, $rev='', $excuse=true,$date_at=''){
|
||||
$file = wikiFN($id,$rev);
|
||||
$ret = '';
|
||||
|
||||
|
@ -65,9 +65,9 @@ function p_wiki_xhtml($id, $rev='', $excuse=true){
|
|||
$keep = $ID;
|
||||
$ID = $id;
|
||||
|
||||
if($rev){
|
||||
if($rev || $date_at){
|
||||
if(@file_exists($file)){
|
||||
$ret = p_render('xhtml',p_get_instructions(io_readWikiPage($file,$id,$rev)),$info); //no caching on old revisions
|
||||
$ret = p_render('xhtml',p_get_instructions(io_readWikiPage($file,$id,$rev)),$info,$rev,$date_at); //no caching on old revisions
|
||||
}elseif($excuse){
|
||||
$ret = p_locale_xhtml('norev');
|
||||
}
|
||||
|
@ -583,7 +583,7 @@ function p_sort_modes($a, $b){
|
|||
* @author Harry Fuecks <hfuecks@gmail.com>
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function p_render($mode,$instructions,&$info){
|
||||
function p_render($mode,$instructions,&$info,$rev='',$date_at=''){
|
||||
if(is_null($instructions)) return '';
|
||||
|
||||
$Renderer =& p_get_renderer($mode);
|
||||
|
@ -591,6 +591,13 @@ function p_render($mode,$instructions,&$info){
|
|||
|
||||
$Renderer->reset();
|
||||
|
||||
if($rev) {
|
||||
$Renderer->rev = $rev;
|
||||
}
|
||||
if($date_at) {
|
||||
$Renderer->date_at = $date_at;
|
||||
}
|
||||
|
||||
$Renderer->smileys = getSmileys();
|
||||
$Renderer->entities = getEntities();
|
||||
$Renderer->acronyms = getAcronyms();
|
||||
|
|
|
@ -1031,6 +1031,7 @@ function tpl_img_getTag($tags, $alt = '', $src = null) {
|
|||
function tpl_img($maxwidth = 0, $maxheight = 0, $link = true, $params = null) {
|
||||
global $IMG;
|
||||
global $INPUT;
|
||||
global $REV;
|
||||
$w = tpl_img_getTag('File.Width');
|
||||
$h = tpl_img_getTag('File.Height');
|
||||
|
||||
|
@ -1055,8 +1056,8 @@ function tpl_img($maxwidth = 0, $maxheight = 0, $link = true, $params = null) {
|
|||
}
|
||||
|
||||
//prepare URLs
|
||||
$url = ml($IMG, array('cache'=> $INPUT->str('cache')), true, '&');
|
||||
$src = ml($IMG, array('cache'=> $INPUT->str('cache'), 'w'=> $w, 'h'=> $h), true, '&');
|
||||
$url = ml($IMG, array('cache'=> $INPUT->str('cache'),'rev'=>$REV), true, '&');
|
||||
$src = ml($IMG, array('cache'=> $INPUT->str('cache'),'rev'=>$REV, 'w'=> $w, 'h'=> $h), true, '&');
|
||||
|
||||
//prepare attributes
|
||||
$alt = tpl_img_getTag('Simple.Title');
|
||||
|
|
|
@ -5,6 +5,9 @@ require_once(DOKU_INC.'inc/init.php');
|
|||
|
||||
$IMG = getID('media');
|
||||
$ID = cleanID($INPUT->str('id'));
|
||||
$REV = & $INPUT->ref('rev');
|
||||
//sanitize revision
|
||||
$REV = preg_replace('/[^0-9]/', '', $REV);
|
||||
|
||||
// this makes some general info available as well as the info about the
|
||||
// "parent" page
|
||||
|
@ -35,7 +38,7 @@ $ERROR = false;
|
|||
$AUTH = auth_quickaclcheck($IMG);
|
||||
if($AUTH >= AUTH_READ){
|
||||
// check if image exists
|
||||
$SRC = mediaFN($IMG);
|
||||
$SRC = mediaFN($IMG,$REV);
|
||||
if(!@file_exists($SRC)){
|
||||
//doesn't exist!
|
||||
http_status(404);
|
||||
|
|
|
@ -49,7 +49,7 @@ header('X-UA-Compatible: IE=edge,chrome=1');
|
|||
if($ERROR):
|
||||
echo '<h1>'.$ERROR.'</h1>';
|
||||
else: ?>
|
||||
|
||||
<?php if($REV) echo p_locale_xhtml('showrev');?>
|
||||
<h1><?php echo nl2br(hsc(tpl_img_getTag('simple.title'))); ?></h1>
|
||||
|
||||
<?php tpl_img(900,700); /* parameters: maximum width, maximum height (and more) */ ?>
|
||||
|
|
Loading…
Reference in New Issue