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