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 20f7519ef1SSzymon Olewniczak if ($task_comment->task->thread_id != '' && $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); 30*14a1f0a4SSzymon 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'); 36*14a1f0a4SSzymon Olewniczak $notify = 'mail_task_done'; 37e8827d73SSzymon Olewniczak } elseif ($data['fn'] == 'task_reopen') { 38e8827d73SSzymon Olewniczak $task_comment->task->set_state('opened'); 39*14a1f0a4SSzymon Olewniczak $notify = 'mail_task_repened'; 40e8827d73SSzymon Olewniczak } 41*14a1f0a4SSzymon Olewniczak //update prioirty 42*14a1f0a4SSzymon Olewniczak $task_comment->task->update_virutal(); 43e8827d73SSzymon Olewniczak 4453df74e7SSzymon Olewniczak if ($task_comment->task->thread_id != '') { 45e8827d73SSzymon Olewniczak $task_comment->task->thread->update_last_activity(); 4653df74e7SSzymon Olewniczak } 47e8827d73SSzymon Olewniczak $this->commitTransaction(); 48*14a1f0a4SSzymon Olewniczak 49*14a1f0a4SSzymon Olewniczak if ($notify == 'comment_added') { 50*14a1f0a4SSzymon Olewniczak $task_comment->mail_notify_add(); 51*14a1f0a4SSzymon Olewniczak } elseif (isset($notify)) { 52*14a1f0a4SSzymon Olewniczak $task_comment->task->mail_notify_change_state($notify); 53*14a1f0a4SSzymon Olewniczak if ($task_comment->task->thread_id != '') { 54*14a1f0a4SSzymon Olewniczak $task_comment->task->thread->mail_notify_task_state_changed($task_comment->task); 55*14a1f0a4SSzymon Olewniczak } 56*14a1f0a4SSzymon Olewniczak } 57e8827d73SSzymon Olewniczak } catch(Exception $exception) { 58e8827d73SSzymon Olewniczak $this->rollbackTransaction(); 59e8827d73SSzymon Olewniczak } 60e8827d73SSzymon Olewniczak 61*14a1f0a4SSzymon Olewniczak 62e8827d73SSzymon Olewniczak } 63e8827d73SSzymon Olewniczak 64e8827d73SSzymon Olewniczak public function update_save(Entity $task_comment, $data) { 65f7519ef1SSzymon Olewniczak 66f7519ef1SSzymon Olewniczak if ($task_comment->task->thread_id != '' && $task_comment->task->thread->state == 'closed') { 67f7519ef1SSzymon Olewniczak throw new ConsistencyViolationException('cannot add comments to closed threads'); 68f7519ef1SSzymon Olewniczak } 69f7519ef1SSzymon Olewniczak 70e8827d73SSzymon Olewniczak try { 71e8827d73SSzymon Olewniczak $this->beginTransaction(); 7253df74e7SSzymon Olewniczak parent::update_save($task_comment, $data); 73e8827d73SSzymon Olewniczak 74e8827d73SSzymon Olewniczak $task_comment->task->update_last_activity(); 75e8827d73SSzymon Olewniczak 76e8827d73SSzymon Olewniczak $this->commitTransaction(); 77e8827d73SSzymon Olewniczak } catch(Exception $exception) { 78e8827d73SSzymon Olewniczak $this->rollbackTransaction(); 79e8827d73SSzymon Olewniczak } 80e8827d73SSzymon Olewniczak } 81e8827d73SSzymon Olewniczak 82e8827d73SSzymon Olewniczak public function delete(Entity $obj) { 83f7519ef1SSzymon Olewniczak 84f7519ef1SSzymon Olewniczak if ($obj->task->thread_id != '' && $obj->task->thread->state == 'closed') { 85f7519ef1SSzymon Olewniczak throw new ConsistencyViolationException('delete comments of closed threads'); 86f7519ef1SSzymon Olewniczak } 87f7519ef1SSzymon Olewniczak 88e8827d73SSzymon Olewniczak try { 89e8827d73SSzymon Olewniczak $this->beginTransaction(); 90e8827d73SSzymon Olewniczak 91e8827d73SSzymon Olewniczak parent::delete($obj); 92e8827d73SSzymon Olewniczak $obj->task->update_last_activity(); 93f7519ef1SSzymon Olewniczak //remove commentator flag 94f7519ef1SSzymon Olewniczak if ($this->count(array('task_id' => $obj->task_id, 'author' => $obj->author)) == 0) { 95f7519ef1SSzymon Olewniczak $obj->task->remove_participant_flags($obj->author, array('commentator')); 96f7519ef1SSzymon Olewniczak } 97e8827d73SSzymon Olewniczak 98e8827d73SSzymon Olewniczak $this->commitTransaction(); 99e8827d73SSzymon Olewniczak } catch(Exception $exception) { 100e8827d73SSzymon Olewniczak $this->rollbackTransaction(); 101e8827d73SSzymon Olewniczak } 102e8827d73SSzymon Olewniczak } 103e8827d73SSzymon Olewniczak}