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", 82db86591fSSzymon Olewniczak "defer" => "defer", 83fe5d6d1eSSzymon Olewniczak "_data" => "", 84fe5d6d1eSSzymon Olewniczak ); 85fe5d6d1eSSzymon Olewniczak 86fe5d6d1eSSzymon Olewniczak // Adding a JavaScript File 87fe5d6d1eSSzymon Olewniczak $event->data["script"][] = array ( 88fe5d6d1eSSzymon Olewniczak "type" => "text/javascript", 89fe5d6d1eSSzymon Olewniczak "src" => DOKU_BASE. 90fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.datepair/datepair.js", 91db86591fSSzymon Olewniczak "defer" => "defer", 92fe5d6d1eSSzymon Olewniczak "_data" => "", 93fe5d6d1eSSzymon Olewniczak ); 94fe5d6d1eSSzymon Olewniczak 95fe5d6d1eSSzymon Olewniczak // Adding a JavaScript File 96fe5d6d1eSSzymon Olewniczak $event->data["script"][] = array ( 97fe5d6d1eSSzymon Olewniczak "type" => "text/javascript", 98fe5d6d1eSSzymon Olewniczak "src" => DOKU_BASE. 99fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.datepair/jquery.datepair.js", 100db86591fSSzymon Olewniczak "defer" => "defer", 101fe5d6d1eSSzymon Olewniczak "_data" => "", 102fe5d6d1eSSzymon Olewniczak ); 103fe5d6d1eSSzymon Olewniczak 104fe5d6d1eSSzymon Olewniczak $event->data["link"][] = array ( 105fe5d6d1eSSzymon Olewniczak "type" => "text/css", 106fe5d6d1eSSzymon Olewniczak "rel" => "stylesheet", 107fe5d6d1eSSzymon Olewniczak "href" => DOKU_BASE. 108fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.form-validator/theme-default.min.css", 109fe5d6d1eSSzymon Olewniczak ); 110fe5d6d1eSSzymon Olewniczak 111fe5d6d1eSSzymon Olewniczak 112fe5d6d1eSSzymon Olewniczak $event->data["script"][] = array ( 113fe5d6d1eSSzymon Olewniczak "type" => "text/javascript", 114fe5d6d1eSSzymon Olewniczak "src" => DOKU_BASE. 115fe5d6d1eSSzymon Olewniczak "lib/plugins/bez/lib/jquery.form-validator/jquery.form-validator.min.js", 116db86591fSSzymon Olewniczak "defer" => "defer", 117fe5d6d1eSSzymon Olewniczak "_data" => "", 118fe5d6d1eSSzymon Olewniczak ); 119fe5d6d1eSSzymon Olewniczak } 120fe5d6d1eSSzymon Olewniczak 121c1918d15SSzymon Olewniczak public function setup_id(Doku_Event $event, $param) { 122c1918d15SSzymon Olewniczak global $INFO, $ID; 123fe5d6d1eSSzymon Olewniczak 124fe5d6d1eSSzymon Olewniczak $id = $_GET['id']; 125fe5d6d1eSSzymon Olewniczak $ex = explode(':', $id); 126fe5d6d1eSSzymon Olewniczak 127fe5d6d1eSSzymon Olewniczak //check if we process BEZ 128fe5d6d1eSSzymon Olewniczak if ($ex[0] !== 'bez' && $ex[1] !== 'bez') { 129fe5d6d1eSSzymon Olewniczak return; 130fe5d6d1eSSzymon Olewniczak } 131fe5d6d1eSSzymon Olewniczak 13252e539a3SSzymon Olewniczak $INFO['id'] = $id; 13352e539a3SSzymon Olewniczak $ID = $id; 134c1918d15SSzymon Olewniczak } 13552e539a3SSzymon Olewniczak 136c1918d15SSzymon Olewniczak public function setup_enviroment(Doku_Event $event, $param) { 137c1918d15SSzymon Olewniczak global $ACT, $conf, $ID; 138c1918d15SSzymon Olewniczak 139c1918d15SSzymon Olewniczak if ($ACT !== 'show') { 140c1918d15SSzymon Olewniczak return; 141c1918d15SSzymon Olewniczak } 142c1918d15SSzymon Olewniczak 143c1918d15SSzymon Olewniczak $ex = explode(':', $ID); 144c1918d15SSzymon Olewniczak 145c1918d15SSzymon Olewniczak //check if we process BEZ 146c1918d15SSzymon Olewniczak if ($ex[0] !== 'bez' && $ex[1] !== 'bez') { 147c1918d15SSzymon Olewniczak return; 148c1918d15SSzymon Olewniczak } 149fe5d6d1eSSzymon Olewniczak 150fe5d6d1eSSzymon Olewniczak if ($ex[1] === 'bez') { 15116360984SSzymon Olewniczak //pl is default language 15216360984SSzymon Olewniczak if ($ex[0] == 'pl') { 15316360984SSzymon Olewniczak //throw out "pl" and "bez" 15416360984SSzymon Olewniczak array_shift($ex); 15516360984SSzymon Olewniczak array_shift($ex); 15616360984SSzymon Olewniczak 15716360984SSzymon Olewniczak $url = call_user_func_array(array($this, 'url'), $ex); 15816360984SSzymon Olewniczak header("Location: $url"); 15916360984SSzymon Olewniczak } 160fe5d6d1eSSzymon Olewniczak $conf['lang'] = array_shift($ex); 16116360984SSzymon Olewniczak 162fe5d6d1eSSzymon Olewniczak $this->localised = false; 163fe5d6d1eSSzymon Olewniczak } 164fe5d6d1eSSzymon Olewniczak //throw out "bez" 165fe5d6d1eSSzymon Olewniczak array_shift($ex); 166fe5d6d1eSSzymon Olewniczak 167fe5d6d1eSSzymon Olewniczak $this->action = array_shift($ex); 168fe5d6d1eSSzymon Olewniczak 169fe5d6d1eSSzymon Olewniczak if (count($ex) % 2 !== 0) { 170fe5d6d1eSSzymon Olewniczak throw new Exception('invalid params'); 171fe5d6d1eSSzymon Olewniczak } 172fe5d6d1eSSzymon Olewniczak 173fe5d6d1eSSzymon Olewniczak for ($i = 0; $i < count($ex); $i += 2) { 174fe5d6d1eSSzymon Olewniczak $this->params[$ex[$i]] = $ex[$i+1]; 175fe5d6d1eSSzymon Olewniczak } 176fe5d6d1eSSzymon Olewniczak 177fe5d6d1eSSzymon Olewniczak $this->setupLocale(); 17814a1f0a4SSzymon Olewniczak $this->createObjects(); 179bc2653b0SSzymon Olewniczak 180*9e6945e9SSzymon Olewniczak// if (empty($conf['baseurl'])) { 181*9e6945e9SSzymon Olewniczak// msg($this->getLang('info set baseurl')); 182*9e6945e9SSzymon Olewniczak// } 183fe5d6d1eSSzymon Olewniczak } 184fe5d6d1eSSzymon Olewniczak 185fe5d6d1eSSzymon Olewniczak /** 186fe5d6d1eSSzymon Olewniczak * handle ajax requests 187fe5d6d1eSSzymon Olewniczak */ 188fe5d6d1eSSzymon Olewniczak public function _ajax_call(Doku_Event $event, $param) { 189fe5d6d1eSSzymon Olewniczak global $auth; 190fe5d6d1eSSzymon Olewniczak if ($event->data !== 'plugin_bez') { 191fe5d6d1eSSzymon Olewniczak return; 192fe5d6d1eSSzymon Olewniczak } 193fe5d6d1eSSzymon Olewniczak //no other ajax call handlers needed 194fe5d6d1eSSzymon Olewniczak $event->stopPropagation(); 195fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 196fe5d6d1eSSzymon Olewniczak 197fe5d6d1eSSzymon Olewniczak } 198fe5d6d1eSSzymon Olewniczak 199fe5d6d1eSSzymon Olewniczak public function tpl_pagetools_display(Doku_Event $event, $param) { 200fe5d6d1eSSzymon Olewniczak if ($this->action !== '') { 201fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 202fe5d6d1eSSzymon Olewniczak } 203fe5d6d1eSSzymon Olewniczak } 204fe5d6d1eSSzymon Olewniczak 2059cb75709SSzymon Olewniczak protected $prevent_rendering = false; 2069cb75709SSzymon Olewniczak 207fe5d6d1eSSzymon Olewniczak public function action_act_preprocess(Doku_Event $event, $param) 208fe5d6d1eSSzymon Olewniczak { 209fe5d6d1eSSzymon Olewniczak global $conf; 210fe5d6d1eSSzymon Olewniczak 211fe5d6d1eSSzymon Olewniczak if ($this->action === '') { 212fe5d6d1eSSzymon Olewniczak return; 213fe5d6d1eSSzymon Olewniczak } 214fe5d6d1eSSzymon Olewniczak 215fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 216fe5d6d1eSSzymon Olewniczak try { 217fe5d6d1eSSzymon Olewniczak $this->flush_notifications(); 218fe5d6d1eSSzymon Olewniczak 219fe5d6d1eSSzymon Olewniczak $ctl = DOKU_PLUGIN."bez/ctl/".str_replace('/', '', $this->action).".php"; 220fe5d6d1eSSzymon Olewniczak 221fe5d6d1eSSzymon Olewniczak if (file_exists($ctl)) { 222fe5d6d1eSSzymon Olewniczak include $ctl; 223fe5d6d1eSSzymon Olewniczak } 224fe5d6d1eSSzymon Olewniczak } catch(bez\meta\ValidationException $e) { 225fe5d6d1eSSzymon Olewniczak foreach ($e->get_errors() as $field => $error_code) { 226fe5d6d1eSSzymon Olewniczak $lang = $this->getLang($field); 227fe5d6d1eSSzymon Olewniczak if ($lang != '') { 228fe5d6d1eSSzymon Olewniczak $field = $lang; 229fe5d6d1eSSzymon Olewniczak } 230fe5d6d1eSSzymon Olewniczak $this->add_error( 231fe5d6d1eSSzymon Olewniczak $this->getLang('validate_' . $error_code), 232fe5d6d1eSSzymon Olewniczak $field); 233fe5d6d1eSSzymon Olewniczak } 234fe5d6d1eSSzymon Olewniczak 235fe5d6d1eSSzymon Olewniczak $this->tpl->set_values($_POST); 236fe5d6d1eSSzymon Olewniczak 237fe5d6d1eSSzymon Olewniczak } catch(bez\meta\PermissionDeniedException $e) { 238fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 239fe5d6d1eSSzymon Olewniczak header('Location: ' . DOKU_URL . 'doku.php?id=' . $_GET['id'] . '&do=login'); 24017e5ba2eSSzymon Olewniczak// } catch (\PHPMailer\PHPMailer\Exception $e) { 24117e5ba2eSSzymon Olewniczak// msg($e->getMessage(), -1); 242fe5d6d1eSSzymon Olewniczak } catch(Exception $e) { 243fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 244fe5d6d1eSSzymon Olewniczak if ($conf['allowdebug']) { 245fe5d6d1eSSzymon Olewniczak dbg($e); 2469cb75709SSzymon Olewniczak } else { 2479cb75709SSzymon Olewniczak msg($e->getMessage(), -1); 248fe5d6d1eSSzymon Olewniczak } 2499cb75709SSzymon Olewniczak $this->prevent_rendering = true; 250fe5d6d1eSSzymon Olewniczak } 251fe5d6d1eSSzymon Olewniczak } 252fe5d6d1eSSzymon Olewniczak 253fe5d6d1eSSzymon Olewniczak public function tpl_act_render($event, $param) 254fe5d6d1eSSzymon Olewniczak { 255fe5d6d1eSSzymon Olewniczak global $conf; 256fe5d6d1eSSzymon Olewniczak 257fe5d6d1eSSzymon Olewniczak if ($this->action === '') { 258fe5d6d1eSSzymon Olewniczak return false; 259fe5d6d1eSSzymon Olewniczak } 260fe5d6d1eSSzymon Olewniczak $event->preventDefault(); 261fe5d6d1eSSzymon Olewniczak 2629cb75709SSzymon Olewniczak if ($this->prevent_rendering) return; 2639cb75709SSzymon Olewniczak 264fe5d6d1eSSzymon Olewniczak try { 265fe5d6d1eSSzymon Olewniczak 266fe5d6d1eSSzymon Olewniczak foreach ($this->errors as $error) { 267fe5d6d1eSSzymon Olewniczak echo '<div class="error">'; 268fe5d6d1eSSzymon Olewniczak if ($error['header'] === NULL) { 269fe5d6d1eSSzymon Olewniczak echo $error['value']; 270fe5d6d1eSSzymon Olewniczak } else { 271fe5d6d1eSSzymon Olewniczak echo '<strong>'.$error['header'].'</strong>: '.$error['value']; 272fe5d6d1eSSzymon Olewniczak } 273fe5d6d1eSSzymon Olewniczak echo '</div>'; 274fe5d6d1eSSzymon Olewniczak } 275fe5d6d1eSSzymon Olewniczak 276fe5d6d1eSSzymon Olewniczak foreach ($this->notifications as $note) { 277fe5d6d1eSSzymon Olewniczak echo '<div class="info">'; 278fe5d6d1eSSzymon Olewniczak if ($note['header'] === NULL) { 279fe5d6d1eSSzymon Olewniczak echo $note['value']; 280fe5d6d1eSSzymon Olewniczak } else { 281fe5d6d1eSSzymon Olewniczak echo $note['header'].': <strong>'.$note['value'].'</strong>'; 282fe5d6d1eSSzymon Olewniczak } 283fe5d6d1eSSzymon Olewniczak echo '</div>'; 284fe5d6d1eSSzymon Olewniczak } 285fe5d6d1eSSzymon Olewniczak 28614a1f0a4SSzymon Olewniczak $this->bez_tpl_include(str_replace('/', '', $this->get_action())); 287fe5d6d1eSSzymon Olewniczak 288fe5d6d1eSSzymon Olewniczak } catch(bez\meta\PermissionDeniedException $e) { 289fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 290fe5d6d1eSSzymon Olewniczak } catch(Exception $e) { 291fe5d6d1eSSzymon Olewniczak /*exception*/ 292fe5d6d1eSSzymon Olewniczak dbglog('plugin_bez', $e); 293fe5d6d1eSSzymon Olewniczak if ($conf['allowdebug']) { 294fe5d6d1eSSzymon Olewniczak dbg($e); 295fe5d6d1eSSzymon Olewniczak } 296fe5d6d1eSSzymon Olewniczak } 297fe5d6d1eSSzymon Olewniczak } 29892a18be1SSzymon Olewniczak 29992a18be1SSzymon Olewniczak public function add_notifications_source(Doku_Event $event) 30092a18be1SSzymon Olewniczak { 30116bc480cSSzymon Olewniczak $event->data[] = 'bez:problems_without_tasks'; 30292a18be1SSzymon Olewniczak $event->data[] = 'bez:problems_coming'; 30392a18be1SSzymon Olewniczak $event->data[] = 'bez:problems_outdated'; 30492a18be1SSzymon Olewniczak $event->data[] = 'bez:tasks_coming'; 30592a18be1SSzymon Olewniczak $event->data[] = 'bez:tasks_outdated'; 30692a18be1SSzymon Olewniczak } 30792a18be1SSzymon Olewniczak 30892a18be1SSzymon Olewniczak public function add_notification_cache_dependencies(Doku_Event $event) 30992a18be1SSzymon Olewniczak { 31092a18be1SSzymon Olewniczak if (!preg_grep('/^bez:.*/', $event->data['plugins'])) return; 31192a18be1SSzymon Olewniczak 31292a18be1SSzymon Olewniczak /** @var \helper_plugin_bez_db $db_helper */ 31392a18be1SSzymon Olewniczak $db_helper = plugin_load('helper', 'bez_db'); 31492a18be1SSzymon Olewniczak $event->data['dependencies'][] = $db_helper->getDB()->getAdapter()->getDbFile(); 31592a18be1SSzymon Olewniczak } 31692a18be1SSzymon Olewniczak 31792a18be1SSzymon Olewniczak public function add_notifications(Doku_Event $event) 31892a18be1SSzymon Olewniczak { 31992a18be1SSzymon Olewniczak if (!preg_grep('/^bez:.*/', $event->data['plugins'])) return; 32092a18be1SSzymon Olewniczak 32192a18be1SSzymon Olewniczak $user = $event->data['user']; 32216cfdeccSSzymon Olewniczak $this->createObjects(true); 32392a18be1SSzymon Olewniczak 32416bc480cSSzymon Olewniczak if (in_array('bez:problems_without_tasks', $event->data['plugins'])) { 32516bc480cSSzymon Olewniczak $threads = $this->get_model()->factory('thread')->get_all(array( 32616bc480cSSzymon Olewniczak 'type' => 'issue', 32716bc480cSSzymon Olewniczak 'task_count' => '0', 3280e2c326cSSzymon Olewniczak 'state' => 'opened', 32916bc480cSSzymon Olewniczak 'coordinator' => $user 33016bc480cSSzymon Olewniczak )); 3314053e06aSSzymon Olewniczak $now = new DateTime('now', new DateTimeZone('Europe/Warsaw')); 3324053e06aSSzymon Olewniczak $tomorrow = $now->add(new DateInterval('P1D')); 3334053e06aSSzymon Olewniczak 33416bc480cSSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 33516bc480cSSzymon Olewniczak foreach ($threads as $thread) { 3364053e06aSSzymon Olewniczak $givenDate = new DateTime($thread->last_activity_date); 3374053e06aSSzymon Olewniczak 3384053e06aSSzymon Olewniczak if ($givenDate >= $tomorrow) { // prevent cold start problem 33916bc480cSSzymon Olewniczak $link = '<a href="' . $this->url('thread', 'id', $thread->id) . '">'; 34016bc480cSSzymon Olewniczak $link .= '#' . $thread->id; 34116bc480cSSzymon Olewniczak $link .= '</a>'; 34216bc480cSSzymon Olewniczak 34316bc480cSSzymon Olewniczak $full = sprintf($this->getLang('notification problems_without_tasks'), $link); 34416bc480cSSzymon Olewniczak $event->data['notifications'][] = [ 34516bc480cSSzymon Olewniczak 'plugin' => 'bez:problems_without_tasks', 3464053e06aSSzymon Olewniczak 'id' => 'thread:' . $thread->id . ':without_tasks:' . $thread->last_activity_date, 34716bc480cSSzymon Olewniczak 'full' => $full, 34816bc480cSSzymon Olewniczak 'brief' => $link, 34916bc480cSSzymon Olewniczak 'timestamp' => strtotime($thread->last_activity_date) 35016bc480cSSzymon Olewniczak ]; 35116bc480cSSzymon Olewniczak } 35216bc480cSSzymon Olewniczak } 3534053e06aSSzymon Olewniczak } 35416bc480cSSzymon Olewniczak 35592a18be1SSzymon Olewniczak if (in_array('bez:problems_coming', $event->data['plugins'])) { 35692a18be1SSzymon Olewniczak $threads = $this->get_model()->factory('thread')->get_all(array( 35792a18be1SSzymon Olewniczak 'type' => 'issue', 35892a18be1SSzymon Olewniczak 'priority' => '1', 35992a18be1SSzymon Olewniczak 'coordinator' => $user 36092a18be1SSzymon Olewniczak )); 36192a18be1SSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 36292a18be1SSzymon Olewniczak foreach ($threads as $thread) { 36392a18be1SSzymon Olewniczak $link = '<a href="' . $this->url('thread', 'id', $thread->id) . '">'; 36492a18be1SSzymon Olewniczak $link .= '#' . $thread->id; 36592a18be1SSzymon Olewniczak $link .= '</a>'; 36692a18be1SSzymon Olewniczak 36792a18be1SSzymon Olewniczak $full = sprintf($this->getLang('notification problems_coming'), $link); 36892a18be1SSzymon Olewniczak $event->data['notifications'][] = [ 36992a18be1SSzymon Olewniczak 'plugin' => 'bez:problems_coming', 3704053e06aSSzymon Olewniczak 'id' => 'thread:' . $thread->id . ':coming:' . $thread->last_activity_date, 37192a18be1SSzymon Olewniczak 'full' => $full, 37292a18be1SSzymon Olewniczak 'brief' => $link, 37392a18be1SSzymon Olewniczak 'timestamp' => strtotime($thread->last_activity_date) 37492a18be1SSzymon Olewniczak ]; 37592a18be1SSzymon Olewniczak } 37692a18be1SSzymon Olewniczak } 37792a18be1SSzymon Olewniczak 37892a18be1SSzymon Olewniczak if (in_array('bez:problems_outdated', $event->data['plugins'])) { 37992a18be1SSzymon Olewniczak $threads = $this->get_model()->threadFactory->get_all(array( 38092a18be1SSzymon Olewniczak 'type' => 'issue', 38192a18be1SSzymon Olewniczak 'priority' => '2', 38292a18be1SSzymon Olewniczak 'coordinator' => $user 38392a18be1SSzymon Olewniczak )); 38492a18be1SSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 38592a18be1SSzymon Olewniczak foreach ($threads as $thread) { 38692a18be1SSzymon Olewniczak $link = '<a href="' . $this->url('thread', 'id', $thread->id) . '">'; 38792a18be1SSzymon Olewniczak $link .= '#' . $thread->id; 38892a18be1SSzymon Olewniczak $link .= '</a>'; 38992a18be1SSzymon Olewniczak 39092a18be1SSzymon Olewniczak $full = sprintf($this->getLang('notification problems_outdated'), $link); 39192a18be1SSzymon Olewniczak $event->data['notifications'][] = [ 39216cfdeccSSzymon Olewniczak 'plugin' => 'bez:problems_outdated', 3934053e06aSSzymon Olewniczak 'id' => 'thread:' . $thread->id . ':outdated:' . $thread->last_activity_date, 39492a18be1SSzymon Olewniczak 'full' => $full, 39592a18be1SSzymon Olewniczak 'brief' => $link, 39692a18be1SSzymon Olewniczak 'timestamp' => strtotime($thread->last_activity_date) 39792a18be1SSzymon Olewniczak ]; 39892a18be1SSzymon Olewniczak } 39992a18be1SSzymon Olewniczak } 40092a18be1SSzymon Olewniczak 40192a18be1SSzymon Olewniczak if (in_array('bez:tasks_coming', $event->data['plugins'])) { 40292a18be1SSzymon Olewniczak $tasks = $this->get_model()->factory('task')->get_all(array( 40392a18be1SSzymon Olewniczak 'priority' => '1', 40492a18be1SSzymon Olewniczak 'assignee' => $user 40592a18be1SSzymon Olewniczak )); 40692a18be1SSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 40792a18be1SSzymon Olewniczak foreach ($tasks as $task) { 40892a18be1SSzymon Olewniczak $link = '<a href="' . $this->url('task', 'tid', $task->id) . '">'; 40992a18be1SSzymon Olewniczak $link .= '#z' . $task->id; 41092a18be1SSzymon Olewniczak $link .= '</a>'; 41192a18be1SSzymon Olewniczak 41292a18be1SSzymon Olewniczak $full = sprintf($this->getLang('notification tasks_coming'), $link); 41392a18be1SSzymon Olewniczak $event->data['notifications'][] = [ 41416cfdeccSSzymon Olewniczak 'plugin' => 'bez:tasks_coming', 4154053e06aSSzymon Olewniczak 'id' => 'task:' . $task->id. ':coming:' . $task->plan_date, 41692a18be1SSzymon Olewniczak 'full' => $full, 41792a18be1SSzymon Olewniczak 'brief' => $link, 41892a18be1SSzymon Olewniczak 'timestamp' => strtotime($task->plan_date) 41992a18be1SSzymon Olewniczak ]; 42092a18be1SSzymon Olewniczak } 42192a18be1SSzymon Olewniczak } 42292a18be1SSzymon Olewniczak 42392a18be1SSzymon Olewniczak if (in_array('bez:tasks_outdated', $event->data['plugins'])) { 42492a18be1SSzymon Olewniczak $tasks = $this->get_model()->factory('task')->get_all(array( 42592a18be1SSzymon Olewniczak 'priority' => '2', 42692a18be1SSzymon Olewniczak 'assignee' => $user 42792a18be1SSzymon Olewniczak )); 42892a18be1SSzymon Olewniczak /** @var bez\mdl\Thread $thread */ 42992a18be1SSzymon Olewniczak foreach ($tasks as $task) { 43092a18be1SSzymon Olewniczak $link = '<a href="' . $this->url('task', 'tid', $task->id) . '">'; 43192a18be1SSzymon Olewniczak $link .= '#z' . $task->id; 43292a18be1SSzymon Olewniczak $link .= '</a>'; 43392a18be1SSzymon Olewniczak 43492a18be1SSzymon Olewniczak $full = sprintf($this->getLang('notification tasks_outdated'), $link); 43592a18be1SSzymon Olewniczak $event->data['notifications'][] = [ 43616cfdeccSSzymon Olewniczak 'plugin' => 'bez:tasks_outdated', 4374053e06aSSzymon Olewniczak 'id' => 'task:' . $task->id . ':outdated:' . $task->plan_date, 43892a18be1SSzymon Olewniczak 'full' => $full, 43992a18be1SSzymon Olewniczak 'brief' => $link, 44092a18be1SSzymon Olewniczak 'timestamp' => strtotime($task->plan_date) 44192a18be1SSzymon Olewniczak ]; 44292a18be1SSzymon Olewniczak } 44392a18be1SSzymon Olewniczak } 44492a18be1SSzymon Olewniczak } 445fe5d6d1eSSzymon Olewniczak} 446