1<?php
2/**
3 * lastcomp Plugin: Compare the timestamps of the last modification of two pages
4 *
5 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
6 * @author     Hans-Jürgen Schümmer
7 *             adapted from "modcomp Plugin" by Dennis Ploeger
8
9 * Syntax:
10 * ~~LASTCOMP|<page1>~~
11 * or
12 * ~~LASTCOMP|<page1>|<page2>~~
13
14 * Examples:
15 * ~~LASTCOMP|ktg00:m0000068.004.v01~~
16 *             compares the current wiki page with the page 'ktg00:m0000068.004.v01'
17 * ~~LASTCOMP|ktg00:m0000068.004.v01|playground:playground~~
18 *             compares the wiki page 'ktg00:m0000068.004.v01' with the page 'playground:playground'
19 *
20 * Additionally required:
21 * wrap plugin
22**/
23
24
25if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
26if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
27require_once(DOKU_PLUGIN.'syntax.php');
28
29/**
30 * All DokuWiki plugins to extend the parser/rendering mechanism
31 * need to inherit from this class
32 */
33class syntax_plugin_lastcomp extends DokuWiki_Syntax_Plugin {
34    /**
35     * What kind of syntax are we?
36     */
37    function getType(){
38        return 'substition';
39    }
40    /**
41     * What about paragraphs?
42     */
43    function getPType(){
44        return 'normal';
45    }
46    /**
47     * Where to sort in?
48     */
49    function getSort(){
50        return 160;
51    }
52    /**
53     * Connect pattern to lexer
54     */
55    function connectTo($mode) {
56        $this->Lexer->addSpecialPattern('~~LASTCOMP[^~]*~~',$mode,'plugin_lastcomp');
57    }
58    /**
59     * Handle the match
60     */
61
62	function handle($match, $state, $pos, Doku_Handler $handler){
63
64		global $ID, $INFO, $conf;
65
66		$basis = DOKU_URL . "doku.php?id=";
67
68		// erste Seite auslesen
69		$match = str_replace("~~lastcomp", '', $match);
70		$match = str_replace("~~", '', $match);
71		$typ = explode('|',$match);
72
73		$verz1 = $typ[1];
74		if (!empty($typ[2])) {
75			$verz2 = $typ[2];
76		} else {
77			$verz2 = $ID;
78		}
79
80
81		$id_save = $ID;
82		$ID = $verz1;
83		$tmp_info = pageinfo();
84		$mod1 = $tmp_info['lastmod'];
85		$ID = $id_save;
86
87		$id_save = $ID;
88		$ID = $verz2;
89		$tmp_info = pageinfo();
90		$mod2 = $tmp_info['lastmod'];
91		$ID = $id_save;
92
93
94		$titel1 = substr($verz1,strrpos($verz1,":")+1);
95		$titel2 = substr($verz2,strrpos($verz2,":")+1);
96
97		$link1 = "<a href = $basis.$verz1 title=$titel1>$titel1</a>";
98		$link2 = "<a href = $basis.$verz2 title=$titel2>$titel2</a>";
99
100		$datum1 = strftime($conf['dformat'], $mod1);
101		$datum2 = strftime($conf['dformat'], $mod2);
102
103		$txt1 = $this->getLang('txt1');
104		$txt2 = $this->getLang('txt2');
105		$txt3 = $this->getLang('txt3');
106
107		if ($mod1 > $mod2) {
108			$mod = "<div class='wrap_alert wrap_right';>";
109			$mod .= $txt1 . "<br>'" . $link1 . "' (". $datum1 . ")<br>" . $txt2 . "<br>'" . $link2 . "' (" . $datum2 . ")<br>" . $txt3;
110			$mod .= "</div>";
111		} else {
112			$mod = "<div class='wrap_info wrap_right';>";
113			$mod .= $txt1 . "<br>'" . $link2 . "' (". $datum2 . ")<br>" . $txt2 . "<br>'" . $link1 . "' (". $datum1 . ")";
114			$mod .= "</div>";
115		}
116
117		return $mod;
118	}
119
120    /**
121     * Create output
122     */
123	function render($mode, Doku_Renderer $renderer, $data) {
124		if($mode == 'xhtml'){
125			$renderer->doc .= $data;
126			return true;
127		}
128		return false;
129	}
130
131}
132
133?>
134