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) { 10*038c5d4aSSzymon 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); 30e8827d73SSzymon Olewniczak $task_comment->task->set_participant_flags($task_comment->author, array('subscribent', 'commentator')); 31e8827d73SSzymon Olewniczak } 32e8827d73SSzymon Olewniczak 33e8827d73SSzymon Olewniczak if ($data['fn'] == 'task_do') { 34e8827d73SSzymon Olewniczak $task_comment->task->set_state('done'); 35e8827d73SSzymon Olewniczak } elseif ($data['fn'] == 'task_reopen') { 36e8827d73SSzymon Olewniczak $task_comment->task->set_state('opened'); 37e8827d73SSzymon Olewniczak } 38e8827d73SSzymon Olewniczak 3953df74e7SSzymon Olewniczak if ($task_comment->task->thread_id != '') { 40e8827d73SSzymon Olewniczak $task_comment->task->thread->update_last_activity(); 4153df74e7SSzymon Olewniczak } 42e8827d73SSzymon Olewniczak 43e8827d73SSzymon Olewniczak $this->commitTransaction(); 44e8827d73SSzymon Olewniczak } catch(Exception $exception) { 45e8827d73SSzymon Olewniczak $this->rollbackTransaction(); 46e8827d73SSzymon Olewniczak } 47e8827d73SSzymon Olewniczak 48e8827d73SSzymon Olewniczak $task_comment->mail_notify_add(); 49e8827d73SSzymon Olewniczak } 50e8827d73SSzymon Olewniczak 51e8827d73SSzymon Olewniczak public function update_save(Entity $task_comment, $data) { 52f7519ef1SSzymon Olewniczak 53f7519ef1SSzymon Olewniczak if ($task_comment->task->thread_id != '' && $task_comment->task->thread->state == 'closed') { 54f7519ef1SSzymon Olewniczak throw new ConsistencyViolationException('cannot add comments to closed threads'); 55f7519ef1SSzymon Olewniczak } 56f7519ef1SSzymon Olewniczak 57e8827d73SSzymon Olewniczak try { 58e8827d73SSzymon Olewniczak $this->beginTransaction(); 5953df74e7SSzymon Olewniczak parent::update_save($task_comment, $data); 60e8827d73SSzymon Olewniczak 61e8827d73SSzymon Olewniczak $task_comment->task->update_last_activity(); 62e8827d73SSzymon Olewniczak 63e8827d73SSzymon Olewniczak $this->commitTransaction(); 64e8827d73SSzymon Olewniczak } catch(Exception $exception) { 65e8827d73SSzymon Olewniczak $this->rollbackTransaction(); 66e8827d73SSzymon Olewniczak } 67e8827d73SSzymon Olewniczak } 68e8827d73SSzymon Olewniczak 69e8827d73SSzymon Olewniczak public function delete(Entity $obj) { 70f7519ef1SSzymon Olewniczak 71f7519ef1SSzymon Olewniczak if ($obj->task->thread_id != '' && $obj->task->thread->state == 'closed') { 72f7519ef1SSzymon Olewniczak throw new ConsistencyViolationException('delete comments of closed threads'); 73f7519ef1SSzymon Olewniczak } 74f7519ef1SSzymon Olewniczak 75e8827d73SSzymon Olewniczak try { 76e8827d73SSzymon Olewniczak $this->beginTransaction(); 77e8827d73SSzymon Olewniczak 78e8827d73SSzymon Olewniczak parent::delete($obj); 79e8827d73SSzymon Olewniczak $obj->task->update_last_activity(); 80f7519ef1SSzymon Olewniczak //remove commentator flag 81f7519ef1SSzymon Olewniczak if ($this->count(array('task_id' => $obj->task_id, 'author' => $obj->author)) == 0) { 82f7519ef1SSzymon Olewniczak $obj->task->remove_participant_flags($obj->author, array('commentator')); 83f7519ef1SSzymon Olewniczak } 84e8827d73SSzymon Olewniczak 85e8827d73SSzymon Olewniczak $this->commitTransaction(); 86e8827d73SSzymon Olewniczak } catch(Exception $exception) { 87e8827d73SSzymon Olewniczak $this->rollbackTransaction(); 88e8827d73SSzymon Olewniczak } 89e8827d73SSzymon Olewniczak } 90e8827d73SSzymon Olewniczak}