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) { 268a638198SSzymon Olewniczak if ($property == 'coordinator' || $property == 'thread') { 278a638198SSzymon Olewniczak return $this->$property; 288a638198SSzymon Olewniczak } 298a638198SSzymon Olewniczak return parent::__get($property); 30fe5d6d1eSSzymon Olewniczak } 31fe5d6d1eSSzymon Olewniczak 32fe5d6d1eSSzymon Olewniczak// public function get_virtual_columns() { 33fe5d6d1eSSzymon Olewniczak// return array('coordinator', 'tasks_count'); 34fe5d6d1eSSzymon Olewniczak// } 35fe5d6d1eSSzymon Olewniczak// 36fe5d6d1eSSzymon Olewniczak// public function get_table_name() { 37fe5d6d1eSSzymon Olewniczak// return 'commcauses'; 38fe5d6d1eSSzymon Olewniczak// } 39fe5d6d1eSSzymon Olewniczak 40fe5d6d1eSSzymon Olewniczak //defaults: isssue, type 41fe5d6d1eSSzymon Olewniczak public function __construct($model, $defaults=array()) { 42fe5d6d1eSSzymon Olewniczak parent::__construct($model, $defaults); 43fe5d6d1eSSzymon Olewniczak 448a638198SSzymon Olewniczak// $this->validator->set_rules(array( 458a638198SSzymon Olewniczak// 'issue' => array(array('numeric'), 'NOT NULL'), 468a638198SSzymon Olewniczak// 'datetime' => array(array('sqlite_datetime'), 'NOT NULL'), 478a638198SSzymon Olewniczak// 'reporter' => array(array('dw_user'), 'NOT NULL'), 488a638198SSzymon Olewniczak// 'type' => array(array('select', array('0', '1', '2')), 'NOT NULL'), 498a638198SSzymon Olewniczak// 'content' => array(array('length', 10000), 'NOT NULL'), 508a638198SSzymon Olewniczak// 'content_cache' => array(array('length', 10000), 'NOT NULL'), 518a638198SSzymon Olewniczak// 528a638198SSzymon Olewniczak// 'coordinator' => array(array('dw_user', array('-proposal')), 'NOT NULL') 538a638198SSzymon Olewniczak// )); 54fe5d6d1eSSzymon Olewniczak 55*e8827d73SSzymon Olewniczak 568a638198SSzymon Olewniczak 578a638198SSzymon Olewniczak $this->validator->set_rules(array( 588a638198SSzymon Olewniczak //'type' => array(array('select', array('0', '1', '2')), 'NOT NULL'), 598a638198SSzymon Olewniczak 'content' => array(array('length', 10000), 'NOT NULL') 60fe5d6d1eSSzymon Olewniczak )); 61fe5d6d1eSSzymon Olewniczak 62fe5d6d1eSSzymon Olewniczak //new object 63fe5d6d1eSSzymon Olewniczak if ($this->id === NULL) { 64fe5d6d1eSSzymon Olewniczak 658a638198SSzymon Olewniczak $this->author = $this->model->user_nick; 668a638198SSzymon Olewniczak $this->create_date = date('c'); 678a638198SSzymon Olewniczak $this->last_modification_date = $this->create_date; 68fe5d6d1eSSzymon Olewniczak 69fe5d6d1eSSzymon Olewniczak 70*e8827d73SSzymon Olewniczak if (!isset($defaults['thread'])) { 71*e8827d73SSzymon Olewniczak throw new \Exception('$defaults[thread] not set'); 72*e8827d73SSzymon Olewniczak } 73*e8827d73SSzymon Olewniczak $this->thread = $defaults['thread']; 748a638198SSzymon Olewniczak $this->thread_id = $this->thread->id; 758a638198SSzymon Olewniczak $this->coordinator = $this->thread->coordinator; 768a638198SSzymon Olewniczak 778a638198SSzymon Olewniczak// //we are coordinator of newly created object 788a638198SSzymon Olewniczak// if ($issue->user_is_coordinator()) { 798a638198SSzymon Olewniczak// //throws ValidationException 808a638198SSzymon Olewniczak// $this->type = 818a638198SSzymon Olewniczak// $this->validator->validate_field('type', $defaults['type']); 828a638198SSzymon Olewniczak// } else { 838a638198SSzymon Olewniczak// $this->type = '0'; 848a638198SSzymon Olewniczak// } 858a638198SSzymon Olewniczak 868a638198SSzymon Olewniczak// $this->reporter = $this->model->user_nick; 878a638198SSzymon Olewniczak// $this->datetime = $this->sqlite_date(); 88*e8827d73SSzymon Olewniczak } else { 89*e8827d73SSzymon Olewniczak if ($this->thread_id != '') { 90*e8827d73SSzymon Olewniczak if (isset($defaults['thread']) && $this->thread_id == $defaults['thread']->id) { 91*e8827d73SSzymon Olewniczak $this->thread = $defaults['thread']; 92*e8827d73SSzymon Olewniczak } elseif ($this->thread_id != null) { 93*e8827d73SSzymon Olewniczak $this->thread = $this->model->threadFactory->get_one($this->thread_id); 94fe5d6d1eSSzymon Olewniczak } 95*e8827d73SSzymon Olewniczak } 96*e8827d73SSzymon Olewniczak } 97*e8827d73SSzymon Olewniczak 98fe5d6d1eSSzymon Olewniczak 998a638198SSzymon Olewniczak //set validation 1008a638198SSzymon Olewniczak if ($this->thread->user_is_coordinator()) { 1018a638198SSzymon Olewniczak $this->validator->set_rules( 1028a638198SSzymon Olewniczak array( 1038a638198SSzymon Olewniczak 'type' => array( 1048a638198SSzymon Olewniczak array('select', array('comment', 'cause_real', 'cause_potential', 'closing_comment')), 1058a638198SSzymon Olewniczak 'NOT NULL') 1068a638198SSzymon Olewniczak ) 1078a638198SSzymon Olewniczak ); 108fe5d6d1eSSzymon Olewniczak } 109fe5d6d1eSSzymon Olewniczak } 110fe5d6d1eSSzymon Olewniczak 1118a638198SSzymon Olewniczak// public function update_cache() { 1128a638198SSzymon Olewniczak// if ($this->model->acl->get_level() < BEZ_AUTH_ADMIN) { 1138a638198SSzymon Olewniczak// return false; 1148a638198SSzymon Olewniczak// } 1158a638198SSzymon Olewniczak// $this->content_cache = $this->helper->wiki_parse($this->content); 1168a638198SSzymon Olewniczak// } 1178a638198SSzymon Olewniczak// 1188a638198SSzymon Olewniczak// public function set_data($data, $filter=NULL) { 1198a638198SSzymon Olewniczak// $input = array('content', 'type'); 1208a638198SSzymon Olewniczak// $val_data = $this->validator->validate($data, $input); 1218a638198SSzymon Olewniczak// 1228a638198SSzymon Olewniczak// if ($val_data === false) { 1238a638198SSzymon Olewniczak// throw new ValidationException('issues', $this->validator->get_errors()); 1248a638198SSzymon Olewniczak// } 1258a638198SSzymon Olewniczak// 1268a638198SSzymon Olewniczak// $this->set_property_array($val_data); 1278a638198SSzymon Olewniczak 1288a638198SSzymon Olewniczak// $this->content_cache = $this->helper->wiki_parse($this->content); 1298a638198SSzymon Olewniczak// } 1308a638198SSzymon Olewniczak 1318a638198SSzymon Olewniczak public function set_data($post) { 1328a638198SSzymon Olewniczak parent::set_data($post); 1338a638198SSzymon Olewniczak $this->content_html = p_render('xhtml',p_get_instructions($this->content), $ignore); 134fe5d6d1eSSzymon Olewniczak } 135fe5d6d1eSSzymon Olewniczak 1368a638198SSzymon Olewniczak// public function get_meta_fields() { 1378a638198SSzymon Olewniczak// return array('reporter', 'datetime'); 1388a638198SSzymon Olewniczak// } 1398a638198SSzymon Olewniczak// 1408a638198SSzymon Olewniczak// public function set_meta($post) { 1418a638198SSzymon Olewniczak// parent::set_data($post, $this->get_meta_fields()); 1428a638198SSzymon Olewniczak// } 143fe5d6d1eSSzymon Olewniczak 1448a638198SSzymon Olewniczak public function mail_notify_add() { 1458a638198SSzymon Olewniczak// if ($thread->id !== $this->thread_id) { 1468a638198SSzymon Olewniczak// throw new Exception('issue object id and commcause->issue does not match'); 1478a638198SSzymon Olewniczak// } 148fe5d6d1eSSzymon Olewniczak 149fe5d6d1eSSzymon Olewniczak $rep = array( 150fe5d6d1eSSzymon Olewniczak 'content' => $this->content, 1518a638198SSzymon Olewniczak 'content_html' => $this->content_html, 1528a638198SSzymon Olewniczak 'who' => $this->author, 1538a638198SSzymon Olewniczak 'when' => $this->create_date 154fe5d6d1eSSzymon Olewniczak ); 155fe5d6d1eSSzymon Olewniczak 156fe5d6d1eSSzymon Olewniczak if ($this->type > 0) { 157fe5d6d1eSSzymon Olewniczak $rep['action'] = $this->model->action->getLang('mail_cause_added'); 158fe5d6d1eSSzymon Olewniczak $rep['action_color'] = '#ffeedc'; 159fe5d6d1eSSzymon Olewniczak $rep['action_border_color'] = '#ddb68d'; 160fe5d6d1eSSzymon Olewniczak } else { 161fe5d6d1eSSzymon Olewniczak $rep['action'] = $this->model->action->getLang('mail_comment_added'); 162fe5d6d1eSSzymon Olewniczak $rep['action_color'] = 'transparent'; 163fe5d6d1eSSzymon Olewniczak $rep['action_border_color'] = '#E5E5E5'; 164fe5d6d1eSSzymon Olewniczak } 165fe5d6d1eSSzymon Olewniczak 1668a638198SSzymon Olewniczak $this->thread->mail_notify($rep); 167fe5d6d1eSSzymon Olewniczak } 168fe5d6d1eSSzymon Olewniczak} 169