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