xref: /plugin/bez/mdl/Thread_commentFactory.php (revision a0cd8c785f18b483f73582b411767428d04a78f6)
18a638198SSzymon Olewniczak<?php
28a638198SSzymon Olewniczak
38a638198SSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl;
48a638198SSzymon Olewniczak
5*a0cd8c78SSzymon Olewniczakuse dokuwiki\plugin\bez\meta\ConsistencyViolationException;
6*a0cd8c78SSzymon Olewniczak
78a638198SSzymon Olewniczakclass Thread_commentFactory extends Factory {
88a638198SSzymon Olewniczak
953df74e7SSzymon Olewniczak    public function get_table_view() {
1053df74e7SSzymon Olewniczak        return 'thread_comment_view';
118a638198SSzymon Olewniczak    }
128a638198SSzymon Olewniczak
13e8827d73SSzymon Olewniczak    public function get_from_thread(Thread $thread, $filters=array(), $orderby='', $desc=true, $limit=false) {
14e8827d73SSzymon Olewniczak        $filters['thread_id'] = $thread->id;
15e8827d73SSzymon Olewniczak        return $this->get_all($filters, $orderby, $desc, array('thread' => $thread), $limit);
168a638198SSzymon Olewniczak    }
178a638198SSzymon Olewniczak
188a638198SSzymon Olewniczak    /**
198a638198SSzymon Olewniczak     * @param Thread_comment $thread_comment
208a638198SSzymon Olewniczak     * @param                $data
218a638198SSzymon Olewniczak     * @throws \Exception
228a638198SSzymon Olewniczak     */
238a638198SSzymon Olewniczak    public function initial_save(Entity $thread_comment, $data) {
248a638198SSzymon Olewniczak        try {
258a638198SSzymon Olewniczak            $this->beginTransaction();
268a638198SSzymon Olewniczak
27e8827d73SSzymon Olewniczak            if ($data['fn'] == 'comment_add' ||
28ff14b107SSzymon Olewniczak                $data['fn'] == 'thread_close' ||
29e8827d73SSzymon Olewniczak                $data['content'] != '') {
3053df74e7SSzymon Olewniczak                parent::initial_save($thread_comment, $data);
318a638198SSzymon Olewniczak                $thread_comment->thread->set_participant_flags($thread_comment->author, array('subscribent', 'commentator'));
32e8827d73SSzymon Olewniczak            }
33e8827d73SSzymon Olewniczak
34e8827d73SSzymon Olewniczak            if ($data['fn'] == 'thread_close') {
35e8827d73SSzymon Olewniczak                $thread_comment->thread->set_state('closed');
36e8827d73SSzymon Olewniczak            } elseif ($data['fn'] == 'thread_reject') {
37e8827d73SSzymon Olewniczak                $thread_comment->thread->set_state('rejected');
38e8827d73SSzymon Olewniczak            } elseif ($data['fn'] == 'thread_reopen') {
39e8827d73SSzymon Olewniczak                $thread_comment->thread->set_state('opened');
40e8827d73SSzymon Olewniczak            }
41e8827d73SSzymon Olewniczak
428a638198SSzymon Olewniczak            $thread_comment->thread->update_last_activity();
438a638198SSzymon Olewniczak
448a638198SSzymon Olewniczak            $this->commitTransaction();
458a638198SSzymon Olewniczak        } catch(Exception $exception) {
468a638198SSzymon Olewniczak            $this->rollbackTransaction();
478a638198SSzymon Olewniczak        }
488a638198SSzymon Olewniczak
498a638198SSzymon Olewniczak        $thread_comment->mail_notify_add();
508a638198SSzymon Olewniczak    }
518a638198SSzymon Olewniczak
528a638198SSzymon Olewniczak    public function update_save(Entity $thread_comment, $data) {
538a638198SSzymon Olewniczak        try {
548a638198SSzymon Olewniczak            $this->beginTransaction();
5553df74e7SSzymon Olewniczak            parent::update_save($thread_comment, $data);
568a638198SSzymon Olewniczak
578a638198SSzymon Olewniczak            $thread_comment->thread->update_last_activity();
588a638198SSzymon Olewniczak
598a638198SSzymon Olewniczak            $this->commitTransaction();
608a638198SSzymon Olewniczak        } catch(Exception $exception) {
618a638198SSzymon Olewniczak            $this->rollbackTransaction();
628a638198SSzymon Olewniczak        }
638a638198SSzymon Olewniczak    }
648a638198SSzymon Olewniczak
658a638198SSzymon Olewniczak    public function delete(Entity $obj) {
66*a0cd8c78SSzymon Olewniczak
67*a0cd8c78SSzymon Olewniczak        if ($obj->task_count > 0) {
68*a0cd8c78SSzymon Olewniczak            throw new ConsistencyViolationException('cannot delete when task are assigned');
69*a0cd8c78SSzymon Olewniczak        }
70*a0cd8c78SSzymon Olewniczak
718a638198SSzymon Olewniczak        try {
728a638198SSzymon Olewniczak            $this->beginTransaction();
738a638198SSzymon Olewniczak
748a638198SSzymon Olewniczak            parent::delete($obj);
758a638198SSzymon Olewniczak            $obj->thread->update_last_activity();
768a638198SSzymon Olewniczak
778a638198SSzymon Olewniczak            $this->commitTransaction();
788a638198SSzymon Olewniczak        } catch(Exception $exception) {
798a638198SSzymon Olewniczak            $this->rollbackTransaction();
808a638198SSzymon Olewniczak        }
818a638198SSzymon Olewniczak    }
828a638198SSzymon Olewniczak}