xref: /plugin/calendar/action.php (revision 87ac9bf3391b3f7059f4ccd6abc619e9db5fad8d)
119378907SAtari911<?php
219378907SAtari911/**
319378907SAtari911 * DokuWiki Plugin calendar (Action Component)
419378907SAtari911 *
519378907SAtari911 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
619378907SAtari911 * @author  DokuWiki Community
719378907SAtari911 */
819378907SAtari911
919378907SAtari911if (!defined('DOKU_INC')) die();
1019378907SAtari911
1119378907SAtari911class action_plugin_calendar extends DokuWiki_Action_Plugin {
1219378907SAtari911
1319378907SAtari911    public function register(Doku_Event_Handler $controller) {
1419378907SAtari911        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjax');
1519378907SAtari911        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'addAssets');
1619378907SAtari911    }
1719378907SAtari911
1819378907SAtari911    public function handleAjax(Doku_Event $event, $param) {
1919378907SAtari911        if ($event->data !== 'plugin_calendar') return;
2019378907SAtari911        $event->preventDefault();
2119378907SAtari911        $event->stopPropagation();
2219378907SAtari911
2319378907SAtari911        $action = $_REQUEST['action'] ?? '';
2419378907SAtari911
2519378907SAtari911        switch ($action) {
2619378907SAtari911            case 'save_event':
2719378907SAtari911                $this->saveEvent();
2819378907SAtari911                break;
2919378907SAtari911            case 'delete_event':
3019378907SAtari911                $this->deleteEvent();
3119378907SAtari911                break;
3219378907SAtari911            case 'get_event':
3319378907SAtari911                $this->getEvent();
3419378907SAtari911                break;
3519378907SAtari911            case 'load_month':
3619378907SAtari911                $this->loadMonth();
3719378907SAtari911                break;
3819378907SAtari911            case 'toggle_task':
3919378907SAtari911                $this->toggleTaskComplete();
4019378907SAtari911                break;
4119378907SAtari911            default:
4219378907SAtari911                echo json_encode(['success' => false, 'error' => 'Unknown action']);
4319378907SAtari911        }
4419378907SAtari911    }
4519378907SAtari911
4619378907SAtari911    private function saveEvent() {
4719378907SAtari911        global $INPUT;
4819378907SAtari911
4919378907SAtari911        $namespace = $INPUT->str('namespace', '');
5019378907SAtari911        $date = $INPUT->str('date');
5119378907SAtari911        $eventId = $INPUT->str('eventId', '');
5219378907SAtari911        $title = $INPUT->str('title');
5319378907SAtari911        $time = $INPUT->str('time', '');
5419378907SAtari911        $description = $INPUT->str('description', '');
5519378907SAtari911        $color = $INPUT->str('color', '#3498db');
5619378907SAtari911        $oldDate = $INPUT->str('oldDate', ''); // Track original date for moves
5719378907SAtari911        $isTask = $INPUT->bool('isTask', false);
5819378907SAtari911        $completed = $INPUT->bool('completed', false);
5919378907SAtari911        $endDate = $INPUT->str('endDate', '');
60*87ac9bf3SAtari911        $isRecurring = $INPUT->bool('isRecurring', false);
61*87ac9bf3SAtari911        $recurrenceType = $INPUT->str('recurrenceType', 'weekly');
62*87ac9bf3SAtari911        $recurrenceEnd = $INPUT->str('recurrenceEnd', '');
6319378907SAtari911
6419378907SAtari911        if (!$date || !$title) {
6519378907SAtari911            echo json_encode(['success' => false, 'error' => 'Missing required fields']);
6619378907SAtari911            return;
6719378907SAtari911        }
6819378907SAtari911
69*87ac9bf3SAtari911        // Generate event ID if new
70*87ac9bf3SAtari911        $generatedId = $eventId ?: uniqid();
71*87ac9bf3SAtari911
72*87ac9bf3SAtari911        // If recurring, generate multiple events
73*87ac9bf3SAtari911        if ($isRecurring) {
74*87ac9bf3SAtari911            $this->createRecurringEvents($namespace, $date, $endDate, $title, $time, $description,
75*87ac9bf3SAtari911                                        $color, $isTask, $recurrenceType, $recurrenceEnd, $generatedId);
76*87ac9bf3SAtari911            echo json_encode(['success' => true]);
77*87ac9bf3SAtari911            return;
78*87ac9bf3SAtari911        }
79*87ac9bf3SAtari911
8019378907SAtari911        list($year, $month, $day) = explode('-', $date);
8119378907SAtari911
8219378907SAtari911        $dataDir = DOKU_INC . 'data/meta/';
8319378907SAtari911        if ($namespace) {
8419378907SAtari911            $dataDir .= str_replace(':', '/', $namespace) . '/';
8519378907SAtari911        }
8619378907SAtari911        $dataDir .= 'calendar/';
8719378907SAtari911
8819378907SAtari911        if (!is_dir($dataDir)) {
8919378907SAtari911            mkdir($dataDir, 0755, true);
9019378907SAtari911        }
9119378907SAtari911
9219378907SAtari911        $eventFile = $dataDir . sprintf('%04d-%02d.json', $year, $month);
9319378907SAtari911
9419378907SAtari911        $events = [];
9519378907SAtari911        if (file_exists($eventFile)) {
9619378907SAtari911            $events = json_decode(file_get_contents($eventFile), true);
9719378907SAtari911        }
9819378907SAtari911
9919378907SAtari911        // If editing and date changed, remove from old date first
10019378907SAtari911        if ($eventId && $oldDate && $oldDate !== $date) {
10119378907SAtari911            list($oldYear, $oldMonth, $oldDay) = explode('-', $oldDate);
10219378907SAtari911            $oldEventFile = $dataDir . sprintf('%04d-%02d.json', $oldYear, $oldMonth);
10319378907SAtari911
10419378907SAtari911            if (file_exists($oldEventFile)) {
10519378907SAtari911                $oldEvents = json_decode(file_get_contents($oldEventFile), true);
10619378907SAtari911                if (isset($oldEvents[$oldDate])) {
10719378907SAtari911                    $oldEvents[$oldDate] = array_filter($oldEvents[$oldDate], function($evt) use ($eventId) {
10819378907SAtari911                        return $evt['id'] !== $eventId;
10919378907SAtari911                    });
11019378907SAtari911
11119378907SAtari911                    if (empty($oldEvents[$oldDate])) {
11219378907SAtari911                        unset($oldEvents[$oldDate]);
11319378907SAtari911                    }
11419378907SAtari911
11519378907SAtari911                    file_put_contents($oldEventFile, json_encode($oldEvents, JSON_PRETTY_PRINT));
11619378907SAtari911                }
11719378907SAtari911            }
11819378907SAtari911        }
11919378907SAtari911
12019378907SAtari911        if (!isset($events[$date])) {
12119378907SAtari911            $events[$date] = [];
12219378907SAtari911        }
12319378907SAtari911
12419378907SAtari911        $eventData = [
125*87ac9bf3SAtari911            'id' => $generatedId,
12619378907SAtari911            'title' => $title,
12719378907SAtari911            'time' => $time,
12819378907SAtari911            'description' => $description,
12919378907SAtari911            'color' => $color,
13019378907SAtari911            'isTask' => $isTask,
13119378907SAtari911            'completed' => $completed,
13219378907SAtari911            'endDate' => $endDate,
13319378907SAtari911            'created' => date('Y-m-d H:i:s')
13419378907SAtari911        ];
13519378907SAtari911
13619378907SAtari911        // If editing, replace existing event
13719378907SAtari911        if ($eventId) {
13819378907SAtari911            $found = false;
13919378907SAtari911            foreach ($events[$date] as $key => $evt) {
14019378907SAtari911                if ($evt['id'] === $eventId) {
14119378907SAtari911                    $events[$date][$key] = $eventData;
14219378907SAtari911                    $found = true;
14319378907SAtari911                    break;
14419378907SAtari911                }
14519378907SAtari911            }
14619378907SAtari911            if (!$found) {
14719378907SAtari911                $events[$date][] = $eventData;
14819378907SAtari911            }
14919378907SAtari911        } else {
15019378907SAtari911            $events[$date][] = $eventData;
15119378907SAtari911        }
15219378907SAtari911
15319378907SAtari911        file_put_contents($eventFile, json_encode($events, JSON_PRETTY_PRINT));
15419378907SAtari911
15519378907SAtari911        echo json_encode(['success' => true, 'events' => $events, 'eventId' => $eventData['id']]);
15619378907SAtari911    }
15719378907SAtari911
15819378907SAtari911    private function deleteEvent() {
15919378907SAtari911        global $INPUT;
16019378907SAtari911
16119378907SAtari911        $namespace = $INPUT->str('namespace', '');
16219378907SAtari911        $date = $INPUT->str('date');
16319378907SAtari911        $eventId = $INPUT->str('eventId');
16419378907SAtari911
16519378907SAtari911        list($year, $month, $day) = explode('-', $date);
16619378907SAtari911
16719378907SAtari911        $dataDir = DOKU_INC . 'data/meta/';
16819378907SAtari911        if ($namespace) {
16919378907SAtari911            $dataDir .= str_replace(':', '/', $namespace) . '/';
17019378907SAtari911        }
17119378907SAtari911        $dataDir .= 'calendar/';
17219378907SAtari911
17319378907SAtari911        $eventFile = $dataDir . sprintf('%04d-%02d.json', $year, $month);
17419378907SAtari911
17519378907SAtari911        if (file_exists($eventFile)) {
17619378907SAtari911            $events = json_decode(file_get_contents($eventFile), true);
17719378907SAtari911
17819378907SAtari911            if (isset($events[$date])) {
17919378907SAtari911                $events[$date] = array_filter($events[$date], function($event) use ($eventId) {
18019378907SAtari911                    return $event['id'] !== $eventId;
18119378907SAtari911                });
18219378907SAtari911
18319378907SAtari911                if (empty($events[$date])) {
18419378907SAtari911                    unset($events[$date]);
18519378907SAtari911                }
18619378907SAtari911
18719378907SAtari911                file_put_contents($eventFile, json_encode($events, JSON_PRETTY_PRINT));
18819378907SAtari911            }
18919378907SAtari911        }
19019378907SAtari911
19119378907SAtari911        echo json_encode(['success' => true]);
19219378907SAtari911    }
19319378907SAtari911
19419378907SAtari911    private function getEvent() {
19519378907SAtari911        global $INPUT;
19619378907SAtari911
19719378907SAtari911        $namespace = $INPUT->str('namespace', '');
19819378907SAtari911        $date = $INPUT->str('date');
19919378907SAtari911        $eventId = $INPUT->str('eventId');
20019378907SAtari911
20119378907SAtari911        list($year, $month, $day) = explode('-', $date);
20219378907SAtari911
20319378907SAtari911        $dataDir = DOKU_INC . 'data/meta/';
20419378907SAtari911        if ($namespace) {
20519378907SAtari911            $dataDir .= str_replace(':', '/', $namespace) . '/';
20619378907SAtari911        }
20719378907SAtari911        $dataDir .= 'calendar/';
20819378907SAtari911
20919378907SAtari911        $eventFile = $dataDir . sprintf('%04d-%02d.json', $year, $month);
21019378907SAtari911
21119378907SAtari911        if (file_exists($eventFile)) {
21219378907SAtari911            $events = json_decode(file_get_contents($eventFile), true);
21319378907SAtari911
21419378907SAtari911            if (isset($events[$date])) {
21519378907SAtari911                foreach ($events[$date] as $event) {
21619378907SAtari911                    if ($event['id'] === $eventId) {
21719378907SAtari911                        echo json_encode(['success' => true, 'event' => $event]);
21819378907SAtari911                        return;
21919378907SAtari911                    }
22019378907SAtari911                }
22119378907SAtari911            }
22219378907SAtari911        }
22319378907SAtari911
22419378907SAtari911        echo json_encode(['success' => false, 'error' => 'Event not found']);
22519378907SAtari911    }
22619378907SAtari911
22719378907SAtari911    private function loadMonth() {
22819378907SAtari911        global $INPUT;
22919378907SAtari911
23019378907SAtari911        $namespace = $INPUT->str('namespace', '');
23119378907SAtari911        $year = $INPUT->int('year');
23219378907SAtari911        $month = $INPUT->int('month');
23319378907SAtari911
23419378907SAtari911        $dataDir = DOKU_INC . 'data/meta/';
23519378907SAtari911        if ($namespace) {
23619378907SAtari911            $dataDir .= str_replace(':', '/', $namespace) . '/';
23719378907SAtari911        }
23819378907SAtari911        $dataDir .= 'calendar/';
23919378907SAtari911
240*87ac9bf3SAtari911        error_log("Calendar loadMonth: Loading $year-$month");
24119378907SAtari911
242*87ac9bf3SAtari911        // Load current month
243*87ac9bf3SAtari911        $eventFile = $dataDir . sprintf('%04d-%02d.json', $year, $month);
24419378907SAtari911        $events = [];
24519378907SAtari911        if (file_exists($eventFile)) {
246*87ac9bf3SAtari911            $contents = file_get_contents($eventFile);
247*87ac9bf3SAtari911            $decoded = json_decode($contents, true);
248*87ac9bf3SAtari911            if (json_last_error() === JSON_ERROR_NONE) {
249*87ac9bf3SAtari911                $events = $decoded;
250*87ac9bf3SAtari911                error_log("Calendar loadMonth: Loaded " . count($events) . " dates from $eventFile");
251*87ac9bf3SAtari911            } else {
252*87ac9bf3SAtari911                error_log('Calendar: JSON decode error in ' . $eventFile . ': ' . json_last_error_msg());
25319378907SAtari911            }
254*87ac9bf3SAtari911        } else {
255*87ac9bf3SAtari911            error_log("Calendar loadMonth: File not found: $eventFile");
256*87ac9bf3SAtari911        }
257*87ac9bf3SAtari911
258*87ac9bf3SAtari911        // Load previous month to catch events spanning into current month
259*87ac9bf3SAtari911        $prevMonth = $month - 1;
260*87ac9bf3SAtari911        $prevYear = $year;
261*87ac9bf3SAtari911        if ($prevMonth < 1) {
262*87ac9bf3SAtari911            $prevMonth = 12;
263*87ac9bf3SAtari911            $prevYear--;
264*87ac9bf3SAtari911        }
265*87ac9bf3SAtari911        $prevEventFile = $dataDir . sprintf('%04d-%02d.json', $prevYear, $prevMonth);
266*87ac9bf3SAtari911        if (file_exists($prevEventFile)) {
267*87ac9bf3SAtari911            $contents = file_get_contents($prevEventFile);
268*87ac9bf3SAtari911            $decoded = json_decode($contents, true);
269*87ac9bf3SAtari911            if (json_last_error() === JSON_ERROR_NONE) {
270*87ac9bf3SAtari911                error_log("Calendar loadMonth: Loaded " . count($decoded) . " dates from $prevEventFile");
271*87ac9bf3SAtari911                $events = array_merge($events, $decoded);
272*87ac9bf3SAtari911            } else {
273*87ac9bf3SAtari911                error_log('Calendar: JSON decode error in ' . $prevEventFile . ': ' . json_last_error_msg());
274*87ac9bf3SAtari911            }
275*87ac9bf3SAtari911        }
276*87ac9bf3SAtari911
277*87ac9bf3SAtari911        // Load next month to catch events spanning from current month
278*87ac9bf3SAtari911        $nextMonth = $month + 1;
279*87ac9bf3SAtari911        $nextYear = $year;
280*87ac9bf3SAtari911        if ($nextMonth > 12) {
281*87ac9bf3SAtari911            $nextMonth = 1;
282*87ac9bf3SAtari911            $nextYear++;
283*87ac9bf3SAtari911        }
284*87ac9bf3SAtari911        $nextEventFile = $dataDir . sprintf('%04d-%02d.json', $nextYear, $nextMonth);
285*87ac9bf3SAtari911        if (file_exists($nextEventFile)) {
286*87ac9bf3SAtari911            $contents = file_get_contents($nextEventFile);
287*87ac9bf3SAtari911            $decoded = json_decode($contents, true);
288*87ac9bf3SAtari911            if (json_last_error() === JSON_ERROR_NONE) {
289*87ac9bf3SAtari911                error_log("Calendar loadMonth: Loaded " . count($decoded) . " dates from $nextEventFile");
290*87ac9bf3SAtari911                $events = array_merge($events, $decoded);
291*87ac9bf3SAtari911            } else {
292*87ac9bf3SAtari911                error_log('Calendar: JSON decode error in ' . $nextEventFile . ': ' . json_last_error_msg());
293*87ac9bf3SAtari911            }
294*87ac9bf3SAtari911        }
295*87ac9bf3SAtari911
296*87ac9bf3SAtari911        error_log("Calendar loadMonth: Total dates returned: " . count($events));
29719378907SAtari911
29819378907SAtari911        echo json_encode(['success' => true, 'events' => $events, 'year' => $year, 'month' => $month]);
29919378907SAtari911    }
30019378907SAtari911
30119378907SAtari911    private function toggleTaskComplete() {
30219378907SAtari911        global $INPUT;
30319378907SAtari911
30419378907SAtari911        $namespace = $INPUT->str('namespace', '');
30519378907SAtari911        $date = $INPUT->str('date');
30619378907SAtari911        $eventId = $INPUT->str('eventId');
30719378907SAtari911        $completed = $INPUT->bool('completed', false);
30819378907SAtari911
30919378907SAtari911        list($year, $month, $day) = explode('-', $date);
31019378907SAtari911
31119378907SAtari911        $dataDir = DOKU_INC . 'data/meta/';
31219378907SAtari911        if ($namespace) {
31319378907SAtari911            $dataDir .= str_replace(':', '/', $namespace) . '/';
31419378907SAtari911        }
31519378907SAtari911        $dataDir .= 'calendar/';
31619378907SAtari911
31719378907SAtari911        $eventFile = $dataDir . sprintf('%04d-%02d.json', $year, $month);
31819378907SAtari911
31919378907SAtari911        if (file_exists($eventFile)) {
32019378907SAtari911            $events = json_decode(file_get_contents($eventFile), true);
32119378907SAtari911
32219378907SAtari911            if (isset($events[$date])) {
32319378907SAtari911                foreach ($events[$date] as $key => $event) {
32419378907SAtari911                    if ($event['id'] === $eventId) {
32519378907SAtari911                        $events[$date][$key]['completed'] = $completed;
32619378907SAtari911                        break;
32719378907SAtari911                    }
32819378907SAtari911                }
32919378907SAtari911
33019378907SAtari911                file_put_contents($eventFile, json_encode($events, JSON_PRETTY_PRINT));
33119378907SAtari911                echo json_encode(['success' => true, 'events' => $events]);
33219378907SAtari911                return;
33319378907SAtari911            }
33419378907SAtari911        }
33519378907SAtari911
33619378907SAtari911        echo json_encode(['success' => false, 'error' => 'Event not found']);
33719378907SAtari911    }
33819378907SAtari911
339*87ac9bf3SAtari911    private function createRecurringEvents($namespace, $startDate, $endDate, $title, $time,
340*87ac9bf3SAtari911                                          $description, $color, $isTask, $recurrenceType,
341*87ac9bf3SAtari911                                          $recurrenceEnd, $baseId) {
342*87ac9bf3SAtari911        $dataDir = DOKU_INC . 'data/meta/';
343*87ac9bf3SAtari911        if ($namespace) {
344*87ac9bf3SAtari911            $dataDir .= str_replace(':', '/', $namespace) . '/';
345*87ac9bf3SAtari911        }
346*87ac9bf3SAtari911        $dataDir .= 'calendar/';
347*87ac9bf3SAtari911
348*87ac9bf3SAtari911        if (!is_dir($dataDir)) {
349*87ac9bf3SAtari911            mkdir($dataDir, 0755, true);
350*87ac9bf3SAtari911        }
351*87ac9bf3SAtari911
352*87ac9bf3SAtari911        // Calculate recurrence interval
353*87ac9bf3SAtari911        $interval = '';
354*87ac9bf3SAtari911        switch ($recurrenceType) {
355*87ac9bf3SAtari911            case 'daily': $interval = '+1 day'; break;
356*87ac9bf3SAtari911            case 'weekly': $interval = '+1 week'; break;
357*87ac9bf3SAtari911            case 'monthly': $interval = '+1 month'; break;
358*87ac9bf3SAtari911            case 'yearly': $interval = '+1 year'; break;
359*87ac9bf3SAtari911            default: $interval = '+1 week';
360*87ac9bf3SAtari911        }
361*87ac9bf3SAtari911
362*87ac9bf3SAtari911        // Set maximum end date if not specified (1 year from start)
363*87ac9bf3SAtari911        $maxEnd = $recurrenceEnd ?: date('Y-m-d', strtotime($startDate . ' +1 year'));
364*87ac9bf3SAtari911
365*87ac9bf3SAtari911        // Calculate event duration for multi-day events
366*87ac9bf3SAtari911        $eventDuration = 0;
367*87ac9bf3SAtari911        if ($endDate && $endDate !== $startDate) {
368*87ac9bf3SAtari911            $start = new DateTime($startDate);
369*87ac9bf3SAtari911            $end = new DateTime($endDate);
370*87ac9bf3SAtari911            $eventDuration = $start->diff($end)->days;
371*87ac9bf3SAtari911        }
372*87ac9bf3SAtari911
373*87ac9bf3SAtari911        // Generate recurring events
374*87ac9bf3SAtari911        $currentDate = new DateTime($startDate);
375*87ac9bf3SAtari911        $endLimit = new DateTime($maxEnd);
376*87ac9bf3SAtari911        $counter = 0;
377*87ac9bf3SAtari911        $maxOccurrences = 100; // Prevent infinite loops
378*87ac9bf3SAtari911
379*87ac9bf3SAtari911        while ($currentDate <= $endLimit && $counter < $maxOccurrences) {
380*87ac9bf3SAtari911            $dateKey = $currentDate->format('Y-m-d');
381*87ac9bf3SAtari911            list($year, $month, $day) = explode('-', $dateKey);
382*87ac9bf3SAtari911
383*87ac9bf3SAtari911            // Calculate end date for this occurrence if multi-day
384*87ac9bf3SAtari911            $occurrenceEndDate = '';
385*87ac9bf3SAtari911            if ($eventDuration > 0) {
386*87ac9bf3SAtari911                $occurrenceEnd = clone $currentDate;
387*87ac9bf3SAtari911                $occurrenceEnd->modify('+' . $eventDuration . ' days');
388*87ac9bf3SAtari911                $occurrenceEndDate = $occurrenceEnd->format('Y-m-d');
389*87ac9bf3SAtari911            }
390*87ac9bf3SAtari911
391*87ac9bf3SAtari911            // Load month file
392*87ac9bf3SAtari911            $eventFile = $dataDir . sprintf('%04d-%02d.json', $year, $month);
393*87ac9bf3SAtari911            $events = [];
394*87ac9bf3SAtari911            if (file_exists($eventFile)) {
395*87ac9bf3SAtari911                $events = json_decode(file_get_contents($eventFile), true);
396*87ac9bf3SAtari911            }
397*87ac9bf3SAtari911
398*87ac9bf3SAtari911            if (!isset($events[$dateKey])) {
399*87ac9bf3SAtari911                $events[$dateKey] = [];
400*87ac9bf3SAtari911            }
401*87ac9bf3SAtari911
402*87ac9bf3SAtari911            // Create event for this occurrence
403*87ac9bf3SAtari911            $eventData = [
404*87ac9bf3SAtari911                'id' => $baseId . '-' . $counter,
405*87ac9bf3SAtari911                'title' => $title,
406*87ac9bf3SAtari911                'time' => $time,
407*87ac9bf3SAtari911                'description' => $description,
408*87ac9bf3SAtari911                'color' => $color,
409*87ac9bf3SAtari911                'isTask' => $isTask,
410*87ac9bf3SAtari911                'completed' => false,
411*87ac9bf3SAtari911                'endDate' => $occurrenceEndDate,
412*87ac9bf3SAtari911                'recurring' => true,
413*87ac9bf3SAtari911                'recurringId' => $baseId,
414*87ac9bf3SAtari911                'created' => date('Y-m-d H:i:s')
415*87ac9bf3SAtari911            ];
416*87ac9bf3SAtari911
417*87ac9bf3SAtari911            $events[$dateKey][] = $eventData;
418*87ac9bf3SAtari911            file_put_contents($eventFile, json_encode($events, JSON_PRETTY_PRINT));
419*87ac9bf3SAtari911
420*87ac9bf3SAtari911            // Move to next occurrence
421*87ac9bf3SAtari911            $currentDate->modify($interval);
422*87ac9bf3SAtari911            $counter++;
423*87ac9bf3SAtari911        }
424*87ac9bf3SAtari911    }
425*87ac9bf3SAtari911
42619378907SAtari911    public function addAssets(Doku_Event $event, $param) {
42719378907SAtari911        $event->data['link'][] = array(
42819378907SAtari911            'type' => 'text/css',
42919378907SAtari911            'rel' => 'stylesheet',
43019378907SAtari911            'href' => DOKU_BASE . 'lib/plugins/calendar/style.css'
43119378907SAtari911        );
43219378907SAtari911
43319378907SAtari911        $event->data['script'][] = array(
43419378907SAtari911            'type' => 'text/javascript',
43519378907SAtari911            'src' => DOKU_BASE . 'lib/plugins/calendar/script.js'
43619378907SAtari911        );
43719378907SAtari911    }
43819378907SAtari911}
439