xref: /plugin/bez/ctl/threads.php (revision 7980d9bd461bff0802b002029e70f68dd03a2a60)
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