1fe5d6d1eSSzymon Olewniczak<?php 2fe5d6d1eSSzymon Olewniczak 3fe5d6d1eSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 4fe5d6d1eSSzymon Olewniczak 5fe5d6d1eSSzymon Olewniczakuse dokuwiki\plugin\bez\meta\PermissionDeniedException; 6fe5d6d1eSSzymon Olewniczakuse dokuwiki\plugin\bez\meta\ValidationException; 7fe5d6d1eSSzymon Olewniczak 8fe5d6d1eSSzymon Olewniczakclass Thread_comment extends Entity { 9fe5d6d1eSSzymon Olewniczak 10fe5d6d1eSSzymon Olewniczak //real 118a638198SSzymon Olewniczak protected $id, $thread_id, $type, $author, $create_date, $last_modification_date, $content, $content_html, $task_count; 12fe5d6d1eSSzymon Olewniczak 13fe5d6d1eSSzymon Olewniczak //virtual 148a638198SSzymon Olewniczak protected $coordinator; 158a638198SSzymon Olewniczak 168a638198SSzymon Olewniczak /** @var Thread */ 178a638198SSzymon Olewniczak protected $thread; 18fe5d6d1eSSzymon Olewniczak 19fe5d6d1eSSzymon Olewniczak //protected $parse_int = array('tasks_count'); 20fe5d6d1eSSzymon Olewniczak public static function get_columns() { 218a638198SSzymon Olewniczak return array('id', 'thread_id', 'type', 'author', 228a638198SSzymon Olewniczak 'create_date', 'last_modification_date', 'content', 'content_html', 'task_count'); 238a638198SSzymon Olewniczak } 248a638198SSzymon Olewniczak 258a638198SSzymon Olewniczak public function __get($property) { 26ff14b107SSzymon Olewniczak if ($property == 'thread') { 27ff14b107SSzymon Olewniczak if ($this->thread_id == null) { 28ff14b107SSzymon Olewniczak return null; 29ff14b107SSzymon Olewniczak } 30ff14b107SSzymon Olewniczak if ($this->thread == null) { 31ff14b107SSzymon Olewniczak $this->thread = $this->model->threadFactory->get_one($this->thread_id); 32ff14b107SSzymon Olewniczak } 33ff14b107SSzymon Olewniczak return $this->thread; 34ff14b107SSzymon Olewniczak 35ff14b107SSzymon Olewniczak } elseif ($property == 'coordinator') { 368a638198SSzymon Olewniczak return $this->$property; 378a638198SSzymon Olewniczak } 388a638198SSzymon Olewniczak return parent::__get($property); 39fe5d6d1eSSzymon Olewniczak } 40fe5d6d1eSSzymon Olewniczak 41fe5d6d1eSSzymon Olewniczak //defaults: isssue, type 42fe5d6d1eSSzymon Olewniczak public function __construct($model, $defaults=array()) { 43fe5d6d1eSSzymon Olewniczak parent::__construct($model, $defaults); 44fe5d6d1eSSzymon Olewniczak 458a638198SSzymon Olewniczak $this->validator->set_rules(array( 4653df74e7SSzymon Olewniczak 'content' => array(array('length', 10000), 'NOT NULL'), 4753df74e7SSzymon Olewniczak 'type' => array( 48*d5a60e5aSSzymon Olewniczak array('select', array('comment', 'cause')), 4953df74e7SSzymon Olewniczak 'NOT NULL') 50fe5d6d1eSSzymon Olewniczak )); 51fe5d6d1eSSzymon Olewniczak 52fe5d6d1eSSzymon Olewniczak //new object 53fe5d6d1eSSzymon Olewniczak if ($this->id === NULL) { 54fe5d6d1eSSzymon Olewniczak 558a638198SSzymon Olewniczak $this->author = $this->model->user_nick; 568a638198SSzymon Olewniczak $this->create_date = date('c'); 578a638198SSzymon Olewniczak $this->last_modification_date = $this->create_date; 58fe5d6d1eSSzymon Olewniczak 59fe5d6d1eSSzymon Olewniczak 60e8827d73SSzymon Olewniczak if (!isset($defaults['thread'])) { 61e8827d73SSzymon Olewniczak throw new \Exception('$defaults[thread] not set'); 62e8827d73SSzymon Olewniczak } 63e8827d73SSzymon Olewniczak $this->thread = $defaults['thread']; 648a638198SSzymon Olewniczak $this->thread_id = $this->thread->id; 658a638198SSzymon Olewniczak $this->coordinator = $this->thread->coordinator; 66a0cd8c78SSzymon Olewniczak 67a0cd8c78SSzymon Olewniczak $this->acl->grant('content', BEZ_PERMISSION_CHANGE); 68a0cd8c78SSzymon Olewniczak if ($this->coordinator == $this->model->user_nick) { 69a0cd8c78SSzymon Olewniczak $this->acl->grant('type', BEZ_PERMISSION_CHANGE); 70a0cd8c78SSzymon Olewniczak } 71a0cd8c78SSzymon Olewniczak 72e8827d73SSzymon Olewniczak } else { 73e8827d73SSzymon Olewniczak if (isset($defaults['thread']) && $this->thread_id == $defaults['thread']->id) { 74e8827d73SSzymon Olewniczak $this->thread = $defaults['thread']; 75e8827d73SSzymon Olewniczak } 76a0cd8c78SSzymon Olewniczak 77a0cd8c78SSzymon Olewniczak //we can change our own comments only when they are "comment" 78a0cd8c78SSzymon Olewniczak if ($this->author == $this->model->user_nick && $this->type == 'comment') { 79a0cd8c78SSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 80a0cd8c78SSzymon Olewniczak if ($this->task_count == '0') { 81a0cd8c78SSzymon Olewniczak $this->acl->grant('id', BEZ_PERMISSION_DELETE); 82a0cd8c78SSzymon Olewniczak } 83a0cd8c78SSzymon Olewniczak $this->acl->grant('content', BEZ_PERMISSION_CHANGE); 84a0cd8c78SSzymon Olewniczak } 85a0cd8c78SSzymon Olewniczak 86a0cd8c78SSzymon Olewniczak if ($this->coordinator == $this->model->user_nick) { 87a0cd8c78SSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 88a0cd8c78SSzymon Olewniczak if ($this->task_count == '0') { 89a0cd8c78SSzymon Olewniczak $this->acl->grant('id', BEZ_PERMISSION_DELETE); 90a0cd8c78SSzymon Olewniczak } 91a0cd8c78SSzymon Olewniczak $this->acl->grant('content', BEZ_PERMISSION_CHANGE); 92a0cd8c78SSzymon Olewniczak $this->acl->grant('type', BEZ_PERMISSION_CHANGE); 93a0cd8c78SSzymon Olewniczak } 94e8827d73SSzymon Olewniczak } 95fe5d6d1eSSzymon Olewniczak } 96fe5d6d1eSSzymon Olewniczak 978a638198SSzymon Olewniczak public function set_data($post) { 9853df74e7SSzymon Olewniczak //no all can change type 9953df74e7SSzymon Olewniczak if ($this->acl_of('type') < BEZ_PERMISSION_CHANGE) { 10053df74e7SSzymon Olewniczak unset($post['type']); 10153df74e7SSzymon Olewniczak } 1028a638198SSzymon Olewniczak parent::set_data($post); 1032448d85aSSzymon Olewniczak $this->purge(); 1042448d85aSSzymon Olewniczak } 1052448d85aSSzymon Olewniczak 1065b88664dSSzymon Olewniczak protected function html_link_url() { 1075b88664dSSzymon Olewniczak $tpl = $this->model->action->get_tpl(); 1085b88664dSSzymon Olewniczak return $tpl->url('thread', 'id', $this->thread_id) . '#k' . $this->id; 1095b88664dSSzymon Olewniczak } 1105b88664dSSzymon Olewniczak 1115b88664dSSzymon Olewniczak protected function html_link_content() { 1125b88664dSSzymon Olewniczak return '#k' . $this->id; 1135b88664dSSzymon Olewniczak } 1145b88664dSSzymon Olewniczak 1158a638198SSzymon Olewniczak public function mail_notify_add() { 11614a1f0a4SSzymon Olewniczak $tpl = $this->model->action->get_tpl(); 117fe5d6d1eSSzymon Olewniczak 118a0cd8c78SSzymon Olewniczak $info = array(); 119a0cd8c78SSzymon Olewniczak $html = p_render('bez_xhtmlmail', p_get_instructions($this->content), $info); 12014a1f0a4SSzymon Olewniczak $tpl->set('content', $html); 12114a1f0a4SSzymon Olewniczak $tpl->set('who', $this->author); 12214a1f0a4SSzymon Olewniczak $tpl->set('when', $this->create_date); 12314a1f0a4SSzymon Olewniczak if ($this->type == 'comment') { 12414a1f0a4SSzymon Olewniczak $action = 'mail_comment_added'; 125fe5d6d1eSSzymon Olewniczak } else { 12614a1f0a4SSzymon Olewniczak $action = 'mail_cause_added'; 12714a1f0a4SSzymon Olewniczak $tpl->set('action_border_color', '#ddb68d'); 12814a1f0a4SSzymon Olewniczak $tpl->set('action_background_color', '#ffeedc'); 129fe5d6d1eSSzymon Olewniczak } 13014a1f0a4SSzymon Olewniczak $tpl->set('action', $action); 13114a1f0a4SSzymon Olewniczak $content = $this->model->action->bez_tpl_include('mail/thread_comment', true); 132fe5d6d1eSSzymon Olewniczak 13314a1f0a4SSzymon Olewniczak $this->thread->mail_notify($content, false, $info['img']); 134fe5d6d1eSSzymon Olewniczak } 135fe5d6d1eSSzymon Olewniczak} 136