xref: /plugin/bez/ctl/task.php (revision 8c9d5139dfb491d4d76393f5da7d48e831694539)
1<?php
2
3if (!isset($nparams['tid'])) {
4    header('Location: ?id=bez:tasks');
5}
6$template['tid'] = $nparams['tid'];
7$template['action'] = isset($nparams['action']) ? $nparams['action'] : '-default';
8$template['state'] = isset($nparams['state']) ? $nparams['state'] : '-1';
9try {
10    $task = $this->model->tasks->get_one($template['tid']);
11    $template['task'] = $task;
12
13
14    if ($task->cause !== NULL && $task->cause !== '') {
15        $template['commcause'] = $this->model->commcauses->get_one($task->cause);
16    }
17
18    if ($task->issue !== NULL && $task->issue !== '') {
19        $template['issue'] = $this->model->issues->get_one($task->issue);
20    }
21
22
23    if ($template['action'] === 'task_change_state') {
24        if (count($_POST) > 0) {
25            $task->set_state(array(
26                        'state' => $nparams['state'],
27                        'reason' => $_POST['reason'])
28                    );
29            $this->model->tasks->save($task);
30
31            if (isset($template['issue'])) {
32                $template['issue']->update_last_activity();
33                $this->model->issues->save($template['issue']);
34            }
35
36            $redirect = true;
37        } else {
38            $value = $task->get_assoc();
39        }
40    } elseif ($template['action'] === 'task_reopen') {
41        $task->set_state(array('state' => '0'));
42        $this->model->tasks->save($task);
43
44        if (isset($template['issue'])) {
45            $template['issue']->update_last_activity();
46            $this->model->issues->save($template['issue']);
47        }
48
49        $notify_users = array();
50        if ($task->reporter !== $this->model->user_nick) {
51            //prevent duplicates
52            $notify_users[$task->reporter] = $task->reporter;
53        }
54        if ($task->executor !== $this->model->user_nick) {
55            //prevent duplicates
56            $notify_users[$task->executor] = $task->executor;
57        }
58
59        $task->mail_notify_add($template['issue'], $notify_users,
60                                array('action' => $bezlang['mail_task_reopened']));
61
62        $redirect = true;
63    } elseif($template['action'] === 'task_edit') {
64        $template['auth_level'] = $task->get_level();
65
66        $template['users'] = $this->model->users->get_all();
67        $template['tasktypes'] = $this->model->tasktypes->get_all();
68
69        if (isset($template['issue'])) {
70            $template['causes'] = $this->model->commcauses->get_all(array(
71                'issue' => $template['issue']->id,
72                'type' => array('!=', '0'),
73            ));
74        }
75
76        if (count($_POST) > 0) {
77            //checkboxes
78            if (!isset($_POST['all_day_event'])) {
79                $_POST['all_day_event'] = '0';
80            }
81            $task->set_data($_POST);
82            //for reason
83            $task->set_state($_POST);
84
85            $this->model->tasks->save($task);
86                //~ $bezcache = new Bezcache();
87                //~ $bezcache->task_toupdate($task->id);
88
89            header("Location: ?id=bez:task:tid:".$task->id);
90        } else {
91            $value = $task->get_assoc();
92        }
93    }
94
95    if ($redirect) {
96        header("Location: ?id=bez:task:tid:".$template['tid']);
97    }
98
99} catch (DBException $e) {
100    echo nl2br($e);
101}
102
103