xref: /plugin/bez/mdl/TaskFactory.php (revision ff14b1073c2dab2f863cab3b8baf8b1a01f7993a)
18a638198SSzymon Olewniczak<?php
28a638198SSzymon Olewniczak/**
38a638198SSzymon Olewniczak * Created by PhpStorm.
48a638198SSzymon Olewniczak * User: ghi
58a638198SSzymon Olewniczak * Date: 12.12.17
68a638198SSzymon Olewniczak * Time: 11:58
78a638198SSzymon Olewniczak */
88a638198SSzymon Olewniczak
98a638198SSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl;
108a638198SSzymon Olewniczak
118a638198SSzymon Olewniczakclass TaskFactory extends Factory {
12*ff14b107SSzymon Olewniczak
13*ff14b107SSzymon Olewniczak    public function get_table_view() {
14*ff14b107SSzymon Olewniczak        return 'task_view';
158a638198SSzymon Olewniczak    }
168a638198SSzymon Olewniczak
17e8827d73SSzymon Olewniczak    public function get_from_thread(Thread $thread) {
18e8827d73SSzymon Olewniczak        $tasks = $this->model->taskFactory->get_all(array('thread_id' => $thread->id),
19e8827d73SSzymon Olewniczak                                            'thread_comment_id', false, array('thread' => $thread));
20e8827d73SSzymon Olewniczak        $by_thread_comment = array('corrections' => array());
21e8827d73SSzymon Olewniczak        foreach ($tasks as $task) {
22e8827d73SSzymon Olewniczak            if ($task->thread_comment_id == null) {
23e8827d73SSzymon Olewniczak                $by_thread_comment['corrections'][$task->id] = $task;
24e8827d73SSzymon Olewniczak                continue;
25e8827d73SSzymon Olewniczak            }
26e8827d73SSzymon Olewniczak            if (!isset($by_thread_comment[$task->thread_comment_id])) {
27e8827d73SSzymon Olewniczak                $by_thread_comment[$task->thread_comment_id] = array();
28e8827d73SSzymon Olewniczak            }
29e8827d73SSzymon Olewniczak            $by_thread_comment[$task->thread_comment_id][$task->id] = $task;
30e8827d73SSzymon Olewniczak        }
31e8827d73SSzymon Olewniczak        return $by_thread_comment;
32e8827d73SSzymon Olewniczak    }
33e8827d73SSzymon Olewniczak
34e8827d73SSzymon Olewniczak    public function get_by_type($thread) {
35e8827d73SSzymon Olewniczak        $tasks = $this->model->taskFactory->get_all(array('thread_id' => $thread->id),
36e8827d73SSzymon Olewniczak                                            'thread_comment_id', false, array('thread' => $thread));
37e8827d73SSzymon Olewniczak
38e8827d73SSzymon Olewniczak        $by_type = array('correction' => array(), 'corrective' => array(), 'preventive' => array());
39e8827d73SSzymon Olewniczak        foreach ($tasks as $task) {
40e8827d73SSzymon Olewniczak            $by_type[$task->type][$task->id] = $task;
41e8827d73SSzymon Olewniczak        }
42e8827d73SSzymon Olewniczak
43e8827d73SSzymon Olewniczak        return $by_type;
44e8827d73SSzymon Olewniczak    }
45e8827d73SSzymon Olewniczak
46*ff14b107SSzymon Olewniczak    public function users_involvement() {
47*ff14b107SSzymon Olewniczak        $sql = 'SELECT user_id,
48*ff14b107SSzymon Olewniczak                       SUM(original_poster),
49*ff14b107SSzymon Olewniczak                       SUM(assignee),
50*ff14b107SSzymon Olewniczak                       SUM(commentator),
51*ff14b107SSzymon Olewniczak                       COUNT(*)
52*ff14b107SSzymon Olewniczak                       FROM task_participant
53*ff14b107SSzymon Olewniczak                       GROUP BY user_id
54*ff14b107SSzymon Olewniczak                       ORDER BY user_id';
55*ff14b107SSzymon Olewniczak
56*ff14b107SSzymon Olewniczak        $r = $this->model->sqlite->query($sql);
57*ff14b107SSzymon Olewniczak        return $r;
58*ff14b107SSzymon Olewniczak    }
59*ff14b107SSzymon Olewniczak
608a638198SSzymon Olewniczak    public function initial_save(Entity $task, $data) {
618a638198SSzymon Olewniczak        parent::initial_save($task, $data);
628a638198SSzymon Olewniczak
638a638198SSzymon Olewniczak        $task->set_data($data);
648a638198SSzymon Olewniczak        try {
658a638198SSzymon Olewniczak            $this->beginTransaction();
668a638198SSzymon Olewniczak            $this->save($task);
678a638198SSzymon Olewniczak
688a638198SSzymon Olewniczak            if ($task->thread) {
698a638198SSzymon Olewniczak                $task->thread->set_participant_flags($task->assignee, array('subscribent', 'task_assignee'));
708a638198SSzymon Olewniczak                $task->thread->update_last_activity();
718a638198SSzymon Olewniczak            }
728a638198SSzymon Olewniczak
738a638198SSzymon Olewniczak            $this->commitTransaction();
748a638198SSzymon Olewniczak        } catch(Exception $exception) {
758a638198SSzymon Olewniczak            $this->rollbackTransaction();
768a638198SSzymon Olewniczak        }
778a638198SSzymon Olewniczak
788a638198SSzymon Olewniczak        //$task->mail_notify_add();
798a638198SSzymon Olewniczak    }
808a638198SSzymon Olewniczak
818a638198SSzymon Olewniczak    public function update_save(Entity $task, $data) {
828a638198SSzymon Olewniczak        parent::update_save($task, $data);
838a638198SSzymon Olewniczak
848a638198SSzymon Olewniczak        $task->set_data($data);
858a638198SSzymon Olewniczak        try {
868a638198SSzymon Olewniczak            $this->beginTransaction();
878a638198SSzymon Olewniczak            $this->save($task);
888a638198SSzymon Olewniczak
898a638198SSzymon Olewniczak            if ($task->thread) {
908a638198SSzymon Olewniczak            }
918a638198SSzymon Olewniczak
928a638198SSzymon Olewniczak            $this->commitTransaction();
938a638198SSzymon Olewniczak        } catch(Exception $exception) {
948a638198SSzymon Olewniczak            $this->rollbackTransaction();
958a638198SSzymon Olewniczak        }
968a638198SSzymon Olewniczak    }
978a638198SSzymon Olewniczak}