xref: /plugin/bez/ctl/thread.php (revision fe5d6d1ebd253c129098b67fff8cf438a54d8650)
1<?php
2/** @var action_plugin_bez $this */
3
4use \dokuwiki\plugin\bez;
5
6if ($this->get_param('id') == '') {
7    header('Location: ?id=bez:threads');
8}
9
10//try {
11    //$issue_id = (int)$nparams['id'];
12
13    //new way
14    $thread = $this->model->threadFactory->get_one($this->get_param('id'));
15
16
17//    $template['tid'] = isset($nparams['tid']) ? $nparams['tid'] : '-1';
18//    $template['kid'] = isset($nparams['kid']) ? $nparams['kid'] : '-1';
19//    $template['state'] = isset($nparams['state']) ? $nparams['state'] : '-1';
20//    $template['action'] = isset($nparams['action']) ? $nparams['action'] : '-default';
21
22    $template['issue'] = $issue;
23    $template['commcauses'] = $this->model->commcauses->get_all(
24        array('issue' => $issue_id)
25    );
26
27    $template['commcause'] = $this->model->commcauses->
28                            create_dummy_object(array('issue' => $issue->id));
29
30    $template['corrections'] = $this->model->tasks->get_all(array(
31        'issue' => $issue_id,
32        'action' => 0,
33    ));
34
35    $template['commcauses_tasks'] = array();
36    foreach ($this->model->commcauses->get_causes_ids($issue_id) as $kid) {
37        $template['commcauses_tasks'][$kid] = $this->model->tasks->get_all(array(
38            'cause' => $kid,
39        ));
40    }
41
42
43    $template['users'] = $this->model->users->get_all();
44
45    //remove userts that are subscribents already
46    $template['users_to_invite'] = array_diff_key($template['users'], $issue->get_subscribents());
47
48
49	$action = '';
50	if (isset($nparams['action'])) {
51		$action = $nparams['action'];
52		$redirect = false;
53		$anchor = '';
54
55		if ($action === 'commcause_add') {
56
57            $defaults = array('issue' => (string)$issue_id);
58            if ($issue->user_is_coordinator()) {
59                $defaults['type'] = $_POST['type'];
60            }
61
62			$commcause = $this->model->commcauses->create_object($defaults);
63
64            $data = array('content' => $_POST['content']);
65			$commcause->set_data($data);
66
67			$id = $this->model->commcauses->save($commcause);
68
69			$issue->add_participant($INFO['client']);
70			$issue->add_subscribent($INFO['client']);
71
72			$issue->update_last_activity();
73			$this->model->issues->save($issue);
74
75            $commcause->mail_notify_add($issue);
76
77			$anchor = 'k'.$id;
78			$redirect = true;
79		} elseif ($action === 'subscribe') {
80			$issue->add_subscribent($INFO['client']);
81			$this->model->issues->save($issue);
82
83			$redirect = true;
84		} elseif ($action === 'unsubscribe') {
85			$issue->remove_subscribent($INFO['client']);
86			$this->model->issues->save($issue);
87
88            $this->add_notification($bezlang['unsubscribed_com']);
89
90            $redirect = true;
91
92        } elseif ($action === 'invite') {
93            $client = $_POST['client'];
94
95			$state = $issue->add_subscribent($client);
96            //user wasn't subscribent
97            if ($state === true) {
98                $this->model->issues->save($issue);
99                $issue->mail_notify_invite($client);
100
101                $this->add_notification($this->model->users->get_user_email($client), $bezlang['invitation_has_been_send']);
102
103                $redirect = true;
104            }
105
106		} elseif ($action === 'commcause_delete') {
107			$commcause = $this->model->commcauses->get_one($template['kid']);
108
109			$this->model->commcauses->delete($commcause);
110
111			$issue->update_last_activity();
112			$this->model->issues->save($issue);
113
114			$redirect = true;
115		} elseif ($action === 'commcause_edit') {
116			if (count($_POST) === 0) {
117				$commcause = $this->model->commcauses->get_one($template['kid']);
118				$template['kid'] = $commcause->id;
119				$value = $commcause->get_assoc();
120			} else {
121				$commcause = $this->model->commcauses->get_one($template['kid']);
122
123                $data = array('content' => $_POST['content']);
124                if ($issue->user_is_coordinator()) {
125                    $data['type'] = $_POST['type'];
126                }
127
128				$commcause->set_data($data);
129				$this->model->commcauses->save($commcause);
130
131				$issue->update_last_activity();
132				$this->model->issues->save($issue);
133
134				$anchor = 'k'.$commcause->id;
135				$redirect = true;
136			}
137
138        } elseif ($action === 'commcause_edit_metadata') {
139            if (count($_POST) === 0) {
140				$commcause = $this->model->commcauses->get_one($template['kid']);
141				$template['kid'] = $commcause->id;
142				$value = $commcause->get_assoc(array('datetime', 'reporter'));
143                $unix = strtotime($value['datetime']);
144                $value['date'] = date('Y-m-d', $unix);
145                $value['time'] = date('H:i:s', $unix);
146			} else {
147				$commcause = $this->model->commcauses->get_one($template['kid']);
148                $_POST['datetime'] = $_POST['date']. ' '.$_POST['time'];
149				$commcause->set_meta($_POST);
150				$this->model->commcauses->save($commcause);
151
152				$anchor = 'k'.$commcause->id;
153				$redirect = true;
154			}
155		} elseif ($action === 'issue_close') {
156			$value['opinion'] = $issue->opinion;
157		} elseif ($action == 'issue_close_confirm') {
158			$issue->set_state($_POST);
159			$this->model->issues->save($issue);
160
161            $issue->mail_notify_change_state();
162
163			$redirect = true;
164		} elseif ($action === 'reopen') {
165			$issue->set_state(array('state' => '0'));
166			$this->model->issues->save($issue);
167
168            $issue->mail_notify_change_state();
169
170            $redirect = true;
171        } elseif ($action === 'issue_edit_metadata') {
172            if (count($_POST) > 0) {
173
174                $_POST['last_activity'] = $_POST['last_activity_date']. ' '.$_POST['last_activity_time'];
175
176                $issue->set_meta($_POST);
177                $this->model->issues->save($issue);
178
179                $redirect = true;
180            } else {
181                $value = $issue->get_assoc();
182                $value['date'] = date('Y-m-d', (int)$value['date']);
183                $value['last_mod'] = date('Y-m-d', (int)$value['last_mod']);
184
185                $unix = strtotime($value['last_activity']);
186                $value['last_activity_date'] = date('Y-m-d', $unix);
187                $value['last_activity_time'] = date('H:i:s', $unix);
188            }
189 		} elseif (strpos($action, 'task') === 0) {
190            $template['task'] = $this->model->tasks->
191                    create_dummy_object(array('issue' => $issue->id));
192			$template['users'] = $this->model->users->get_all();
193			$template['tasktypes'] = $this->model->tasktypes->get_all();
194
195			if (count($_POST) > 0) {
196				if (!isset($_POST['all_day_event'])) {
197					$_POST['all_day_event'] = '0';
198				}
199			}
200
201			if ($action === 'task_reopen') {
202				$task = $this->model->tasks->get_one($nparams['tid']);
203				$task->set_state(array('state' => '0'));
204				$this->model->tasks->save($task);
205
206				$issue->update_last_activity();
207				$this->model->issues->save($issue);
208
209                $task->mail_notify_subscribents($template['issue'],
210                        array('action' => $bezlang['mail_task_reopened']));
211
212				$redirect = true;
213				$anchor = 'z'.$task->id;
214
215			} elseif ($action === 'task_edit') {
216				$template['tid'] = $nparams['tid'];
217
218				$template['causes'] = $this->model->commcauses->get_all(array(
219					'issue' => $issue_id,
220					'type' => array('!=', '0'),
221				));
222
223				$task = $this->model->tasks->get_one($template['tid']);
224				$value = $task->get_assoc();
225
226            } elseif ($action === 'task_change_state') {
227                $template['tid'] = $nparams['tid'];
228				$task = $this->model->tasks->get_one($template['tid']);
229				$value = array('reason' => $task->reason);
230			} elseif($action === 'task_edit_metadata') {
231
232                $task = $this->model->tasks->get_one($template['tid']);
233
234                if (count($_POST) > 0) {
235                    $task->set_meta($_POST);
236                    $this->model->tasks->save($task);
237
238                    header("Location: ?id=bez:issue:id:$issue_id#z".$task->id);
239                } else {
240                    $value = $task->get_assoc();
241                    $value['date'] = date('Y-m-d', (int)$value['date']);
242                    $value['close_date'] = date('Y-m-d', (int)$value['close_date']);
243                }
244            }
245
246			if (count($_POST) > 0) {
247				//ends with
248				if (substr($action, -strlen('add')) === 'add') {
249					$defaults = array('issue' => (string)$issue_id);
250					if ($template['kid'] !== '-1') {
251						$defaults['cause'] = $template['kid'];
252					}
253					$task = $this->model->tasks->create_object($defaults);
254
255					$task->set_data($_POST);
256					$id = $this->model->tasks->save($task);
257
258					$issue->add_participant($task->executor);
259					$issue->add_subscribent($task->executor);
260
261					$issue->update_last_activity();
262					$this->model->issues->save($issue);
263
264                    $task->mail_notify_add($issue);
265
266					$anchor = 'z'.$id;
267					$redirect = true;
268				} elseif ($action === 'task_change_state') {
269					$task = $this->model->tasks->get_one($template['tid']);
270
271                    if (isset($_POST['no_evaluation'])) {
272                        $_POST['reason'] = '';
273                    }
274
275					$task->set_state(array(
276								'state' => $nparams['state'],
277								'reason' => $_POST['reason'])
278							);
279					$this->model->tasks->save($task);
280
281					$issue->update_last_activity();
282					$this->model->issues->save($issue);
283
284                    $task->mail_notify_subscribents($template['issue'],
285                        array('action' => $bezlang['mail_task_change_state']));
286
287					$anchor = 'z'.$task->id;
288					$redirect = true;
289				} elseif ($action === 'task_edit') {
290					$task = $this->model->tasks->get_one($template['tid']);
291					$task->set_data($_POST);
292					$this->model->tasks->save($task);
293
294					$issue->add_participant($task->executor);
295					$issue->add_subscribent($task->executor);
296
297					//don't upgrade last activity!!!
298					$anchor = 'z'.$task->id;
299					$redirect = true;
300				}
301			}
302		}
303
304		if ($redirect) {
305			if ($anchor !== '') {
306				$anchor = '#'.$anchor;
307			}
308			header("Location: ?id=bez:issue:id:$issue_id$anchor");
309		}
310	}
311
312
313//} catch (ValidationException $e) {
314//	$errors = $e->get_errors();
315//	$value = $_POST;
316//} catch (DBException $e) {
317//	echo nl2br($e);
318////	header("Location: ?id=bez:issue:id:$issue_id");
319//}
320
321
322