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