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 { 55c1918d15SSzymon Olewniczak $controller->register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'setup_id'); 5616360984SSzymon Olewniczak $controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'setup_enviroment'); 57fe5d6d1eSSzymon Olewniczak $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'action_act_preprocess'); 58fe5d6d1eSSzymon Olewniczak $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'tpl_act_render'); 59fe5d6d1eSSzymon Olewniczak $controller->register_hook('TEMPLATE_PAGETOOLS_DISPLAY', 'BEFORE', $this, 'tpl_pagetools_display'); 60fe5d6d1eSSzymon Olewniczak $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'include_dependencies', array()); 61fe5d6d1eSSzymon Olewniczak $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this,'_ajax_call'); 6292a18be1SSzymon Olewniczak 6392a18be1SSzymon Olewniczak $controller->register_hook('PLUGIN_NOTIFICATION_REGISTER_SOURCE', 'AFTER', $this, 'add_notifications_source'); 6492a18be1SSzymon Olewniczak $controller->register_hook('PLUGIN_NOTIFICATION_GATHER', 'AFTER', $this, 'add_notifications'); 6592a18be1SSzymon Olewniczak $controller->register_hook('PLUGIN_NOTIFICATION_CACHE_DEPENDENCIES', 'AFTER', $this, 'add_notification_cache_dependencies'); 66fe5d6d1eSSzymon Olewniczak } 67fe5d6d1eSSzymon Olewniczak 68fe5d6d1eSSzymon Olewniczak public function include_dependencies(Doku_Event $event) { 69fe5d6d1eSSzymon Olewniczak // Adding a stylesheet 70fe5d6d1eSSzymon Olewniczak $event->data["link"][] = array ( 71fe5d6d1eSSzymon Olewniczak "type" => "text/css", 72fe5d6d1eSSzymon Olewniczak "rel" => "stylesheet", 73fe5d6d1eSSzymon Olewniczak "href" => DOKU_BASE. 74fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.timepicker-1.11.9-0/jquery.timepicker.css", 75fe5d6d1eSSzymon Olewniczak ); 76fe5d6d1eSSzymon Olewniczak 77fe5d6d1eSSzymon Olewniczak // Adding a JavaScript File 78fe5d6d1eSSzymon Olewniczak $event->data["script"][] = array ( 79fe5d6d1eSSzymon Olewniczak "type" => "text/javascript", 80fe5d6d1eSSzymon Olewniczak "src" => DOKU_BASE. 81fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.timepicker-1.11.9-0/jquery.timepicker.min.js", 82fe5d6d1eSSzymon Olewniczak "_data" => "", 83fe5d6d1eSSzymon Olewniczak ); 84fe5d6d1eSSzymon Olewniczak 85fe5d6d1eSSzymon Olewniczak // Adding a JavaScript File 86fe5d6d1eSSzymon Olewniczak $event->data["script"][] = array ( 87fe5d6d1eSSzymon Olewniczak "type" => "text/javascript", 88fe5d6d1eSSzymon Olewniczak "src" => DOKU_BASE. 89fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.datepair/datepair.js", 90fe5d6d1eSSzymon Olewniczak "_data" => "", 91fe5d6d1eSSzymon Olewniczak ); 92fe5d6d1eSSzymon Olewniczak 93fe5d6d1eSSzymon Olewniczak // Adding a JavaScript File 94fe5d6d1eSSzymon Olewniczak $event->data["script"][] = array ( 95fe5d6d1eSSzymon Olewniczak "type" => "text/javascript", 96fe5d6d1eSSzymon Olewniczak "src" => DOKU_BASE. 97fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.datepair/jquery.datepair.js", 98fe5d6d1eSSzymon Olewniczak "_data" => "", 99fe5d6d1eSSzymon Olewniczak ); 100fe5d6d1eSSzymon Olewniczak 101fe5d6d1eSSzymon Olewniczak $event->data["link"][] = array ( 102fe5d6d1eSSzymon Olewniczak "type" => "text/css", 103fe5d6d1eSSzymon Olewniczak "rel" => "stylesheet", 104fe5d6d1eSSzymon Olewniczak "href" => DOKU_BASE. 105fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.form-validator/theme-default.min.css", 106fe5d6d1eSSzymon Olewniczak ); 107fe5d6d1eSSzymon Olewniczak 108fe5d6d1eSSzymon Olewniczak 109fe5d6d1eSSzymon Olewniczak $event->data["script"][] = array ( 110fe5d6d1eSSzymon Olewniczak "type" => "text/javascript", 111fe5d6d1eSSzymon Olewniczak "src" => DOKU_BASE. 112fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.form-validator/jquery.form-validator.min.js", 113fe5d6d1eSSzymon Olewniczak "_data" => "", 114fe5d6d1eSSzymon Olewniczak ); 115fe5d6d1eSSzymon Olewniczak } 116fe5d6d1eSSzymon Olewniczak 117c1918d15SSzymon Olewniczak public function setup_id(Doku_Event $event, $param) { 118c1918d15SSzymon Olewniczak global $INFO, $ID; 119fe5d6d1eSSzymon Olewniczak 120fe5d6d1eSSzymon Olewniczak $id = $_GET['id']; 121fe5d6d1eSSzymon Olewniczak $ex = explode(':', $id); 122fe5d6d1eSSzymon Olewniczak 123fe5d6d1eSSzymon Olewniczak //check if we process BEZ 124fe5d6d1eSSzymon Olewniczak if ($ex[0] !== 'bez' && $ex[1] !== 'bez') { 125fe5d6d1eSSzymon Olewniczak return; 126fe5d6d1eSSzymon Olewniczak } 127fe5d6d1eSSzymon Olewniczak 12852e539a3SSzymon Olewniczak $INFO['id'] = $id; 12952e539a3SSzymon Olewniczak $ID = $id; 130c1918d15SSzymon Olewniczak } 13152e539a3SSzymon Olewniczak 132c1918d15SSzymon Olewniczak public function setup_enviroment(Doku_Event $event, $param) { 133c1918d15SSzymon Olewniczak global $ACT, $conf, $ID; 134c1918d15SSzymon Olewniczak 135c1918d15SSzymon Olewniczak if ($ACT !== 'show') { 136c1918d15SSzymon Olewniczak return; 137c1918d15SSzymon Olewniczak } 138c1918d15SSzymon Olewniczak 139c1918d15SSzymon Olewniczak $ex = explode(':', $ID); 140c1918d15SSzymon Olewniczak 141c1918d15SSzymon Olewniczak //check if we process BEZ 142c1918d15SSzymon Olewniczak if ($ex[0] !== 'bez' && $ex[1] !== 'bez') { 143c1918d15SSzymon Olewniczak return; 144c1918d15SSzymon Olewniczak } 145fe5d6d1eSSzymon Olewniczak 146fe5d6d1eSSzymon Olewniczak if ($ex[1] === 'bez') { 14716360984SSzymon Olewniczak //pl is default language 14816360984SSzymon Olewniczak if ($ex[0] == 'pl') { 14916360984SSzymon Olewniczak //throw out "pl" and "bez" 15016360984SSzymon Olewniczak array_shift($ex); 15116360984SSzymon Olewniczak array_shift($ex); 15216360984SSzymon Olewniczak 15316360984SSzymon Olewniczak $url = call_user_func_array(array($this, 'url'), $ex); 15416360984SSzymon Olewniczak header("Location: $url"); 15516360984SSzymon Olewniczak } 156fe5d6d1eSSzymon Olewniczak $conf['lang'] = array_shift($ex); 15716360984SSzymon Olewniczak 158fe5d6d1eSSzymon Olewniczak $this->localised = false; 159fe5d6d1eSSzymon Olewniczak } 160fe5d6d1eSSzymon Olewniczak //throw out "bez" 161fe5d6d1eSSzymon Olewniczak array_shift($ex); 162fe5d6d1eSSzymon Olewniczak 163fe5d6d1eSSzymon Olewniczak $this->action = array_shift($ex); 164fe5d6d1eSSzymon Olewniczak 165fe5d6d1eSSzymon Olewniczak if (count($ex) % 2 !== 0) { 166fe5d6d1eSSzymon Olewniczak throw new Exception('invalid params'); 167fe5d6d1eSSzymon Olewniczak } 168fe5d6d1eSSzymon Olewniczak 169fe5d6d1eSSzymon Olewniczak for ($i = 0; $i < count($ex); $i += 2) { 170fe5d6d1eSSzymon Olewniczak $this->params[$ex[$i]] = $ex[$i+1]; 171fe5d6d1eSSzymon Olewniczak } 172fe5d6d1eSSzymon Olewniczak 173fe5d6d1eSSzymon Olewniczak $this->setupLocale(); 17414a1f0a4SSzymon Olewniczak $this->createObjects(); 175bc2653b0SSzymon Olewniczak 176d01047f3SSzymon Olewniczak if (empty($conf['baseurl'])) { 177bc2653b0SSzymon Olewniczak msg($this->getLang('info set baseurl')); 178bc2653b0SSzymon Olewniczak } 179fe5d6d1eSSzymon Olewniczak } 180fe5d6d1eSSzymon Olewniczak 181fe5d6d1eSSzymon Olewniczak /** 182fe5d6d1eSSzymon Olewniczak * handle ajax requests 183fe5d6d1eSSzymon Olewniczak */ 184fe5d6d1eSSzymon Olewniczak public function _ajax_call(Doku_Event $event, $param) { 185fe5d6d1eSSzymon Olewniczak global $auth; 186fe5d6d1eSSzymon Olewniczak if ($event->data !== 'plugin_bez') { 187fe5d6d1eSSzymon Olewniczak return; 188fe5d6d1eSSzymon Olewniczak } 189fe5d6d1eSSzymon Olewniczak //no other ajax call handlers needed 190fe5d6d1eSSzymon Olewniczak $event->stopPropagation(); 191fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 192fe5d6d1eSSzymon Olewniczak 193fe5d6d1eSSzymon Olewniczak } 194fe5d6d1eSSzymon Olewniczak 195fe5d6d1eSSzymon Olewniczak public function tpl_pagetools_display(Doku_Event $event, $param) { 196fe5d6d1eSSzymon Olewniczak if ($this->action !== '') { 197fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 198fe5d6d1eSSzymon Olewniczak } 199fe5d6d1eSSzymon Olewniczak } 200fe5d6d1eSSzymon Olewniczak 2019cb75709SSzymon Olewniczak protected $prevent_rendering = false; 2029cb75709SSzymon Olewniczak 203fe5d6d1eSSzymon Olewniczak public function action_act_preprocess(Doku_Event $event, $param) 204fe5d6d1eSSzymon Olewniczak { 205fe5d6d1eSSzymon Olewniczak global $conf; 206fe5d6d1eSSzymon Olewniczak 207fe5d6d1eSSzymon Olewniczak if ($this->action === '') { 208fe5d6d1eSSzymon Olewniczak return; 209fe5d6d1eSSzymon Olewniczak } 210fe5d6d1eSSzymon Olewniczak 211fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 212fe5d6d1eSSzymon Olewniczak try { 213fe5d6d1eSSzymon Olewniczak $this->flush_notifications(); 214fe5d6d1eSSzymon Olewniczak 215fe5d6d1eSSzymon Olewniczak $ctl = DOKU_PLUGIN."bez/ctl/".str_replace('/', '', $this->action).".php"; 216fe5d6d1eSSzymon Olewniczak 217fe5d6d1eSSzymon Olewniczak if (file_exists($ctl)) { 218fe5d6d1eSSzymon Olewniczak include $ctl; 219fe5d6d1eSSzymon Olewniczak } 220fe5d6d1eSSzymon Olewniczak } catch(bez\meta\ValidationException $e) { 221fe5d6d1eSSzymon Olewniczak foreach ($e->get_errors() as $field => $error_code) { 222fe5d6d1eSSzymon Olewniczak $lang = $this->getLang($field); 223fe5d6d1eSSzymon Olewniczak if ($lang != '') { 224fe5d6d1eSSzymon Olewniczak $field = $lang; 225fe5d6d1eSSzymon Olewniczak } 226fe5d6d1eSSzymon Olewniczak $this->add_error( 227fe5d6d1eSSzymon Olewniczak $this->getLang('validate_' . $error_code), 228fe5d6d1eSSzymon Olewniczak $field); 229fe5d6d1eSSzymon Olewniczak } 230fe5d6d1eSSzymon Olewniczak 231fe5d6d1eSSzymon Olewniczak $this->tpl->set_values($_POST); 232fe5d6d1eSSzymon Olewniczak 233fe5d6d1eSSzymon Olewniczak } catch(bez\meta\PermissionDeniedException $e) { 234fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 235fe5d6d1eSSzymon Olewniczak header('Location: ' . DOKU_URL . 'doku.php?id=' . $_GET['id'] . '&do=login'); 23667fdb426SSzymon Olewniczak } catch (\PHPMailer\PHPMailer\Exception $e) { 23767fdb426SSzymon Olewniczak msg($e->getMessage(), -1); 238fe5d6d1eSSzymon Olewniczak } catch(Exception $e) { 239fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 240fe5d6d1eSSzymon Olewniczak if ($conf['allowdebug']) { 241fe5d6d1eSSzymon Olewniczak dbg($e); 2429cb75709SSzymon Olewniczak } else { 2439cb75709SSzymon Olewniczak msg($e->getMessage(), -1); 244fe5d6d1eSSzymon Olewniczak } 2459cb75709SSzymon Olewniczak $this->prevent_rendering = true; 246fe5d6d1eSSzymon Olewniczak } 247fe5d6d1eSSzymon Olewniczak } 248fe5d6d1eSSzymon Olewniczak 249fe5d6d1eSSzymon Olewniczak public function tpl_act_render($event, $param) 250fe5d6d1eSSzymon Olewniczak { 251fe5d6d1eSSzymon Olewniczak global $conf; 252fe5d6d1eSSzymon Olewniczak 253fe5d6d1eSSzymon Olewniczak if ($this->action === '') { 254fe5d6d1eSSzymon Olewniczak return false; 255fe5d6d1eSSzymon Olewniczak } 256fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 257fe5d6d1eSSzymon Olewniczak 2589cb75709SSzymon Olewniczak if ($this->prevent_rendering) return; 2599cb75709SSzymon Olewniczak 260fe5d6d1eSSzymon Olewniczak try { 261fe5d6d1eSSzymon Olewniczak 262fe5d6d1eSSzymon Olewniczak foreach ($this->errors as $error) { 263fe5d6d1eSSzymon Olewniczak echo '<div class="error">'; 264fe5d6d1eSSzymon Olewniczak if ($error['header'] === NULL) { 265fe5d6d1eSSzymon Olewniczak echo $error['value']; 266fe5d6d1eSSzymon Olewniczak } else { 267fe5d6d1eSSzymon Olewniczak echo '<strong>'.$error['header'].'</strong>: '.$error['value']; 268fe5d6d1eSSzymon Olewniczak } 269fe5d6d1eSSzymon Olewniczak echo '</div>'; 270fe5d6d1eSSzymon Olewniczak } 271fe5d6d1eSSzymon Olewniczak 272fe5d6d1eSSzymon Olewniczak foreach ($this->notifications as $note) { 273fe5d6d1eSSzymon Olewniczak echo '<div class="info">'; 274fe5d6d1eSSzymon Olewniczak if ($note['header'] === NULL) { 275fe5d6d1eSSzymon Olewniczak echo $note['value']; 276fe5d6d1eSSzymon Olewniczak } else { 277fe5d6d1eSSzymon Olewniczak echo $note['header'].': <strong>'.$note['value'].'</strong>'; 278fe5d6d1eSSzymon Olewniczak } 279fe5d6d1eSSzymon Olewniczak echo '</div>'; 280fe5d6d1eSSzymon Olewniczak } 281fe5d6d1eSSzymon Olewniczak 28214a1f0a4SSzymon Olewniczak $this->bez_tpl_include(str_replace('/', '', $this->get_action())); 283fe5d6d1eSSzymon Olewniczak 284fe5d6d1eSSzymon Olewniczak } catch(bez\meta\PermissionDeniedException $e) { 285fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 286fe5d6d1eSSzymon Olewniczak } catch(Exception $e) { 287fe5d6d1eSSzymon Olewniczak /*exception*/ 288fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 289fe5d6d1eSSzymon Olewniczak if ($conf['allowdebug']) { 290fe5d6d1eSSzymon Olewniczak dbg($e); 291fe5d6d1eSSzymon Olewniczak } 292fe5d6d1eSSzymon Olewniczak } 293fe5d6d1eSSzymon Olewniczak } 29492a18be1SSzymon Olewniczak 29592a18be1SSzymon Olewniczak public function add_notifications_source(Doku_Event $event) 29692a18be1SSzymon Olewniczak { 297*16bc480cSSzymon Olewniczak $event->data[] = 'bez:problems_without_tasks'; 29892a18be1SSzymon Olewniczak $event->data[] = 'bez:problems_coming'; 29992a18be1SSzymon Olewniczak $event->data[] = 'bez:problems_outdated'; 30092a18be1SSzymon Olewniczak $event->data[] = 'bez:tasks_coming'; 30192a18be1SSzymon Olewniczak $event->data[] = 'bez:tasks_outdated'; 30292a18be1SSzymon Olewniczak } 30392a18be1SSzymon Olewniczak 30492a18be1SSzymon Olewniczak public function add_notification_cache_dependencies(Doku_Event $event) 30592a18be1SSzymon Olewniczak { 30692a18be1SSzymon Olewniczak if (!preg_grep('/^bez:.*/', $event->data['plugins'])) return; 30792a18be1SSzymon Olewniczak 30892a18be1SSzymon Olewniczak /** @var \helper_plugin_bez_db $db_helper */ 30992a18be1SSzymon Olewniczak $db_helper = plugin_load('helper', 'bez_db'); 31092a18be1SSzymon Olewniczak $event->data['dependencies'][] = $db_helper->getDB()->getAdapter()->getDbFile(); 31192a18be1SSzymon Olewniczak } 31292a18be1SSzymon Olewniczak 31392a18be1SSzymon Olewniczak public function add_notifications(Doku_Event $event) 31492a18be1SSzymon Olewniczak { 31592a18be1SSzymon Olewniczak if (!preg_grep('/^bez:.*/', $event->data['plugins'])) return; 31692a18be1SSzymon Olewniczak 31792a18be1SSzymon Olewniczak $user = $event->data['user']; 31816cfdeccSSzymon Olewniczak $this->createObjects(true); 31992a18be1SSzymon Olewniczak 320*16bc480cSSzymon Olewniczak if (in_array('bez:problems_without_tasks', $event->data['plugins'])) { 321*16bc480cSSzymon Olewniczak $threads = $this->get_model()->factory('thread')->get_all(array( 322*16bc480cSSzymon Olewniczak 'type' => 'issue', 323*16bc480cSSzymon Olewniczak 'task_count' => '0', 324*16bc480cSSzymon Olewniczak 'coordinator' => $user 325*16bc480cSSzymon Olewniczak )); 326*16bc480cSSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 327*16bc480cSSzymon Olewniczak foreach ($threads as $thread) { 328*16bc480cSSzymon Olewniczak $link = '<a href="' . $this->url('thread', 'id', $thread->id) . '">'; 329*16bc480cSSzymon Olewniczak $link .= '#' . $thread->id; 330*16bc480cSSzymon Olewniczak $link .= '</a>'; 331*16bc480cSSzymon Olewniczak 332*16bc480cSSzymon Olewniczak $full = sprintf($this->getLang('notification problems_without_tasks'), $link); 333*16bc480cSSzymon Olewniczak $event->data['notifications'][] = [ 334*16bc480cSSzymon Olewniczak 'plugin' => 'bez:problems_without_tasks', 335*16bc480cSSzymon Olewniczak 'id' => 'thread:' . $thread->id, 336*16bc480cSSzymon Olewniczak 'full' => $full, 337*16bc480cSSzymon Olewniczak 'brief' => $link, 338*16bc480cSSzymon Olewniczak 'timestamp' => strtotime($thread->last_activity_date) 339*16bc480cSSzymon Olewniczak ]; 340*16bc480cSSzymon Olewniczak } 341*16bc480cSSzymon Olewniczak } 342*16bc480cSSzymon Olewniczak 34392a18be1SSzymon Olewniczak if (in_array('bez:problems_coming', $event->data['plugins'])) { 34492a18be1SSzymon Olewniczak $threads = $this->get_model()->factory('thread')->get_all(array( 34592a18be1SSzymon Olewniczak 'type' => 'issue', 34692a18be1SSzymon Olewniczak 'priority' => '1', 34792a18be1SSzymon Olewniczak 'coordinator' => $user 34892a18be1SSzymon Olewniczak )); 34992a18be1SSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 35092a18be1SSzymon Olewniczak foreach ($threads as $thread) { 35192a18be1SSzymon Olewniczak $link = '<a href="' . $this->url('thread', 'id', $thread->id) . '">'; 35292a18be1SSzymon Olewniczak $link .= '#' . $thread->id; 35392a18be1SSzymon Olewniczak $link .= '</a>'; 35492a18be1SSzymon Olewniczak 35592a18be1SSzymon Olewniczak $full = sprintf($this->getLang('notification problems_coming'), $link); 35692a18be1SSzymon Olewniczak $event->data['notifications'][] = [ 35792a18be1SSzymon Olewniczak 'plugin' => 'bez:problems_coming', 35816cfdeccSSzymon Olewniczak 'id' => 'thread:' . $thread->id, 35992a18be1SSzymon Olewniczak 'full' => $full, 36092a18be1SSzymon Olewniczak 'brief' => $link, 36192a18be1SSzymon Olewniczak 'timestamp' => strtotime($thread->last_activity_date) 36292a18be1SSzymon Olewniczak ]; 36392a18be1SSzymon Olewniczak } 36492a18be1SSzymon Olewniczak } 36592a18be1SSzymon Olewniczak 36692a18be1SSzymon Olewniczak if (in_array('bez:problems_outdated', $event->data['plugins'])) { 36792a18be1SSzymon Olewniczak $threads = $this->get_model()->threadFactory->get_all(array( 36892a18be1SSzymon Olewniczak 'type' => 'issue', 36992a18be1SSzymon Olewniczak 'priority' => '2', 37092a18be1SSzymon Olewniczak 'coordinator' => $user 37192a18be1SSzymon Olewniczak )); 37292a18be1SSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 37392a18be1SSzymon Olewniczak foreach ($threads as $thread) { 37492a18be1SSzymon Olewniczak $link = '<a href="' . $this->url('thread', 'id', $thread->id) . '">'; 37592a18be1SSzymon Olewniczak $link .= '#' . $thread->id; 37692a18be1SSzymon Olewniczak $link .= '</a>'; 37792a18be1SSzymon Olewniczak 37892a18be1SSzymon Olewniczak $full = sprintf($this->getLang('notification problems_outdated'), $link); 37992a18be1SSzymon Olewniczak $event->data['notifications'][] = [ 38016cfdeccSSzymon Olewniczak 'plugin' => 'bez:problems_outdated', 38116cfdeccSSzymon Olewniczak 'id' => 'thread:' . $thread->id, 38292a18be1SSzymon Olewniczak 'full' => $full, 38392a18be1SSzymon Olewniczak 'brief' => $link, 38492a18be1SSzymon Olewniczak 'timestamp' => strtotime($thread->last_activity_date) 38592a18be1SSzymon Olewniczak ]; 38692a18be1SSzymon Olewniczak } 38792a18be1SSzymon Olewniczak } 38892a18be1SSzymon Olewniczak 38992a18be1SSzymon Olewniczak if (in_array('bez:tasks_coming', $event->data['plugins'])) { 39092a18be1SSzymon Olewniczak $tasks = $this->get_model()->factory('task')->get_all(array( 39192a18be1SSzymon Olewniczak 'priority' => '1', 39292a18be1SSzymon Olewniczak 'assignee' => $user 39392a18be1SSzymon Olewniczak )); 39492a18be1SSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 39592a18be1SSzymon Olewniczak foreach ($tasks as $task) { 39692a18be1SSzymon Olewniczak $link = '<a href="' . $this->url('task', 'tid', $task->id) . '">'; 39792a18be1SSzymon Olewniczak $link .= '#z' . $task->id; 39892a18be1SSzymon Olewniczak $link .= '</a>'; 39992a18be1SSzymon Olewniczak 40092a18be1SSzymon Olewniczak $full = sprintf($this->getLang('notification tasks_coming'), $link); 40192a18be1SSzymon Olewniczak $event->data['notifications'][] = [ 40216cfdeccSSzymon Olewniczak 'plugin' => 'bez:tasks_coming', 40316cfdeccSSzymon Olewniczak 'id' => 'task:' . $task->id, 40492a18be1SSzymon Olewniczak 'full' => $full, 40592a18be1SSzymon Olewniczak 'brief' => $link, 40692a18be1SSzymon Olewniczak 'timestamp' => strtotime($task->plan_date) 40792a18be1SSzymon Olewniczak ]; 40892a18be1SSzymon Olewniczak } 40992a18be1SSzymon Olewniczak } 41092a18be1SSzymon Olewniczak 41192a18be1SSzymon Olewniczak if (in_array('bez:tasks_outdated', $event->data['plugins'])) { 41292a18be1SSzymon Olewniczak $tasks = $this->get_model()->factory('task')->get_all(array( 41392a18be1SSzymon Olewniczak 'priority' => '2', 41492a18be1SSzymon Olewniczak 'assignee' => $user 41592a18be1SSzymon Olewniczak )); 41692a18be1SSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 41792a18be1SSzymon Olewniczak foreach ($tasks as $task) { 41892a18be1SSzymon Olewniczak $link = '<a href="' . $this->url('task', 'tid', $task->id) . '">'; 41992a18be1SSzymon Olewniczak $link .= '#z' . $task->id; 42092a18be1SSzymon Olewniczak $link .= '</a>'; 42192a18be1SSzymon Olewniczak 42292a18be1SSzymon Olewniczak $full = sprintf($this->getLang('notification tasks_outdated'), $link); 42392a18be1SSzymon Olewniczak $event->data['notifications'][] = [ 42416cfdeccSSzymon Olewniczak 'plugin' => 'bez:tasks_outdated', 42516cfdeccSSzymon Olewniczak 'id' => 'task:' . $task->id, 42692a18be1SSzymon Olewniczak 'full' => $full, 42792a18be1SSzymon Olewniczak 'brief' => $link, 42892a18be1SSzymon Olewniczak 'timestamp' => strtotime($task->plan_date) 42992a18be1SSzymon Olewniczak ]; 43092a18be1SSzymon Olewniczak } 43192a18be1SSzymon Olewniczak } 43292a18be1SSzymon Olewniczak } 433fe5d6d1eSSzymon Olewniczak} 434