1 <?php
2 /*
3  * XXX
4  */
5 
6 if(!defined('DOKU_INC')) die();
7 if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
8 require_once(DOKU_PLUGIN.'syntax.php');
9 require_once(DOKU_PLUGIN.'calendoku/helper.php');
10 
11     // start end duration contact summary url uid created last-modified
12     // sequence x-calendoku-version prodid tzname description organizer
13     // location class
14 
15 class syntax_plugin_calendoku_showicalendar extends DokuWiki_Syntax_Plugin {
16 
17     function getType()  { return 'substition'; }
18     function getPType() { return 'block'; }
19     function getSort()  { return 42; }
20 
21     function connectTo($mode) {
22         $this->Lexer->addSpecialPattern(
23             '^[\n\s]*BEGIN:VCALENDAR\n.*\nEND:VCALENDAR[\n\s]*$',
24             $mode,
25             'plugin_calendoku_showicalendar');
26     }
27 
28     function handle($match, $state, $pos, &$handler) {
29         global $INFO;
30 
31         /* Check if we handle this page at all. */
32         $dohandle = false;
33 
34         $INFO = pageinfo();
35         $namespaces = preg_split('/\s/', $this->getConf('icalnamespaces'));
36         foreach ($namespaces as $namespace) {
37             if (!strcmp($namespace, $INFO['namespace'])) {
38                 $dohandle = true;
39                 break;
40             }
41         }
42         if (!$dohandle) {
43             $handler->_addCall('cdata', array($match), $pos);
44             return false;
45         }
46 
47         /* Get the template. */
48         $templates = preg_split('/\s/', $this->getConf('icaltemplates'));
49         foreach ($templates as $template)
50             if (!strcmp($template, $INFO['id'])) {
51                 $handler->_addCall('cdata', array($match), $pos);
52                 return false;
53             }
54         foreach ($templates as $template) {
55             if (!strcmp('', getNS($template))) {
56                 $mytemplate = $INFO['namespace'].':'.$template;
57             } else if (!strcmp(getNS($template), $INFO['namespace'])) {
58                 $mytemplate = $template;
59                 break;
60             }
61         }
62 
63         if (!isset($mytemplate)) {
64             $handler->_addCall('cdata', array($match), $pos);
65             return false;
66         }
67 
68         /* Create the calendar object. */
69         $object = new CalenDoku_CalendarObject($this, $match);
70         $mytemplate = rawWiki($mytemplate);
71         if (!preg_match('/@@/', $mytemplate)) {
72             $handler->_addCall('cdata', array($match), $pos);
73             return false;
74         }
75         foreach ($object->components as $component) {
76             $componenttext = $mytemplate;
77             $componenttext = preg_replace('/@@DOKUWIKIICAL@@/', $INFO['id'].'?do=ical', $componenttext);
78             foreach ($component->renderfields as $field => $value) {
79                 $componenttext = preg_replace('/@@'.$field.'@@/', $value, $componenttext);
80             }
81 
82             reHandleText($componenttext, $pos, $handler);
83         }
84 
85         return true;
86     }
87 
88     function render($mode, &$renderer, $data) {
89         return true;
90     }
91 }
92 //Setup VIM: ex: et ts=4 enc=utf-8 :
93