xref: /plugin/wikicalendar-ng/action.php (revision 5ba9bd8bcf4de9c4bac0a6b46ba2e3a359cc9211)
1de76d2a4SMichael Klier<?php
2de76d2a4SMichael Klier/**
3de76d2a4SMichael Klier * DokuWiki Action Plugin WikiCalendar
4de76d2a4SMichael Klier *
5de76d2a4SMichael Klier * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
6de76d2a4SMichael Klier * @author     Michael Klier <chi@chimeric.de>
7de76d2a4SMichael Klier */
8de76d2a4SMichael Klier// must be run within Dokuwiki
9de76d2a4SMichael Klierif(!defined('DOKU_INC')) die();
10de76d2a4SMichael Klier
11de76d2a4SMichael Klierif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC.'lib/plugins/');
12de76d2a4SMichael Klierif(!defined('DOKU_LF')) define('DOKU_LF', "\n");
13de76d2a4SMichael Klier
14de76d2a4SMichael Klierrequire_once(DOKU_PLUGIN.'action.php');
15de76d2a4SMichael Klier
16de76d2a4SMichael Klier/**
17de76d2a4SMichael Klier * All DokuWiki plugins to extend the admin function
18de76d2a4SMichael Klier * need to inherit from this class
19de76d2a4SMichael Klier */
20de76d2a4SMichael Klierclass action_plugin_wikicalendar extends DokuWiki_Action_Plugin {
21de76d2a4SMichael Klier
22de76d2a4SMichael Klier    function getInfo() {
23de76d2a4SMichael Klier        return array(
24de76d2a4SMichael Klier                'author' => 'Michael Klier',
25de76d2a4SMichael Klier                'email'  => 'chi@chimeric.de',
26de76d2a4SMichael Klier                'date'   => @file_get_contents(DOKU_PLUGIN.'wikicalendar/VERSION'),
27de76d2a4SMichael Klier                'name'   => 'WikiCalendar Plugin (action component)',
28de76d2a4SMichael Klier                'desc'   => 'Implements a simple Calendar with links to wikipages.',
29de76d2a4SMichael Klier                'url'    => 'http://dokuwiki.org/plugin:wikicalendar',
30de76d2a4SMichael Klier            );
31de76d2a4SMichael Klier    }
32de76d2a4SMichael Klier
33de76d2a4SMichael Klier    // register hook
34de76d2a4SMichael Klier    function register(&$controller) {
35de76d2a4SMichael Klier        $controller->register_hook('ACTION_SHOW_REDIRECT', 'BEFORE', $this, 'handle_redirect');
36de76d2a4SMichael Klier        $controller->register_hook('HTML_EDITFORM_OUTPUT', 'BEFORE', $this, 'handle_form');
37de76d2a4SMichael Klier        $controller->register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'handle_started');
38de76d2a4SMichael Klier    }
39de76d2a4SMichael Klier
40de76d2a4SMichael Klier    /**
41de76d2a4SMichael Klier     * Checks for calendar values for proper redirects
42de76d2a4SMichael Klier     */
43de76d2a4SMichael Klier    function handle_started(&$event, $param) {
44*5ba9bd8bSMoritz Naumann        if(is_array($_SESSION[DOKU_COOKIE])) {
45de76d2a4SMichael Klier            if(array_key_exists('plugin_wikicalendar_month', $_SESSION[DOKU_COOKIE])) {
46de76d2a4SMichael Klier                $_REQUEST['plugin_wikicalendar_month'] = $_SESSION[DOKU_COOKIE]['plugin_wikicalendar_month'];
47de76d2a4SMichael Klier                $_REQUEST['plugin_wikicalendar_year']  = $_SESSION[DOKU_COOKIE]['plugin_wikicalendar_year'];
48de76d2a4SMichael Klier                unset($_SESSION[DOKU_COOKIE]['plugin_wikicalendar_month']);
49de76d2a4SMichael Klier                unset($_SESSION[DOKU_COOKIE]['plugin_wikicalendar_year']);
50de76d2a4SMichael Klier            }
51de76d2a4SMichael Klier        }
52*5ba9bd8bSMoritz Naumann    }
53de76d2a4SMichael Klier
54de76d2a4SMichael Klier    /**
55de76d2a4SMichael Klier     * Inserts the hidden redirect id field into edit form
56de76d2a4SMichael Klier     */
57de76d2a4SMichael Klier    function handle_form(&$event, $param) {
58de76d2a4SMichael Klier        if(array_key_exists('plugin_wikicalendar_redirect_id', $_REQUEST)) {
59de76d2a4SMichael Klier            $event->data->addHidden('plugin_wikicalendar_redirect_id', cleanID($_REQUEST['plugin_wikicalendar_redirect_id']));
60de76d2a4SMichael Klier            $event->data->addHidden('plugin_wikicalendar_month', cleanID($_REQUEST['plugin_wikicalendar_month']));
61de76d2a4SMichael Klier            $event->data->addHidden('plugin_wikicalendar_year', cleanID($_REQUEST['plugin_wikicalendar_year']));
62de76d2a4SMichael Klier        }
63de76d2a4SMichael Klier    }
64de76d2a4SMichael Klier
65de76d2a4SMichael Klier    /**
66de76d2a4SMichael Klier     * Redirects to the calendar page
67de76d2a4SMichael Klier     */
68de76d2a4SMichael Klier    function handle_redirect(&$event, $param) {
69de76d2a4SMichael Klier        if(array_key_exists('plugin_wikicalendar_redirect_id', $_REQUEST)) {
70de76d2a4SMichael Klier            @session_start();
71de76d2a4SMichael Klier            $_SESSION[DOKU_COOKIE]['plugin_wikicalendar_month'] = $_REQUEST['plugin_wikicalendar_month'];
72de76d2a4SMichael Klier            $_SESSION[DOKU_COOKIE]['plugin_wikicalendar_year']  = $_REQUEST['plugin_wikicalendar_year'];
73de76d2a4SMichael Klier            @session_write_close();
74de76d2a4SMichael Klier            $event->data['id'] = cleanID($_REQUEST['plugin_wikicalendar_redirect_id']);
75de76d2a4SMichael Klier            $event->data['title'] = '';
76de76d2a4SMichael Klier        }
77de76d2a4SMichael Klier    }
78de76d2a4SMichael Klier}
79de76d2a4SMichael Klier
80de76d2a4SMichael Klier// vim:ts=4:sw=4:et:enc=utf-8:
81