xref: /plugin/bez/action/default.php (revision bc2653b00a718c1ef68486f970cffe35acb167aa)
1fe5d6d1eSSzymon Olewniczak<?php
2fe5d6d1eSSzymon Olewniczak
3fe5d6d1eSSzymon Olewniczakuse \dokuwiki\plugin\bez;
4fe5d6d1eSSzymon Olewniczak
5fe5d6d1eSSzymon Olewniczakif(!defined('DOKU_INC')) die();
6fe5d6d1eSSzymon Olewniczak
7fe5d6d1eSSzymon Olewniczakdefine('BEZ_NOTIFICATIONS_COOKIE_NAME', 'bez_notifications');
8fe5d6d1eSSzymon Olewniczak
914a1f0a4SSzymon Olewniczakclass action_plugin_bez_default extends action_plugin_bez_base {
10fe5d6d1eSSzymon Olewniczak
118a638198SSzymon Olewniczak	protected $action = '';
128a638198SSzymon Olewniczak    protected $params = array();
13fe5d6d1eSSzymon Olewniczak
148a638198SSzymon Olewniczak    protected $notifications = array();
15fe5d6d1eSSzymon Olewniczak
168a638198SSzymon Olewniczak    protected $errors = array();
17fe5d6d1eSSzymon Olewniczak
18fe5d6d1eSSzymon Olewniczak    public function get_action() {
19fe5d6d1eSSzymon Olewniczak        return $this->action;
20fe5d6d1eSSzymon Olewniczak    }
21fe5d6d1eSSzymon Olewniczak
22ff14b107SSzymon Olewniczak    public function get_param($id, $default='') {
23ff14b107SSzymon Olewniczak        return (isset($this->params[$id]) ? $this->params[$id] : $default);
24fe5d6d1eSSzymon Olewniczak    }
25fe5d6d1eSSzymon Olewniczak
26fe5d6d1eSSzymon Olewniczak    private function add_notification($value, $header=NULL) {
27fe5d6d1eSSzymon Olewniczak        if (isset($_COOKIE[BEZ_NOTIFICATIONS_COOKIE_NAME])) {
28fe5d6d1eSSzymon Olewniczak            $notifs = unserialize($_COOKIE[BEZ_NOTIFICATIONS_COOKIE_NAME]);
29fe5d6d1eSSzymon Olewniczak        } else {
30fe5d6d1eSSzymon Olewniczak            $notifs = array();
31fe5d6d1eSSzymon Olewniczak        }
32fe5d6d1eSSzymon Olewniczak        $notifs[] = array('value' => $value, 'header' => $header);
33fe5d6d1eSSzymon Olewniczak        setcookie(BEZ_NOTIFICATIONS_COOKIE_NAME, serialize($notifs));
34fe5d6d1eSSzymon Olewniczak    }
35fe5d6d1eSSzymon Olewniczak
36fe5d6d1eSSzymon Olewniczak    private function flush_notifications() {
37fe5d6d1eSSzymon Olewniczak        if (!isset($_COOKIE[BEZ_NOTIFICATIONS_COOKIE_NAME])) {
38fe5d6d1eSSzymon Olewniczak            return array();
39fe5d6d1eSSzymon Olewniczak        }
40fe5d6d1eSSzymon Olewniczak        $this->notifications = unserialize($_COOKIE[BEZ_NOTIFICATIONS_COOKIE_NAME]);
41fe5d6d1eSSzymon Olewniczak
42fe5d6d1eSSzymon Olewniczak        //remove cookie
43fe5d6d1eSSzymon Olewniczak        setcookie(BEZ_NOTIFICATIONS_COOKIE_NAME, serialize(array()));
44fe5d6d1eSSzymon Olewniczak    }
45fe5d6d1eSSzymon Olewniczak
46fe5d6d1eSSzymon Olewniczak    private function add_error($value, $header=NULL) {
47fe5d6d1eSSzymon Olewniczak        $this->errors[] = array('value' => $value, 'header' => $header);
48fe5d6d1eSSzymon Olewniczak    }
49fe5d6d1eSSzymon Olewniczak
50fe5d6d1eSSzymon Olewniczak	/**
51fe5d6d1eSSzymon Olewniczak	 * Register its handlers with the DokuWiki's event controller
52fe5d6d1eSSzymon Olewniczak	 */
53fe5d6d1eSSzymon Olewniczak	public function register(Doku_Event_Handler $controller)
54fe5d6d1eSSzymon Olewniczak	{
55fe5d6d1eSSzymon Olewniczak        $controller->register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'setup_enviroment');
56fe5d6d1eSSzymon Olewniczak		$controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'action_act_preprocess');
57fe5d6d1eSSzymon Olewniczak		$controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'tpl_act_render');
58fe5d6d1eSSzymon Olewniczak		$controller->register_hook('TEMPLATE_PAGETOOLS_DISPLAY', 'BEFORE', $this, 'tpl_pagetools_display');
59fe5d6d1eSSzymon Olewniczak		$controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'include_dependencies', array());
60fe5d6d1eSSzymon Olewniczak		$controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this,'_ajax_call');
61fe5d6d1eSSzymon Olewniczak	}
62fe5d6d1eSSzymon Olewniczak
63fe5d6d1eSSzymon Olewniczak	public function include_dependencies(Doku_Event $event) {
64fe5d6d1eSSzymon Olewniczak		// Adding a stylesheet
65fe5d6d1eSSzymon Olewniczak		$event->data["link"][] = array (
66fe5d6d1eSSzymon Olewniczak		  "type" => "text/css",
67fe5d6d1eSSzymon Olewniczak		  "rel" => "stylesheet",
68fe5d6d1eSSzymon Olewniczak		  "href" => DOKU_BASE.
69fe5d6d1eSSzymon Olewniczak			"lib/plugins/bez/lib/jquery.timepicker-1.11.9-0/jquery.timepicker.css",
70fe5d6d1eSSzymon Olewniczak		);
71fe5d6d1eSSzymon Olewniczak
72fe5d6d1eSSzymon Olewniczak		// Adding a JavaScript File
73fe5d6d1eSSzymon Olewniczak		$event->data["script"][] = array (
74fe5d6d1eSSzymon Olewniczak		  "type" => "text/javascript",
75fe5d6d1eSSzymon Olewniczak		  "src" => DOKU_BASE.
76fe5d6d1eSSzymon Olewniczak			"lib/plugins/bez/lib/jquery.timepicker-1.11.9-0/jquery.timepicker.min.js",
77fe5d6d1eSSzymon Olewniczak		  "_data" => "",
78fe5d6d1eSSzymon Olewniczak		);
79fe5d6d1eSSzymon Olewniczak
80fe5d6d1eSSzymon Olewniczak		// Adding a JavaScript File
81fe5d6d1eSSzymon Olewniczak		$event->data["script"][] = array (
82fe5d6d1eSSzymon Olewniczak		  "type" => "text/javascript",
83fe5d6d1eSSzymon Olewniczak		  "src" => DOKU_BASE.
84fe5d6d1eSSzymon Olewniczak			"lib/plugins/bez/lib/jquery.datepair/datepair.js",
85fe5d6d1eSSzymon Olewniczak		  "_data" => "",
86fe5d6d1eSSzymon Olewniczak		);
87fe5d6d1eSSzymon Olewniczak
88fe5d6d1eSSzymon Olewniczak		// Adding a JavaScript File
89fe5d6d1eSSzymon Olewniczak		$event->data["script"][] = array (
90fe5d6d1eSSzymon Olewniczak		  "type" => "text/javascript",
91fe5d6d1eSSzymon Olewniczak		  "src" => DOKU_BASE.
92fe5d6d1eSSzymon Olewniczak			"lib/plugins/bez/lib/jquery.datepair/jquery.datepair.js",
93fe5d6d1eSSzymon Olewniczak		  "_data" => "",
94fe5d6d1eSSzymon Olewniczak		);
95fe5d6d1eSSzymon Olewniczak
96fe5d6d1eSSzymon Olewniczak		$event->data["link"][] = array (
97fe5d6d1eSSzymon Olewniczak		  "type" => "text/css",
98fe5d6d1eSSzymon Olewniczak		  "rel" => "stylesheet",
99fe5d6d1eSSzymon Olewniczak		  "href" => DOKU_BASE.
100fe5d6d1eSSzymon Olewniczak			"lib/plugins/bez/lib/jquery.form-validator/theme-default.min.css",
101fe5d6d1eSSzymon Olewniczak		);
102fe5d6d1eSSzymon Olewniczak
103fe5d6d1eSSzymon Olewniczak
104fe5d6d1eSSzymon Olewniczak		$event->data["script"][] = array (
105fe5d6d1eSSzymon Olewniczak		  "type" => "text/javascript",
106fe5d6d1eSSzymon Olewniczak		  "src" => DOKU_BASE.
107fe5d6d1eSSzymon Olewniczak			"lib/plugins/bez/lib/jquery.form-validator/jquery.form-validator.min.js",
108fe5d6d1eSSzymon Olewniczak		  "_data" => "",
109fe5d6d1eSSzymon Olewniczak		);
110fe5d6d1eSSzymon Olewniczak	}
111fe5d6d1eSSzymon Olewniczak
112fe5d6d1eSSzymon Olewniczak    public function setup_enviroment(Doku_Event $event, $param) {
113fe5d6d1eSSzymon Olewniczak        global $ACT, $auth, $conf, $INFO;
114fe5d6d1eSSzymon Olewniczak
115fe5d6d1eSSzymon Olewniczak        if ($ACT !== 'show') {
116fe5d6d1eSSzymon Olewniczak            return;
117fe5d6d1eSSzymon Olewniczak        }
118fe5d6d1eSSzymon Olewniczak
119fe5d6d1eSSzymon Olewniczak        $id = $_GET['id'];
120fe5d6d1eSSzymon Olewniczak		$ex = explode(':', $id);
121fe5d6d1eSSzymon Olewniczak
122fe5d6d1eSSzymon Olewniczak        //check if we process BEZ
123fe5d6d1eSSzymon Olewniczak        if ($ex[0] !== 'bez' && $ex[1] !== 'bez') {
124fe5d6d1eSSzymon Olewniczak            return;
125fe5d6d1eSSzymon Olewniczak        }
126fe5d6d1eSSzymon Olewniczak
127fe5d6d1eSSzymon Olewniczak
128fe5d6d1eSSzymon Olewniczak        if ($ex[1] === 'bez') {
129fe5d6d1eSSzymon Olewniczak            $conf['lang'] = array_shift($ex);
130e8827d73SSzymon Olewniczak            //$this->lang_code = $conf['lang'];
131fe5d6d1eSSzymon Olewniczak            $this->localised = false;
132fe5d6d1eSSzymon Olewniczak        }
133fe5d6d1eSSzymon Olewniczak        //throw out "bez"
134fe5d6d1eSSzymon Olewniczak        array_shift($ex);
135fe5d6d1eSSzymon Olewniczak
136fe5d6d1eSSzymon Olewniczak        $this->action = array_shift($ex);
137fe5d6d1eSSzymon Olewniczak
138fe5d6d1eSSzymon Olewniczak        if (count($ex) % 2 !== 0) {
139fe5d6d1eSSzymon Olewniczak            throw new Exception('invalid params');
140fe5d6d1eSSzymon Olewniczak        }
141fe5d6d1eSSzymon Olewniczak
142fe5d6d1eSSzymon Olewniczak        for ($i = 0; $i < count($ex); $i += 2) {
143fe5d6d1eSSzymon Olewniczak            $this->params[$ex[$i]] = $ex[$i+1];
144fe5d6d1eSSzymon Olewniczak        }
145fe5d6d1eSSzymon Olewniczak
146fe5d6d1eSSzymon Olewniczak        $this->setupLocale();
14714a1f0a4SSzymon Olewniczak        $this->createObjects();
148*bc2653b0SSzymon Olewniczak
149*bc2653b0SSzymon Olewniczak        if (empty($conf['baseurl']) || empty($conf['basedir']) ) {
150*bc2653b0SSzymon Olewniczak            msg($this->getLang('info set baseurl'));
151*bc2653b0SSzymon Olewniczak        }
152fe5d6d1eSSzymon Olewniczak    }
153fe5d6d1eSSzymon Olewniczak
154fe5d6d1eSSzymon Olewniczak	/**
155fe5d6d1eSSzymon Olewniczak	 * handle ajax requests
156fe5d6d1eSSzymon Olewniczak	 */
157fe5d6d1eSSzymon Olewniczak	public function _ajax_call(Doku_Event $event, $param) {
158fe5d6d1eSSzymon Olewniczak		global $auth;
159fe5d6d1eSSzymon Olewniczak		if ($event->data !== 'plugin_bez') {
160fe5d6d1eSSzymon Olewniczak			return;
161fe5d6d1eSSzymon Olewniczak		}
162fe5d6d1eSSzymon Olewniczak		//no other ajax call handlers needed
163fe5d6d1eSSzymon Olewniczak		$event->stopPropagation();
164fe5d6d1eSSzymon Olewniczak		$event->preventDefault();
165fe5d6d1eSSzymon Olewniczak
166fe5d6d1eSSzymon Olewniczak	}
167fe5d6d1eSSzymon Olewniczak
168fe5d6d1eSSzymon Olewniczak	public function tpl_pagetools_display(Doku_Event $event, $param) {
169fe5d6d1eSSzymon Olewniczak		if ($this->action !== '') {
170fe5d6d1eSSzymon Olewniczak			$event->preventDefault();
171fe5d6d1eSSzymon Olewniczak        }
172fe5d6d1eSSzymon Olewniczak	}
173fe5d6d1eSSzymon Olewniczak
1749cb75709SSzymon Olewniczak	protected $prevent_rendering = false;
1759cb75709SSzymon Olewniczak
176fe5d6d1eSSzymon Olewniczak	public function action_act_preprocess(Doku_Event $event, $param)
177fe5d6d1eSSzymon Olewniczak	{
178fe5d6d1eSSzymon Olewniczak        global $conf;
179fe5d6d1eSSzymon Olewniczak
180fe5d6d1eSSzymon Olewniczak        if ($this->action === '') {
181fe5d6d1eSSzymon Olewniczak            return;
182fe5d6d1eSSzymon Olewniczak        }
183fe5d6d1eSSzymon Olewniczak
184fe5d6d1eSSzymon Olewniczak        $event->preventDefault();
185fe5d6d1eSSzymon Olewniczak		try {
186fe5d6d1eSSzymon Olewniczak            $this->flush_notifications();
187fe5d6d1eSSzymon Olewniczak
188fe5d6d1eSSzymon Olewniczak			$ctl = DOKU_PLUGIN."bez/ctl/".str_replace('/', '', $this->action).".php";
189fe5d6d1eSSzymon Olewniczak
190fe5d6d1eSSzymon Olewniczak			if (file_exists($ctl)) {
191fe5d6d1eSSzymon Olewniczak				include $ctl;
192fe5d6d1eSSzymon Olewniczak			}
193fe5d6d1eSSzymon Olewniczak        } catch(bez\meta\ValidationException $e) {
194fe5d6d1eSSzymon Olewniczak            foreach ($e->get_errors() as $field => $error_code) {
195fe5d6d1eSSzymon Olewniczak                $lang = $this->getLang($field);
196fe5d6d1eSSzymon Olewniczak                if ($lang != '') {
197fe5d6d1eSSzymon Olewniczak                    $field = $lang;
198fe5d6d1eSSzymon Olewniczak                }
199fe5d6d1eSSzymon Olewniczak                $this->add_error(
200fe5d6d1eSSzymon Olewniczak                    $this->getLang('validate_' . $error_code),
201fe5d6d1eSSzymon Olewniczak                    $field);
202fe5d6d1eSSzymon Olewniczak            }
203fe5d6d1eSSzymon Olewniczak
204fe5d6d1eSSzymon Olewniczak            $this->tpl->set_values($_POST);
205fe5d6d1eSSzymon Olewniczak
206fe5d6d1eSSzymon Olewniczak        } catch(bez\meta\PermissionDeniedException $e) {
207fe5d6d1eSSzymon Olewniczak            dbglog('plugin_bez', $e);
208fe5d6d1eSSzymon Olewniczak            header('Location: ' . DOKU_URL . 'doku.php?id=' . $_GET['id'] . '&do=login');
209fe5d6d1eSSzymon Olewniczak		} catch(Exception $e) {
210fe5d6d1eSSzymon Olewniczak            dbglog('plugin_bez', $e);
211fe5d6d1eSSzymon Olewniczak            if ($conf['allowdebug']) {
212fe5d6d1eSSzymon Olewniczak               dbg($e);
2139cb75709SSzymon Olewniczak            } else {
2149cb75709SSzymon Olewniczak                msg($e->getMessage(), -1);
215fe5d6d1eSSzymon Olewniczak            }
2169cb75709SSzymon Olewniczak            $this->prevent_rendering = true;
217fe5d6d1eSSzymon Olewniczak		}
218fe5d6d1eSSzymon Olewniczak	}
219fe5d6d1eSSzymon Olewniczak
220fe5d6d1eSSzymon Olewniczak	public function tpl_act_render($event, $param)
221fe5d6d1eSSzymon Olewniczak	{
222fe5d6d1eSSzymon Olewniczak        global $conf;
223fe5d6d1eSSzymon Olewniczak
224fe5d6d1eSSzymon Olewniczak        if ($this->action === '') {
225fe5d6d1eSSzymon Olewniczak            return false;
226fe5d6d1eSSzymon Olewniczak        }
227fe5d6d1eSSzymon Olewniczak        $event->preventDefault();
228fe5d6d1eSSzymon Olewniczak
2299cb75709SSzymon Olewniczak        if ($this->prevent_rendering) return;
2309cb75709SSzymon Olewniczak
231fe5d6d1eSSzymon Olewniczak		try {
232fe5d6d1eSSzymon Olewniczak
233fe5d6d1eSSzymon Olewniczak			foreach ($this->errors as $error) {
234fe5d6d1eSSzymon Olewniczak				echo '<div class="error">';
235fe5d6d1eSSzymon Olewniczak                if ($error['header'] === NULL) {
236fe5d6d1eSSzymon Olewniczak					echo $error['value'];
237fe5d6d1eSSzymon Olewniczak				} else {
238fe5d6d1eSSzymon Olewniczak					echo '<strong>'.$error['header'].'</strong>: '.$error['value'];
239fe5d6d1eSSzymon Olewniczak				}
240fe5d6d1eSSzymon Olewniczak				echo '</div>';
241fe5d6d1eSSzymon Olewniczak			}
242fe5d6d1eSSzymon Olewniczak
243fe5d6d1eSSzymon Olewniczak            foreach ($this->notifications as $note) {
244fe5d6d1eSSzymon Olewniczak                echo '<div class="info">';
245fe5d6d1eSSzymon Olewniczak				if ($note['header'] === NULL) {
246fe5d6d1eSSzymon Olewniczak					echo $note['value'];
247fe5d6d1eSSzymon Olewniczak				} else {
248fe5d6d1eSSzymon Olewniczak					echo $note['header'].': <strong>'.$note['value'].'</strong>';
249fe5d6d1eSSzymon Olewniczak				}
250fe5d6d1eSSzymon Olewniczak				echo '</div>';
251fe5d6d1eSSzymon Olewniczak            }
252fe5d6d1eSSzymon Olewniczak
25314a1f0a4SSzymon Olewniczak			$this->bez_tpl_include(str_replace('/', '', $this->get_action()));
254fe5d6d1eSSzymon Olewniczak
255fe5d6d1eSSzymon Olewniczak        } catch(bez\meta\PermissionDeniedException $e) {
256fe5d6d1eSSzymon Olewniczak            dbglog('plugin_bez', $e);
257fe5d6d1eSSzymon Olewniczak		} catch(Exception $e) {
258fe5d6d1eSSzymon Olewniczak			/*exception*/
259fe5d6d1eSSzymon Olewniczak            dbglog('plugin_bez', $e);
260fe5d6d1eSSzymon Olewniczak            if ($conf['allowdebug']) {
261fe5d6d1eSSzymon Olewniczak               dbg($e);
262fe5d6d1eSSzymon Olewniczak            }
263fe5d6d1eSSzymon Olewniczak		}
264fe5d6d1eSSzymon Olewniczak	}
265fe5d6d1eSSzymon Olewniczak}
266