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