1c9044e56Sghi<?php 2e8827d73SSzymon Olewniczak/** @var action_plugin_bez $this */ 3c9044e56Sghi 4*53df74e7SSzymon Olewniczakuse \dokuwiki\plugin\bez; 5*53df74e7SSzymon Olewniczak 6*53df74e7SSzymon Olewniczakif ($this->model->acl->get_level() < BEZ_AUTH_USER) { 7*53df74e7SSzymon Olewniczak throw new bez\meta\PermissionDeniedException(); 8*53df74e7SSzymon Olewniczak} 9*53df74e7SSzymon Olewniczak 10e8827d73SSzymon Olewniczakdefine('BEZ_THREAD_FILTERS_COOKIE_NAME', 'bez_task_filters'); 11c9044e56Sghi 12e8827d73SSzymon Olewniczakif (count($_POST) > 0) { 134fb0d798Sghi $raw_filters = $_POST; 14e8827d73SSzymon Olewniczak} elseif (empty($this->params) && isset($_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME])) { 15e8827d73SSzymon Olewniczak $raw_filters = $_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME]; 16e8827d73SSzymon Olewniczak} 17c9044e56Sghi 184fb0d798Sghiif (isset($raw_filters)) { 194fb0d798Sghi //save filters 20e8827d73SSzymon Olewniczak foreach ($raw_filters as $k => $v) { 21e8827d73SSzymon Olewniczak setcookie(BEZ_THREAD_FILTERS_COOKIE_NAME."[$k]", $v); 22d00bbb0cSghi } 23168ecf58Sghi 24e8827d73SSzymon Olewniczak $filters = array_filter($raw_filters, function($v) { 25e8827d73SSzymon Olewniczak return $v !== '-all' && $v !== ''; 26e8827d73SSzymon Olewniczak }); 27168ecf58Sghi 28e8827d73SSzymon Olewniczak if (empty($filters)) { 29e8827d73SSzymon Olewniczak $filters['year'] = '-all'; 30e8827d73SSzymon Olewniczak } 31e8827d73SSzymon Olewniczak 32e8827d73SSzymon Olewniczak header('Location: '.$this->url('tasks', $filters)); 33e8827d73SSzymon Olewniczak} else { 34e8827d73SSzymon Olewniczak $filters = $this->params; 35e8827d73SSzymon Olewniczak} 36e8827d73SSzymon Olewniczak 37e8827d73SSzymon Olewniczak$this->tpl->set_values($filters); 38e8827d73SSzymon Olewniczak 39*53df74e7SSzymon Olewniczak$years = $this->model->taskFactory->get_years_scope(); 40e8827d73SSzymon Olewniczak 41e8827d73SSzymon Olewniczak//some filters are just copied 42e8827d73SSzymon Olewniczak$db_filters = array_filter($filters, function ($k) { 43*53df74e7SSzymon Olewniczak return in_array($k, array('thread_id', 'state', 'type', 'assignee', 'original_poster', 'task_program_id')); 44e8827d73SSzymon Olewniczak}, ARRAY_FILTER_USE_KEY); 45e8827d73SSzymon Olewniczak 46e8827d73SSzymon Olewniczak//-none filters become empty filters 47e8827d73SSzymon Olewniczak$db_filters = array_map(function($v) { 48e8827d73SSzymon Olewniczak if ($v === '-none') { 49e8827d73SSzymon Olewniczak return ''; 50e8827d73SSzymon Olewniczak } 51e8827d73SSzymon Olewniczak return $v; 52e8827d73SSzymon Olewniczak}, $db_filters); 53e8827d73SSzymon Olewniczak 54e8827d73SSzymon Olewniczakif (isset($filters['year']) && $filters['year'] !== '-all') { 55e8827d73SSzymon Olewniczak $year = $filters['year']; 56e8827d73SSzymon Olewniczak 57*53df74e7SSzymon Olewniczak $start_month = '01'; 58*53df74e7SSzymon Olewniczak $end_month = '12'; 59*53df74e7SSzymon Olewniczak if (isset($filters['month']) && $filters['month'] !== '-all') { 60*53df74e7SSzymon Olewniczak $start_month = $end_month = sprintf("%02d", (int)$filters['month']); 61*53df74e7SSzymon Olewniczak } 62e8827d73SSzymon Olewniczak 63*53df74e7SSzymon Olewniczak $start_day = "$year-$start_month-01"; 64*53df74e7SSzymon Olewniczak $end_day = "$year-$end_month-31"; 65*53df74e7SSzymon Olewniczak 66*53df74e7SSzymon Olewniczak $db_filters[$filters['date_type']] = array('BETWEEN', array($start_day, $end_day), array('date')); 67*53df74e7SSzymon Olewniczak} 68*53df74e7SSzymon Olewniczak 69*53df74e7SSzymon Olewniczakif (isset($filters['original_poster']) && 70*53df74e7SSzymon Olewniczak substr($filters['original_poster'], 0, 1) === '@') { 71*53df74e7SSzymon Olewniczak $group = substr($filters['original_poster'], 1); 72*53df74e7SSzymon Olewniczak $db_filters['original_poster'] = array('OR', $this->model->userFactory->users_of_group($group)); 73e8827d73SSzymon Olewniczak} 74e8827d73SSzymon Olewniczak 75e8827d73SSzymon Olewniczakif (isset($filters['assignee']) && 76e8827d73SSzymon Olewniczak substr($filters['assignee'], 0, 1) === '@') { 77e8827d73SSzymon Olewniczak $group = substr($filters['assignee'], 1); 78e8827d73SSzymon Olewniczak $db_filters['assignee'] = array('OR', $this->model->userFactory->users_of_group($group)); 79e8827d73SSzymon Olewniczak} 80e8827d73SSzymon Olewniczak 81e8827d73SSzymon Olewniczakif (isset($filters['content'])) { 82e8827d73SSzymon Olewniczak $content = preg_replace('/\s/', '%', $filters['content']); 83e8827d73SSzymon Olewniczak $db_filters['content'] = array('LIKE', "%$content%"); 84e8827d73SSzymon Olewniczak} 85e8827d73SSzymon Olewniczak 86*53df74e7SSzymon Olewniczak$orderby = 'id'; 87e8827d73SSzymon Olewniczak 88e8827d73SSzymon Olewniczak$tasks = $this->model->taskFactory->get_all($db_filters, $orderby); 89e8827d73SSzymon Olewniczak 90e8827d73SSzymon Olewniczak$this->tpl->set('task_programs', $this->model->task_programFactory->get_all()); 91e8827d73SSzymon Olewniczak$this->tpl->set('tasks', $tasks); 92ff14b107SSzymon Olewniczak$this->tpl->set('months', array(1 => 'jan', 93ff14b107SSzymon Olewniczak 2 => 'feb', 94ff14b107SSzymon Olewniczak 3 => 'mar', 95ff14b107SSzymon Olewniczak 4 => 'apr', 96ff14b107SSzymon Olewniczak 5 => 'may', 97ff14b107SSzymon Olewniczak 6 => 'june', 98ff14b107SSzymon Olewniczak 7 => 'july', 99ff14b107SSzymon Olewniczak 8 => 'aug', 100ff14b107SSzymon Olewniczak 9 => 'sept', 101ff14b107SSzymon Olewniczak 10 => 'oct', 102ff14b107SSzymon Olewniczak 11 => 'nov', 103ff14b107SSzymon Olewniczak 12 => 'dec')); 104e8827d73SSzymon Olewniczak$this->tpl->set('years', $years); 105