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