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