xref: /plugin/bez/ctl/tasks.php (revision ff14b1073c2dab2f863cab3b8baf8b1a01f7993a)
1c9044e56Sghi<?php
2c9044e56Sghi
3e8827d73SSzymon Olewniczak/** @var action_plugin_bez $this */
4c9044e56Sghi
5e8827d73SSzymon Olewniczakdefine('BEZ_THREAD_FILTERS_COOKIE_NAME', 'bez_task_filters');
6c9044e56Sghi
7e8827d73SSzymon Olewniczakif (count($_POST) > 0) {
84fb0d798Sghi    $raw_filters = $_POST;
9e8827d73SSzymon Olewniczak} elseif (empty($this->params) && isset($_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME])) {
10e8827d73SSzymon Olewniczak    $raw_filters = $_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME];
11e8827d73SSzymon Olewniczak}
12c9044e56Sghi
134fb0d798Sghiif (isset($raw_filters)) {
144fb0d798Sghi    //save filters
15e8827d73SSzymon Olewniczak    foreach ($raw_filters as $k => $v) {
16e8827d73SSzymon Olewniczak        setcookie(BEZ_THREAD_FILTERS_COOKIE_NAME."[$k]", $v);
17d00bbb0cSghi    }
18168ecf58Sghi
19e8827d73SSzymon Olewniczak    $filters = array_filter($raw_filters, function($v) {
20e8827d73SSzymon Olewniczak        return $v !== '-all' && $v !== '';
21e8827d73SSzymon Olewniczak    });
22168ecf58Sghi
23e8827d73SSzymon Olewniczak    if (empty($filters)) {
24e8827d73SSzymon Olewniczak        $filters['year'] = '-all';
25e8827d73SSzymon Olewniczak    }
26e8827d73SSzymon Olewniczak
27e8827d73SSzymon Olewniczak    header('Location: '.$this->url('tasks', $filters));
28e8827d73SSzymon Olewniczak} else {
29e8827d73SSzymon Olewniczak    $filters = $this->params;
30e8827d73SSzymon Olewniczak}
31e8827d73SSzymon Olewniczak
32e8827d73SSzymon Olewniczak$this->tpl->set_values($filters);
33e8827d73SSzymon Olewniczak
34e8827d73SSzymon Olewniczak$years = $this->model->threadFactory->get_years_scope();
35e8827d73SSzymon Olewniczak
36e8827d73SSzymon Olewniczak//some filters are just copied
37e8827d73SSzymon Olewniczak$db_filters = array_filter($filters, function ($k) {
38e8827d73SSzymon Olewniczak    return in_array($k, array('thread_id', 'state', 'type', 'task_program_id'));
39e8827d73SSzymon Olewniczak}, ARRAY_FILTER_USE_KEY);
40e8827d73SSzymon Olewniczak
41e8827d73SSzymon Olewniczak//-none filters become empty filters
42e8827d73SSzymon Olewniczak$db_filters = array_map(function($v) {
43e8827d73SSzymon Olewniczak    if ($v === '-none') {
44e8827d73SSzymon Olewniczak        return '';
45e8827d73SSzymon Olewniczak    }
46e8827d73SSzymon Olewniczak    return $v;
47e8827d73SSzymon Olewniczak}, $db_filters);
48e8827d73SSzymon Olewniczak
49e8827d73SSzymon Olewniczakif (isset($filters['year']) && $filters['year'] !== '-all') {
50e8827d73SSzymon Olewniczak    $year = $filters['year'];
51e8827d73SSzymon Olewniczak
52e8827d73SSzymon Olewniczak    $start_day = "$year-01-01";
53e8827d73SSzymon Olewniczak    $end_day = "$year-12-31";
54e8827d73SSzymon Olewniczak
55e8827d73SSzymon Olewniczak    $db_filters['create_date'] = array('BETWEEN', array($start_day, $end_day), array('date'));
56e8827d73SSzymon Olewniczak}
57e8827d73SSzymon Olewniczak
58e8827d73SSzymon Olewniczakif (isset($filters['assignee']) &&
59e8827d73SSzymon Olewniczak    substr($filters['assignee'], 0, 1) === '@') {
60e8827d73SSzymon Olewniczak    $group = substr($filters['assignee'], 1);
61e8827d73SSzymon Olewniczak    $db_filters['assignee'] = array('OR', $this->model->userFactory->users_of_group($group));
62e8827d73SSzymon Olewniczak}
63e8827d73SSzymon Olewniczak
64e8827d73SSzymon Olewniczakif (isset($filters['content'])) {
65e8827d73SSzymon Olewniczak    $content = preg_replace('/\s/', '%', $filters['content']);
66e8827d73SSzymon Olewniczak    $db_filters['content'] = array('LIKE', "%$content%");
67e8827d73SSzymon Olewniczak}
68e8827d73SSzymon Olewniczak
69e8827d73SSzymon Olewniczak$orderby = 'last_activity_date';
70e8827d73SSzymon Olewniczak
71e8827d73SSzymon Olewniczak$tasks = $this->model->taskFactory->get_all($db_filters, $orderby);
72e8827d73SSzymon Olewniczak
73e8827d73SSzymon Olewniczak$this->tpl->set('task_programs', $this->model->task_programFactory->get_all());
74e8827d73SSzymon Olewniczak$this->tpl->set('tasks', $tasks);
75*ff14b107SSzymon Olewniczak$this->tpl->set('months', array(1 => 'jan',
76*ff14b107SSzymon Olewniczak                                2 => 'feb',
77*ff14b107SSzymon Olewniczak                                3 => 'mar',
78*ff14b107SSzymon Olewniczak                                4 => 'apr',
79*ff14b107SSzymon Olewniczak                                5 => 'may',
80*ff14b107SSzymon Olewniczak                                6 => 'june',
81*ff14b107SSzymon Olewniczak                                7 => 'july',
82*ff14b107SSzymon Olewniczak                                8 => 'aug',
83*ff14b107SSzymon Olewniczak                                9 => 'sept',
84*ff14b107SSzymon Olewniczak                                10 => 'oct',
85*ff14b107SSzymon Olewniczak                                11 => 'nov',
86*ff14b107SSzymon Olewniczak                                12 => 'dec'));
87e8827d73SSzymon Olewniczak$this->tpl->set('years', $years);
88d00bbb0cSghi
89d00bbb0cSghi
90e8827d73SSzymon Olewniczak//include_once DOKU_PLUGIN."bez/models/tasks.php";
91e8827d73SSzymon Olewniczak//include_once DOKU_PLUGIN."bez/models/taskactions.php";
92e8827d73SSzymon Olewniczak//include_once DOKU_PLUGIN."bez/models/taskstates.php";
93e8827d73SSzymon Olewniczak//include_once DOKU_PLUGIN."bez/models/tasktypes.php";
94e8827d73SSzymon Olewniczak//include_once DOKU_PLUGIN."bez/models/users.php";
95e8827d73SSzymon Olewniczak//include_once DOKU_PLUGIN."bez/models/issues.php";
96e8827d73SSzymon Olewniczak//
97e8827d73SSzymon Olewniczak//if	(!$helper->user_viewer()) {
98e8827d73SSzymon Olewniczak//	throw new PermissionDeniedException();
99e8827d73SSzymon Olewniczak//}
100e8827d73SSzymon Olewniczak//
101e8827d73SSzymon Olewniczak//$tasko = new Tasks();
102e8827d73SSzymon Olewniczak//$taskao = new Taskactions();
103e8827d73SSzymon Olewniczak//$taskso = new Taskstates();
104e8827d73SSzymon Olewniczak//$tasktypeso = new Tasktypes();
105e8827d73SSzymon Olewniczak//$usro = new Users();
106e8827d73SSzymon Olewniczak//$isso = new Issues();
107e8827d73SSzymon Olewniczak//
108e8827d73SSzymon Olewniczak//if (count($_POST) > 0)
109e8827d73SSzymon Olewniczak//	$raw_filters = $_POST;
110e8827d73SSzymon Olewniczak//elseif (count($nparams) === 1 && isset($_COOKIE['bez_tasks_filters']))
111e8827d73SSzymon Olewniczak//	$raw_filters = $_COOKIE['bez_tasks_filters'];
112e8827d73SSzymon Olewniczak//
113e8827d73SSzymon Olewniczak//if (isset($raw_filters)) {
114e8827d73SSzymon Olewniczak//	$filters = $tasko->validate_filters($raw_filters);
115e8827d73SSzymon Olewniczak//	$query_uri = '';
116e8827d73SSzymon Olewniczak//	foreach ($filters as $k => $v)
117e8827d73SSzymon Olewniczak//		if ($v != '-all' && $v != '')
118e8827d73SSzymon Olewniczak//			$query_uri .= ':'.urlencode($k).':'.urlencode($v);
119e8827d73SSzymon Olewniczak//
120e8827d73SSzymon Olewniczak//	if ($query_uri == "")
121e8827d73SSzymon Olewniczak//		$query_uri = ":year:-all";
122e8827d73SSzymon Olewniczak//
123e8827d73SSzymon Olewniczak//	header('Location: ?id='.$this->id('tasks').$query_uri);
124e8827d73SSzymon Olewniczak//}
125e8827d73SSzymon Olewniczak//
126e8827d73SSzymon Olewniczak///*rekordy parzyste to nagłówki, nieparzyste to ich wartości.*/
127e8827d73SSzymon Olewniczak///*np. status:1:type:2:podmiot:PCA*/
128e8827d73SSzymon Olewniczak//$value = array('issue' => '-all', 'action' => '-all', 'taskstate' => '-all',
129e8827d73SSzymon Olewniczak//				'executor' => '-all', 'year' => '-all', 'tasktype' => '-all',
130e8827d73SSzymon Olewniczak//				'month' => '-all', 'task' => '', 'reason' => '', 'date_type' => 'plan');
131e8827d73SSzymon Olewniczak//for ($i = 0; $i < count($params); $i += 2)
132e8827d73SSzymon Olewniczak//	$value[urldecode($params[$i])] = urldecode($params[$i+1]);
133e8827d73SSzymon Olewniczak//
134e8827d73SSzymon Olewniczak////save filters
135e8827d73SSzymon Olewniczak//foreach ($value as $k => $v)
136e8827d73SSzymon Olewniczak//	setcookie("bez_tasks_filters[$k]", $v);
137e8827d73SSzymon Olewniczak//
138e8827d73SSzymon Olewniczak//$ical_link = '?id=bez:tasks_ical';
139e8827d73SSzymon Olewniczak//foreach ($value as $k => $v)
140e8827d73SSzymon Olewniczak//	if ($v != '-all' && $v != '')
141e8827d73SSzymon Olewniczak//		$ical_link .= ':'.urlencode($k).':'.urlencode($v);
142e8827d73SSzymon Olewniczak//
143e8827d73SSzymon Olewniczak//$template['ical_link'] = $ical_link;
144e8827d73SSzymon Olewniczak//
145e8827d73SSzymon Olewniczak//$template['uri'] = $uri;
146e8827d73SSzymon Olewniczak//
147e8827d73SSzymon Olewniczak//$template['issues'] = $isso->get_ids();
148e8827d73SSzymon Olewniczak//
149e8827d73SSzymon Olewniczak//$template['actions'] = $taskao->get();
150e8827d73SSzymon Olewniczak//
151e8827d73SSzymon Olewniczak//$template['states'] = $taskso->get();
152e8827d73SSzymon Olewniczak//
153e8827d73SSzymon Olewniczak//$template['executors'] = $usro->get();
154e8827d73SSzymon Olewniczak//$template['groups'] = $usro->groups();
155e8827d73SSzymon Olewniczak//
156e8827d73SSzymon Olewniczak//
157e8827d73SSzymon Olewniczak//$template['years'] = $tasko->get_years();
158e8827d73SSzymon Olewniczak//
159e8827d73SSzymon Olewniczak//$tasks = $tasko->get_filtered($value);
160e8827d73SSzymon Olewniczak//
161e8827d73SSzymon Olewniczak//
162e8827d73SSzymon Olewniczak//$template['tasks_stats']['total'] = count($tasks);
163e8827d73SSzymon Olewniczak//
164e8827d73SSzymon Olewniczak//$tcost = 0;
165e8827d73SSzymon Olewniczak//$thours = 0;
166e8827d73SSzymon Olewniczak//foreach ($tasks as &$task) {
167e8827d73SSzymon Olewniczak//	$tcost += (int)$task['cost'];
168e8827d73SSzymon Olewniczak//	if ($task['start_time'] != '') {
169e8827d73SSzymon Olewniczak//		$start_time = strtotime($task['start_time']);
170e8827d73SSzymon Olewniczak//		$finish_time = strtotime($task['finish_time']);
171e8827d73SSzymon Olewniczak//		$secs = $finish_time - $start_time;
172e8827d73SSzymon Olewniczak//		$hours = $secs / 3600;
173e8827d73SSzymon Olewniczak//		$hours_s = sprintf("%.1f", $hours);
174e8827d73SSzymon Olewniczak//		$task['hours'] = $hours_s;
175e8827d73SSzymon Olewniczak//		$thours += $hours;
176e8827d73SSzymon Olewniczak//	} else
177e8827d73SSzymon Olewniczak//		$task['hours'] = '';
178e8827d73SSzymon Olewniczak//}
179e8827d73SSzymon Olewniczak//$template['tasks'] = $tasks;
180e8827d73SSzymon Olewniczak//
181e8827d73SSzymon Olewniczak//$template['tasks_stats']['totalcost'] = $tcost;
182e8827d73SSzymon Olewniczak//$template['tasks_stats']['totalhours'] = sprintf("%.1f", $thours);
183e8827d73SSzymon Olewniczak//
184e8827d73SSzymon Olewniczak//$tasktypes = $tasktypeso->get();
185e8827d73SSzymon Olewniczak//$template['tasktypes'] = $tasktypes;
186e8827d73SSzymon Olewniczak//
187e8827d73SSzymon Olewniczak//
188e8827d73SSzymon Olewniczak//if ($nparams['taskstate'] == '0')
189e8827d73SSzymon Olewniczak//	$template['view'] = 'plan';
190e8827d73SSzymon Olewniczak//else
191e8827d73SSzymon Olewniczak//	$template['view'] = 'realization';
192e8827d73SSzymon Olewniczak//
193e8827d73SSzymon Olewniczak//$template['months'] = array(1 => 'jan',
194e8827d73SSzymon Olewniczak//							2 => 'feb',
195e8827d73SSzymon Olewniczak//							3 => 'mar',
196e8827d73SSzymon Olewniczak//							4 => 'apr',
197e8827d73SSzymon Olewniczak//							5 => 'may',
198e8827d73SSzymon Olewniczak//							6 => 'june',
199e8827d73SSzymon Olewniczak//							7 => 'july',
200e8827d73SSzymon Olewniczak//							8 => 'aug',
201e8827d73SSzymon Olewniczak//							9 => 'sept',
202e8827d73SSzymon Olewniczak//							10 => 'oct',
203e8827d73SSzymon Olewniczak//							11 => 'nov',
204e8827d73SSzymon Olewniczak//							12 => 'dec');
205