18a638198SSzymon Olewniczak<?php 28a638198SSzymon Olewniczak 38a638198SSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 48a638198SSzymon Olewniczak 5a0cd8c78SSzymon Olewniczakuse dokuwiki\plugin\bez\meta\ConsistencyViolationException; 6a0cd8c78SSzymon 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 13038c5d4aSSzymon Olewniczak public function get_from_thread(Thread $thread, $filters=array(), $orderby='', $limit=false) { 14e8827d73SSzymon Olewniczak $filters['thread_id'] = $thread->id; 15038c5d4aSSzymon Olewniczak return $this->get_all($filters, $orderby, 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')); 3214a1f0a4SSzymon Olewniczak $notify = 'comment_added'; 33e8827d73SSzymon Olewniczak } 34e8827d73SSzymon Olewniczak 35e8827d73SSzymon Olewniczak if ($data['fn'] == 'thread_close') { 36e8827d73SSzymon Olewniczak $thread_comment->thread->set_state('closed'); 3714a1f0a4SSzymon Olewniczak $notify = 'mail_thread_closed'; 38e8827d73SSzymon Olewniczak } elseif ($data['fn'] == 'thread_reject') { 39e8827d73SSzymon Olewniczak $thread_comment->thread->set_state('rejected'); 4014a1f0a4SSzymon Olewniczak $notify = 'mail_thread_rejected'; 41e8827d73SSzymon Olewniczak } elseif ($data['fn'] == 'thread_reopen') { 42e8827d73SSzymon Olewniczak $thread_comment->thread->set_state('opened'); 4314a1f0a4SSzymon Olewniczak $notify = 'mail_thread_reopened'; 44e8827d73SSzymon Olewniczak } 45e8827d73SSzymon Olewniczak 468a638198SSzymon Olewniczak $thread_comment->thread->update_last_activity(); 478a638198SSzymon Olewniczak 488a638198SSzymon Olewniczak $this->commitTransaction(); 4914a1f0a4SSzymon Olewniczak 5014a1f0a4SSzymon Olewniczak if ($notify == 'comment_added') { 5114a1f0a4SSzymon Olewniczak $thread_comment->mail_notify_add(); 5214a1f0a4SSzymon Olewniczak } elseif (isset($notify)) { 5314a1f0a4SSzymon Olewniczak $thread_comment->thread->mail_notify_change_state($notify); 5414a1f0a4SSzymon Olewniczak } 5514a1f0a4SSzymon Olewniczak 568a638198SSzymon Olewniczak } catch(Exception $exception) { 578a638198SSzymon Olewniczak $this->rollbackTransaction(); 588a638198SSzymon Olewniczak } 598a638198SSzymon Olewniczak } 608a638198SSzymon Olewniczak 618a638198SSzymon Olewniczak public function update_save(Entity $thread_comment, $data) { 628a638198SSzymon Olewniczak try { 638a638198SSzymon Olewniczak $this->beginTransaction(); 64*9110c699SSzymon Olewniczak 65*9110c699SSzymon Olewniczak $prev_type = $thread_comment->type; 66*9110c699SSzymon Olewniczak 6753df74e7SSzymon Olewniczak parent::update_save($thread_comment, $data); 688a638198SSzymon Olewniczak 69*9110c699SSzymon Olewniczak //update task types 70*9110c699SSzymon Olewniczak if ($thread_comment->type != 'comment' && $thread_comment->type != $prev_type) { 71*9110c699SSzymon Olewniczak if ($thread_comment->type == 'cause_real') { 72*9110c699SSzymon Olewniczak $task_type = 'corrective'; 73*9110c699SSzymon Olewniczak } else { 74*9110c699SSzymon Olewniczak $task_type = 'preventive'; 75*9110c699SSzymon Olewniczak } 76*9110c699SSzymon Olewniczak $this->model->sqlite->query('UPDATE task SET type=? WHERE thread_comment_id=?', 77*9110c699SSzymon Olewniczak $task_type, $thread_comment->id); 78*9110c699SSzymon Olewniczak 79*9110c699SSzymon Olewniczak } 80*9110c699SSzymon Olewniczak 818a638198SSzymon Olewniczak $thread_comment->thread->update_last_activity(); 828a638198SSzymon Olewniczak 838a638198SSzymon Olewniczak $this->commitTransaction(); 848a638198SSzymon Olewniczak } catch(Exception $exception) { 858a638198SSzymon Olewniczak $this->rollbackTransaction(); 868a638198SSzymon Olewniczak } 878a638198SSzymon Olewniczak } 888a638198SSzymon Olewniczak 898a638198SSzymon Olewniczak public function delete(Entity $obj) { 90a0cd8c78SSzymon Olewniczak 91a0cd8c78SSzymon Olewniczak if ($obj->task_count > 0) { 92a0cd8c78SSzymon Olewniczak throw new ConsistencyViolationException('cannot delete when task are assigned'); 93a0cd8c78SSzymon Olewniczak } 94a0cd8c78SSzymon Olewniczak 958a638198SSzymon Olewniczak try { 968a638198SSzymon Olewniczak $this->beginTransaction(); 978a638198SSzymon Olewniczak 988a638198SSzymon Olewniczak parent::delete($obj); 998a638198SSzymon Olewniczak $obj->thread->update_last_activity(); 100f7519ef1SSzymon Olewniczak //remove commentator flag 101f7519ef1SSzymon Olewniczak if ($this->count(array('thread_id' => $obj->thread_id, 'author' => $obj->author)) == 0) { 102f7519ef1SSzymon Olewniczak $obj->thread->remove_participant_flags($obj->author, array('commentator')); 103f7519ef1SSzymon Olewniczak } 1048a638198SSzymon Olewniczak 1058a638198SSzymon Olewniczak $this->commitTransaction(); 1068a638198SSzymon Olewniczak } catch(Exception $exception) { 1078a638198SSzymon Olewniczak $this->rollbackTransaction(); 1088a638198SSzymon Olewniczak } 1098a638198SSzymon Olewniczak } 1108a638198SSzymon Olewniczak}