1de02284cSSzymon Olewniczak<?php 2de02284cSSzymon Olewniczak/** @var action_plugin_bez $this */ 3de02284cSSzymon Olewniczak 453df74e7SSzymon Olewniczakuse \dokuwiki\plugin\bez; 553df74e7SSzymon Olewniczak 6a0cd8c78SSzymon Olewniczakif ($this->model->get_level() < BEZ_AUTH_USER) { 753df74e7SSzymon Olewniczak throw new bez\meta\PermissionDeniedException(); 853df74e7SSzymon Olewniczak} 953df74e7SSzymon Olewniczak 10038c5d4aSSzymon Olewniczakdefine('BEZ_THREAD_FILTERS_COOKIE_NAME', 'plugin__bez_thread_filters_' . $this->tpl->action()); 11de02284cSSzymon Olewniczak 12de02284cSSzymon Olewniczakif (count($_POST) > 0) { 13de02284cSSzymon Olewniczak $raw_filters = $_POST; 14de02284cSSzymon Olewniczak} elseif (empty($this->params) && isset($_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME])) { 15038c5d4aSSzymon Olewniczak $raw_filters = json_decode($_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME], true); 16de02284cSSzymon Olewniczak} 17de02284cSSzymon Olewniczak 18de02284cSSzymon Olewniczakif (isset($raw_filters)) { 19de02284cSSzymon Olewniczak //save filters 20038c5d4aSSzymon Olewniczak setcookie(BEZ_THREAD_FILTERS_COOKIE_NAME, json_encode($raw_filters)); 21de02284cSSzymon Olewniczak 22de02284cSSzymon Olewniczak $filters = array_filter($raw_filters, function($v) { 23de02284cSSzymon Olewniczak return $v !== '-all' && $v !== ''; 24de02284cSSzymon Olewniczak }); 25de02284cSSzymon Olewniczak 26de02284cSSzymon Olewniczak if (empty($filters)) { 27de02284cSSzymon Olewniczak $filters['year'] = '-all'; 28de02284cSSzymon Olewniczak } 29de02284cSSzymon Olewniczak 3053df74e7SSzymon Olewniczak header('Location: '.$this->url($this->get_action(), $filters)); 31de02284cSSzymon Olewniczak} else { 32de02284cSSzymon Olewniczak $filters = $this->params; 33de02284cSSzymon Olewniczak} 34de02284cSSzymon Olewniczak 35de02284cSSzymon Olewniczak$this->tpl->set_values($filters); 36de02284cSSzymon Olewniczak 37de02284cSSzymon Olewniczak$years = $this->model->threadFactory->get_years_scope(); 38de02284cSSzymon Olewniczak 39de02284cSSzymon Olewniczak//some filters are just copied 40de02284cSSzymon Olewniczak$db_filters = array_filter($filters, function ($k) { 4153df74e7SSzymon Olewniczak return in_array($k, array('original_poster', 'state', 'label_id', 'coordinator')); 42de02284cSSzymon Olewniczak}, ARRAY_FILTER_USE_KEY); 43de02284cSSzymon Olewniczak 44de02284cSSzymon Olewniczak//-none filters become empty filters 45de02284cSSzymon Olewniczak$db_filters = array_map(function($v) { 46de02284cSSzymon Olewniczak if ($v === '-none') { 47fe5d6d1eSSzymon Olewniczak return ''; 48de02284cSSzymon Olewniczak } 49de02284cSSzymon Olewniczak return $v; 50de02284cSSzymon Olewniczak}, $db_filters); 51de02284cSSzymon Olewniczak 52a5de966aSSzymon Olewniczak//don't show rejecetd by default 53a5de966aSSzymon Olewniczakif (!isset($db_filters['state'])) { 54a5de966aSSzymon Olewniczak $db_filters['state'] = array('!=', 'rejected'); 55a5de966aSSzymon Olewniczak} 56a5de966aSSzymon Olewniczak 57de02284cSSzymon Olewniczakif (isset($filters['year']) && $filters['year'] !== '-all') { 58de02284cSSzymon Olewniczak $year = $filters['year']; 59de02284cSSzymon Olewniczak 60de02284cSSzymon Olewniczak $start_day = "$year-01-01"; 61de02284cSSzymon Olewniczak $end_day = "$year-12-31"; 62de02284cSSzymon Olewniczak 63de02284cSSzymon Olewniczak $db_filters['create_date'] = array('BETWEEN', array($start_day, $end_day), array('date')); 64de02284cSSzymon Olewniczak} 65de02284cSSzymon Olewniczak 66de02284cSSzymon Olewniczakif (isset($filters['coordinator']) && 67de02284cSSzymon Olewniczak substr($filters['coordinator'], 0, 1) === '@') { 68de02284cSSzymon Olewniczak $group = substr($filters['coordinator'], 1); 69de02284cSSzymon Olewniczak $db_filters['coordinator'] = array('OR', $this->model->userFactory->users_of_group($group)); 70de02284cSSzymon Olewniczak} 71de02284cSSzymon Olewniczak 7253df74e7SSzymon Olewniczakif (isset($filters['original_poster']) && 7353df74e7SSzymon Olewniczak substr($filters['original_poster'], 0, 1) === '@') { 7453df74e7SSzymon Olewniczak $group = substr($filters['original_poster'], 1); 7553df74e7SSzymon Olewniczak $db_filters['original_poster'] = array('OR', $this->model->userFactory->users_of_group($group)); 7653df74e7SSzymon Olewniczak} 7753df74e7SSzymon Olewniczak 78de02284cSSzymon Olewniczakif (isset($filters['title'])) { 79de02284cSSzymon Olewniczak $title = preg_replace('/\s/', '%', $filters['title']); 80de02284cSSzymon Olewniczak $db_filters['title'] = array('LIKE', "%$title%"); 81de02284cSSzymon Olewniczak} 82a7028d8fSSzymon Olewniczak 83*7980d9bdSSzymon Olewniczakif (isset($filters['content'])) { 84*7980d9bdSSzymon Olewniczak $content = preg_replace('/\s/', '%', $filters['content']); 85*7980d9bdSSzymon Olewniczak $db_filters['content'] = array('LIKE', "%$content%"); 86*7980d9bdSSzymon Olewniczak} 87*7980d9bdSSzymon Olewniczak 8853d762f7SSzymon Olewniczakif (isset($filters['has_corrective'])) { 8953d762f7SSzymon Olewniczak $db_filters['corrective_count'] = array('>', 0); 9053d762f7SSzymon Olewniczak} 9153d762f7SSzymon Olewniczak 9253d762f7SSzymon Olewniczakif (isset($filters['has_preventive'])) { 9353d762f7SSzymon Olewniczak $db_filters['preventive_count'] = array('>', 0); 94a7028d8fSSzymon Olewniczak} 95a7028d8fSSzymon Olewniczak 96de02284cSSzymon Olewniczak 97038c5d4aSSzymon Olewniczak$orderby = array('sort', 'priority DESC', 'create_date DESC'); 98fe5d6d1eSSzymon Olewniczakif (isset($filters['sort_open']) && $filters['sort_open'] == 'on') { 99038c5d4aSSzymon Olewniczak $orderby = 'id DESC'; 100fe5d6d1eSSzymon Olewniczak} 101de02284cSSzymon Olewniczak 10253df74e7SSzymon Olewniczakif ($this->get_action() == 'threads') { 10353df74e7SSzymon Olewniczak $db_filters['type'] = 'issue'; 10453df74e7SSzymon Olewniczak} else { 10553df74e7SSzymon Olewniczak $db_filters['type'] = 'project'; 10653df74e7SSzymon Olewniczak} 10753df74e7SSzymon Olewniczak 108fe5d6d1eSSzymon Olewniczak$threads = $this->model->threadFactory->get_all($db_filters, $orderby); 109fe5d6d1eSSzymon Olewniczak 110fe5d6d1eSSzymon Olewniczak$this->tpl->set('labels', $this->model->labelFactory->get_all()); 111de02284cSSzymon Olewniczak$this->tpl->set('threads', $threads); 112de02284cSSzymon Olewniczak$this->tpl->set('years', $years); 113