1fe5d6d1eSSzymon Olewniczak<?php 2fe5d6d1eSSzymon Olewniczak// 3fe5d6d1eSSzymon Olewniczak//if(!defined('DOKU_INC')) die(); 4fe5d6d1eSSzymon Olewniczak// 5fe5d6d1eSSzymon Olewniczak//require_once 'entity.php'; 6fe5d6d1eSSzymon Olewniczak// 7fe5d6d1eSSzymon Olewniczak// 8fe5d6d1eSSzymon Olewniczak//class BEZ_mdl_Dummy_Commcause extends BEZ_mdl_Entity { 9fe5d6d1eSSzymon Olewniczak// 10fe5d6d1eSSzymon Olewniczak// protected $coordinator; 11fe5d6d1eSSzymon Olewniczak// 12fe5d6d1eSSzymon Olewniczak// function __construct($model, $defaults=array()) { 13fe5d6d1eSSzymon Olewniczak// parent::__construct($model); 14fe5d6d1eSSzymon Olewniczak// 15fe5d6d1eSSzymon Olewniczak// if (!isset($defaults['issue'])) { 16fe5d6d1eSSzymon Olewniczak// throw new Exception('every dummy entity must have issue in $defaults'); 17fe5d6d1eSSzymon Olewniczak// } 18fe5d6d1eSSzymon Olewniczak// 19fe5d6d1eSSzymon Olewniczak// $issue = $this->model->issues->get_one($defaults['issue']); 20fe5d6d1eSSzymon Olewniczak// $this->coordinator = $issue->coordinator; 21fe5d6d1eSSzymon Olewniczak// } 22fe5d6d1eSSzymon Olewniczak// 23fe5d6d1eSSzymon Olewniczak// public function __get($property) { 24fe5d6d1eSSzymon Olewniczak// if ($property === 'coordinator') { 25fe5d6d1eSSzymon Olewniczak// return $this->coordinator; 26fe5d6d1eSSzymon Olewniczak// } 27fe5d6d1eSSzymon Olewniczak// parent::__get($property); 28fe5d6d1eSSzymon Olewniczak// } 29fe5d6d1eSSzymon Olewniczak//} 30fe5d6d1eSSzymon Olewniczak// 31fe5d6d1eSSzymon Olewniczak 32fe5d6d1eSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 33fe5d6d1eSSzymon Olewniczak 34fe5d6d1eSSzymon Olewniczakuse dokuwiki\plugin\bez\meta\PermissionDeniedException; 35fe5d6d1eSSzymon Olewniczakuse dokuwiki\plugin\bez\meta\ValidationException; 36fe5d6d1eSSzymon Olewniczak 37fe5d6d1eSSzymon Olewniczakclass Thread_comment extends Entity { 38fe5d6d1eSSzymon Olewniczak 39fe5d6d1eSSzymon Olewniczak //real 40*8a638198SSzymon Olewniczak protected $id, $thread_id, $type, $author, $create_date, $last_modification_date, $content, $content_html, $task_count; 41fe5d6d1eSSzymon Olewniczak 42fe5d6d1eSSzymon Olewniczak //virtual 43*8a638198SSzymon Olewniczak protected $coordinator; 44*8a638198SSzymon Olewniczak 45*8a638198SSzymon Olewniczak /** @var Thread */ 46*8a638198SSzymon Olewniczak protected $thread; 47fe5d6d1eSSzymon Olewniczak 48fe5d6d1eSSzymon Olewniczak //protected $parse_int = array('tasks_count'); 49fe5d6d1eSSzymon Olewniczak public static function get_columns() { 50*8a638198SSzymon Olewniczak return array('id', 'thread_id', 'type', 'author', 51*8a638198SSzymon Olewniczak 'create_date', 'last_modification_date', 'content', 'content_html', 'task_count'); 52*8a638198SSzymon Olewniczak } 53*8a638198SSzymon Olewniczak 54*8a638198SSzymon Olewniczak public function __get($property) { 55*8a638198SSzymon Olewniczak if ($property == 'coordinator' || $property == 'thread') { 56*8a638198SSzymon Olewniczak return $this->$property; 57*8a638198SSzymon Olewniczak } 58*8a638198SSzymon Olewniczak return parent::__get($property); 59fe5d6d1eSSzymon Olewniczak } 60fe5d6d1eSSzymon Olewniczak 61fe5d6d1eSSzymon Olewniczak// public function get_virtual_columns() { 62fe5d6d1eSSzymon Olewniczak// return array('coordinator', 'tasks_count'); 63fe5d6d1eSSzymon Olewniczak// } 64fe5d6d1eSSzymon Olewniczak// 65fe5d6d1eSSzymon Olewniczak// public function get_table_name() { 66fe5d6d1eSSzymon Olewniczak// return 'commcauses'; 67fe5d6d1eSSzymon Olewniczak// } 68fe5d6d1eSSzymon Olewniczak 69fe5d6d1eSSzymon Olewniczak //defaults: isssue, type 70fe5d6d1eSSzymon Olewniczak public function __construct($model, $defaults=array()) { 71fe5d6d1eSSzymon Olewniczak parent::__construct($model, $defaults); 72fe5d6d1eSSzymon Olewniczak 73*8a638198SSzymon Olewniczak// $this->validator->set_rules(array( 74*8a638198SSzymon Olewniczak// 'issue' => array(array('numeric'), 'NOT NULL'), 75*8a638198SSzymon Olewniczak// 'datetime' => array(array('sqlite_datetime'), 'NOT NULL'), 76*8a638198SSzymon Olewniczak// 'reporter' => array(array('dw_user'), 'NOT NULL'), 77*8a638198SSzymon Olewniczak// 'type' => array(array('select', array('0', '1', '2')), 'NOT NULL'), 78*8a638198SSzymon Olewniczak// 'content' => array(array('length', 10000), 'NOT NULL'), 79*8a638198SSzymon Olewniczak// 'content_cache' => array(array('length', 10000), 'NOT NULL'), 80*8a638198SSzymon Olewniczak// 81*8a638198SSzymon Olewniczak// 'coordinator' => array(array('dw_user', array('-proposal')), 'NOT NULL') 82*8a638198SSzymon Olewniczak// )); 83fe5d6d1eSSzymon Olewniczak 84*8a638198SSzymon Olewniczak if (!isset($defaults['thread'])) { 85*8a638198SSzymon Olewniczak throw new \Exception('$defaults[thread] not set'); 86*8a638198SSzymon Olewniczak } 87*8a638198SSzymon Olewniczak $this->thread = $defaults['thread']; 88*8a638198SSzymon Olewniczak 89*8a638198SSzymon Olewniczak $this->validator->set_rules(array( 90*8a638198SSzymon Olewniczak //'type' => array(array('select', array('0', '1', '2')), 'NOT NULL'), 91*8a638198SSzymon Olewniczak 'content' => array(array('length', 10000), 'NOT NULL') 92fe5d6d1eSSzymon Olewniczak )); 93fe5d6d1eSSzymon Olewniczak 94fe5d6d1eSSzymon Olewniczak //new object 95fe5d6d1eSSzymon Olewniczak if ($this->id === NULL) { 96fe5d6d1eSSzymon Olewniczak 97*8a638198SSzymon Olewniczak $this->author = $this->model->user_nick; 98*8a638198SSzymon Olewniczak $this->create_date = date('c'); 99*8a638198SSzymon Olewniczak $this->last_modification_date = $this->create_date; 100fe5d6d1eSSzymon Olewniczak 101fe5d6d1eSSzymon Olewniczak 102fe5d6d1eSSzymon Olewniczak 103*8a638198SSzymon Olewniczak $this->thread_id = $this->thread->id; 104*8a638198SSzymon Olewniczak $this->coordinator = $this->thread->coordinator; 105*8a638198SSzymon Olewniczak 106*8a638198SSzymon Olewniczak// //we are coordinator of newly created object 107*8a638198SSzymon Olewniczak// if ($issue->user_is_coordinator()) { 108*8a638198SSzymon Olewniczak// //throws ValidationException 109*8a638198SSzymon Olewniczak// $this->type = 110*8a638198SSzymon Olewniczak// $this->validator->validate_field('type', $defaults['type']); 111*8a638198SSzymon Olewniczak// } else { 112*8a638198SSzymon Olewniczak// $this->type = '0'; 113*8a638198SSzymon Olewniczak// } 114*8a638198SSzymon Olewniczak 115*8a638198SSzymon Olewniczak// $this->reporter = $this->model->user_nick; 116*8a638198SSzymon Olewniczak// $this->datetime = $this->sqlite_date(); 117fe5d6d1eSSzymon Olewniczak } 118fe5d6d1eSSzymon Olewniczak 119*8a638198SSzymon Olewniczak //set validation 120*8a638198SSzymon Olewniczak if ($this->thread->user_is_coordinator()) { 121*8a638198SSzymon Olewniczak $this->validator->set_rules( 122*8a638198SSzymon Olewniczak array( 123*8a638198SSzymon Olewniczak 'type' => array( 124*8a638198SSzymon Olewniczak array('select', array('comment', 'cause_real', 'cause_potential', 'closing_comment')), 125*8a638198SSzymon Olewniczak 'NOT NULL') 126*8a638198SSzymon Olewniczak ) 127*8a638198SSzymon Olewniczak ); 128fe5d6d1eSSzymon Olewniczak } 129fe5d6d1eSSzymon Olewniczak } 130fe5d6d1eSSzymon Olewniczak 131*8a638198SSzymon Olewniczak// public function update_cache() { 132*8a638198SSzymon Olewniczak// if ($this->model->acl->get_level() < BEZ_AUTH_ADMIN) { 133*8a638198SSzymon Olewniczak// return false; 134*8a638198SSzymon Olewniczak// } 135*8a638198SSzymon Olewniczak// $this->content_cache = $this->helper->wiki_parse($this->content); 136*8a638198SSzymon Olewniczak// } 137*8a638198SSzymon Olewniczak// 138*8a638198SSzymon Olewniczak// public function set_data($data, $filter=NULL) { 139*8a638198SSzymon Olewniczak// $input = array('content', 'type'); 140*8a638198SSzymon Olewniczak// $val_data = $this->validator->validate($data, $input); 141*8a638198SSzymon Olewniczak// 142*8a638198SSzymon Olewniczak// if ($val_data === false) { 143*8a638198SSzymon Olewniczak// throw new ValidationException('issues', $this->validator->get_errors()); 144*8a638198SSzymon Olewniczak// } 145*8a638198SSzymon Olewniczak// 146*8a638198SSzymon Olewniczak// $this->set_property_array($val_data); 147*8a638198SSzymon Olewniczak 148*8a638198SSzymon Olewniczak// $this->content_cache = $this->helper->wiki_parse($this->content); 149*8a638198SSzymon Olewniczak// } 150*8a638198SSzymon Olewniczak 151*8a638198SSzymon Olewniczak public function set_data($post) { 152*8a638198SSzymon Olewniczak parent::set_data($post); 153*8a638198SSzymon Olewniczak $this->content_html = p_render('xhtml',p_get_instructions($this->content), $ignore); 154fe5d6d1eSSzymon Olewniczak } 155fe5d6d1eSSzymon Olewniczak 156*8a638198SSzymon Olewniczak// public function get_meta_fields() { 157*8a638198SSzymon Olewniczak// return array('reporter', 'datetime'); 158*8a638198SSzymon Olewniczak// } 159*8a638198SSzymon Olewniczak// 160*8a638198SSzymon Olewniczak// public function set_meta($post) { 161*8a638198SSzymon Olewniczak// parent::set_data($post, $this->get_meta_fields()); 162*8a638198SSzymon Olewniczak// } 163fe5d6d1eSSzymon Olewniczak 164*8a638198SSzymon Olewniczak public function mail_notify_add() { 165*8a638198SSzymon Olewniczak// if ($thread->id !== $this->thread_id) { 166*8a638198SSzymon Olewniczak// throw new Exception('issue object id and commcause->issue does not match'); 167*8a638198SSzymon Olewniczak// } 168fe5d6d1eSSzymon Olewniczak 169fe5d6d1eSSzymon Olewniczak $rep = array( 170fe5d6d1eSSzymon Olewniczak 'content' => $this->content, 171*8a638198SSzymon Olewniczak 'content_html' => $this->content_html, 172*8a638198SSzymon Olewniczak 'who' => $this->author, 173*8a638198SSzymon Olewniczak 'when' => $this->create_date 174fe5d6d1eSSzymon Olewniczak ); 175fe5d6d1eSSzymon Olewniczak 176fe5d6d1eSSzymon Olewniczak if ($this->type > 0) { 177fe5d6d1eSSzymon Olewniczak $rep['action'] = $this->model->action->getLang('mail_cause_added'); 178fe5d6d1eSSzymon Olewniczak $rep['action_color'] = '#ffeedc'; 179fe5d6d1eSSzymon Olewniczak $rep['action_border_color'] = '#ddb68d'; 180fe5d6d1eSSzymon Olewniczak } else { 181fe5d6d1eSSzymon Olewniczak $rep['action'] = $this->model->action->getLang('mail_comment_added'); 182fe5d6d1eSSzymon Olewniczak $rep['action_color'] = 'transparent'; 183fe5d6d1eSSzymon Olewniczak $rep['action_border_color'] = '#E5E5E5'; 184fe5d6d1eSSzymon Olewniczak } 185fe5d6d1eSSzymon Olewniczak 186*8a638198SSzymon Olewniczak $this->thread->mail_notify($rep); 187fe5d6d1eSSzymon Olewniczak } 188fe5d6d1eSSzymon Olewniczak} 189