xref: /plugin/bez/mdl/Thread_comment.php (revision d5a60e5ac169029e79a301a30ed6a5cd36b654f3)
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) {
26ff14b107SSzymon Olewniczak        if ($property == 'thread') {
27ff14b107SSzymon Olewniczak            if ($this->thread_id == null) {
28ff14b107SSzymon Olewniczak                return null;
29ff14b107SSzymon Olewniczak            }
30ff14b107SSzymon Olewniczak            if ($this->thread == null) {
31ff14b107SSzymon Olewniczak                $this->thread = $this->model->threadFactory->get_one($this->thread_id);
32ff14b107SSzymon Olewniczak            }
33ff14b107SSzymon Olewniczak            return $this->thread;
34ff14b107SSzymon Olewniczak
35ff14b107SSzymon Olewniczak        } elseif ($property == 'coordinator') {
368a638198SSzymon Olewniczak	        return $this->$property;
378a638198SSzymon Olewniczak        }
388a638198SSzymon Olewniczak        return parent::__get($property);
39fe5d6d1eSSzymon Olewniczak    }
40fe5d6d1eSSzymon Olewniczak
41fe5d6d1eSSzymon Olewniczak    //defaults: isssue, type
42fe5d6d1eSSzymon Olewniczak	public function __construct($model, $defaults=array()) {
43fe5d6d1eSSzymon Olewniczak		parent::__construct($model, $defaults);
44fe5d6d1eSSzymon Olewniczak
458a638198SSzymon Olewniczak        $this->validator->set_rules(array(
4653df74e7SSzymon Olewniczak            'content' => array(array('length', 10000), 'NOT NULL'),
4753df74e7SSzymon Olewniczak            'type' => array(
48*d5a60e5aSSzymon Olewniczak                array('select', array('comment', 'cause')),
4953df74e7SSzymon Olewniczak                'NOT NULL')
50fe5d6d1eSSzymon Olewniczak        ));
51fe5d6d1eSSzymon Olewniczak
52fe5d6d1eSSzymon Olewniczak		//new object
53fe5d6d1eSSzymon Olewniczak		if ($this->id === NULL) {
54fe5d6d1eSSzymon Olewniczak
558a638198SSzymon Olewniczak            $this->author = $this->model->user_nick;
568a638198SSzymon Olewniczak            $this->create_date = date('c');
578a638198SSzymon Olewniczak            $this->last_modification_date = $this->create_date;
58fe5d6d1eSSzymon Olewniczak
59fe5d6d1eSSzymon Olewniczak
60e8827d73SSzymon Olewniczak            if (!isset($defaults['thread'])) {
61e8827d73SSzymon Olewniczak                throw new \Exception('$defaults[thread] not set');
62e8827d73SSzymon Olewniczak            }
63e8827d73SSzymon Olewniczak            $this->thread = $defaults['thread'];
648a638198SSzymon Olewniczak			$this->thread_id = $this->thread->id;
658a638198SSzymon Olewniczak            $this->coordinator = $this->thread->coordinator;
66a0cd8c78SSzymon Olewniczak
67a0cd8c78SSzymon Olewniczak            $this->acl->grant('content', BEZ_PERMISSION_CHANGE);
68a0cd8c78SSzymon Olewniczak            if ($this->coordinator == $this->model->user_nick) {
69a0cd8c78SSzymon Olewniczak                $this->acl->grant('type', BEZ_PERMISSION_CHANGE);
70a0cd8c78SSzymon Olewniczak            }
71a0cd8c78SSzymon Olewniczak
72e8827d73SSzymon Olewniczak		} else {
73e8827d73SSzymon Olewniczak            if (isset($defaults['thread']) && $this->thread_id == $defaults['thread']->id) {
74e8827d73SSzymon Olewniczak                $this->thread = $defaults['thread'];
75e8827d73SSzymon Olewniczak            }
76a0cd8c78SSzymon Olewniczak
77a0cd8c78SSzymon Olewniczak            //we can change our own comments only when they are "comment"
78a0cd8c78SSzymon Olewniczak            if ($this->author == $this->model->user_nick && $this->type == 'comment') {
79a0cd8c78SSzymon Olewniczak                //we can only delete records when there is no tasks subscribed to issue
80a0cd8c78SSzymon Olewniczak                if ($this->task_count == '0') {
81a0cd8c78SSzymon Olewniczak                    $this->acl->grant('id', BEZ_PERMISSION_DELETE);
82a0cd8c78SSzymon Olewniczak                }
83a0cd8c78SSzymon Olewniczak                $this->acl->grant('content', BEZ_PERMISSION_CHANGE);
84a0cd8c78SSzymon Olewniczak            }
85a0cd8c78SSzymon Olewniczak
86a0cd8c78SSzymon Olewniczak            if ($this->coordinator == $this->model->user_nick) {
87a0cd8c78SSzymon Olewniczak                //we can only delete records when there is no tasks subscribed to issue
88a0cd8c78SSzymon Olewniczak                if ($this->task_count == '0') {
89a0cd8c78SSzymon Olewniczak                    $this->acl->grant('id', BEZ_PERMISSION_DELETE);
90a0cd8c78SSzymon Olewniczak                }
91a0cd8c78SSzymon Olewniczak                $this->acl->grant('content', BEZ_PERMISSION_CHANGE);
92a0cd8c78SSzymon Olewniczak                $this->acl->grant('type', BEZ_PERMISSION_CHANGE);
93a0cd8c78SSzymon Olewniczak            }
94e8827d73SSzymon Olewniczak        }
95fe5d6d1eSSzymon Olewniczak	}
96fe5d6d1eSSzymon Olewniczak
978a638198SSzymon Olewniczak    public function set_data($post) {
9853df74e7SSzymon Olewniczak	    //no all can change type
9953df74e7SSzymon Olewniczak        if ($this->acl_of('type') < BEZ_PERMISSION_CHANGE) {
10053df74e7SSzymon Olewniczak            unset($post['type']);
10153df74e7SSzymon Olewniczak        }
1028a638198SSzymon Olewniczak        parent::set_data($post);
1032448d85aSSzymon Olewniczak        $this->purge();
1042448d85aSSzymon Olewniczak    }
1052448d85aSSzymon Olewniczak
1065b88664dSSzymon Olewniczak    protected function html_link_url() {
1075b88664dSSzymon Olewniczak        $tpl = $this->model->action->get_tpl();
1085b88664dSSzymon Olewniczak        return $tpl->url('thread', 'id', $this->thread_id) . '#k' . $this->id;
1095b88664dSSzymon Olewniczak    }
1105b88664dSSzymon Olewniczak
1115b88664dSSzymon Olewniczak    protected function html_link_content() {
1125b88664dSSzymon Olewniczak        return '#k' . $this->id;
1135b88664dSSzymon Olewniczak    }
1145b88664dSSzymon Olewniczak
1158a638198SSzymon Olewniczak    public function mail_notify_add() {
11614a1f0a4SSzymon Olewniczak        $tpl = $this->model->action->get_tpl();
117fe5d6d1eSSzymon Olewniczak
118a0cd8c78SSzymon Olewniczak        $info = array();
119a0cd8c78SSzymon Olewniczak        $html =  p_render('bez_xhtmlmail', p_get_instructions($this->content), $info);
12014a1f0a4SSzymon Olewniczak        $tpl->set('content', $html);
12114a1f0a4SSzymon Olewniczak        $tpl->set('who', $this->author);
12214a1f0a4SSzymon Olewniczak        $tpl->set('when', $this->create_date);
12314a1f0a4SSzymon Olewniczak        if ($this->type == 'comment') {
12414a1f0a4SSzymon Olewniczak            $action = 'mail_comment_added';
125fe5d6d1eSSzymon Olewniczak        } else {
12614a1f0a4SSzymon Olewniczak            $action = 'mail_cause_added';
12714a1f0a4SSzymon Olewniczak            $tpl->set('action_border_color', '#ddb68d');
12814a1f0a4SSzymon Olewniczak            $tpl->set('action_background_color', '#ffeedc');
129fe5d6d1eSSzymon Olewniczak        }
13014a1f0a4SSzymon Olewniczak        $tpl->set('action', $action);
13114a1f0a4SSzymon Olewniczak        $content = $this->model->action->bez_tpl_include('mail/thread_comment', true);
132fe5d6d1eSSzymon Olewniczak
13314a1f0a4SSzymon Olewniczak        $this->thread->mail_notify($content, false, $info['img']);
134fe5d6d1eSSzymon Olewniczak    }
135fe5d6d1eSSzymon Olewniczak}
136