Text to show * Time format must be parseable with * {@LINK http://www.php.net/manual/en/function.strtotime.php php strtotime} * Valid timestamp formats are descibed {@LINK http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html here} * * Examples: Good morning Shows debug information (P option) * Have a nice weekend * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Otto Vainio */ if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); /** * All DokuWiki plugins to extend the parser/rendering mechanism * need to inherit from this class */ class syntax_plugin_timer extends DokuWiki_Syntax_Plugin { /** * What kind of syntax are we? */ function getType(){ return 'substition'; } function getSort(){ return 358; } function connectTo($mode) { $this->Lexer->addEntryPattern('(?=.*?\x3C/timer\x3E)',$mode,'plugin_timer'); } function postConnect() { $this->Lexer->addExitPattern('','plugin_timer'); } /** * Handle the match */ function handle($match, $state, $pos, Doku_Handler $handler){ global $conf; switch ($state) { case DOKU_LEXER_ENTER : $str = substr($match, 7, -1); //$conf['dformat'] $prt=0; if (substr($str,0,1)=="P") { $prt=1; } $str=substr($str,1); list($starttime, $endtime) = preg_split("/=/u", $str, 2); return array($state, array($prt,$starttime,$endtime)); case DOKU_LEXER_UNMATCHED : return array($state, $match); case DOKU_LEXER_EXIT : return array($state, ''); } return array(); } /** * Create output */ function render($mode,Doku_Renderer $renderer, $data) { global $st; global $et; global $conf; global $prt; if($mode == 'xhtml'){ list($state, $match) = $data; switch ($state) { case DOKU_LEXER_ENTER : list($prts,$starttime,$endtime) = $match; $err = ""; if (($timestamp = strtotime($starttime)) === -1) { // If time false do not show. $sts = mktime()+10000; $err= "Starttime ($starttime) is invalid"; } else { $sts = $timestamp; } if ($endtime=="-") { $ets = strtotime("+1 days"); } else { if (($timestamp = strtotime($endtime)) === -1) { // If time false do not show. $ets = mktime()-10000; $err .= " Endtime ($endtime) is invalid"; } else { $ets = $timestamp; } } $prt = $prts; $st = $sts; $et = $ets; $renderer->doc .= $err; break; case DOKU_LEXER_UNMATCHED : $now = mktime(); if (($st<$now) && ($et>$now)) { if ($prt>0) { $renderer->doc .= " From:" . date($conf['dformat'],$st); $renderer->doc .= " Now:" . date($conf['dformat']) . ""; $renderer->doc .= " To:" . date($conf['dformat'],$et); } $renderer->doc .= p_render('xhtml',p_get_instructions($match),$info); } else { if ($prt>0) { if ($now<$st) { $renderer->doc .= " Now:" . date($conf['dformat']) . ""; $renderer->doc .= " From:" . date($conf['dformat'],$st); $renderer->doc .= " To:" . date($conf['dformat'],$et); } else { $renderer->doc .= " From:" . date($conf['dformat'],$st); $renderer->doc .= " To:" . date($conf['dformat'],$et); $renderer->doc .= " Now:" . date($conf['dformat']) . ""; } } } // Disable cache if start or end time within now and next cache refresh time if (($now>$st-$conf['cachetime'] && $now<$st) || ($now>$et-$conf['cachetime'] && $now<$et)) { $renderer->nocache(); } $renderer->doc .= $cac; break; case DOKU_LEXER_EXIT : break; } return true; } return false; } } ?>