xref: /plugin/bez/ctl/threads.php (revision fe5d6d1ebd253c129098b67fff8cf438a54d8650)
1de02284cSSzymon Olewniczak<?php
2de02284cSSzymon Olewniczak/** @var action_plugin_bez $this */
3de02284cSSzymon Olewniczak
4de02284cSSzymon Olewniczakdefine('BEZ_THREAD_FILTERS_COOKIE_NAME', 'bez_thread_filters');
5de02284cSSzymon Olewniczak
6de02284cSSzymon Olewniczakif (count($_POST) > 0) {
7de02284cSSzymon Olewniczak	$raw_filters = $_POST;
8de02284cSSzymon Olewniczak} elseif (empty($this->params) && isset($_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME])) {
9de02284cSSzymon Olewniczak	$raw_filters = $_COOKIE[BEZ_THREAD_FILTERS_COOKIE_NAME];
10de02284cSSzymon Olewniczak}
11de02284cSSzymon Olewniczak
12de02284cSSzymon Olewniczakif (isset($raw_filters)) {
13de02284cSSzymon Olewniczak    //save filters
14de02284cSSzymon Olewniczak    foreach ($raw_filters as $k => $v) {
15de02284cSSzymon Olewniczak        setcookie(BEZ_THREAD_FILTERS_COOKIE_NAME."[$k]", $v);
16de02284cSSzymon Olewniczak    }
17de02284cSSzymon Olewniczak
18de02284cSSzymon Olewniczak    $filters = array_filter($raw_filters, function($v) {
19de02284cSSzymon Olewniczak       return $v !== '-all' && $v !== '';
20de02284cSSzymon Olewniczak    });
21de02284cSSzymon Olewniczak
22de02284cSSzymon Olewniczak    if (empty($filters)) {
23de02284cSSzymon Olewniczak        $filters['year'] = '-all';
24de02284cSSzymon Olewniczak    }
25de02284cSSzymon Olewniczak
26de02284cSSzymon Olewniczak	header('Location: '.$this->url('threads', $filters));
27de02284cSSzymon Olewniczak} else {
28de02284cSSzymon Olewniczak    $filters = $this->params;
29de02284cSSzymon Olewniczak}
30de02284cSSzymon Olewniczak
31de02284cSSzymon Olewniczak$this->tpl->set_values($filters);
32de02284cSSzymon Olewniczak
33de02284cSSzymon Olewniczak$years = $this->model->threadFactory->get_years_scope();
34de02284cSSzymon Olewniczak
35de02284cSSzymon Olewniczak//some filters are just copied
36de02284cSSzymon Olewniczak$db_filters = array_filter($filters, function ($k) {
37*fe5d6d1eSSzymon Olewniczak    return in_array($k, array('state', 'label_id', 'coordinator'));
38de02284cSSzymon Olewniczak}, ARRAY_FILTER_USE_KEY);
39de02284cSSzymon Olewniczak
40de02284cSSzymon Olewniczak//-none filters become empty filters
41de02284cSSzymon Olewniczak$db_filters = array_map(function($v) {
42de02284cSSzymon Olewniczak    if ($v === '-none') {
43*fe5d6d1eSSzymon Olewniczak        return '';
44de02284cSSzymon Olewniczak    }
45de02284cSSzymon Olewniczak    return $v;
46de02284cSSzymon Olewniczak}, $db_filters);
47de02284cSSzymon Olewniczak
48de02284cSSzymon Olewniczakif (isset($filters['year']) && $filters['year'] !== '-all') {
49de02284cSSzymon Olewniczak    $year = $filters['year'];
50de02284cSSzymon Olewniczak
51de02284cSSzymon Olewniczak    $start_day = "$year-01-01";
52de02284cSSzymon Olewniczak    $end_day = "$year-12-31";
53de02284cSSzymon Olewniczak
54de02284cSSzymon Olewniczak    $db_filters['create_date'] = array('BETWEEN', array($start_day, $end_day), array('date'));
55de02284cSSzymon Olewniczak}
56de02284cSSzymon Olewniczak
57de02284cSSzymon Olewniczakif (isset($filters['coordinator']) &&
58de02284cSSzymon Olewniczak        substr($filters['coordinator'], 0, 1) === '@') {
59de02284cSSzymon Olewniczak    $group = substr($filters['coordinator'], 1);
60de02284cSSzymon Olewniczak    $db_filters['coordinator'] = array('OR', $this->model->userFactory->users_of_group($group));
61de02284cSSzymon Olewniczak}
62de02284cSSzymon Olewniczak
63de02284cSSzymon Olewniczakif (isset($filters['title'])) {
64de02284cSSzymon Olewniczak    $title = preg_replace('/\s/', '%', $filters['title']);
65de02284cSSzymon Olewniczak    $db_filters['title'] = array('LIKE', "%$title%");
66de02284cSSzymon Olewniczak}
67de02284cSSzymon Olewniczak
68*fe5d6d1eSSzymon Olewniczak$orderby = 'last_activity_date';
69*fe5d6d1eSSzymon Olewniczakif (isset($filters['sort_open']) && $filters['sort_open'] == 'on') {
70*fe5d6d1eSSzymon Olewniczak    $orderby = 'id';
71*fe5d6d1eSSzymon Olewniczak}
72de02284cSSzymon Olewniczak
73*fe5d6d1eSSzymon Olewniczak$threads = $this->model->threadFactory->get_all($db_filters, $orderby);
74*fe5d6d1eSSzymon Olewniczak
75*fe5d6d1eSSzymon Olewniczak$this->tpl->set('labels', $this->model->labelFactory->get_all());
76de02284cSSzymon Olewniczak$this->tpl->set('threads', $threads);
77de02284cSSzymon Olewniczak$this->tpl->set('years', $years);
78