xref: /plugin/bez/ctl/thread.php (revision d5a60e5ac169029e79a301a30ed6a5cd36b654f3)
1fe5d6d1eSSzymon Olewniczak<?php
253df74e7SSzymon Olewniczak/** @var action_plugin_bez $this */
3fe5d6d1eSSzymon Olewniczak
4fe5d6d1eSSzymon Olewniczakuse \dokuwiki\plugin\bez;
5fe5d6d1eSSzymon Olewniczak
6a0cd8c78SSzymon Olewniczakif ($this->model->get_level() < BEZ_AUTH_USER) {
753df74e7SSzymon Olewniczak    throw new bez\meta\PermissionDeniedException();
853df74e7SSzymon Olewniczak}
953df74e7SSzymon Olewniczak
10fe5d6d1eSSzymon Olewniczakif ($this->get_param('id') == '') {
118a638198SSzymon Olewniczak    header('Location: ' . $this->url('threads'));
12fe5d6d1eSSzymon Olewniczak}
13fe5d6d1eSSzymon Olewniczak
148a638198SSzymon Olewniczak/** @var bez\mdl\Thread $thread */
15fe5d6d1eSSzymon Olewniczak$thread = $this->model->threadFactory->get_one($this->get_param('id'));
1653df74e7SSzymon Olewniczak
1753df74e7SSzymon Olewniczakif ($thread->acl_of('id') < BEZ_PERMISSION_VIEW) {
1853df74e7SSzymon Olewniczak    throw new bez\meta\PermissionDeniedException();
1953df74e7SSzymon Olewniczak}
2053df74e7SSzymon Olewniczak
217fbf4c39SSzymon Olewniczak$this->tpl->set('thread', $thread);
22f7519ef1SSzymon Olewniczakif ($thread->type == 'project') {
23f7519ef1SSzymon Olewniczak    $this->tpl->set('lang_suffix', '_project');
24f7519ef1SSzymon Olewniczak}
25786db852SSzymon Olewniczak
26786db852SSzymon Olewniczak$thread_comments = iterator_to_array($this->model->thread_commentFactory->get_from_thread($thread));
27786db852SSzymon Olewniczak$tasks = $this->model->taskFactory->get_from_thread($thread);
28786db852SSzymon Olewniczak
29786db852SSzymon Olewniczak$timeline = array_merge($thread_comments, $tasks['corrections']);
30786db852SSzymon Olewniczakusort($timeline, function($a, $b) {
31786db852SSzymon Olewniczak    if ($a->create_date == $b->create_date) {
32786db852SSzymon Olewniczak        return 0;
33786db852SSzymon Olewniczak    }
34786db852SSzymon Olewniczak    return ($a->create_date < $b->create_date) ? -1 : 1;
35786db852SSzymon Olewniczak});
36786db852SSzymon Olewniczak
37786db852SSzymon Olewniczak$this->tpl->set('timeline', $timeline);
38786db852SSzymon Olewniczak$this->tpl->set('tasks', $tasks);
397753af14SSzymon Olewniczak$this->tpl->set('task_programs',  $this->model->task_programFactory->get_all([], 'name'));
408a638198SSzymon Olewniczak
41a0cd8c78SSzymon Olewniczak/** @var bez\mdl\Thread_comment $thread_comment */
42a0cd8c78SSzymon Olewniczak$thread_comment = $this->model->thread_commentFactory->create_object(array('thread' => $thread));
43a0cd8c78SSzymon Olewniczak$this->tpl->set('thread_comment', $thread_comment);
448a638198SSzymon Olewniczak
458a638198SSzymon Olewniczakif ($this->get_param('action') == 'commcause_add') {
468a638198SSzymon Olewniczak
478a638198SSzymon Olewniczak    $this->model->thread_commentFactory->initial_save($thread_comment, $_POST);
488a638198SSzymon Olewniczak
498a638198SSzymon Olewniczak    $anchor = 'k'.$thread_comment->id;
508a638198SSzymon Olewniczak    $redirect = true;
518a638198SSzymon Olewniczak
528a638198SSzymon Olewniczak} elseif ($this->get_param('action') == 'subscribe') {
538a638198SSzymon Olewniczak
548a638198SSzymon Olewniczak    $thread->set_participant_flags($this->model->user_nick, array('subscribent'));
558a638198SSzymon Olewniczak    $redirect = true;
568a638198SSzymon Olewniczak
578a638198SSzymon Olewniczak} elseif ($this->get_param('action') == 'unsubscribe') {
588a638198SSzymon Olewniczak
598a638198SSzymon Olewniczak    $thread->remove_participant_flags($this->model->user_nick, array('subscribent'));
608a638198SSzymon Olewniczak    $this->add_notification($this->getLang('unsubscribed_com'));
618a638198SSzymon Olewniczak    $redirect = true;
628a638198SSzymon Olewniczak
638a638198SSzymon Olewniczak} elseif ($this->get_param('action') == 'invite') {
648a638198SSzymon Olewniczak    $client = $_POST['client'];
658a638198SSzymon Olewniczak
66e8827d73SSzymon Olewniczak    $thread->invite($client);
67e8827d73SSzymon Olewniczak
688a638198SSzymon Olewniczak    $this->add_notification($this->model->userFactory->get_user_email($client), $this->getLang('invitation_has_been_send'));
698a638198SSzymon Olewniczak
708a638198SSzymon Olewniczak    $redirect = true;
71b331b892SSzymon Olewniczak} elseif ($this->get_param('action') == 'participant_remove') {
72b331b892SSzymon Olewniczak    $user_id = $this->get_param('user_id');
73b331b892SSzymon Olewniczak    $thread->remove_participant($user_id);
74b331b892SSzymon Olewniczak
75b331b892SSzymon Olewniczak    $name = $this->model->userFactory->get_user_full_name($user_id);
76b331b892SSzymon Olewniczak    $notif = sprintf($this->getLang('participant_removed'), $name);
77b331b892SSzymon Olewniczak    $this->add_notification($notif);
78b331b892SSzymon Olewniczak
79b331b892SSzymon Olewniczak    $redirect = true;
80b331b892SSzymon Olewniczak
818a638198SSzymon Olewniczak} elseif ($this->get_param('action') == 'commcause_delete') {
828a638198SSzymon Olewniczak    /** @var bez\mdl\Thread_comment $thread_comment */
838a638198SSzymon Olewniczak    $thread_comment = $this->model->thread_commentFactory->get_one($this->get_param('kid'), array('thread' => $thread));
848a638198SSzymon Olewniczak    $this->model->thread_commentFactory->delete($thread_comment);
858a638198SSzymon Olewniczak
868a638198SSzymon Olewniczak    $redirect = true;
878a638198SSzymon Olewniczak} elseif ($this->get_param('action') == 'commcause_edit') {
888a638198SSzymon Olewniczak    /** @var bez\mdl\Thread_comment $thread_comment */
898a638198SSzymon Olewniczak    $thread_comment = $this->model->thread_commentFactory->get_one($this->get_param('kid'), array('thread' => $thread));
908a638198SSzymon Olewniczak
918a638198SSzymon Olewniczak    if(count($_POST) === 0) {
928a638198SSzymon Olewniczak        $this->tpl->set_values($thread_comment->get_assoc());
938a638198SSzymon Olewniczak    } else {
948a638198SSzymon Olewniczak        $this->model->thread_commentFactory->update_save($thread_comment, $_POST);
958a638198SSzymon Olewniczak
968a638198SSzymon Olewniczak        $anchor   = 'k' . $thread_comment->id;
978a638198SSzymon Olewniczak        $redirect = true;
988a638198SSzymon Olewniczak    }
99e8827d73SSzymon Olewniczak} elseif ($this->get_param('action') == 'task_add') {
100e8827d73SSzymon Olewniczak
101e8827d73SSzymon Olewniczak    $defaults = array('thread' => $thread);
102e8827d73SSzymon Olewniczak
103e8827d73SSzymon Olewniczak    if ($this->get_param('kid') != '') {
104e8827d73SSzymon Olewniczak        $thread_comment = $this->model->thread_commentFactory->get_one($this->get_param('kid'), array('thread' => $thread));
105e8827d73SSzymon Olewniczak        $defaults['thread_comment'] = $thread_comment;
106e8827d73SSzymon Olewniczak    }
1078a638198SSzymon Olewniczak    /** @var bez\mdl\Task $task */
108e8827d73SSzymon Olewniczak    $task = $this->model->taskFactory->create_object($defaults);
109*d5a60e5aSSzymon Olewniczak    $this->tpl->set('task_new', $task);
1108a638198SSzymon Olewniczak
1118a638198SSzymon Olewniczak    //save
1128a638198SSzymon Olewniczak    if (count($_POST) > 0) {
1138a638198SSzymon Olewniczak        $this->model->taskFactory->initial_save($task, $_POST);
1148a638198SSzymon Olewniczak
1158a638198SSzymon Olewniczak        $anchor   = 'z' . $task->id;
1168a638198SSzymon Olewniczak        $redirect = true;
1178a638198SSzymon Olewniczak    }
1188a638198SSzymon Olewniczak} elseif ($this->get_param('action') == 'task_edit') {
1198a638198SSzymon Olewniczak    /** @var bez\mdl\Task $task */
1208a638198SSzymon Olewniczak    $task = $this->model->taskFactory->get_one($this->get_param('tid'), array('thread' => $thread));
1218a638198SSzymon Olewniczak    $this->tpl->set('task', $task);
1228a638198SSzymon Olewniczak
1238a638198SSzymon Olewniczak    //save
1248a638198SSzymon Olewniczak    if (count($_POST) === 0) {
1258a638198SSzymon Olewniczak        $this->tpl->set_values($task->get_assoc());
1268a638198SSzymon Olewniczak    } else {
1278a638198SSzymon Olewniczak        $this->model->taskFactory->update_save($task, $_POST);
1288a638198SSzymon Olewniczak
1298a638198SSzymon Olewniczak        $anchor   = 'z' . $task->id;
1308a638198SSzymon Olewniczak        $redirect = true;
1318a638198SSzymon Olewniczak    }
1326f380773SSzymon Olewniczak} elseif ($this->get_param('action') == 'task_delete') {
1336f380773SSzymon Olewniczak    /** @var bez\mdl\Task $task */
1346f380773SSzymon Olewniczak    $task = $this->model->taskFactory->get_one($this->get_param('tid'), array('thread' => $thread));
1356f380773SSzymon Olewniczak    $this->model->taskFactory->delete($task);
1366f380773SSzymon Olewniczak    $redirect = true;
137bf67f2caSSzymon Olewniczak} elseif ($this->get_param('action') == 'delete') {
138bf67f2caSSzymon Olewniczak    if ($thread->type == 'issue') {
139bf67f2caSSzymon Olewniczak        $redirect_to = 'threads';
140bf67f2caSSzymon Olewniczak    } else {
141bf67f2caSSzymon Olewniczak        $redirect_to = 'projects';
142bf67f2caSSzymon Olewniczak    }
143bf67f2caSSzymon Olewniczak    $this->model->threadFactory->delete($thread);
144bf67f2caSSzymon Olewniczak    header('Location: ' . $this->url($redirect_to));
1458a638198SSzymon Olewniczak}
1468a638198SSzymon Olewniczak
1478a638198SSzymon Olewniczakif (isset($redirect) && $redirect == true) {
1488a638198SSzymon Olewniczak    if (isset($anchor)) {
1498a638198SSzymon Olewniczak        $anchor = '#'.$anchor;
1508a638198SSzymon Olewniczak    } else {
1518a638198SSzymon Olewniczak        $anchor = '';
1528a638198SSzymon Olewniczak    }
1538a638198SSzymon Olewniczak    header('Location: ' . $this->url('thread', 'id', $thread->id) . $anchor);
1548a638198SSzymon Olewniczak}
155