18a638198SSzymon Olewniczak<?php 28a638198SSzymon Olewniczak 38a638198SSzymon Olewniczak/* 48a638198SSzymon Olewniczak * Task coordinator is taken from tasktypes 58a638198SSzymon Olewniczak */ 68a638198SSzymon Olewniczak//require_once 'entity.php'; 78a638198SSzymon Olewniczak// 88a638198SSzymon Olewniczak//class BEZ_mdl_Dummy_Task extends BEZ_mdl_Entity { 98a638198SSzymon Olewniczak// protected $coordinator; 108a638198SSzymon Olewniczak// 118a638198SSzymon Olewniczak// function __construct($model, $defaults=array()) { 128a638198SSzymon Olewniczak// parent::__construct($model); 138a638198SSzymon Olewniczak// 148a638198SSzymon Olewniczak// if (isset($defaults['issue'])) { 158a638198SSzymon Olewniczak// $issue = $this->model->issues->get_one($defaults['issue']); 168a638198SSzymon Olewniczak// $this->coordinator = $issue->coordinator; 178a638198SSzymon Olewniczak// } else { 188a638198SSzymon Olewniczak// $this->coordinator = ''; 198a638198SSzymon Olewniczak// } 208a638198SSzymon Olewniczak// } 218a638198SSzymon Olewniczak// 228a638198SSzymon Olewniczak// public function __get($property) { 238a638198SSzymon Olewniczak// if ($property === 'coordinator') { 248a638198SSzymon Olewniczak// return $this->coordinator; 258a638198SSzymon Olewniczak// } 268a638198SSzymon Olewniczak// parent::__get($property); 278a638198SSzymon Olewniczak// } 288a638198SSzymon Olewniczak//} 298a638198SSzymon Olewniczak 308a638198SSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 318a638198SSzymon Olewniczak 328a638198SSzymon Olewniczakuse dokuwiki\plugin\bez\meta\Mailer; 338a638198SSzymon Olewniczakuse dokuwiki\plugin\bez\meta\PermissionDeniedException; 348a638198SSzymon Olewniczakuse dokuwiki\plugin\bez\meta\ValidationException; 358a638198SSzymon Olewniczak 368a638198SSzymon Olewniczakclass Task extends Entity { 378a638198SSzymon Olewniczak 388a638198SSzymon Olewniczak protected $id; 398a638198SSzymon Olewniczak 40e8827d73SSzymon Olewniczak protected $original_poster, $assignee, $closed_by; 418a638198SSzymon Olewniczak 428a638198SSzymon Olewniczak protected $private, $lock; 438a638198SSzymon Olewniczak 448a638198SSzymon Olewniczak protected $state, $type; 458a638198SSzymon Olewniczak 468a638198SSzymon Olewniczak protected $create_date, $last_activity_date, $last_modification_date, $close_date; 478a638198SSzymon Olewniczak 488a638198SSzymon Olewniczak protected $cost, $plan_date, $all_day_event, $start_time, $finish_time; 498a638198SSzymon Olewniczak 508a638198SSzymon Olewniczak protected $content, $content_html; 518a638198SSzymon Olewniczak 528a638198SSzymon Olewniczak protected $thread_id, $thread_comment_id, $task_program_id; 538a638198SSzymon Olewniczak 548a638198SSzymon Olewniczak /** @var \dokuwiki\plugin\bez\mdl\Thread */ 558a638198SSzymon Olewniczak protected $thread; 568a638198SSzymon Olewniczak 578a638198SSzymon Olewniczak /** @var Thread_comment */ 588a638198SSzymon Olewniczak protected $thread_comment; 598a638198SSzymon Olewniczak 608a638198SSzymon Olewniczak //virtual 61*ff14b107SSzymon Olewniczak protected $task_program_name, $priority, $coordinator; 628a638198SSzymon Olewniczak 638a638198SSzymon Olewniczak public static function get_columns() { 648a638198SSzymon Olewniczak return array('id', 65e8827d73SSzymon Olewniczak 'original_poster', 'assignee', 'closed_by', 668a638198SSzymon Olewniczak 'private', 'lock', 678a638198SSzymon Olewniczak 'state', 'type', 688a638198SSzymon Olewniczak 'create_date', 'last_activity_date', 'last_modification_date', 'close_date', 698a638198SSzymon Olewniczak 'cost', 'plan_date', 'all_day_event', 'start_time', 'finish_time', 708a638198SSzymon Olewniczak 'content', 'content_html', 718a638198SSzymon Olewniczak 'thread_id', 'thread_comment_id', 'task_program_id'); 728a638198SSzymon Olewniczak } 738a638198SSzymon Olewniczak 74e8827d73SSzymon Olewniczak public static function get_types() { 75e8827d73SSzymon Olewniczak return array('correction', 'corrective', 'preventive', 'program'); 76e8827d73SSzymon Olewniczak } 77e8827d73SSzymon Olewniczak 78e8827d73SSzymon Olewniczak public static function get_states() { 79e8827d73SSzymon Olewniczak return array('opened', 'done'); 80e8827d73SSzymon Olewniczak } 81e8827d73SSzymon Olewniczak 828a638198SSzymon Olewniczak public function __get($property) { 83*ff14b107SSzymon Olewniczak if ($property == 'thread') { 84*ff14b107SSzymon Olewniczak if ($this->thread_id == null) { 85*ff14b107SSzymon Olewniczak return null; 86*ff14b107SSzymon Olewniczak } 87*ff14b107SSzymon Olewniczak if ($this->thread == null) { 88*ff14b107SSzymon Olewniczak $this->thread = $this->model->threadFactory->get_one($this->thread_id); 89*ff14b107SSzymon Olewniczak } 90*ff14b107SSzymon Olewniczak return $this->thread; 91*ff14b107SSzymon Olewniczak 92*ff14b107SSzymon Olewniczak } elseif($property == 'thread_comment') { 93*ff14b107SSzymon Olewniczak if ($this->thread_comment_id == null) { 94*ff14b107SSzymon Olewniczak return null; 95*ff14b107SSzymon Olewniczak } 96*ff14b107SSzymon Olewniczak if ($this->thread_comment == null) { 97*ff14b107SSzymon Olewniczak $this->thread = $this->model->thread_commentFactory->get_one($this->thread_comment_id); 98*ff14b107SSzymon Olewniczak } 99*ff14b107SSzymon Olewniczak return $this->thread_comment; 100*ff14b107SSzymon Olewniczak 101*ff14b107SSzymon Olewniczak } elseif($property == 'priority' || $property == 'coordinator' || $property == 'task_program_name') { 1028a638198SSzymon Olewniczak return $this->$property; 1038a638198SSzymon Olewniczak } 1048a638198SSzymon Olewniczak return parent::__get($property); 1058a638198SSzymon Olewniczak } 1068a638198SSzymon Olewniczak 1078a638198SSzymon Olewniczak 1088a638198SSzymon Olewniczak// private function state_string() { 1098a638198SSzymon Olewniczak// switch($this->state) { 1108a638198SSzymon Olewniczak// case '0': return 'task_opened'; 1118a638198SSzymon Olewniczak// case '-outdated': return 'task_outdated'; 1128a638198SSzymon Olewniczak// case '1': return 'task_done'; 1138a638198SSzymon Olewniczak// case '2': return 'task_rejected'; 1148a638198SSzymon Olewniczak// } 1158a638198SSzymon Olewniczak// } 1168a638198SSzymon Olewniczak// 1178a638198SSzymon Olewniczak// private function action_string() { 1188a638198SSzymon Olewniczak// switch($this->action) { 1198a638198SSzymon Olewniczak// case '0': return 'correction'; 1208a638198SSzymon Olewniczak// case '1': return 'corrective_action'; 1218a638198SSzymon Olewniczak// case '2': return 'preventive_action'; 1228a638198SSzymon Olewniczak// case '3': return 'programme'; 1238a638198SSzymon Olewniczak// } 1248a638198SSzymon Olewniczak// } 1258a638198SSzymon Olewniczak// 1268a638198SSzymon Olewniczak// public function cost_localized() { 1278a638198SSzymon Olewniczak// if ($this->cost === '') { 1288a638198SSzymon Olewniczak// return ''; 1298a638198SSzymon Olewniczak// } 1308a638198SSzymon Olewniczak// 1318a638198SSzymon Olewniczak// return sprintf('%.2f', (float)$this->cost); 1328a638198SSzymon Olewniczak// } 1338a638198SSzymon Olewniczak// 1348a638198SSzymon Olewniczak// private function update_virtual_columns() { 1358a638198SSzymon Olewniczak// $this->state_string = $this->model->action->getLang($this->state_string()); 1368a638198SSzymon Olewniczak// $this->action_string = $this->model->action->getLang($this->action_string()); 1378a638198SSzymon Olewniczak// $this->tasktype_string = $this->model->tasktypes->get_one($this->tasktype)->type; 1388a638198SSzymon Olewniczak// } 1398a638198SSzymon Olewniczak// 1408a638198SSzymon Olewniczak// public function user_is_executor() { 1418a638198SSzymon Olewniczak// if ($this->executor === $this->model->user_nick || 1428a638198SSzymon Olewniczak// $this->model->acl->get_level() >= BEZ_AUTH_ADMIN) { 1438a638198SSzymon Olewniczak// return true; 1448a638198SSzymon Olewniczak// } 1458a638198SSzymon Olewniczak// } 1468a638198SSzymon Olewniczak 1478a638198SSzymon Olewniczak //by defaults you can set: cause, tasktype and issue 1488a638198SSzymon Olewniczak //tasktype is required 1498a638198SSzymon Olewniczak public function __construct($model, $defaults=array()) { 1508a638198SSzymon Olewniczak parent::__construct($model, $defaults); 1518a638198SSzymon Olewniczak 1528a638198SSzymon Olewniczak 1538a638198SSzymon Olewniczak //array(filter, NULL) 1548a638198SSzymon Olewniczak $this->validator->set_rules(array( 1558a638198SSzymon Olewniczak// 'reporter' => array(array('dw_user'), 'NOT NULL'), 1568a638198SSzymon Olewniczak// 'date' => array(array('unix_timestamp'), 'NOT NULL'), 1578a638198SSzymon Olewniczak// 'close_date' => array(array('unix_timestamp'), 'NULL'), 1588a638198SSzymon Olewniczak// 'cause' => array(array('numeric'), 'NULL'), 1598a638198SSzymon Olewniczak 1608a638198SSzymon Olewniczak// 'executor' => array(array('dw_user'), 'NOT NULL'), 1618a638198SSzymon Olewniczak 1628a638198SSzymon Olewniczak// 'issue' => array(array('numeric'), 'NULL'), 1638a638198SSzymon Olewniczak 1648a638198SSzymon Olewniczak 'assignee' => array(array('dw_user'), 'NOT NULL'), 1658a638198SSzymon Olewniczak 'cost' => array(array('numeric'), 'NULL'), 1668a638198SSzymon Olewniczak 'plan_date' => array(array('iso_date'), 'NOT NULL'), 1678a638198SSzymon Olewniczak 'all_day_event' => array(array('select', array('0', '1')), 'NOT NULL'), 1688a638198SSzymon Olewniczak 'start_time' => array(array('time'), 'NULL'), 1698a638198SSzymon Olewniczak 'finish_time' => array(array('time'), 'NULL'), 1708a638198SSzymon Olewniczak 'content' => array(array('length', 10000), 'NOT NULL'), 171e8827d73SSzymon Olewniczak 'thread_comment_id' => array(array('numeric'), 'NULL'), 1728a638198SSzymon Olewniczak 'task_program_id' => array(array('numeric'), 'NULL') 1738a638198SSzymon Olewniczak 1748a638198SSzymon Olewniczak// 'state' => array(array('select', array('0', '1', '2')), 'NULL'), 1758a638198SSzymon Olewniczak// 'reason' => array(array('length', 10000), 'NULL'), 1768a638198SSzymon Olewniczak 1778a638198SSzymon Olewniczak// 'coordinator' => array(array('dw_user', array('-none')), 'NOT NULL'), 1788a638198SSzymon Olewniczak )); 1798a638198SSzymon Olewniczak 1808a638198SSzymon Olewniczak //we've created empty object 1818a638198SSzymon Olewniczak if ($this->id === NULL) { 1828a638198SSzymon Olewniczak $this->original_poster = $this->model->user_nick; 1838a638198SSzymon Olewniczak $this->create_date = date('c'); 1848a638198SSzymon Olewniczak $this->last_activity_date = $this->create_date; 1858a638198SSzymon Olewniczak $this->last_modification_date = $this->create_date; 1868a638198SSzymon Olewniczak 1878a638198SSzymon Olewniczak $this->state = 'opened'; 1888a638198SSzymon Olewniczak 1898a638198SSzymon Olewniczak if (isset($defaults['thread'])) { 1908a638198SSzymon Olewniczak $this->thread = $defaults['thread']; 1918a638198SSzymon Olewniczak $this->thread_id = $this->thread->id; 1928a638198SSzymon Olewniczak $this->type = 'correction'; 1938a638198SSzymon Olewniczak 1948a638198SSzymon Olewniczak if (isset($defaults['thread_comment'])) { 1958a638198SSzymon Olewniczak $this->thread_comment = $defaults['thread_comment']; 1968a638198SSzymon Olewniczak $this->thread_comment_id = $this->thread_comment->id; 197e8827d73SSzymon Olewniczak 198e8827d73SSzymon Olewniczak if ($this->thread_comment->type == 'cause_real') { 1998a638198SSzymon Olewniczak $this->type = 'corrective'; 200e8827d73SSzymon Olewniczak } else { 201e8827d73SSzymon Olewniczak $this->type = 'preventive'; 202e8827d73SSzymon Olewniczak } 2038a638198SSzymon Olewniczak } 204*ff14b107SSzymon Olewniczak } else { 205*ff14b107SSzymon Olewniczak $this->type = 'program'; 2068a638198SSzymon Olewniczak } 2078a638198SSzymon Olewniczak 2088a638198SSzymon Olewniczak// //meta 2098a638198SSzymon Olewniczak// $this->reporter = $this->model->user_nick; 2108a638198SSzymon Olewniczak// $this->date = time(); 2118a638198SSzymon Olewniczak// 2128a638198SSzymon Olewniczak// $this->state = '0'; 2138a638198SSzymon Olewniczak// $this->all_day_event = '1'; 2148a638198SSzymon Olewniczak// 2158a638198SSzymon Olewniczak// //throws ValidationException 2168a638198SSzymon Olewniczak// $this->issue = $this->validator->validate_field('issue', $defaults['issue']); 2178a638198SSzymon Olewniczak// 2188a638198SSzymon Olewniczak// if ($this->issue !== '') { 2198a638198SSzymon Olewniczak// $issue = $this->model->issues->get_one($defaults['issue']); 2208a638198SSzymon Olewniczak// $this->coordinator = $issue->coordinator; 2218a638198SSzymon Olewniczak// } else { 2228a638198SSzymon Olewniczak// $this->coordinator = ''; 2238a638198SSzymon Olewniczak// } 2248a638198SSzymon Olewniczak// 2258a638198SSzymon Olewniczak// //throws ValidationException 2268a638198SSzymon Olewniczak// $this->validator->validate_field('cause', $defaults['cause']); 2278a638198SSzymon Olewniczak// $this->cause = $defaults['cause']; 2288a638198SSzymon Olewniczak// 2298a638198SSzymon Olewniczak// //by default reporter is a executor 2308a638198SSzymon Olewniczak// $this->executor = $this->reporter; 2318a638198SSzymon Olewniczak 2328a638198SSzymon Olewniczak 233e8827d73SSzymon Olewniczak //we get object form db 234e8827d73SSzymon Olewniczak } else { 235*ff14b107SSzymon Olewniczak 236e8827d73SSzymon Olewniczak if (isset($defaults['thread']) && $this->thread_id == $defaults['thread']->id) { 237e8827d73SSzymon Olewniczak $this->thread = $defaults['thread']; 238e8827d73SSzymon Olewniczak } 239e8827d73SSzymon Olewniczak 240e8827d73SSzymon Olewniczak if (isset($defaults['thread_comment']) && $this->thread_comment_id == $defaults['thread_comment']->id) { 241e8827d73SSzymon Olewniczak $this->thread_comment = $defaults['thread_comment']; 242e8827d73SSzymon Olewniczak } 243e8827d73SSzymon Olewniczak 244e8827d73SSzymon Olewniczak } 2458a638198SSzymon Olewniczak 2468a638198SSzymon Olewniczak if ($this->thread_id == '') { 2478a638198SSzymon Olewniczak $this->validator->set_rules(array( 248e8827d73SSzymon Olewniczak 'task_program_id' => array(array('numeric'), 'NOT NULL'), 2498a638198SSzymon Olewniczak )); 250e8827d73SSzymon Olewniczak //this field is unused in program tasks 251e8827d73SSzymon Olewniczak $this->validator->delete_rule('thread_comment_id'); 2528a638198SSzymon Olewniczak } 2538a638198SSzymon Olewniczak 254e8827d73SSzymon Olewniczak 2558a638198SSzymon Olewniczak// //close_date required 2568a638198SSzymon Olewniczak// if ($this->state !== '0') { 2578a638198SSzymon Olewniczak// $this->validator->set_rules(array( 2588a638198SSzymon Olewniczak// 'close_date' => array(array('unix_timestamp'), 'NOT NULL') 2598a638198SSzymon Olewniczak// )); 2608a638198SSzymon Olewniczak// } 2618a638198SSzymon Olewniczak 2628a638198SSzymon Olewniczak //explode subscribents 2638a638198SSzymon Olewniczak// if ($this->subscribents !== NULL) { 2648a638198SSzymon Olewniczak// $exp_part = explode(',', $this->subscribents); 2658a638198SSzymon Olewniczak// foreach ($exp_part as $subscribent) { 2668a638198SSzymon Olewniczak// $this->subscribents_array[$subscribent] = $subscribent; 2678a638198SSzymon Olewniczak// } 2688a638198SSzymon Olewniczak// } 2698a638198SSzymon Olewniczak// 2708a638198SSzymon Olewniczak// //we've created empty object 2718a638198SSzymon Olewniczak// if ($this->id === NULL) { 2728a638198SSzymon Olewniczak// //throws ValidationException 2738a638198SSzymon Olewniczak// $this->validator->validate_field('tasktype', $defaults['tasktype']); 2748a638198SSzymon Olewniczak// $this->tasktype = $defaults['tasktype']; 2758a638198SSzymon Olewniczak// } 2768a638198SSzymon Olewniczak } 2778a638198SSzymon Olewniczak 2788a638198SSzymon Olewniczak 2798a638198SSzymon Olewniczak public function set_data($post, $filter=NULL) { 2808a638198SSzymon Olewniczak parent::set_data($post); 2818a638198SSzymon Olewniczak 2828a638198SSzymon Olewniczak $this->content_html = p_render('xhtml',p_get_instructions($this->content), $ignore); 2838a638198SSzymon Olewniczak 2848a638198SSzymon Olewniczak //update dates 2858a638198SSzymon Olewniczak $this->last_modification_date = date('c'); 2868a638198SSzymon Olewniczak $this->last_activity_date = $this->last_modification_date; 2878a638198SSzymon Olewniczak 288*ff14b107SSzymon Olewniczak //all day event 289*ff14b107SSzymon Olewniczak if (!isset($post['all_day_event'])) { 290*ff14b107SSzymon Olewniczak $post['all_day_event'] = '0'; 291*ff14b107SSzymon Olewniczak } 292*ff14b107SSzymon Olewniczak 2938a638198SSzymon Olewniczak //specjalne reguły 2948a638198SSzymon Olewniczak// if ($this->issue === '') { 2958a638198SSzymon Olewniczak// $this->cause = ''; 2968a638198SSzymon Olewniczak// } 2978a638198SSzymon Olewniczak 2988a638198SSzymon Olewniczak //set parsed 2998a638198SSzymon Olewniczak// $this->task_cache = $this->helper->wiki_parse($this->task); 3008a638198SSzymon Olewniczak// $this->reason_cache = $this->helper->wiki_parse($this->reason); 3018a638198SSzymon Olewniczak 3028a638198SSzymon Olewniczak //update virtuals 3038a638198SSzymon Olewniczak //$this->update_virtual_columns(); 3048a638198SSzymon Olewniczak 3058a638198SSzymon Olewniczak return true; 3068a638198SSzymon Olewniczak } 3078a638198SSzymon Olewniczak 308e8827d73SSzymon Olewniczak public function set_state($state) { 309e8827d73SSzymon Olewniczak if ($this->acl_of('state') < BEZ_PERMISSION_CHANGE) { 310e8827d73SSzymon Olewniczak throw new PermissionDeniedException(); 311e8827d73SSzymon Olewniczak } 312e8827d73SSzymon Olewniczak 313e8827d73SSzymon Olewniczak if (!in_array($state, array('opened', 'done'))) { 314e8827d73SSzymon Olewniczak throw new ValidationException('task', array('sholud be opened or done')); 315e8827d73SSzymon Olewniczak } 316e8827d73SSzymon Olewniczak 317e8827d73SSzymon Olewniczak //nothing to do 318e8827d73SSzymon Olewniczak if ($state == $this->state) { 319e8827d73SSzymon Olewniczak return; 320e8827d73SSzymon Olewniczak } 321e8827d73SSzymon Olewniczak 322e8827d73SSzymon Olewniczak if ($state == 'done') { 323e8827d73SSzymon Olewniczak $this->model->sqlite->query("UPDATE {$this->get_table_name()} SET state=?, closed_by=?, close_date=? WHERE id=?", 324e8827d73SSzymon Olewniczak $state, 325e8827d73SSzymon Olewniczak $this->model->user_nick, 326e8827d73SSzymon Olewniczak date('c'), 327e8827d73SSzymon Olewniczak $this->id); 328e8827d73SSzymon Olewniczak //reopen the task 329e8827d73SSzymon Olewniczak } else { 330e8827d73SSzymon Olewniczak $this->model->sqlite->query("UPDATE {$this->get_table_name()} SET state=? WHERE id=?", $state, $this->id); 331e8827d73SSzymon Olewniczak } 332e8827d73SSzymon Olewniczak 333e8827d73SSzymon Olewniczak $this->state = $state; 334e8827d73SSzymon Olewniczak } 335e8827d73SSzymon Olewniczak 336e8827d73SSzymon Olewniczak public function update_last_activity() { 337e8827d73SSzymon Olewniczak $this->last_activity_date = date('c'); 338e8827d73SSzymon Olewniczak $this->model->sqlite->query('UPDATE task SET last_activity_date=? WHERE id=?', 339e8827d73SSzymon Olewniczak $this->last_activity_date, $this->id); 340e8827d73SSzymon Olewniczak } 341e8827d73SSzymon Olewniczak 3428a638198SSzymon Olewniczak// public function update_cache() { 3438a638198SSzymon Olewniczak// if ($this->model->acl->get_level() < BEZ_AUTH_ADMIN) { 3448a638198SSzymon Olewniczak// return false; 3458a638198SSzymon Olewniczak// } 3468a638198SSzymon Olewniczak// $this->task_cache = $this->helper->wiki_parse($this->task); 3478a638198SSzymon Olewniczak// $this->reason_cache = $this->helper->wiki_parse($this->reason); 3488a638198SSzymon Olewniczak// } 3498a638198SSzymon Olewniczak// 3508a638198SSzymon Olewniczak// public function set_state($data) { 3518a638198SSzymon Olewniczak// //reason is required while changing state 3528a638198SSzymon Olewniczak// if ($data['state'] === '2') { 3538a638198SSzymon Olewniczak// $this->validator->set_rules(array( 3548a638198SSzymon Olewniczak// 'reason' => array(array('length', 10000), 'NOT NULL') 3558a638198SSzymon Olewniczak// )); 3568a638198SSzymon Olewniczak// } 3578a638198SSzymon Olewniczak// 3588a638198SSzymon Olewniczak// $val_data = $this->validator->validate($data, array('state', 'reason')); 3598a638198SSzymon Olewniczak// if ($val_data === false) { 3608a638198SSzymon Olewniczak// throw new ValidationException('tasks', $this->validator->get_errors()); 3618a638198SSzymon Olewniczak// } 3628a638198SSzymon Olewniczak// 3638a638198SSzymon Olewniczak// //if state is changed 3648a638198SSzymon Olewniczak// if ($this->state != $data['state']) { 3658a638198SSzymon Olewniczak// $this->close_date = time(); 3668a638198SSzymon Olewniczak// } 3678a638198SSzymon Olewniczak// 3688a638198SSzymon Olewniczak// $this->set_property_array($val_data); 3698a638198SSzymon Olewniczak// $this->reason_cache = $this->helper->wiki_parse($this->reason); 3708a638198SSzymon Olewniczak// 3718a638198SSzymon Olewniczak// //update virtuals 3728a638198SSzymon Olewniczak// $this->update_virtual_columns(); 3738a638198SSzymon Olewniczak// 3748a638198SSzymon Olewniczak// return true; 3758a638198SSzymon Olewniczak// } 3768a638198SSzymon Olewniczak// 3778a638198SSzymon Olewniczak// public function get_meta_fields() { 3788a638198SSzymon Olewniczak// return array('reporter', 'date', 'close_date'); 3798a638198SSzymon Olewniczak// } 3808a638198SSzymon Olewniczak// 3818a638198SSzymon Olewniczak// public function set_meta($post) { 3828a638198SSzymon Olewniczak// 3838a638198SSzymon Olewniczak// if (isset($post['date'])) { 3848a638198SSzymon Olewniczak// $unix = strtotime($post['date']); 3858a638198SSzymon Olewniczak// //if $unix === false validator will catch it 3868a638198SSzymon Olewniczak// if ($unix !== false) { 3878a638198SSzymon Olewniczak// $post['date'] = (string)$unix; 3888a638198SSzymon Olewniczak// } 3898a638198SSzymon Olewniczak// } 3908a638198SSzymon Olewniczak// 3918a638198SSzymon Olewniczak// if (isset($post['close_date'])) { 3928a638198SSzymon Olewniczak// $unix = strtotime($post['close_date']); 3938a638198SSzymon Olewniczak// //if $unix === false validator will catch it 3948a638198SSzymon Olewniczak// if ($unix !== false) { 3958a638198SSzymon Olewniczak// $post['close_date'] = (string)$unix; 3968a638198SSzymon Olewniczak// } 3978a638198SSzymon Olewniczak// } 3988a638198SSzymon Olewniczak// 3998a638198SSzymon Olewniczak// parent::set_data($post, $this->get_meta_fields()); 4008a638198SSzymon Olewniczak// } 4018a638198SSzymon Olewniczak// 4028a638198SSzymon Olewniczak// public function is_subscribent($user=NULL) { 4038a638198SSzymon Olewniczak// if ($user === NULL) { 4048a638198SSzymon Olewniczak// $user = $this->model->user_nick; 4058a638198SSzymon Olewniczak// } 4068a638198SSzymon Olewniczak// if (in_array($user, $this->subscribents_array)) { 4078a638198SSzymon Olewniczak// return true; 4088a638198SSzymon Olewniczak// } 4098a638198SSzymon Olewniczak// return false; 4108a638198SSzymon Olewniczak// } 4118a638198SSzymon Olewniczak// 4128a638198SSzymon Olewniczak// public function get_subscribents() { 4138a638198SSzymon Olewniczak// return $this->subscribents_array; 4148a638198SSzymon Olewniczak// } 4158a638198SSzymon Olewniczak// 4168a638198SSzymon Olewniczak// public function get_participants() { 4178a638198SSzymon Olewniczak// $subscribents = array_merge(array($this->reporter, $this->executor), 4188a638198SSzymon Olewniczak// $this->subscribents_array); 4198a638198SSzymon Olewniczak// $full_names = array(); 4208a638198SSzymon Olewniczak// foreach ($subscribents as $par) { 4218a638198SSzymon Olewniczak// $name = $this->model->users->get_user_full_name($par); 4228a638198SSzymon Olewniczak// if ($name == '') { 4238a638198SSzymon Olewniczak// $full_names[$par] = $par; 4248a638198SSzymon Olewniczak// } else { 4258a638198SSzymon Olewniczak// $full_names[$par] = $name; 4268a638198SSzymon Olewniczak// } 4278a638198SSzymon Olewniczak// } 4288a638198SSzymon Olewniczak// ksort($full_names); 4298a638198SSzymon Olewniczak// return $full_names; 4308a638198SSzymon Olewniczak// } 4318a638198SSzymon Olewniczak// 4328a638198SSzymon Olewniczak// public function remove_subscribent($subscribent) { 4338a638198SSzymon Olewniczak// if ($subscribent !== $this->model->user_nick && 4348a638198SSzymon Olewniczak// $this->acl_of('subscribents') < BEZ_PERMISSION_CHANGE) { 4358a638198SSzymon Olewniczak// throw new PermissionDeniedException(); 4368a638198SSzymon Olewniczak// } 4378a638198SSzymon Olewniczak// 4388a638198SSzymon Olewniczak// if ($this->issue != '') { 4398a638198SSzymon Olewniczak// throw new ConsistencyViolationException('cannot modify subscribents from issue related tasks'); 4408a638198SSzymon Olewniczak// } 4418a638198SSzymon Olewniczak// 4428a638198SSzymon Olewniczak// if (!isset($this->subscribents_array[$subscribent])) { 4438a638198SSzymon Olewniczak// throw new ConsistencyViolationException('user '.$subscribent.' wasn\'t subscriber so cannot be removed'); 4448a638198SSzymon Olewniczak// } 4458a638198SSzymon Olewniczak// 4468a638198SSzymon Olewniczak// unset($this->subscribents_array[$subscribent]); 4478a638198SSzymon Olewniczak// $this->subscribents = implode(',', $this->subscribents_array); 4488a638198SSzymon Olewniczak// } 4498a638198SSzymon Olewniczak// 4508a638198SSzymon Olewniczak// public function add_subscribent($subscribent) { 4518a638198SSzymon Olewniczak// if ($subscribent !== $this->model->user_nick && 4528a638198SSzymon Olewniczak// $this->acl_of('subscribents') < BEZ_PERMISSION_CHANGE) { 4538a638198SSzymon Olewniczak// throw new PermissionDeniedException(); 4548a638198SSzymon Olewniczak// } 4558a638198SSzymon Olewniczak// 4568a638198SSzymon Olewniczak// if ($this->issue != '') { 4578a638198SSzymon Olewniczak// throw new ConsistencyViolationException('cannot add subscribents to issue related tasks'); 4588a638198SSzymon Olewniczak// } 4598a638198SSzymon Olewniczak// 4608a638198SSzymon Olewniczak// if ($this->model->users->exists($subscribent) && 4618a638198SSzymon Olewniczak// !in_array($subscribent, $this->subscribents_array)) { 4628a638198SSzymon Olewniczak// $this->subscribents_array[$subscribent] = $subscribent; 4638a638198SSzymon Olewniczak// $this->subscribents = implode(',', $this->subscribents_array); 4648a638198SSzymon Olewniczak// 4658a638198SSzymon Olewniczak// return true; 4668a638198SSzymon Olewniczak// } 4678a638198SSzymon Olewniczak// 4688a638198SSzymon Olewniczak// return false; 4698a638198SSzymon Olewniczak// } 4708a638198SSzymon Olewniczak 471e8827d73SSzymon Olewniczak public function get_participants($filter='') { 472e8827d73SSzymon Olewniczak if ($this->acl_of('participants') < BEZ_PERMISSION_VIEW) { 473e8827d73SSzymon Olewniczak throw new PermissionDeniedException(); 474e8827d73SSzymon Olewniczak } 475e8827d73SSzymon Olewniczak if ($this->id === NULL) { 476e8827d73SSzymon Olewniczak return array(); 477e8827d73SSzymon Olewniczak } 478e8827d73SSzymon Olewniczak 479e8827d73SSzymon Olewniczak $sql = 'SELECT * FROM task_participant WHERE'; 480e8827d73SSzymon Olewniczak $possible_flags = array('original_poster', 'assignee', 'commentator', 'subscribent'); 481e8827d73SSzymon Olewniczak if ($filter != '') { 482e8827d73SSzymon Olewniczak if (!in_array($filter, $possible_flags)) { 483e8827d73SSzymon Olewniczak throw new \Exception("unknown flag $filter"); 484e8827d73SSzymon Olewniczak } 485e8827d73SSzymon Olewniczak $sql .= " $filter=1 AND"; 486e8827d73SSzymon Olewniczak } 487e8827d73SSzymon Olewniczak $sql .= ' task_id=? ORDER BY user_id'; 488e8827d73SSzymon Olewniczak 489e8827d73SSzymon Olewniczak $r = $this->model->sqlite->query($sql, $this->id); 490e8827d73SSzymon Olewniczak $pars = $this->model->sqlite->res2arr($r); 491e8827d73SSzymon Olewniczak $participants = array(); 492e8827d73SSzymon Olewniczak foreach ($pars as $par) { 493e8827d73SSzymon Olewniczak $participants[$par['user_id']] = $par; 494e8827d73SSzymon Olewniczak } 495e8827d73SSzymon Olewniczak 496e8827d73SSzymon Olewniczak return $participants; 497e8827d73SSzymon Olewniczak } 498e8827d73SSzymon Olewniczak 499e8827d73SSzymon Olewniczak public function get_participant($user_id) { 500e8827d73SSzymon Olewniczak if ($this->acl_of('participants') < BEZ_PERMISSION_VIEW) { 501e8827d73SSzymon Olewniczak throw new PermissionDeniedException(); 502e8827d73SSzymon Olewniczak } 503e8827d73SSzymon Olewniczak if ($this->id === NULL) { 504e8827d73SSzymon Olewniczak return array(); 505e8827d73SSzymon Olewniczak } 506e8827d73SSzymon Olewniczak 507e8827d73SSzymon Olewniczak $r = $this->model->sqlite->query('SELECT * FROM task_participant WHERE task_id=? AND user_id=?', $this->id, $user_id); 508e8827d73SSzymon Olewniczak $par = $this->model->sqlite->res2row($r); 509e8827d73SSzymon Olewniczak if (!is_array($par)) { 510e8827d73SSzymon Olewniczak return false; 511e8827d73SSzymon Olewniczak } 512e8827d73SSzymon Olewniczak 513e8827d73SSzymon Olewniczak return $par; 514e8827d73SSzymon Olewniczak } 515e8827d73SSzymon Olewniczak 516e8827d73SSzymon Olewniczak public function is_subscribent($user_id=null) { 517e8827d73SSzymon Olewniczak if ($user_id == null) { 518e8827d73SSzymon Olewniczak $user_id = $this->model->user_nick; 519e8827d73SSzymon Olewniczak } 520e8827d73SSzymon Olewniczak $par = $this->get_participant($user_id); 521e8827d73SSzymon Olewniczak if ($par['subscribent'] == 1) { 522e8827d73SSzymon Olewniczak return true; 523e8827d73SSzymon Olewniczak } 524e8827d73SSzymon Olewniczak return false; 525e8827d73SSzymon Olewniczak } 526e8827d73SSzymon Olewniczak 527e8827d73SSzymon Olewniczak public function remove_participant_flags($user_id, $flags) { 528e8827d73SSzymon Olewniczak if ($this->acl_of('participants') < BEZ_PERMISSION_CHANGE) { 529e8827d73SSzymon Olewniczak throw new PermissionDeniedException(); 530e8827d73SSzymon Olewniczak } 531e8827d73SSzymon Olewniczak 532e8827d73SSzymon Olewniczak //thread not saved yet 533e8827d73SSzymon Olewniczak if ($this->id === NULL) { 534e8827d73SSzymon Olewniczak throw new \Exception('cannot remove flags from not saved thread'); 535e8827d73SSzymon Olewniczak } 536e8827d73SSzymon Olewniczak 537e8827d73SSzymon Olewniczak $possible_flags = array('original_poster', 'assignee', 'commentator', 'subscribent'); 538e8827d73SSzymon Olewniczak if (array_intersect($flags, $possible_flags) != $flags) { 539e8827d73SSzymon Olewniczak throw new \Exception('unknown flags'); 540e8827d73SSzymon Olewniczak } 541e8827d73SSzymon Olewniczak 542e8827d73SSzymon Olewniczak $set = implode(',', array_map(function ($v) { return "$v=0"; }, $flags)); 543e8827d73SSzymon Olewniczak 544e8827d73SSzymon Olewniczak $sql = "UPDATE task_participant SET $set WHERE task_id=? AND user_id=?"; 545e8827d73SSzymon Olewniczak $this->model->sqlite->query($sql, $this->id, $user_id); 546e8827d73SSzymon Olewniczak 547e8827d73SSzymon Olewniczak } 548e8827d73SSzymon Olewniczak 549e8827d73SSzymon Olewniczak public function set_participant_flags($user_id, $flags=array()) { 550e8827d73SSzymon Olewniczak if ($this->acl_of('participants') < BEZ_PERMISSION_CHANGE) { 551e8827d73SSzymon Olewniczak throw new PermissionDeniedException(); 552e8827d73SSzymon Olewniczak } 553e8827d73SSzymon Olewniczak 554e8827d73SSzymon Olewniczak //thread not saved yet 555e8827d73SSzymon Olewniczak if ($this->id === NULL) { 556e8827d73SSzymon Olewniczak throw new \Exception('cannot add flags to not saved thread'); 557e8827d73SSzymon Olewniczak } 558e8827d73SSzymon Olewniczak 559e8827d73SSzymon Olewniczak //validate user 560e8827d73SSzymon Olewniczak if (!$this->model->userFactory->exists($user_id)) { 561e8827d73SSzymon Olewniczak throw new \Exception("$user_id isn't dokuwiki user"); 562e8827d73SSzymon Olewniczak } 563e8827d73SSzymon Olewniczak 564e8827d73SSzymon Olewniczak $possible_flags = array('original_poster', 'assignee', 'commentator', 'subscribent'); 565e8827d73SSzymon Olewniczak if (array_intersect($flags, $possible_flags) != $flags) { 566e8827d73SSzymon Olewniczak throw new \Exception('unknown flags'); 567e8827d73SSzymon Olewniczak } 568e8827d73SSzymon Olewniczak 569e8827d73SSzymon Olewniczak $participant = $this->get_participant($user_id); 570e8827d73SSzymon Olewniczak if ($participant == false) { 571e8827d73SSzymon Olewniczak $participant = array_fill_keys($possible_flags, 0); 572e8827d73SSzymon Olewniczak 573e8827d73SSzymon Olewniczak $participant['task_id'] = $this->id; 574e8827d73SSzymon Olewniczak $participant['user_id'] = $user_id; 575e8827d73SSzymon Olewniczak $participant['added_by'] = $this->model->user_nick; 576e8827d73SSzymon Olewniczak $participant['added_date'] = date('c'); 577e8827d73SSzymon Olewniczak } 578e8827d73SSzymon Olewniczak $values = array_merge($participant, array_fill_keys($flags, 1)); 579e8827d73SSzymon Olewniczak 580e8827d73SSzymon Olewniczak $keys = join(',', array_keys($values)); 581e8827d73SSzymon Olewniczak $vals = join(',', array_fill(0,count($values),'?')); 582e8827d73SSzymon Olewniczak 583e8827d73SSzymon Olewniczak $sql = "REPLACE INTO task_participant ($keys) VALUES ($vals)"; 584e8827d73SSzymon Olewniczak $this->model->sqlite->query($sql, array_values($values)); 585e8827d73SSzymon Olewniczak 586e8827d73SSzymon Olewniczak 587e8827d73SSzymon Olewniczak 588e8827d73SSzymon Olewniczak// if (! ( $this->user_is_coordinator() || 589e8827d73SSzymon Olewniczak// $participant === $this->model->user_nick || 590e8827d73SSzymon Olewniczak// $participant === $this->coordinator) //dodajemy nowego koordynatora 591e8827d73SSzymon Olewniczak// ) { 592e8827d73SSzymon Olewniczak// throw new PermissionDeniedException(); 593e8827d73SSzymon Olewniczak// } 594e8827d73SSzymon Olewniczak// if ($this->model->users->exists($participant)) { 595e8827d73SSzymon Olewniczak// $this->participants_array[$participant] = $participant; 596e8827d73SSzymon Olewniczak// $this->participants = implode(',', $this->participants_array); 597e8827d73SSzymon Olewniczak// } 598e8827d73SSzymon Olewniczak } 599e8827d73SSzymon Olewniczak 600e8827d73SSzymon Olewniczak public function invite($client) { 601e8827d73SSzymon Olewniczak $this->set_participant_flags($client, array('subscribent')); 602e8827d73SSzymon Olewniczak $this->mail_notify_invite($client); 603e8827d73SSzymon Olewniczak } 604e8827d73SSzymon Olewniczak 6058a638198SSzymon Olewniczak private function mail_notify($replacements=array(), $users=false) { 6068a638198SSzymon Olewniczak $plain = io_readFile($this->model->action->localFN('task-notification')); 6078a638198SSzymon Olewniczak $html = io_readFile($this->model->action->localFN('task-notification', 'html')); 6088a638198SSzymon Olewniczak 609e8827d73SSzymon Olewniczak $task_link = $this->model->action->url('task', 'tid', $this->id); 6108a638198SSzymon Olewniczak 6118a638198SSzymon Olewniczak $reps = array( 6128a638198SSzymon Olewniczak 'task_id' => $this->id, 6138a638198SSzymon Olewniczak 'task_link' => $task_link, 614e8827d73SSzymon Olewniczak 'who' => $this->original_poster 6158a638198SSzymon Olewniczak ); 6168a638198SSzymon Olewniczak 6178a638198SSzymon Olewniczak //$replacements can override $reps 6188a638198SSzymon Olewniczak $rep = array_merge($reps, $replacements); 6198a638198SSzymon Olewniczak 6208a638198SSzymon Olewniczak if (!isset($rep['who_full_name'])) { 6218a638198SSzymon Olewniczak $rep['who_full_name'] = 622e8827d73SSzymon Olewniczak $this->model->userFactory->get_user_full_name($rep['who']); 6238a638198SSzymon Olewniczak } 6248a638198SSzymon Olewniczak 6258a638198SSzymon Olewniczak //auto title 6268a638198SSzymon Olewniczak if (!isset($rep['subject'])) { 6278a638198SSzymon Olewniczak// if (isset($rep['content'])) { 6288a638198SSzymon Olewniczak// $rep['subject'] = array_shift(explode('.', $rep['content'], 2)); 6298a638198SSzymon Olewniczak// } 630e8827d73SSzymon Olewniczak $rep['subject'] = '#z'.$this->id. ' ' . $this->task_program_name; 6318a638198SSzymon Olewniczak } 6328a638198SSzymon Olewniczak 6338a638198SSzymon Olewniczak //we must do it manually becouse Mailer uses htmlspecialchars() 6348a638198SSzymon Olewniczak $html = str_replace('@TASK_TABLE@', $rep['task_table'], $html); 6358a638198SSzymon Olewniczak 636e8827d73SSzymon Olewniczak $mailer = new Mailer(); 6378a638198SSzymon Olewniczak $mailer->setBody($plain, $rep, $rep, $html, false); 6388a638198SSzymon Olewniczak 6398a638198SSzymon Olewniczak if ($users === FALSE) { 640e8827d73SSzymon Olewniczak $users = $this->get_participants('subscribent'); 6418a638198SSzymon Olewniczak 6428a638198SSzymon Olewniczak //don't notify current user 6438a638198SSzymon Olewniczak unset($users[$this->model->user_nick]); 6448a638198SSzymon Olewniczak } 6458a638198SSzymon Olewniczak 6468a638198SSzymon Olewniczak $emails = array_map(function($user) { 647e8827d73SSzymon Olewniczak return $this->model->userFactory->get_user_email($user); 6488a638198SSzymon Olewniczak }, $users); 6498a638198SSzymon Olewniczak 6508a638198SSzymon Olewniczak $mailer->to($emails); 6518a638198SSzymon Olewniczak $mailer->subject($rep['subject']); 6528a638198SSzymon Olewniczak 6538a638198SSzymon Olewniczak $send = $mailer->send(); 6548a638198SSzymon Olewniczak if ($send === false) { 6558a638198SSzymon Olewniczak //this may mean empty $emails 6568a638198SSzymon Olewniczak //throw new Exception("can't send email"); 6578a638198SSzymon Olewniczak } 6588a638198SSzymon Olewniczak } 6598a638198SSzymon Olewniczak 660e8827d73SSzymon Olewniczak protected function bez_html_array_to_style_list($arr) { 661e8827d73SSzymon Olewniczak $output = ''; 662e8827d73SSzymon Olewniczak foreach ($arr as $k => $v) { 663e8827d73SSzymon Olewniczak $output .= $k.': '. $v . ';'; 6648a638198SSzymon Olewniczak } 665e8827d73SSzymon Olewniczak return $output; 666e8827d73SSzymon Olewniczak } 667e8827d73SSzymon Olewniczak 668e8827d73SSzymon Olewniczak protected function bez_html_irrtable($style) { 669e8827d73SSzymon Olewniczak $argv = func_get_args(); 670e8827d73SSzymon Olewniczak $argc = func_num_args(); 671e8827d73SSzymon Olewniczak if (isset($style['table'])) { 672e8827d73SSzymon Olewniczak $output = '<table style="'.self::bez_html_array_to_style_list($style['table']).'">'; 673e8827d73SSzymon Olewniczak } else { 674e8827d73SSzymon Olewniczak $output = '<table>'; 675e8827d73SSzymon Olewniczak } 676e8827d73SSzymon Olewniczak 677e8827d73SSzymon Olewniczak $tr_style = ''; 678e8827d73SSzymon Olewniczak if (isset($style['tr'])) { 679e8827d73SSzymon Olewniczak $tr_style = 'style="'.self::bez_html_array_to_style_list($style['tr']).'"'; 680e8827d73SSzymon Olewniczak } 681e8827d73SSzymon Olewniczak 682e8827d73SSzymon Olewniczak $td_style = ''; 683e8827d73SSzymon Olewniczak if (isset($style['td'])) { 684e8827d73SSzymon Olewniczak $td_style = 'style="'.self::bez_html_array_to_style_list($style['td']).'"'; 685e8827d73SSzymon Olewniczak } 686e8827d73SSzymon Olewniczak 687e8827d73SSzymon Olewniczak $row_max = 0; 688e8827d73SSzymon Olewniczak 689e8827d73SSzymon Olewniczak for ($i = 1; $i < $argc; $i++) { 690e8827d73SSzymon Olewniczak $row = $argv[$i]; 691e8827d73SSzymon Olewniczak $c = count($row); 692e8827d73SSzymon Olewniczak if ($c > $row_max) { 693e8827d73SSzymon Olewniczak $row_max = $c; 694e8827d73SSzymon Olewniczak } 695e8827d73SSzymon Olewniczak } 696e8827d73SSzymon Olewniczak 697e8827d73SSzymon Olewniczak for ($j = 1; $j < $argc; $j++) { 698e8827d73SSzymon Olewniczak $row = $argv[$j]; 699e8827d73SSzymon Olewniczak $output .= '<tr '.$tr_style.'>' . NL; 700e8827d73SSzymon Olewniczak $c = count($row); 701e8827d73SSzymon Olewniczak for ($i = 0; $i < $c; $i++) { 702e8827d73SSzymon Olewniczak //last element 703e8827d73SSzymon Olewniczak if ($i === $c - 1 && $c < $row_max) { 704e8827d73SSzymon Olewniczak $output .= '<td '.$td_style.' colspan="' . ( $row_max - $c + 1 ) . '">' . NL; 705e8827d73SSzymon Olewniczak } else { 706e8827d73SSzymon Olewniczak $output .= '<td '.$td_style.'>' . NL; 707e8827d73SSzymon Olewniczak } 708e8827d73SSzymon Olewniczak $output .= $row[$i] . NL; 709e8827d73SSzymon Olewniczak $output .= '</td>' . NL; 710e8827d73SSzymon Olewniczak } 711e8827d73SSzymon Olewniczak $output .= '</tr>' . NL; 712e8827d73SSzymon Olewniczak } 713e8827d73SSzymon Olewniczak $output .= '</table>' . NL; 714e8827d73SSzymon Olewniczak return $output; 715e8827d73SSzymon Olewniczak } 716e8827d73SSzymon Olewniczak 717e8827d73SSzymon Olewniczak public function mail_notify_task_box($users=false, $replacements=array()) { 718e8827d73SSzymon Olewniczak// if ($issue_obj !== NULL && $issue_obj->id !== $this->issue) { 719e8827d73SSzymon Olewniczak// throw new Exception('issue object id and task->issue does not match'); 720e8827d73SSzymon Olewniczak// } 7218a638198SSzymon Olewniczak 7228a638198SSzymon Olewniczak $top_row = array( 7238a638198SSzymon Olewniczak '<strong>'.$this->model->action->getLang('executor').': </strong>' . 724e8827d73SSzymon Olewniczak $this->model->userFactory->get_user_full_name($this->assignee), 7258a638198SSzymon Olewniczak 7268a638198SSzymon Olewniczak '<strong>'.$this->model->action->getLang('reporter').': </strong>' . 727e8827d73SSzymon Olewniczak $this->model->userFactory->get_user_full_name($this->original_poster) 7288a638198SSzymon Olewniczak ); 7298a638198SSzymon Olewniczak 730e8827d73SSzymon Olewniczak if ($this->task_program_name != '') { 7318a638198SSzymon Olewniczak $top_row[] = 7328a638198SSzymon Olewniczak '<strong>'.$this->model->action->getLang('task_type').': </strong>' . 733e8827d73SSzymon Olewniczak $this->task_program_name; 7348a638198SSzymon Olewniczak } 7358a638198SSzymon Olewniczak 7368a638198SSzymon Olewniczak if ($this->cost != '') { 7378a638198SSzymon Olewniczak $top_row[] = 7388a638198SSzymon Olewniczak '<strong>'.$this->model->action->getLang('cost').': </strong>' . 7398a638198SSzymon Olewniczak $this->cost; 7408a638198SSzymon Olewniczak } 7418a638198SSzymon Olewniczak 7428a638198SSzymon Olewniczak //BOTTOM ROW 7438a638198SSzymon Olewniczak $bottom_row = array( 7448a638198SSzymon Olewniczak '<strong>'.$this->model->action->getLang('plan_date').': </strong>' . 7458a638198SSzymon Olewniczak $this->plan_date 7468a638198SSzymon Olewniczak ); 7478a638198SSzymon Olewniczak 7488a638198SSzymon Olewniczak if ($this->all_day_event == '0') { 7498a638198SSzymon Olewniczak $bottom_row[] = 7508a638198SSzymon Olewniczak '<strong>'.$this->model->action->getLang('start_time').': </strong>' . 7518a638198SSzymon Olewniczak $this->start_time; 7528a638198SSzymon Olewniczak $bottom_row[] = 7538a638198SSzymon Olewniczak '<strong>'.$this->model->action->getLang('finish_time').': </strong>' . 7548a638198SSzymon Olewniczak $this->finish_time; 7558a638198SSzymon Olewniczak } 7568a638198SSzymon Olewniczak 7578a638198SSzymon Olewniczak $rep = array( 758e8827d73SSzymon Olewniczak 'content' => $this->content, 7598a638198SSzymon Olewniczak 'content_html' => 7608a638198SSzymon Olewniczak '<h2 style="font-size: 1.2em;">'. 761e8827d73SSzymon Olewniczak '<a href="'.$this->model->action->url('task', 'tid', $this->id).'">' . 7628a638198SSzymon Olewniczak '#z'.$this->id . 7638a638198SSzymon Olewniczak '</a> ' . 764e8827d73SSzymon Olewniczak lcfirst($this->model->action->getLang('task_type_' . $this->type)) . ' ' . 7658a638198SSzymon Olewniczak '(' . 766e8827d73SSzymon Olewniczak lcfirst($this->model->action->getLang('task_' . $this->state)) . 7678a638198SSzymon Olewniczak ')' . 7688a638198SSzymon Olewniczak '</h2>' . 769e8827d73SSzymon Olewniczak self::bez_html_irrtable(array( 7708a638198SSzymon Olewniczak 'table' => array( 7718a638198SSzymon Olewniczak 'border-collapse' => 'collapse', 7728a638198SSzymon Olewniczak 'font-size' => '0.8em', 7738a638198SSzymon Olewniczak 'width' => '100%' 7748a638198SSzymon Olewniczak ), 7758a638198SSzymon Olewniczak 'td' => array( 7768a638198SSzymon Olewniczak 'border-top' => '1px solid #8bbcbc', 7778a638198SSzymon Olewniczak 'border-bottom' => '1px solid #8bbcbc', 7788a638198SSzymon Olewniczak 'padding' => '.3em .5em' 7798a638198SSzymon Olewniczak ) 780e8827d73SSzymon Olewniczak ), $top_row, $bottom_row) . $this->content_html, 7818a638198SSzymon Olewniczak 'who' => $this->model->user_nick, 782e8827d73SSzymon Olewniczak 'when' => $this->create_date, 7838a638198SSzymon Olewniczak 'custom_content' => true 7848a638198SSzymon Olewniczak ); 7858a638198SSzymon Olewniczak 7868a638198SSzymon Olewniczak $rep['action_color'] = '#e4f4f4'; 7878a638198SSzymon Olewniczak $rep['action_border_color'] = '#8bbcbc'; 7888a638198SSzymon Olewniczak 7898a638198SSzymon Olewniczak //$replacements can override $reps 7908a638198SSzymon Olewniczak $rep = array_merge($rep, $replacements); 7918a638198SSzymon Olewniczak 792e8827d73SSzymon Olewniczak// if ($this->thread == NULL) { 793e8827d73SSzymon Olewniczak// $this->mail_notify($rep, $users); 794e8827d73SSzymon Olewniczak// } else { 795e8827d73SSzymon Olewniczak// $this->thread->mail_notify($rep); 796e8827d73SSzymon Olewniczak// } 7978a638198SSzymon Olewniczak $this->mail_notify($rep, $users); 7988a638198SSzymon Olewniczak } 7998a638198SSzymon Olewniczak 800e8827d73SSzymon Olewniczak public function mail_notify_subscribents($replacements=array()) { 801e8827d73SSzymon Olewniczak $this->mail_notify_task_box(false, $replacements); 8028a638198SSzymon Olewniczak } 8038a638198SSzymon Olewniczak 804e8827d73SSzymon Olewniczak public function mail_notify_add($users=false, $replacements=array()) { 8058a638198SSzymon Olewniczak $replacements['action'] = $this->model->action->getLang('mail_task_added'); 806e8827d73SSzymon Olewniczak $this->mail_notify_task_box($users, $replacements); 8078a638198SSzymon Olewniczak } 8088a638198SSzymon Olewniczak 8098a638198SSzymon Olewniczak public function mail_notify_remind($users=false) { 8108a638198SSzymon Olewniczak $replacements = array(); 8118a638198SSzymon Olewniczak 8128a638198SSzymon Olewniczak $replacements['action'] = $this->model->action->getLang('mail_task_remind'); 8138a638198SSzymon Olewniczak //we don't want any who 8148a638198SSzymon Olewniczak $replacements['who_full_name'] = ''; 8158a638198SSzymon Olewniczak 8168a638198SSzymon Olewniczak //$users = array($this->executor); 817e8827d73SSzymon Olewniczak $this->mail_notify_task_box($users, $replacements); 8188a638198SSzymon Olewniczak } 8198a638198SSzymon Olewniczak 8208a638198SSzymon Olewniczak public function mail_notify_invite($client) { 8218a638198SSzymon Olewniczak $replacements = array(); 8228a638198SSzymon Olewniczak 8238a638198SSzymon Olewniczak $replacements['action'] = $this->model->action->getLang('mail_task_invite'); 8248a638198SSzymon Olewniczak 8258a638198SSzymon Olewniczak $users = array($client); 826e8827d73SSzymon Olewniczak $this->mail_notify_task_box($users, $replacements); 8278a638198SSzymon Olewniczak } 8288a638198SSzymon Olewniczak} 829