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