xref: /plugin/bez/mdl/Thread_comment.php (revision ff14b1073c2dab2f863cab3b8baf8b1a01f7993a)
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