xref: /plugin/bez/mdl/Task_commentFactory.php (revision 038c5d4a6a969d879580f53f12ade1bfabd5474f)
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}