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; 66*a0cd8c78SSzymon Olewniczak 67*a0cd8c78SSzymon Olewniczak $this->acl->grant('content', BEZ_PERMISSION_CHANGE); 68*a0cd8c78SSzymon Olewniczak if ($this->coordinator == $this->model->user_nick) { 69*a0cd8c78SSzymon Olewniczak $this->acl->grant('type', BEZ_PERMISSION_CHANGE); 70*a0cd8c78SSzymon Olewniczak } 71*a0cd8c78SSzymon Olewniczak 72e8827d73SSzymon Olewniczak } else { 73e8827d73SSzymon Olewniczak if (isset($defaults['thread']) && $this->thread_id == $defaults['thread']->id) { 74e8827d73SSzymon Olewniczak $this->thread = $defaults['thread']; 75e8827d73SSzymon Olewniczak } 76*a0cd8c78SSzymon Olewniczak 77*a0cd8c78SSzymon Olewniczak //we can change our own comments only when they are "comment" 78*a0cd8c78SSzymon Olewniczak if ($this->author == $this->model->user_nick && $this->type == 'comment') { 79*a0cd8c78SSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 80*a0cd8c78SSzymon Olewniczak if ($this->task_count == '0') { 81*a0cd8c78SSzymon Olewniczak $this->acl->grant('id', BEZ_PERMISSION_DELETE); 82*a0cd8c78SSzymon Olewniczak } 83*a0cd8c78SSzymon Olewniczak $this->acl->grant('content', BEZ_PERMISSION_CHANGE); 84*a0cd8c78SSzymon Olewniczak } 85*a0cd8c78SSzymon Olewniczak 86*a0cd8c78SSzymon Olewniczak if ($this->coordinator == $this->model->user_nick) { 87*a0cd8c78SSzymon Olewniczak //we can only delete records when there is no tasks subscribed to issue 88*a0cd8c78SSzymon Olewniczak if ($this->task_count == '0') { 89*a0cd8c78SSzymon Olewniczak $this->acl->grant('id', BEZ_PERMISSION_DELETE); 90*a0cd8c78SSzymon Olewniczak } 91*a0cd8c78SSzymon Olewniczak $this->acl->grant('content', BEZ_PERMISSION_CHANGE); 92*a0cd8c78SSzymon Olewniczak $this->acl->grant('type', BEZ_PERMISSION_CHANGE); 93*a0cd8c78SSzymon 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() { 107fe5d6d1eSSzymon Olewniczak 108*a0cd8c78SSzymon Olewniczak $info = array(); 109*a0cd8c78SSzymon Olewniczak $html = p_render('bez_xhtmlmail', p_get_instructions($this->content), $info); 110*a0cd8c78SSzymon Olewniczak 111fe5d6d1eSSzymon Olewniczak $rep = array( 112fe5d6d1eSSzymon Olewniczak 'content' => $this->content, 113*a0cd8c78SSzymon Olewniczak 'content_html' => $html, 1148a638198SSzymon Olewniczak 'who' => $this->author, 1158a638198SSzymon Olewniczak 'when' => $this->create_date 116fe5d6d1eSSzymon Olewniczak ); 117fe5d6d1eSSzymon Olewniczak 118fe5d6d1eSSzymon Olewniczak if ($this->type > 0) { 119fe5d6d1eSSzymon Olewniczak $rep['action'] = $this->model->action->getLang('mail_cause_added'); 120fe5d6d1eSSzymon Olewniczak $rep['action_color'] = '#ffeedc'; 121fe5d6d1eSSzymon Olewniczak $rep['action_border_color'] = '#ddb68d'; 122fe5d6d1eSSzymon Olewniczak } else { 123fe5d6d1eSSzymon Olewniczak $rep['action'] = $this->model->action->getLang('mail_comment_added'); 124fe5d6d1eSSzymon Olewniczak $rep['action_color'] = 'transparent'; 125fe5d6d1eSSzymon Olewniczak $rep['action_border_color'] = '#E5E5E5'; 126fe5d6d1eSSzymon Olewniczak } 127fe5d6d1eSSzymon Olewniczak 128*a0cd8c78SSzymon Olewniczak $this->thread->mail_notify($rep, false, $info['img']); 129fe5d6d1eSSzymon Olewniczak } 130fe5d6d1eSSzymon Olewniczak} 131