xref: /plugin/bez/mdl/TaskFactory.php (revision 53df74e7ac5ae4234aac1fa716a33878a039026f)
18a638198SSzymon Olewniczak<?php
28a638198SSzymon Olewniczak
38a638198SSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl;
48a638198SSzymon Olewniczak
58a638198SSzymon Olewniczakclass TaskFactory extends Factory {
6ff14b107SSzymon Olewniczak
7ff14b107SSzymon Olewniczak    public function get_table_view() {
8ff14b107SSzymon Olewniczak        return 'task_view';
98a638198SSzymon Olewniczak    }
108a638198SSzymon Olewniczak
11*53df74e7SSzymon Olewniczak    public function get_years_scope() {
12*53df74e7SSzymon Olewniczak        $r = $this->model->sqlite->query('SELECT
13*53df74e7SSzymon Olewniczak                                        MIN(create_date),
14*53df74e7SSzymon Olewniczak                                        MIN(plan_date),
15*53df74e7SSzymon Olewniczak                                        DATE(),
16*53df74e7SSzymon Olewniczak                                        MAX(close_date),
17*53df74e7SSzymon Olewniczak                                        MAX(plan_date)
18*53df74e7SSzymon Olewniczak                                        FROM task');
19*53df74e7SSzymon Olewniczak        $data = $this->model->sqlite->res_fetch_array($r);
20*53df74e7SSzymon Olewniczak
21*53df74e7SSzymon Olewniczak        $min_date = min($data[0], $data[1], $data[2]);
22*53df74e7SSzymon Olewniczak        $max_date = max($data[2], $data[3], $data[4]);
23*53df74e7SSzymon Olewniczak
24*53df74e7SSzymon Olewniczak        //get only year
25*53df74e7SSzymon Olewniczak        $first =  (int) substr($min_date, 0, strpos($min_date, '-'));
26*53df74e7SSzymon Olewniczak        $last = (int) substr($max_date, 0, strpos($max_date, '-'));
27*53df74e7SSzymon Olewniczak
28*53df74e7SSzymon Olewniczak        $years = array();
29*53df74e7SSzymon Olewniczak        for ($year = $first; $year <= $last; $year++) {
30*53df74e7SSzymon Olewniczak            $years[] = (string) $year;
31*53df74e7SSzymon Olewniczak        }
32*53df74e7SSzymon Olewniczak        return $years;
33*53df74e7SSzymon Olewniczak    }
34*53df74e7SSzymon Olewniczak
35e8827d73SSzymon Olewniczak    public function get_from_thread(Thread $thread) {
36e8827d73SSzymon Olewniczak        $tasks = $this->model->taskFactory->get_all(array('thread_id' => $thread->id),
37e8827d73SSzymon Olewniczak                                            'thread_comment_id', false, array('thread' => $thread));
38e8827d73SSzymon Olewniczak        $by_thread_comment = array('corrections' => array());
39e8827d73SSzymon Olewniczak        foreach ($tasks as $task) {
40e8827d73SSzymon Olewniczak            if ($task->thread_comment_id == null) {
41e8827d73SSzymon Olewniczak                $by_thread_comment['corrections'][$task->id] = $task;
42e8827d73SSzymon Olewniczak                continue;
43e8827d73SSzymon Olewniczak            }
44e8827d73SSzymon Olewniczak            if (!isset($by_thread_comment[$task->thread_comment_id])) {
45e8827d73SSzymon Olewniczak                $by_thread_comment[$task->thread_comment_id] = array();
46e8827d73SSzymon Olewniczak            }
47e8827d73SSzymon Olewniczak            $by_thread_comment[$task->thread_comment_id][$task->id] = $task;
48e8827d73SSzymon Olewniczak        }
49e8827d73SSzymon Olewniczak        return $by_thread_comment;
50e8827d73SSzymon Olewniczak    }
51e8827d73SSzymon Olewniczak
52e8827d73SSzymon Olewniczak    public function get_by_type($thread) {
53e8827d73SSzymon Olewniczak        $tasks = $this->model->taskFactory->get_all(array('thread_id' => $thread->id),
54e8827d73SSzymon Olewniczak                                            'thread_comment_id', false, array('thread' => $thread));
55e8827d73SSzymon Olewniczak
56e8827d73SSzymon Olewniczak        $by_type = array('correction' => array(), 'corrective' => array(), 'preventive' => array());
57e8827d73SSzymon Olewniczak        foreach ($tasks as $task) {
58e8827d73SSzymon Olewniczak            $by_type[$task->type][$task->id] = $task;
59e8827d73SSzymon Olewniczak        }
60e8827d73SSzymon Olewniczak
61e8827d73SSzymon Olewniczak        return $by_type;
62e8827d73SSzymon Olewniczak    }
63e8827d73SSzymon Olewniczak
64ff14b107SSzymon Olewniczak    public function users_involvement() {
65ff14b107SSzymon Olewniczak        $sql = 'SELECT user_id,
66ff14b107SSzymon Olewniczak                       SUM(original_poster),
67ff14b107SSzymon Olewniczak                       SUM(assignee),
68ff14b107SSzymon Olewniczak                       SUM(commentator),
69ff14b107SSzymon Olewniczak                       COUNT(*)
70ff14b107SSzymon Olewniczak                       FROM task_participant
71ff14b107SSzymon Olewniczak                       GROUP BY user_id
72ff14b107SSzymon Olewniczak                       ORDER BY user_id';
73ff14b107SSzymon Olewniczak
74ff14b107SSzymon Olewniczak        $r = $this->model->sqlite->query($sql);
75ff14b107SSzymon Olewniczak        return $r;
76ff14b107SSzymon Olewniczak    }
77ff14b107SSzymon Olewniczak
788a638198SSzymon Olewniczak    public function initial_save(Entity $task, $data) {
798a638198SSzymon Olewniczak        try {
808a638198SSzymon Olewniczak            $this->beginTransaction();
81*53df74e7SSzymon Olewniczak            parent::initial_save($task, $data);
828a638198SSzymon Olewniczak
83*53df74e7SSzymon Olewniczak            $task->set_participant_flags($task->original_poster, array('subscribent', 'original_poster'));
84*53df74e7SSzymon Olewniczak            $task->set_participant_flags($task->assignee, array('subscribent', 'assignee'));
85*53df74e7SSzymon Olewniczak
86*53df74e7SSzymon Olewniczak            if ($task->thread_id != '') {
878a638198SSzymon Olewniczak                $task->thread->set_participant_flags($task->assignee, array('subscribent', 'task_assignee'));
888a638198SSzymon Olewniczak                $task->thread->update_last_activity();
898a638198SSzymon Olewniczak            }
908a638198SSzymon Olewniczak
918a638198SSzymon Olewniczak            $this->commitTransaction();
928a638198SSzymon Olewniczak        } catch(Exception $exception) {
938a638198SSzymon Olewniczak            $this->rollbackTransaction();
948a638198SSzymon Olewniczak        }
958a638198SSzymon Olewniczak
96*53df74e7SSzymon Olewniczak        if ($task->thread_id != '') {
97*53df74e7SSzymon Olewniczak            $users = $task->thread->get_participants('subscribent');
98*53df74e7SSzymon Olewniczak            //don't notify current user
99*53df74e7SSzymon Olewniczak            unset($users[$this->model->user_nick]);
100*53df74e7SSzymon Olewniczak
101*53df74e7SSzymon Olewniczak            $task->mail_notify_add($users);
102*53df74e7SSzymon Olewniczak        } else {
103*53df74e7SSzymon Olewniczak            $task->mail_notify_add();
104*53df74e7SSzymon Olewniczak        }
1058a638198SSzymon Olewniczak    }
1068a638198SSzymon Olewniczak
1078a638198SSzymon Olewniczak    public function update_save(Entity $task, $data) {
1088a638198SSzymon Olewniczak        try {
1098a638198SSzymon Olewniczak            $this->beginTransaction();
110*53df74e7SSzymon Olewniczak            parent::update_save($task, $data);
1118a638198SSzymon Olewniczak
1128a638198SSzymon Olewniczak            if ($task->thread) {
1138a638198SSzymon Olewniczak            }
1148a638198SSzymon Olewniczak
1158a638198SSzymon Olewniczak            $this->commitTransaction();
1168a638198SSzymon Olewniczak        } catch(Exception $exception) {
1178a638198SSzymon Olewniczak            $this->rollbackTransaction();
1188a638198SSzymon Olewniczak        }
1198a638198SSzymon Olewniczak    }
1208a638198SSzymon Olewniczak}