xref: /plugin/bez/ctl/tasks.php (revision 2dbae25dab55680c064d6d2dc2fa6301dc768b91)
1c9044e56Sghi<?php
2e8827d73SSzymon Olewniczak/** @var action_plugin_bez $this */
3c9044e56Sghi
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
10*2dbae25dSSzymon Olewniczak// Admin actions
11*2dbae25dSSzymon Olewniczakif ($this->model->get_level() >= BEZ_AUTH_ADMIN && isset($_POST['action']) && isset($_POST['id'])) {
12*2dbae25dSSzymon Olewniczak    if ($_POST['action'] == 'bulk_delete') {
13*2dbae25dSSzymon Olewniczak        foreach ($_POST['id'] as $id) {
14*2dbae25dSSzymon Olewniczak            $task = $this->model->taskFactory->get_one($id);
15*2dbae25dSSzymon Olewniczak            $this->model->taskFactory->delete($task);
16*2dbae25dSSzymon Olewniczak        }
17*2dbae25dSSzymon Olewniczak    } elseif ($_POST['action'] == 'bulk_move') {
18*2dbae25dSSzymon Olewniczak        foreach ($_POST['id'] as $id) {
19*2dbae25dSSzymon Olewniczak            $task = $this->model->taskFactory->get_one($id);
20*2dbae25dSSzymon Olewniczak            $this->model->taskFactory->update_save($task, ['task_program_id' => $_POST['task_program']]);
21*2dbae25dSSzymon Olewniczak        }
22*2dbae25dSSzymon Olewniczak    }
23*2dbae25dSSzymon Olewniczak}
24*2dbae25dSSzymon Olewniczak
25038c5d4aSSzymon Olewniczakdefine('BEZ_THREAD_FILTERS_COOKIE_NAME', 'plugin__bez_task_filters');
26c9044e56Sghi
27*2dbae25dSSzymon Olewniczakif (isset($_POST['action']) && $_POST['action'] == 'filter') {
28*2dbae25dSSzymon Olewniczak    unset($_POST['action']);
294fb0d798Sghi    $raw_filters = $_POST;
30e8827d73SSzymon Olewniczak} elseif (empty($this->params) && isset($_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME])) {
31038c5d4aSSzymon Olewniczak    $raw_filters = json_decode($_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME], true);;
32e8827d73SSzymon Olewniczak}
33c9044e56Sghi
344fb0d798Sghiif (isset($raw_filters)) {
354fb0d798Sghi    //save filters
36038c5d4aSSzymon Olewniczak    setcookie(BEZ_THREAD_FILTERS_COOKIE_NAME, json_encode($raw_filters));
37168ecf58Sghi
38e8827d73SSzymon Olewniczak    $filters = array_filter($raw_filters, function($v) {
39e8827d73SSzymon Olewniczak        return $v !== '-all' && $v !== '';
40e8827d73SSzymon Olewniczak    });
41168ecf58Sghi
42e8827d73SSzymon Olewniczak    if (empty($filters)) {
43e8827d73SSzymon Olewniczak        $filters['year'] = '-all';
44e8827d73SSzymon Olewniczak    }
45e8827d73SSzymon Olewniczak
46e8827d73SSzymon Olewniczak    header('Location: '.$this->url('tasks', $filters));
47e8827d73SSzymon Olewniczak} else {
48e8827d73SSzymon Olewniczak    $filters = $this->params;
49e8827d73SSzymon Olewniczak}
50e8827d73SSzymon Olewniczak
51e8827d73SSzymon Olewniczak$this->tpl->set_values($filters);
52e8827d73SSzymon Olewniczak
5353df74e7SSzymon Olewniczak$years = $this->model->taskFactory->get_years_scope();
54e8827d73SSzymon Olewniczak
55e8827d73SSzymon Olewniczak//some filters are just copied
56e8827d73SSzymon Olewniczak$db_filters = array_filter($filters, function ($k) {
5753df74e7SSzymon Olewniczak    return in_array($k, array('thread_id', 'state', 'type', 'assignee', 'original_poster', 'task_program_id'));
58e8827d73SSzymon Olewniczak}, ARRAY_FILTER_USE_KEY);
59e8827d73SSzymon Olewniczak
60e8827d73SSzymon Olewniczak//-none filters become empty filters
61e8827d73SSzymon Olewniczak$db_filters = array_map(function($v) {
62e8827d73SSzymon Olewniczak    if ($v === '-none') {
63e8827d73SSzymon Olewniczak        return '';
64e8827d73SSzymon Olewniczak    }
65e8827d73SSzymon Olewniczak    return $v;
66e8827d73SSzymon Olewniczak}, $db_filters);
67e8827d73SSzymon Olewniczak
68e8827d73SSzymon Olewniczakif (isset($filters['year']) && $filters['year'] !== '-all') {
69e8827d73SSzymon Olewniczak    $year = $filters['year'];
70e8827d73SSzymon Olewniczak
7153df74e7SSzymon Olewniczak    $start_month = '01';
7253df74e7SSzymon Olewniczak    $end_month = '12';
7353df74e7SSzymon Olewniczak    if (isset($filters['month']) && $filters['month'] !== '-all') {
7453df74e7SSzymon Olewniczak        $start_month = $end_month = sprintf("%02d", (int)$filters['month']);
7553df74e7SSzymon Olewniczak    }
76e8827d73SSzymon Olewniczak
7753df74e7SSzymon Olewniczak    $start_day = "$year-$start_month-01";
7853df74e7SSzymon Olewniczak    $end_day = "$year-$end_month-31";
7953df74e7SSzymon Olewniczak
8053df74e7SSzymon Olewniczak    $db_filters[$filters['date_type']] = array('BETWEEN', array($start_day, $end_day), array('date'));
8153df74e7SSzymon Olewniczak}
8253df74e7SSzymon Olewniczak
8353df74e7SSzymon Olewniczakif (isset($filters['original_poster']) &&
8453df74e7SSzymon Olewniczak    substr($filters['original_poster'], 0, 1) === '@') {
8553df74e7SSzymon Olewniczak    $group = substr($filters['original_poster'], 1);
8653df74e7SSzymon Olewniczak    $db_filters['original_poster'] = array('OR', $this->model->userFactory->users_of_group($group));
87e8827d73SSzymon Olewniczak}
88e8827d73SSzymon Olewniczak
89e8827d73SSzymon Olewniczakif (isset($filters['assignee']) &&
90e8827d73SSzymon Olewniczak    substr($filters['assignee'], 0, 1) === '@') {
91e8827d73SSzymon Olewniczak    $group = substr($filters['assignee'], 1);
92e8827d73SSzymon Olewniczak    $db_filters['assignee'] = array('OR', $this->model->userFactory->users_of_group($group));
93e8827d73SSzymon Olewniczak}
94e8827d73SSzymon Olewniczak
95e8827d73SSzymon Olewniczakif (isset($filters['content'])) {
96e8827d73SSzymon Olewniczak    $content = preg_replace('/\s/', '%', $filters['content']);
97e8827d73SSzymon Olewniczak    $db_filters['content'] = array('LIKE', "%$content%");
98e8827d73SSzymon Olewniczak}
99e8827d73SSzymon Olewniczak
100038c5d4aSSzymon Olewniczak$orderby = array('priority DESC', 'plan_date');
101e8827d73SSzymon Olewniczak
102e8827d73SSzymon Olewniczak$tasks = $this->model->taskFactory->get_all($db_filters, $orderby);
103e8827d73SSzymon Olewniczak
104*2dbae25dSSzymon Olewniczak$this->tpl->set('task_programs', $this->model->task_programFactory->get_all()->fetchAll());
105e8827d73SSzymon Olewniczak$this->tpl->set('tasks', $tasks);
106ff14b107SSzymon Olewniczak$this->tpl->set('months', array(1 => 'jan',
107ff14b107SSzymon Olewniczak                                2 => 'feb',
108ff14b107SSzymon Olewniczak                                3 => 'mar',
109ff14b107SSzymon Olewniczak                                4 => 'apr',
110ff14b107SSzymon Olewniczak                                5 => 'may',
111ff14b107SSzymon Olewniczak                                6 => 'june',
112ff14b107SSzymon Olewniczak                                7 => 'july',
113ff14b107SSzymon Olewniczak                                8 => 'aug',
114ff14b107SSzymon Olewniczak                                9 => 'sept',
115ff14b107SSzymon Olewniczak                                10 => 'oct',
116ff14b107SSzymon Olewniczak                                11 => 'nov',
117ff14b107SSzymon Olewniczak                                12 => 'dec'));
118e8827d73SSzymon Olewniczak$this->tpl->set('years', $years);
119