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