xref: /plugin/bez/ctl/tasks.php (revision 53df74e7ac5ae4234aac1fa716a33878a039026f)
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