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) { 26*ff14b107SSzymon Olewniczak if ($property == 'thread') { 27*ff14b107SSzymon Olewniczak if ($this->thread_id == null) { 28*ff14b107SSzymon Olewniczak return null; 29*ff14b107SSzymon Olewniczak } 30*ff14b107SSzymon Olewniczak if ($this->thread == null) { 31*ff14b107SSzymon Olewniczak $this->thread = $this->model->threadFactory->get_one($this->thread_id); 32*ff14b107SSzymon Olewniczak } 33*ff14b107SSzymon Olewniczak return $this->thread; 34*ff14b107SSzymon Olewniczak 35*ff14b107SSzymon Olewniczak } elseif ($property == 'coordinator') { 368a638198SSzymon Olewniczak return $this->$property; 378a638198SSzymon Olewniczak } 388a638198SSzymon Olewniczak return parent::__get($property); 39fe5d6d1eSSzymon Olewniczak } 40fe5d6d1eSSzymon Olewniczak 41fe5d6d1eSSzymon Olewniczak// public function get_virtual_columns() { 42fe5d6d1eSSzymon Olewniczak// return array('coordinator', 'tasks_count'); 43fe5d6d1eSSzymon Olewniczak// } 44fe5d6d1eSSzymon Olewniczak// 45fe5d6d1eSSzymon Olewniczak// public function get_table_name() { 46fe5d6d1eSSzymon Olewniczak// return 'commcauses'; 47fe5d6d1eSSzymon Olewniczak// } 48fe5d6d1eSSzymon Olewniczak 49fe5d6d1eSSzymon Olewniczak //defaults: isssue, type 50fe5d6d1eSSzymon Olewniczak public function __construct($model, $defaults=array()) { 51fe5d6d1eSSzymon Olewniczak parent::__construct($model, $defaults); 52fe5d6d1eSSzymon Olewniczak 538a638198SSzymon Olewniczak// $this->validator->set_rules(array( 548a638198SSzymon Olewniczak// 'issue' => array(array('numeric'), 'NOT NULL'), 558a638198SSzymon Olewniczak// 'datetime' => array(array('sqlite_datetime'), 'NOT NULL'), 568a638198SSzymon Olewniczak// 'reporter' => array(array('dw_user'), 'NOT NULL'), 578a638198SSzymon Olewniczak// 'type' => array(array('select', array('0', '1', '2')), 'NOT NULL'), 588a638198SSzymon Olewniczak// 'content' => array(array('length', 10000), 'NOT NULL'), 598a638198SSzymon Olewniczak// 'content_cache' => array(array('length', 10000), 'NOT NULL'), 608a638198SSzymon Olewniczak// 618a638198SSzymon Olewniczak// 'coordinator' => array(array('dw_user', array('-proposal')), 'NOT NULL') 628a638198SSzymon Olewniczak// )); 63fe5d6d1eSSzymon Olewniczak 64e8827d73SSzymon Olewniczak 658a638198SSzymon Olewniczak 668a638198SSzymon Olewniczak $this->validator->set_rules(array( 678a638198SSzymon Olewniczak //'type' => array(array('select', array('0', '1', '2')), 'NOT NULL'), 688a638198SSzymon Olewniczak 'content' => array(array('length', 10000), 'NOT NULL') 69fe5d6d1eSSzymon Olewniczak )); 70fe5d6d1eSSzymon Olewniczak 71fe5d6d1eSSzymon Olewniczak //new object 72fe5d6d1eSSzymon Olewniczak if ($this->id === NULL) { 73fe5d6d1eSSzymon Olewniczak 748a638198SSzymon Olewniczak $this->author = $this->model->user_nick; 758a638198SSzymon Olewniczak $this->create_date = date('c'); 768a638198SSzymon Olewniczak $this->last_modification_date = $this->create_date; 77fe5d6d1eSSzymon Olewniczak 78fe5d6d1eSSzymon Olewniczak 79e8827d73SSzymon Olewniczak if (!isset($defaults['thread'])) { 80e8827d73SSzymon Olewniczak throw new \Exception('$defaults[thread] not set'); 81e8827d73SSzymon Olewniczak } 82e8827d73SSzymon Olewniczak $this->thread = $defaults['thread']; 838a638198SSzymon Olewniczak $this->thread_id = $this->thread->id; 848a638198SSzymon Olewniczak $this->coordinator = $this->thread->coordinator; 858a638198SSzymon Olewniczak 868a638198SSzymon Olewniczak// //we are coordinator of newly created object 878a638198SSzymon Olewniczak// if ($issue->user_is_coordinator()) { 888a638198SSzymon Olewniczak// //throws ValidationException 898a638198SSzymon Olewniczak// $this->type = 908a638198SSzymon Olewniczak// $this->validator->validate_field('type', $defaults['type']); 918a638198SSzymon Olewniczak// } else { 928a638198SSzymon Olewniczak// $this->type = '0'; 938a638198SSzymon Olewniczak// } 948a638198SSzymon Olewniczak 958a638198SSzymon Olewniczak// $this->reporter = $this->model->user_nick; 968a638198SSzymon Olewniczak// $this->datetime = $this->sqlite_date(); 97e8827d73SSzymon Olewniczak } else { 98e8827d73SSzymon Olewniczak if (isset($defaults['thread']) && $this->thread_id == $defaults['thread']->id) { 99e8827d73SSzymon Olewniczak $this->thread = $defaults['thread']; 100e8827d73SSzymon Olewniczak } 101e8827d73SSzymon Olewniczak } 102e8827d73SSzymon Olewniczak 103fe5d6d1eSSzymon Olewniczak 1048a638198SSzymon Olewniczak //set validation 1058a638198SSzymon Olewniczak if ($this->thread->user_is_coordinator()) { 1068a638198SSzymon Olewniczak $this->validator->set_rules( 1078a638198SSzymon Olewniczak array( 1088a638198SSzymon Olewniczak 'type' => array( 1098a638198SSzymon Olewniczak array('select', array('comment', 'cause_real', 'cause_potential', 'closing_comment')), 1108a638198SSzymon Olewniczak 'NOT NULL') 1118a638198SSzymon Olewniczak ) 1128a638198SSzymon Olewniczak ); 113fe5d6d1eSSzymon Olewniczak } 114fe5d6d1eSSzymon Olewniczak } 115fe5d6d1eSSzymon Olewniczak 1168a638198SSzymon Olewniczak// public function update_cache() { 1178a638198SSzymon Olewniczak// if ($this->model->acl->get_level() < BEZ_AUTH_ADMIN) { 1188a638198SSzymon Olewniczak// return false; 1198a638198SSzymon Olewniczak// } 1208a638198SSzymon Olewniczak// $this->content_cache = $this->helper->wiki_parse($this->content); 1218a638198SSzymon Olewniczak// } 1228a638198SSzymon Olewniczak// 1238a638198SSzymon Olewniczak// public function set_data($data, $filter=NULL) { 1248a638198SSzymon Olewniczak// $input = array('content', 'type'); 1258a638198SSzymon Olewniczak// $val_data = $this->validator->validate($data, $input); 1268a638198SSzymon Olewniczak// 1278a638198SSzymon Olewniczak// if ($val_data === false) { 1288a638198SSzymon Olewniczak// throw new ValidationException('issues', $this->validator->get_errors()); 1298a638198SSzymon Olewniczak// } 1308a638198SSzymon Olewniczak// 1318a638198SSzymon Olewniczak// $this->set_property_array($val_data); 1328a638198SSzymon Olewniczak 1338a638198SSzymon Olewniczak// $this->content_cache = $this->helper->wiki_parse($this->content); 1348a638198SSzymon Olewniczak// } 1358a638198SSzymon Olewniczak 1368a638198SSzymon Olewniczak public function set_data($post) { 1378a638198SSzymon Olewniczak parent::set_data($post); 1388a638198SSzymon Olewniczak $this->content_html = p_render('xhtml',p_get_instructions($this->content), $ignore); 139fe5d6d1eSSzymon Olewniczak } 140fe5d6d1eSSzymon Olewniczak 1418a638198SSzymon Olewniczak// public function get_meta_fields() { 1428a638198SSzymon Olewniczak// return array('reporter', 'datetime'); 1438a638198SSzymon Olewniczak// } 1448a638198SSzymon Olewniczak// 1458a638198SSzymon Olewniczak// public function set_meta($post) { 1468a638198SSzymon Olewniczak// parent::set_data($post, $this->get_meta_fields()); 1478a638198SSzymon Olewniczak// } 148fe5d6d1eSSzymon Olewniczak 1498a638198SSzymon Olewniczak public function mail_notify_add() { 1508a638198SSzymon Olewniczak// if ($thread->id !== $this->thread_id) { 1518a638198SSzymon Olewniczak// throw new Exception('issue object id and commcause->issue does not match'); 1528a638198SSzymon Olewniczak// } 153fe5d6d1eSSzymon Olewniczak 154fe5d6d1eSSzymon Olewniczak $rep = array( 155fe5d6d1eSSzymon Olewniczak 'content' => $this->content, 1568a638198SSzymon Olewniczak 'content_html' => $this->content_html, 1578a638198SSzymon Olewniczak 'who' => $this->author, 1588a638198SSzymon Olewniczak 'when' => $this->create_date 159fe5d6d1eSSzymon Olewniczak ); 160fe5d6d1eSSzymon Olewniczak 161fe5d6d1eSSzymon Olewniczak if ($this->type > 0) { 162fe5d6d1eSSzymon Olewniczak $rep['action'] = $this->model->action->getLang('mail_cause_added'); 163fe5d6d1eSSzymon Olewniczak $rep['action_color'] = '#ffeedc'; 164fe5d6d1eSSzymon Olewniczak $rep['action_border_color'] = '#ddb68d'; 165fe5d6d1eSSzymon Olewniczak } else { 166fe5d6d1eSSzymon Olewniczak $rep['action'] = $this->model->action->getLang('mail_comment_added'); 167fe5d6d1eSSzymon Olewniczak $rep['action_color'] = 'transparent'; 168fe5d6d1eSSzymon Olewniczak $rep['action_border_color'] = '#E5E5E5'; 169fe5d6d1eSSzymon Olewniczak } 170fe5d6d1eSSzymon Olewniczak 1718a638198SSzymon Olewniczak $this->thread->mail_notify($rep); 172fe5d6d1eSSzymon Olewniczak } 173fe5d6d1eSSzymon Olewniczak} 174