1e8827d73SSzymon Olewniczak<?php 2e8827d73SSzymon Olewniczak 3e8827d73SSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 4e8827d73SSzymon Olewniczak 5f7519ef1SSzymon Olewniczakuse dokuwiki\plugin\bez\meta\ConsistencyViolationException; 6f7519ef1SSzymon Olewniczak 7e8827d73SSzymon Olewniczakclass Task_commentFactory extends Factory { 8e8827d73SSzymon Olewniczak 9e8827d73SSzymon Olewniczak public function get_from_task(Task $task) { 10038c5d4aSSzymon Olewniczak return $this->get_all(array('task_id' => $task->id), '', array('task' => $task)); 11e8827d73SSzymon Olewniczak } 12e8827d73SSzymon Olewniczak 13e8827d73SSzymon Olewniczak /** 14e8827d73SSzymon Olewniczak * @param Thread_comment $thread_comment 15e8827d73SSzymon Olewniczak * @param $data 16e8827d73SSzymon Olewniczak * @throws \Exception 17e8827d73SSzymon Olewniczak */ 18e8827d73SSzymon Olewniczak public function initial_save(Entity $task_comment, $data) { 19f7519ef1SSzymon Olewniczak 20*d5a60e5aSSzymon Olewniczak if ($task_comment->task->thread_id != '' && $task_comment->task->type != 'preventive' && $task_comment->task->thread->state == 'closed') { 21f7519ef1SSzymon Olewniczak throw new ConsistencyViolationException('cannot add comments to closed threads'); 22f7519ef1SSzymon Olewniczak } 23f7519ef1SSzymon Olewniczak 24e8827d73SSzymon Olewniczak try { 25e8827d73SSzymon Olewniczak $this->beginTransaction(); 26e8827d73SSzymon Olewniczak 27e8827d73SSzymon Olewniczak //if empty content and task_do, do not save the comment 28e8827d73SSzymon Olewniczak if ($data['fn'] == 'comment_add' || $data['content'] != '') { 2953df74e7SSzymon Olewniczak parent::initial_save($task_comment, $data); 3014a1f0a4SSzymon Olewniczak $notify = 'comment_added'; 31e8827d73SSzymon Olewniczak $task_comment->task->set_participant_flags($task_comment->author, array('subscribent', 'commentator')); 32e8827d73SSzymon Olewniczak } 33e8827d73SSzymon Olewniczak 34e8827d73SSzymon Olewniczak if ($data['fn'] == 'task_do') { 35e8827d73SSzymon Olewniczak $task_comment->task->set_state('done'); 362467512fSSzymon Olewniczak if ($task_comment->id) { 372467512fSSzymon Olewniczak $this->model->sqlite->query("UPDATE {$this->get_table_name()} SET closing=1 WHERE id=?", 382467512fSSzymon Olewniczak $task_comment->id); 392467512fSSzymon Olewniczak } 4014a1f0a4SSzymon Olewniczak $notify = 'mail_task_done'; 41e8827d73SSzymon Olewniczak } elseif ($data['fn'] == 'task_reopen') { 42e8827d73SSzymon Olewniczak $task_comment->task->set_state('opened'); 432467512fSSzymon Olewniczak //clean closing flags 442467512fSSzymon Olewniczak $this->model->sqlite->query("UPDATE {$this->get_table_name()} SET closing=0 WHERE task_id=?", 452467512fSSzymon Olewniczak $task_comment->task_id); 4614a1f0a4SSzymon Olewniczak $notify = 'mail_task_repened'; 47e8827d73SSzymon Olewniczak } 4814a1f0a4SSzymon Olewniczak //update prioirty 4914a1f0a4SSzymon Olewniczak $task_comment->task->update_virutal(); 50e8827d73SSzymon Olewniczak 5153df74e7SSzymon Olewniczak if ($task_comment->task->thread_id != '') { 52e8827d73SSzymon Olewniczak $task_comment->task->thread->update_last_activity(); 5353df74e7SSzymon Olewniczak } 54e8827d73SSzymon Olewniczak $this->commitTransaction(); 5514a1f0a4SSzymon Olewniczak 5614a1f0a4SSzymon Olewniczak if ($notify == 'comment_added') { 5714a1f0a4SSzymon Olewniczak $task_comment->mail_notify_add(); 5814a1f0a4SSzymon Olewniczak } elseif (isset($notify)) { 5914a1f0a4SSzymon Olewniczak $task_comment->task->mail_notify_change_state($notify); 6014a1f0a4SSzymon Olewniczak if ($task_comment->task->thread_id != '') { 6114a1f0a4SSzymon Olewniczak $task_comment->task->thread->mail_notify_task_state_changed($task_comment->task); 6214a1f0a4SSzymon Olewniczak } 6314a1f0a4SSzymon Olewniczak } 64e8827d73SSzymon Olewniczak } catch(Exception $exception) { 65e8827d73SSzymon Olewniczak $this->rollbackTransaction(); 66e8827d73SSzymon Olewniczak } 67e8827d73SSzymon Olewniczak 6814a1f0a4SSzymon Olewniczak 69e8827d73SSzymon Olewniczak } 70e8827d73SSzymon Olewniczak 71e8827d73SSzymon Olewniczak public function update_save(Entity $task_comment, $data) { 72f7519ef1SSzymon Olewniczak 73*d5a60e5aSSzymon Olewniczak if ($task_comment->task->thread_id != '' && $task_comment->task->type != 'preventive' && $task_comment->task->thread->state == 'closed') { 74f7519ef1SSzymon Olewniczak throw new ConsistencyViolationException('cannot add comments to closed threads'); 75f7519ef1SSzymon Olewniczak } 76f7519ef1SSzymon Olewniczak 77e8827d73SSzymon Olewniczak try { 78e8827d73SSzymon Olewniczak $this->beginTransaction(); 7953df74e7SSzymon Olewniczak parent::update_save($task_comment, $data); 80e8827d73SSzymon Olewniczak 81e8827d73SSzymon Olewniczak $task_comment->task->update_last_activity(); 82e8827d73SSzymon Olewniczak 83e8827d73SSzymon Olewniczak $this->commitTransaction(); 84e8827d73SSzymon Olewniczak } catch(Exception $exception) { 85e8827d73SSzymon Olewniczak $this->rollbackTransaction(); 86e8827d73SSzymon Olewniczak } 87e8827d73SSzymon Olewniczak } 88e8827d73SSzymon Olewniczak 89e8827d73SSzymon Olewniczak public function delete(Entity $obj) { 90f7519ef1SSzymon Olewniczak 91*d5a60e5aSSzymon Olewniczak if ($obj->task->thread_id != '' && $obj->task->type != 'preventive' && $obj->task->thread->state == 'closed') { 92f7519ef1SSzymon Olewniczak throw new ConsistencyViolationException('delete comments of closed threads'); 93f7519ef1SSzymon Olewniczak } 94f7519ef1SSzymon Olewniczak 95e8827d73SSzymon Olewniczak try { 96e8827d73SSzymon Olewniczak $this->beginTransaction(); 97e8827d73SSzymon Olewniczak 98e8827d73SSzymon Olewniczak parent::delete($obj); 99e8827d73SSzymon Olewniczak $obj->task->update_last_activity(); 100f7519ef1SSzymon Olewniczak //remove commentator flag 101f7519ef1SSzymon Olewniczak if ($this->count(array('task_id' => $obj->task_id, 'author' => $obj->author)) == 0) { 102f7519ef1SSzymon Olewniczak $obj->task->remove_participant_flags($obj->author, array('commentator')); 103f7519ef1SSzymon Olewniczak } 104e8827d73SSzymon Olewniczak 105e8827d73SSzymon Olewniczak $this->commitTransaction(); 106e8827d73SSzymon Olewniczak } catch(Exception $exception) { 107e8827d73SSzymon Olewniczak $this->rollbackTransaction(); 108e8827d73SSzymon Olewniczak } 109e8827d73SSzymon Olewniczak } 110e8827d73SSzymon Olewniczak}