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 9*14a1f0a4SSzymon 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(); 147*14a1f0a4SSzymon Olewniczak $this->createObjects(); 148fe5d6d1eSSzymon Olewniczak } 149fe5d6d1eSSzymon Olewniczak 150fe5d6d1eSSzymon Olewniczak /** 151fe5d6d1eSSzymon Olewniczak * handle ajax requests 152fe5d6d1eSSzymon Olewniczak */ 153fe5d6d1eSSzymon Olewniczak public function _ajax_call(Doku_Event $event, $param) { 154fe5d6d1eSSzymon Olewniczak global $auth; 155fe5d6d1eSSzymon Olewniczak if ($event->data !== 'plugin_bez') { 156fe5d6d1eSSzymon Olewniczak return; 157fe5d6d1eSSzymon Olewniczak } 158fe5d6d1eSSzymon Olewniczak //no other ajax call handlers needed 159fe5d6d1eSSzymon Olewniczak $event->stopPropagation(); 160fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 161fe5d6d1eSSzymon Olewniczak 162fe5d6d1eSSzymon Olewniczak } 163fe5d6d1eSSzymon Olewniczak 164fe5d6d1eSSzymon Olewniczak public function tpl_pagetools_display(Doku_Event $event, $param) { 165fe5d6d1eSSzymon Olewniczak if ($this->action !== '') { 166fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 167fe5d6d1eSSzymon Olewniczak } 168fe5d6d1eSSzymon Olewniczak } 169fe5d6d1eSSzymon Olewniczak 170fe5d6d1eSSzymon Olewniczak public function action_act_preprocess(Doku_Event $event, $param) 171fe5d6d1eSSzymon Olewniczak { 172fe5d6d1eSSzymon Olewniczak global $conf; 173fe5d6d1eSSzymon Olewniczak 174fe5d6d1eSSzymon Olewniczak if ($this->action === '') { 175fe5d6d1eSSzymon Olewniczak return; 176fe5d6d1eSSzymon Olewniczak } 177fe5d6d1eSSzymon Olewniczak 178fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 179fe5d6d1eSSzymon Olewniczak try { 180fe5d6d1eSSzymon Olewniczak $this->flush_notifications(); 181fe5d6d1eSSzymon Olewniczak 182fe5d6d1eSSzymon Olewniczak $ctl = DOKU_PLUGIN."bez/ctl/".str_replace('/', '', $this->action).".php"; 183fe5d6d1eSSzymon Olewniczak 184fe5d6d1eSSzymon Olewniczak if (file_exists($ctl)) { 185fe5d6d1eSSzymon Olewniczak include $ctl; 186fe5d6d1eSSzymon Olewniczak } 187fe5d6d1eSSzymon Olewniczak } catch(bez\meta\ValidationException $e) { 188fe5d6d1eSSzymon Olewniczak foreach ($e->get_errors() as $field => $error_code) { 189fe5d6d1eSSzymon Olewniczak $lang = $this->getLang($field); 190fe5d6d1eSSzymon Olewniczak if ($lang != '') { 191fe5d6d1eSSzymon Olewniczak $field = $lang; 192fe5d6d1eSSzymon Olewniczak } 193fe5d6d1eSSzymon Olewniczak $this->add_error( 194fe5d6d1eSSzymon Olewniczak $this->getLang('validate_' . $error_code), 195fe5d6d1eSSzymon Olewniczak $field); 196fe5d6d1eSSzymon Olewniczak } 197fe5d6d1eSSzymon Olewniczak 198fe5d6d1eSSzymon Olewniczak $this->tpl->set_values($_POST); 199fe5d6d1eSSzymon Olewniczak 200fe5d6d1eSSzymon Olewniczak } catch(bez\meta\PermissionDeniedException $e) { 201fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 202e8827d73SSzymon Olewniczak if ($conf['allowdebug']) { 203e8827d73SSzymon Olewniczak dbg($e); 204e8827d73SSzymon Olewniczak $this->tpl->prevent_rendering(); 205e8827d73SSzymon Olewniczak } else { 206fe5d6d1eSSzymon Olewniczak header('Location: ' . DOKU_URL . 'doku.php?id=' . $_GET['id'] . '&do=login'); 207e8827d73SSzymon Olewniczak } 208fe5d6d1eSSzymon Olewniczak } catch(Exception $e) { 209fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 210fe5d6d1eSSzymon Olewniczak if ($conf['allowdebug']) { 211fe5d6d1eSSzymon Olewniczak dbg($e); 212fe5d6d1eSSzymon Olewniczak } 213fe5d6d1eSSzymon Olewniczak $this->tpl->prevent_rendering(); 214fe5d6d1eSSzymon Olewniczak } 215fe5d6d1eSSzymon Olewniczak } 216fe5d6d1eSSzymon Olewniczak 217fe5d6d1eSSzymon Olewniczak public function tpl_act_render($event, $param) 218fe5d6d1eSSzymon Olewniczak { 219fe5d6d1eSSzymon Olewniczak global $conf; 220fe5d6d1eSSzymon Olewniczak 221fe5d6d1eSSzymon Olewniczak if ($this->action === '') { 222fe5d6d1eSSzymon Olewniczak return false; 223fe5d6d1eSSzymon Olewniczak } 224fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 225fe5d6d1eSSzymon Olewniczak 226fe5d6d1eSSzymon Olewniczak try { 227fe5d6d1eSSzymon Olewniczak 228fe5d6d1eSSzymon Olewniczak foreach ($this->errors as $error) { 229fe5d6d1eSSzymon Olewniczak echo '<div class="error">'; 230fe5d6d1eSSzymon Olewniczak if ($error['header'] === NULL) { 231fe5d6d1eSSzymon Olewniczak echo $error['value']; 232fe5d6d1eSSzymon Olewniczak } else { 233fe5d6d1eSSzymon Olewniczak echo '<strong>'.$error['header'].'</strong>: '.$error['value']; 234fe5d6d1eSSzymon Olewniczak } 235fe5d6d1eSSzymon Olewniczak echo '</div>'; 236fe5d6d1eSSzymon Olewniczak } 237fe5d6d1eSSzymon Olewniczak 238fe5d6d1eSSzymon Olewniczak foreach ($this->notifications as $note) { 239fe5d6d1eSSzymon Olewniczak echo '<div class="info">'; 240fe5d6d1eSSzymon Olewniczak if ($note['header'] === NULL) { 241fe5d6d1eSSzymon Olewniczak echo $note['value']; 242fe5d6d1eSSzymon Olewniczak } else { 243fe5d6d1eSSzymon Olewniczak echo $note['header'].': <strong>'.$note['value'].'</strong>'; 244fe5d6d1eSSzymon Olewniczak } 245fe5d6d1eSSzymon Olewniczak echo '</div>'; 246fe5d6d1eSSzymon Olewniczak } 247fe5d6d1eSSzymon Olewniczak 248*14a1f0a4SSzymon Olewniczak $this->bez_tpl_include(str_replace('/', '', $this->get_action())); 249fe5d6d1eSSzymon Olewniczak 250fe5d6d1eSSzymon Olewniczak } catch(bez\meta\PermissionDeniedException $e) { 251fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 252fe5d6d1eSSzymon Olewniczak } catch(Exception $e) { 253fe5d6d1eSSzymon Olewniczak /*exception*/ 254fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 255fe5d6d1eSSzymon Olewniczak if ($conf['allowdebug']) { 256fe5d6d1eSSzymon Olewniczak dbg($e); 257fe5d6d1eSSzymon Olewniczak } 258fe5d6d1eSSzymon Olewniczak } 259fe5d6d1eSSzymon Olewniczak } 260fe5d6d1eSSzymon Olewniczak} 261