xref: /plugin/bez/action/default.php (revision 4053e06ae6f7b225d25dcdc53698bebe38775c7a)
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
180d01047f3SSzymon Olewniczak        if (empty($conf['baseurl'])) {
181bc2653b0SSzymon Olewniczak            msg($this->getLang('info set baseurl'));
182bc2653b0SSzymon Olewniczak        }
183dc7a218dSSzymon Olewniczak        if (empty($conf['basedir'])) {
184dc7a218dSSzymon Olewniczak            msg($this->getLang('info set basedir'));
185dc7a218dSSzymon Olewniczak        }
186fe5d6d1eSSzymon Olewniczak    }
187fe5d6d1eSSzymon Olewniczak
188fe5d6d1eSSzymon Olewniczak	/**
189fe5d6d1eSSzymon Olewniczak	 * handle ajax requests
190fe5d6d1eSSzymon Olewniczak	 */
191fe5d6d1eSSzymon Olewniczak	public function _ajax_call(Doku_Event $event, $param) {
192fe5d6d1eSSzymon Olewniczak		global $auth;
193fe5d6d1eSSzymon Olewniczak		if ($event->data !== 'plugin_bez') {
194fe5d6d1eSSzymon Olewniczak			return;
195fe5d6d1eSSzymon Olewniczak		}
196fe5d6d1eSSzymon Olewniczak		//no other ajax call handlers needed
197fe5d6d1eSSzymon Olewniczak		$event->stopPropagation();
198fe5d6d1eSSzymon Olewniczak		$event->preventDefault();
199fe5d6d1eSSzymon Olewniczak
200fe5d6d1eSSzymon Olewniczak	}
201fe5d6d1eSSzymon Olewniczak
202fe5d6d1eSSzymon Olewniczak	public function tpl_pagetools_display(Doku_Event $event, $param) {
203fe5d6d1eSSzymon Olewniczak		if ($this->action !== '') {
204fe5d6d1eSSzymon Olewniczak			$event->preventDefault();
205fe5d6d1eSSzymon Olewniczak        }
206fe5d6d1eSSzymon Olewniczak	}
207fe5d6d1eSSzymon Olewniczak
2089cb75709SSzymon Olewniczak	protected $prevent_rendering = false;
2099cb75709SSzymon Olewniczak
210fe5d6d1eSSzymon Olewniczak	public function action_act_preprocess(Doku_Event $event, $param)
211fe5d6d1eSSzymon Olewniczak	{
212fe5d6d1eSSzymon Olewniczak        global $conf;
213fe5d6d1eSSzymon Olewniczak
214fe5d6d1eSSzymon Olewniczak        if ($this->action === '') {
215fe5d6d1eSSzymon Olewniczak            return;
216fe5d6d1eSSzymon Olewniczak        }
217fe5d6d1eSSzymon Olewniczak
218fe5d6d1eSSzymon Olewniczak        $event->preventDefault();
219fe5d6d1eSSzymon Olewniczak		try {
220fe5d6d1eSSzymon Olewniczak            $this->flush_notifications();
221fe5d6d1eSSzymon Olewniczak
222fe5d6d1eSSzymon Olewniczak			$ctl = DOKU_PLUGIN."bez/ctl/".str_replace('/', '', $this->action).".php";
223fe5d6d1eSSzymon Olewniczak
224fe5d6d1eSSzymon Olewniczak			if (file_exists($ctl)) {
225fe5d6d1eSSzymon Olewniczak				include $ctl;
226fe5d6d1eSSzymon Olewniczak			}
227fe5d6d1eSSzymon Olewniczak        } catch(bez\meta\ValidationException $e) {
228fe5d6d1eSSzymon Olewniczak            foreach ($e->get_errors() as $field => $error_code) {
229fe5d6d1eSSzymon Olewniczak                $lang = $this->getLang($field);
230fe5d6d1eSSzymon Olewniczak                if ($lang != '') {
231fe5d6d1eSSzymon Olewniczak                    $field = $lang;
232fe5d6d1eSSzymon Olewniczak                }
233fe5d6d1eSSzymon Olewniczak                $this->add_error(
234fe5d6d1eSSzymon Olewniczak                    $this->getLang('validate_' . $error_code),
235fe5d6d1eSSzymon Olewniczak                    $field);
236fe5d6d1eSSzymon Olewniczak            }
237fe5d6d1eSSzymon Olewniczak
238fe5d6d1eSSzymon Olewniczak            $this->tpl->set_values($_POST);
239fe5d6d1eSSzymon Olewniczak
240fe5d6d1eSSzymon Olewniczak        } catch(bez\meta\PermissionDeniedException $e) {
241fe5d6d1eSSzymon Olewniczak            dbglog('plugin_bez', $e);
242fe5d6d1eSSzymon Olewniczak            header('Location: ' . DOKU_URL . 'doku.php?id=' . $_GET['id'] . '&do=login');
24317e5ba2eSSzymon Olewniczak//        } catch (\PHPMailer\PHPMailer\Exception $e) {
24417e5ba2eSSzymon Olewniczak//            msg($e->getMessage(), -1);
245fe5d6d1eSSzymon Olewniczak		} catch(Exception $e) {
246fe5d6d1eSSzymon Olewniczak            dbglog('plugin_bez', $e);
247fe5d6d1eSSzymon Olewniczak            if ($conf['allowdebug']) {
248fe5d6d1eSSzymon Olewniczak               dbg($e);
2499cb75709SSzymon Olewniczak            } else {
2509cb75709SSzymon Olewniczak                msg($e->getMessage(), -1);
251fe5d6d1eSSzymon Olewniczak            }
2529cb75709SSzymon Olewniczak            $this->prevent_rendering = true;
253fe5d6d1eSSzymon Olewniczak		}
254fe5d6d1eSSzymon Olewniczak	}
255fe5d6d1eSSzymon Olewniczak
256fe5d6d1eSSzymon Olewniczak	public function tpl_act_render($event, $param)
257fe5d6d1eSSzymon Olewniczak	{
258fe5d6d1eSSzymon Olewniczak        global $conf;
259fe5d6d1eSSzymon Olewniczak
260fe5d6d1eSSzymon Olewniczak        if ($this->action === '') {
261fe5d6d1eSSzymon Olewniczak            return false;
262fe5d6d1eSSzymon Olewniczak        }
263fe5d6d1eSSzymon Olewniczak        $event->preventDefault();
264fe5d6d1eSSzymon Olewniczak
2659cb75709SSzymon Olewniczak        if ($this->prevent_rendering) return;
2669cb75709SSzymon Olewniczak
267fe5d6d1eSSzymon Olewniczak		try {
268fe5d6d1eSSzymon Olewniczak
269fe5d6d1eSSzymon Olewniczak			foreach ($this->errors as $error) {
270fe5d6d1eSSzymon Olewniczak				echo '<div class="error">';
271fe5d6d1eSSzymon Olewniczak                if ($error['header'] === NULL) {
272fe5d6d1eSSzymon Olewniczak					echo $error['value'];
273fe5d6d1eSSzymon Olewniczak				} else {
274fe5d6d1eSSzymon Olewniczak					echo '<strong>'.$error['header'].'</strong>: '.$error['value'];
275fe5d6d1eSSzymon Olewniczak				}
276fe5d6d1eSSzymon Olewniczak				echo '</div>';
277fe5d6d1eSSzymon Olewniczak			}
278fe5d6d1eSSzymon Olewniczak
279fe5d6d1eSSzymon Olewniczak            foreach ($this->notifications as $note) {
280fe5d6d1eSSzymon Olewniczak                echo '<div class="info">';
281fe5d6d1eSSzymon Olewniczak				if ($note['header'] === NULL) {
282fe5d6d1eSSzymon Olewniczak					echo $note['value'];
283fe5d6d1eSSzymon Olewniczak				} else {
284fe5d6d1eSSzymon Olewniczak					echo $note['header'].': <strong>'.$note['value'].'</strong>';
285fe5d6d1eSSzymon Olewniczak				}
286fe5d6d1eSSzymon Olewniczak				echo '</div>';
287fe5d6d1eSSzymon Olewniczak            }
288fe5d6d1eSSzymon Olewniczak
28914a1f0a4SSzymon Olewniczak			$this->bez_tpl_include(str_replace('/', '', $this->get_action()));
290fe5d6d1eSSzymon Olewniczak
291fe5d6d1eSSzymon Olewniczak        } catch(bez\meta\PermissionDeniedException $e) {
292fe5d6d1eSSzymon Olewniczak            dbglog('plugin_bez', $e);
293fe5d6d1eSSzymon Olewniczak		} catch(Exception $e) {
294fe5d6d1eSSzymon Olewniczak			/*exception*/
295fe5d6d1eSSzymon Olewniczak            dbglog('plugin_bez', $e);
296fe5d6d1eSSzymon Olewniczak            if ($conf['allowdebug']) {
297fe5d6d1eSSzymon Olewniczak               dbg($e);
298fe5d6d1eSSzymon Olewniczak            }
299fe5d6d1eSSzymon Olewniczak		}
300fe5d6d1eSSzymon Olewniczak	}
30192a18be1SSzymon Olewniczak
30292a18be1SSzymon Olewniczak	public function add_notifications_source(Doku_Event $event)
30392a18be1SSzymon Olewniczak    {
30416bc480cSSzymon Olewniczak        $event->data[] = 'bez:problems_without_tasks';
30592a18be1SSzymon Olewniczak        $event->data[] = 'bez:problems_coming';
30692a18be1SSzymon Olewniczak        $event->data[] = 'bez:problems_outdated';
30792a18be1SSzymon Olewniczak        $event->data[] = 'bez:tasks_coming';
30892a18be1SSzymon Olewniczak        $event->data[] = 'bez:tasks_outdated';
30992a18be1SSzymon Olewniczak    }
31092a18be1SSzymon Olewniczak
31192a18be1SSzymon Olewniczak    public function add_notification_cache_dependencies(Doku_Event $event)
31292a18be1SSzymon Olewniczak    {
31392a18be1SSzymon Olewniczak        if (!preg_grep('/^bez:.*/', $event->data['plugins'])) return;
31492a18be1SSzymon Olewniczak
31592a18be1SSzymon Olewniczak        /** @var \helper_plugin_bez_db $db_helper */
31692a18be1SSzymon Olewniczak        $db_helper = plugin_load('helper', 'bez_db');
31792a18be1SSzymon Olewniczak        $event->data['dependencies'][] = $db_helper->getDB()->getAdapter()->getDbFile();
31892a18be1SSzymon Olewniczak    }
31992a18be1SSzymon Olewniczak
32092a18be1SSzymon Olewniczak    public function add_notifications(Doku_Event $event)
32192a18be1SSzymon Olewniczak    {
32292a18be1SSzymon Olewniczak        if (!preg_grep('/^bez:.*/', $event->data['plugins'])) return;
32392a18be1SSzymon Olewniczak
32492a18be1SSzymon Olewniczak        $user = $event->data['user'];
32516cfdeccSSzymon Olewniczak        $this->createObjects(true);
32692a18be1SSzymon Olewniczak
32716bc480cSSzymon Olewniczak        if (in_array('bez:problems_without_tasks', $event->data['plugins'])) {
32816bc480cSSzymon Olewniczak            $threads = $this->get_model()->factory('thread')->get_all(array(
32916bc480cSSzymon Olewniczak                                                                          'type' => 'issue',
33016bc480cSSzymon Olewniczak                                                                          'task_count' => '0',
3310e2c326cSSzymon Olewniczak                                                                          'state' => 'opened',
33216bc480cSSzymon Olewniczak                                                                          'coordinator' => $user
33316bc480cSSzymon Olewniczak                                                                      ));
334*4053e06aSSzymon Olewniczak            $now = new DateTime('now', new DateTimeZone('Europe/Warsaw'));
335*4053e06aSSzymon Olewniczak            $tomorrow = $now->add(new DateInterval('P1D'));
336*4053e06aSSzymon Olewniczak
33716bc480cSSzymon Olewniczak            /** @var bez\mdl\Thread $thread */
33816bc480cSSzymon Olewniczak            foreach ($threads as $thread) {
339*4053e06aSSzymon Olewniczak                $givenDate = new DateTime($thread->last_activity_date);
340*4053e06aSSzymon Olewniczak
341*4053e06aSSzymon Olewniczak                if ($givenDate >= $tomorrow) { // prevent cold start problem
34216bc480cSSzymon Olewniczak                    $link = '<a href="' . $this->url('thread', 'id', $thread->id) . '">';
34316bc480cSSzymon Olewniczak                    $link .= '#' . $thread->id;
34416bc480cSSzymon Olewniczak                    $link .= '</a>';
34516bc480cSSzymon Olewniczak
34616bc480cSSzymon Olewniczak                    $full = sprintf($this->getLang('notification problems_without_tasks'), $link);
34716bc480cSSzymon Olewniczak                    $event->data['notifications'][] = [
34816bc480cSSzymon Olewniczak                        'plugin' => 'bez:problems_without_tasks',
349*4053e06aSSzymon Olewniczak                        'id' => 'thread:' . $thread->id . ':without_tasks:' . $thread->last_activity_date,
35016bc480cSSzymon Olewniczak                        'full' => $full,
35116bc480cSSzymon Olewniczak                        'brief' => $link,
35216bc480cSSzymon Olewniczak                        'timestamp' => strtotime($thread->last_activity_date)
35316bc480cSSzymon Olewniczak                    ];
35416bc480cSSzymon Olewniczak                }
35516bc480cSSzymon Olewniczak            }
356*4053e06aSSzymon Olewniczak        }
35716bc480cSSzymon Olewniczak
35892a18be1SSzymon Olewniczak        if (in_array('bez:problems_coming', $event->data['plugins'])) {
35992a18be1SSzymon Olewniczak            $threads = $this->get_model()->factory('thread')->get_all(array(
36092a18be1SSzymon Olewniczak                'type' => 'issue',
36192a18be1SSzymon Olewniczak                'priority' => '1',
36292a18be1SSzymon Olewniczak                'coordinator' => $user
36392a18be1SSzymon Olewniczak            ));
36492a18be1SSzymon Olewniczak            /** @var bez\mdl\Thread $thread */
36592a18be1SSzymon Olewniczak            foreach ($threads as $thread) {
36692a18be1SSzymon Olewniczak                $link = '<a href="' . $this->url('thread', 'id', $thread->id) . '">';
36792a18be1SSzymon Olewniczak                $link .= '#' . $thread->id;
36892a18be1SSzymon Olewniczak                $link .= '</a>';
36992a18be1SSzymon Olewniczak
37092a18be1SSzymon Olewniczak                $full = sprintf($this->getLang('notification problems_coming'), $link);
37192a18be1SSzymon Olewniczak                $event->data['notifications'][] = [
37292a18be1SSzymon Olewniczak                    'plugin' => 'bez:problems_coming',
373*4053e06aSSzymon Olewniczak                    'id' => 'thread:' . $thread->id . ':coming:' . $thread->last_activity_date,
37492a18be1SSzymon Olewniczak                    'full' => $full,
37592a18be1SSzymon Olewniczak                    'brief' => $link,
37692a18be1SSzymon Olewniczak                    'timestamp' => strtotime($thread->last_activity_date)
37792a18be1SSzymon Olewniczak                ];
37892a18be1SSzymon Olewniczak            }
37992a18be1SSzymon Olewniczak        }
38092a18be1SSzymon Olewniczak
38192a18be1SSzymon Olewniczak        if (in_array('bez:problems_outdated', $event->data['plugins'])) {
38292a18be1SSzymon Olewniczak            $threads = $this->get_model()->threadFactory->get_all(array(
38392a18be1SSzymon Olewniczak                'type' => 'issue',
38492a18be1SSzymon Olewniczak                'priority' => '2',
38592a18be1SSzymon Olewniczak                'coordinator' => $user
38692a18be1SSzymon Olewniczak            ));
38792a18be1SSzymon Olewniczak            /** @var bez\mdl\Thread $thread */
38892a18be1SSzymon Olewniczak            foreach ($threads as $thread) {
38992a18be1SSzymon Olewniczak                $link = '<a href="' . $this->url('thread', 'id', $thread->id) . '">';
39092a18be1SSzymon Olewniczak                $link .= '#' . $thread->id;
39192a18be1SSzymon Olewniczak                $link .= '</a>';
39292a18be1SSzymon Olewniczak
39392a18be1SSzymon Olewniczak                $full = sprintf($this->getLang('notification problems_outdated'), $link);
39492a18be1SSzymon Olewniczak                $event->data['notifications'][] = [
39516cfdeccSSzymon Olewniczak                    'plugin' => 'bez:problems_outdated',
396*4053e06aSSzymon Olewniczak                    'id' => 'thread:' . $thread->id . ':outdated:' . $thread->last_activity_date,
39792a18be1SSzymon Olewniczak                    'full' => $full,
39892a18be1SSzymon Olewniczak                    'brief' => $link,
39992a18be1SSzymon Olewniczak                    'timestamp' => strtotime($thread->last_activity_date)
40092a18be1SSzymon Olewniczak                ];
40192a18be1SSzymon Olewniczak            }
40292a18be1SSzymon Olewniczak        }
40392a18be1SSzymon Olewniczak
40492a18be1SSzymon Olewniczak        if (in_array('bez:tasks_coming', $event->data['plugins'])) {
40592a18be1SSzymon Olewniczak            $tasks = $this->get_model()->factory('task')->get_all(array(
40692a18be1SSzymon Olewniczak                'priority' => '1',
40792a18be1SSzymon Olewniczak                'assignee' => $user
40892a18be1SSzymon Olewniczak            ));
40992a18be1SSzymon Olewniczak            /** @var bez\mdl\Thread $thread */
41092a18be1SSzymon Olewniczak            foreach ($tasks as $task) {
41192a18be1SSzymon Olewniczak                $link = '<a href="' . $this->url('task', 'tid', $task->id) . '">';
41292a18be1SSzymon Olewniczak                $link .= '#z' . $task->id;
41392a18be1SSzymon Olewniczak                $link .= '</a>';
41492a18be1SSzymon Olewniczak
41592a18be1SSzymon Olewniczak                $full = sprintf($this->getLang('notification tasks_coming'), $link);
41692a18be1SSzymon Olewniczak                $event->data['notifications'][] = [
41716cfdeccSSzymon Olewniczak                    'plugin' => 'bez:tasks_coming',
418*4053e06aSSzymon Olewniczak                    'id' => 'task:' . $task->id. ':coming:' . $task->plan_date,
41992a18be1SSzymon Olewniczak                    'full' => $full,
42092a18be1SSzymon Olewniczak                    'brief' => $link,
42192a18be1SSzymon Olewniczak                    'timestamp' => strtotime($task->plan_date)
42292a18be1SSzymon Olewniczak                ];
42392a18be1SSzymon Olewniczak            }
42492a18be1SSzymon Olewniczak        }
42592a18be1SSzymon Olewniczak
42692a18be1SSzymon Olewniczak        if (in_array('bez:tasks_outdated', $event->data['plugins'])) {
42792a18be1SSzymon Olewniczak            $tasks = $this->get_model()->factory('task')->get_all(array(
42892a18be1SSzymon Olewniczak                'priority' => '2',
42992a18be1SSzymon Olewniczak                'assignee' => $user
43092a18be1SSzymon Olewniczak            ));
43192a18be1SSzymon Olewniczak            /** @var bez\mdl\Thread $thread */
43292a18be1SSzymon Olewniczak            foreach ($tasks as $task) {
43392a18be1SSzymon Olewniczak                $link = '<a href="' . $this->url('task', 'tid', $task->id) . '">';
43492a18be1SSzymon Olewniczak                $link .= '#z' . $task->id;
43592a18be1SSzymon Olewniczak                $link .= '</a>';
43692a18be1SSzymon Olewniczak
43792a18be1SSzymon Olewniczak                $full = sprintf($this->getLang('notification tasks_outdated'), $link);
43892a18be1SSzymon Olewniczak                $event->data['notifications'][] = [
43916cfdeccSSzymon Olewniczak                    'plugin' => 'bez:tasks_outdated',
440*4053e06aSSzymon Olewniczak                    'id' => 'task:' . $task->id . ':outdated:' . $task->plan_date,
44192a18be1SSzymon Olewniczak                    'full' => $full,
44292a18be1SSzymon Olewniczak                    'brief' => $link,
44392a18be1SSzymon Olewniczak                    'timestamp' => strtotime($task->plan_date)
44492a18be1SSzymon Olewniczak                ];
44592a18be1SSzymon Olewniczak            }
44692a18be1SSzymon Olewniczak        }
44792a18be1SSzymon Olewniczak    }
448fe5d6d1eSSzymon Olewniczak}
449