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