* @seealso (http://jaloma.ac.googlepages.com/plugin:hcalendar)
* @seealso (http://microformats.org/wiki/internet-explorer-extensions)
* @seealso (http://microformats.org/wiki/firefox-extensions)
*/
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');
require_once(DOKU_PLUGIN.'hcalendar/syntax/helper.php');
require_once(DOKU_PLUGIN.'hcalendar/syntax/hcal_renderer_helper.php');
/**
* All DokuWiki plugins to extend the parser/rendering mechanism
* need to inherit from this class
*/
class syntax_plugin_hcalendar_hcal2 extends DokuWiki_Syntax_Plugin {
/**
* default parameters of the jalbum tag
*/
var $dflt = array(
'start_date' => 'off',
'start_time' => 'off',
'end_date' => 'off',
'end_time' => 'off',
'summary' => 'off',
'location' => 'off',
'inline' => 'off',
);
var $rendering = true;
var $is_inline = false;
function getInfo(){
return array(
'author' => 'Juergen A. Lamers',
'email' => 'jaloma.ac@googlemail.com',
'date' => @file_get_contents(DOKU_PLUGIN . 'hcalendar/VERSION'),
'name' => 'HCalendar HCal2 Plugin',
'desc' => 'Adds a HCalendar Items
syntax:
See: http://microformats.org/wiki/',
'url' => 'http://www.dokuwiki.org/plugin:hcalendar',
);
}
function getType() { return 'substition'; } //'formatting';}//
function getSort() { return 351; }
function getPType() { return 'normal'; }
// function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); }
function connectTo($mode) {
// $this->Lexer->addSpecialPattern('\n]*>.*?',$mode,'plugin_hcalendar_hcal2');
$this->Lexer->addEntryPattern('(?=.*?)',$mode,'plugin_hcalendar_hcal2');
}
function postConnect() {
$this->Lexer->addExitPattern('','plugin_hcalendar_hcal2');
}
function matchLength() {
return strlen("matchLength()+1, -1), 2);
$cinfo = $this->_extract_params($str_params);
return array($state, $cinfo);
case DOKU_LEXER_UNMATCHED : return array($state, $match);
case DOKU_LEXER_EXIT : return array($state, '');
}
return array();
}
/**
* Create output
*/
function render($mode, & $renderer, $match) {
global $conf;
setlocale(LC_ALL,$this->getConf('locale'));
if ($mode == 'xhtml') {
list($state, $data) = $match;
switch ($state) {
case DOKU_LEXER_ENTER :
$renderer->doc .= $this->_connectData($data);
break;
case DOKU_LEXER_UNMATCHED :
if ($this->rendering) {
$r = p_render('xhtml',p_get_instructions($data),$info);
// $renderer->doc .= $renderer->_xmlEntities($data);
$renderer->doc .= $r;
}
$renderer->nocache();
break;
case DOKU_LEXER_EXIT :
if ($this->rendering) {
if (!$this->is_inline) {
$renderer->doc .= helper_plugin_hcal::buildTextEnd('tag_vevent');
}
}
break;
}
return true;
}
return false;
}
function _connectData($data) {
$mm_start= $ss_start= '00';
$yy_start =$mth_start= $dy_start =
$hh_start=
$tm_start=
$yy_end= $mth_end= $dy_end=
$hh_end= $mm_end= $ss_end=
$tm_end= '';
$this->rendering = true;
$start_date = $data['start_date'];
if ($start_date != '' && $start_date != 'off') {
$time = strtotime($start_date);
list($yy_start, $mth_start, $dy_start) = hcal_parseDateEntry($start_date);
$start_time = $data['start_time'];
if ($start_time == 'hh:mm') { $start_time = 'off';}
if ($start_time != 'off') {
list($hh_start, $mm_start, $ss_start) = hcal_parseTimeEntrie($start_time);
if ($mm_start == null || $mm_start == '') {
$mm_start = '00';
}
if ($ss_start == null || $ss_start == '') {
$ss_start = '00';
}
$time = strtotime($start_date." ".$hh_start.":".$mm_start);
$tm_start = $hh_start.":".$mm_start;
}
$dt_start = $time;
}
$end_date = $data['end_date'];
if ($end_date == 'yyyy/mm/dd') { $end_date = 'off';}
if ($end_date != 'off') {
$time = strtotime($end_date);
list($yy_end, $mth_end, $dy_end) = hcal_parseDateEntry($end_date);
$end_time = $data['end_time'];
if ($end_time == 'hh:mm') { $end_time = 'off';}
if ($end_time != 'off') {
list($hh_end, $mm_end, $ss_end) = hcal_parseTimeEntrie($end_time);
if ($mm_end == null || $mm_end == '') {
$mm_end = '00';
}
if ($ss_end == null || $ss_end == '') {
$ss_end = '00';
}
$time = strtotime($end_date." ".$hh_end.":".$mm_end);
$tm_end = $hh_end.":".$mm_end;
}
$dt_end = $time;
}
$location = $data['location'];
if ($location == 'off') { $location = '';}
$summary = $data['summary'];
if ($summary == 'off') { $summary = '';}
$this->is_inline = $data['inline'] != 'off';
if (!$this->is_inline) {
if ($this->getConf('filterdate') == true) {
$dt_now = strtotime("now");
if ($dt_start < $dt_now && $dt_end < $dt_now) {
$this->rendering = false;
return "";
}
}
}
if ($this->is_inline) { $tag_prefix = 'i';} else { $tag_prefix ='';}
$txt = helper_plugin_hcal::buildText(
$yy_start,$mth_start,$dy_start,$hh_start,$mm_start,$ss_start,$dt_start,
$yy_end ,$mth_end ,$dy_end ,$hh_end, $mm_end, $ss_end, $dt_end,
$summary ,$location, $this->is_inline,
$tag_prefix.'tag_vevent',
$tag_prefix.'tag_summary',
$tag_prefix.'tag_dtstart',
$tag_prefix.'tag_dtend',
$tag_prefix.'tag_location',
$tag_prefix.'tag_uid',
$tag_prefix.'tag_dtstamp',
!$this->is_inline
);
return $txt;
}
/**
* extract parameters for the googlemap from the parameter string
*
* @param string $str_params string of key="value" pairs
* @return array associative array of parameters key=>value
*/
function _extract_params($str_params) {
$param = array();
preg_match_all('/(\w*)="(.*?)"/us',$str_params,$param,PREG_SET_ORDER);
if (sizeof($param) == 0) {
preg_match_all("/(\w*)='(.*?)'/us",$str_params,$param,PREG_SET_ORDER);
}
// parse match for instructions, break into key value pairs
$gmap = $this->dflt;
foreach($param as $kvpair) {
list($match,$key,$val) = $kvpair;
// $key = strtolower($key);
if (isset($gmap[$key])) $gmap[$key] = $val;
}
return $gmap;
}
} // class