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( 4853df74e7SSzymon Olewniczak array('select', array('comment', 'cause_real', 'cause_potential')), 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); 1038a638198SSzymon Olewniczak $this->content_html = p_render('xhtml',p_get_instructions($this->content), $ignore); 104fe5d6d1eSSzymon Olewniczak } 105fe5d6d1eSSzymon Olewniczak 1068a638198SSzymon Olewniczak public function mail_notify_add() { 107*14a1f0a4SSzymon Olewniczak $tpl = $this->model->action->get_tpl(); 108fe5d6d1eSSzymon Olewniczak 109a0cd8c78SSzymon Olewniczak $info = array(); 110a0cd8c78SSzymon Olewniczak $html = p_render('bez_xhtmlmail', p_get_instructions($this->content), $info); 111*14a1f0a4SSzymon Olewniczak $tpl->set('content', $html); 112*14a1f0a4SSzymon Olewniczak $tpl->set('who', $this->author); 113*14a1f0a4SSzymon Olewniczak $tpl->set('when', $this->create_date); 114*14a1f0a4SSzymon Olewniczak if ($this->type == 'comment') { 115*14a1f0a4SSzymon Olewniczak $action = 'mail_comment_added'; 116fe5d6d1eSSzymon Olewniczak } else { 117*14a1f0a4SSzymon Olewniczak $action = 'mail_cause_added'; 118*14a1f0a4SSzymon Olewniczak $tpl->set('action_border_color', '#ddb68d'); 119*14a1f0a4SSzymon Olewniczak $tpl->set('action_background_color', '#ffeedc'); 120fe5d6d1eSSzymon Olewniczak } 121*14a1f0a4SSzymon Olewniczak $tpl->set('action', $action); 122*14a1f0a4SSzymon Olewniczak $content = $this->model->action->bez_tpl_include('mail/thread_comment', true); 123fe5d6d1eSSzymon Olewniczak 124*14a1f0a4SSzymon Olewniczak $this->thread->mail_notify($content, false, $info['img']); 125fe5d6d1eSSzymon Olewniczak } 126fe5d6d1eSSzymon Olewniczak} 127