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