diff --git a/action/cache.php b/action/cache.php new file mode 100644 --- /dev/null +++ b/action/cache.php @@ -0,0 +1,41 @@ +hlp =& plugin_load('helper','davcal'); + } + + function register(Doku_Event_Handler $controller) { + $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, 'handle_parser_cache_use'); + } + + function handle_parser_cache_use(&$event, $param) { + global $ID; + $cache = &$event->data; + if(!isset($cache->page)) return; + + $davcalMeta = p_get_metadata($ID, 'plugin_davcal'); + if(!$davcalMeta) + return; + + if(isset($davcalMeta['table']) && $davcalMeta['table'] === true) + { + $event->preventDefault(); + $event->stopPropagation(); + $event->result = false; + } + } + +} \ No newline at end of file diff --git a/lang/en/lang.php b/lang/en/lang.php --- a/lang/en/lang.php +++ b/lang/en/lang.php @@ -1,45 +1,50 @@ */ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); class syntax_plugin_davcal extends DokuWiki_Syntax_Plugin { protected $hlp = null; // Load the helper plugin public function syntax_plugin_davcal() { $this->hlp =& plugin_load('helper', 'davcal'); } /** * What kind of syntax are we? */ function getType(){ return 'substition'; } /** * What about paragraphs? */ function getPType(){ return 'normal'; } /** * Where to sort in? */ function getSort(){ return 165; } /** * Connect pattern to lexer */ function connectTo($mode) { $this->Lexer->addSpecialPattern('\{\{davcal>[^}]*\}\}',$mode,'plugin_davcal'); } /** * Handle the match */ function handle($match, $state, $pos, &$handler){ global $ID; $options = trim(substr($match,9,-2)); $options = explode(',', $options); + $data = array('name' => $ID, 'description' => $this->getLang('created_by_davcal'), 'id' => array(), 'settings' => 'show', - 'view' => 'month' + 'view' => 'month', + 'table' => false, + 'startdate' => 'today', + 'numdays' => 30, + 'dateformat' => 'Y-m-d H:i', + 'onlystart' => false, ); $lastid = $ID; + foreach($options as $option) { list($key, $val) = explode('=', $option); $key = strtolower(trim($key)); $val = trim($val); switch($key) { case 'id': $lastid = $val; if(!in_array($val, $data['id'])) $data['id'][$val] = '#3a87ad'; break; case 'color': $data['id'][$lastid] = $val; break; case 'view': if(in_array($val, array('month', 'basicDay', 'basicWeek', 'agendaWeek', 'agendaDay'))) $data['view'] = $val; else $data['view'] = 'month'; break; + case 'table': + $data['table'] = true; + break; + case 'onlystart': + if(($val === 'on') || ($val === 'true')) + $data['onlystart'] = true; + break; default: $data[$key] = $val; } } + // Handle the default case when the user didn't enter a different ID if(empty($data['id'])) { $data['id'] = array($ID => '#3a87ad'); } // Only update the calendar name/description if the ID matches the page ID. + // Disable this, if we output to table. // Otherwise, the calendar is included in another page and we don't want // to interfere with its data. - if(in_array($ID, array_keys($data['id']))) + if(in_array($ID, array_keys($data['id'])) && ($data['table'] === false)) { if(isset($_SERVER['REMOTE_USER']) && !is_null($_SERVER['REMOTE_USER'])) $username = $_SERVER['REMOTE_USER']; else $username = uniqid('davcal-'); $this->hlp->setCalendarNameForPage($data['name'], $data['description'], $ID, $username); $this->hlp->setCalendarColorForPage($data['id'][$ID], $ID); } p_set_metadata($ID, array('plugin_davcal' => $data)); return $data; } /** * Create output */ function render($format, &$R, $data) { - if($format != 'xhtml') return false; + if(($format != 'xhtml') && ($format != 'odt')) return false; global $ID; - $tzlist = \DateTimeZone::listIdentifiers(DateTimeZone::ALL); - - // Render the Calendar. Timezone list is within a hidden div, - // the calendar ID is in a data-calendarid tag. - $R->doc .= '
'; - $R->doc .= ''; - if(($this->getConf('hide_settings') !== 1) && ($data['settings'] !== 'hide')) - { - $R->doc .= '
'.$this->getLang('settings').'
'; + // Handle JavaScript calendar output + else + { + $tzlist = \DateTimeZone::listIdentifiers(DateTimeZone::ALL); + + // Render the Calendar. Timezone list is within a hidden div, + // the calendar ID is in a data-calendarid tag. + $R->doc .= '
'; + $R->doc .= ''; + if(($this->getConf('hide_settings') !== 1) && ($data['settings'] !== 'hide')) + { + $R->doc .= '
'.$this->getLang('settings').'
'; + } } - } } // vim:ts=4:sw=4:et:enc=utf-8: