xref: /plugin/bez/mdl/ThreadFactory.php (revision 14a1f0a435358d79e2e5814db93baefc0cfe6877)
1de02284cSSzymon Olewniczak<?php
2de02284cSSzymon Olewniczak
3de02284cSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl;
4de02284cSSzymon Olewniczak
57fbf4c39SSzymon Olewniczakuse Assetic\Exception\Exception;
67fbf4c39SSzymon Olewniczak
7de02284cSSzymon Olewniczakclass ThreadFactory extends Factory {
8de02284cSSzymon Olewniczak
953df74e7SSzymon Olewniczak    public function get_table_view() {
1053df74e7SSzymon Olewniczak        return 'thread_view';
11de02284cSSzymon Olewniczak    }
12de02284cSSzymon Olewniczak
13de02284cSSzymon Olewniczak    public function get_years_scope() {
14de02284cSSzymon Olewniczak        $r = $this->model->sqlite->query('SELECT create_date FROM thread ORDER BY id LIMIT 1');
15de02284cSSzymon Olewniczak        $date = $this->model->sqlite->res2single($r);
16de02284cSSzymon Olewniczak
17de02284cSSzymon Olewniczak        //get only year
18de02284cSSzymon Olewniczak		$first =  (int) substr($date, 0, strpos($date, '-'));
19de02284cSSzymon Olewniczak        $last = (int) date('Y');
20de02284cSSzymon Olewniczak
21de02284cSSzymon Olewniczak		$years = array();
22de02284cSSzymon Olewniczak		for ($year = $first; $year <= $last; $year++) {
23de02284cSSzymon Olewniczak			$years[] = (string) $year;
24de02284cSSzymon Olewniczak        }
25de02284cSSzymon Olewniczak		return $years;
26de02284cSSzymon Olewniczak    }
277fbf4c39SSzymon Olewniczak
28ff14b107SSzymon Olewniczak    public function users_involvement() {
29ff14b107SSzymon Olewniczak        $sql = 'SELECT user_id,
30ff14b107SSzymon Olewniczak                       SUM(original_poster),
31ff14b107SSzymon Olewniczak                       SUM(coordinator),
32ff14b107SSzymon Olewniczak                       SUM(commentator),
33ff14b107SSzymon Olewniczak                       SUM(task_assignee),
34ff14b107SSzymon Olewniczak                       COUNT(*)
35ff14b107SSzymon Olewniczak                       FROM thread_participant
36ff14b107SSzymon Olewniczak                       GROUP BY user_id
37ff14b107SSzymon Olewniczak                       ORDER BY user_id';
38ff14b107SSzymon Olewniczak
39ff14b107SSzymon Olewniczak        $r = $this->model->sqlite->query($sql);
40ff14b107SSzymon Olewniczak        return $r;
41ff14b107SSzymon Olewniczak    }
42ff14b107SSzymon Olewniczak
438a638198SSzymon Olewniczak    public function initial_save(Entity $thread, $data) {
447fbf4c39SSzymon Olewniczak        $label_ids = array();
457fbf4c39SSzymon Olewniczak        if (isset($data['label_id']) && $data['label_id'] != '') {
467fbf4c39SSzymon Olewniczak            $label_ids[] = $data['label_id'];
477fbf4c39SSzymon Olewniczak        }
487fbf4c39SSzymon Olewniczak        try {
497fbf4c39SSzymon Olewniczak            $this->beginTransaction();
50a0cd8c78SSzymon Olewniczak
5153df74e7SSzymon Olewniczak            parent::initial_save($thread, $data);
527fbf4c39SSzymon Olewniczak
537fbf4c39SSzymon Olewniczak            foreach($label_ids as $label_id) {
547fbf4c39SSzymon Olewniczak                $thread->add_label($label_id);
557fbf4c39SSzymon Olewniczak            }
567fbf4c39SSzymon Olewniczak
577fbf4c39SSzymon Olewniczak            $thread->set_participant_flags($thread->original_poster, array('original_poster', 'subscribent'));
587fbf4c39SSzymon Olewniczak            if($thread->coordinator != null) {
597fbf4c39SSzymon Olewniczak                $thread->set_participant_flags($thread->coordinator, array('coordinator', 'subscribent'));
607fbf4c39SSzymon Olewniczak            }
617fbf4c39SSzymon Olewniczak
62a0cd8c78SSzymon Olewniczak            if ($this->model->get_level() >= BEZ_AUTH_LEADER) {
6353df74e7SSzymon Olewniczak                $private = false;
6453df74e7SSzymon Olewniczak                if (isset($data['private'])) {
6553df74e7SSzymon Olewniczak                    $private = true;
6653df74e7SSzymon Olewniczak                }
6753df74e7SSzymon Olewniczak                $thread->set_private_flag($private);
6853df74e7SSzymon Olewniczak            }
6953df74e7SSzymon Olewniczak
708a638198SSzymon Olewniczak            $this->commitTransaction();
718a638198SSzymon Olewniczak
728a638198SSzymon Olewniczak            if ($thread->state != 'proposal' && $this->model->user_nick != $thread->coordinator) {
738a638198SSzymon Olewniczak                $thread->mail_inform_coordinator();
747fbf4c39SSzymon Olewniczak            }
75*14a1f0a4SSzymon Olewniczak
76*14a1f0a4SSzymon Olewniczak        } catch(Exception $exception) {
77*14a1f0a4SSzymon Olewniczak            $this->rollbackTransaction();
78*14a1f0a4SSzymon Olewniczak        }
797fbf4c39SSzymon Olewniczak    }
807fbf4c39SSzymon Olewniczak
818a638198SSzymon Olewniczak    public function update_save(Entity $thread, $data) {
827fbf4c39SSzymon Olewniczak        $prev_coordinator = $thread->coordinator;
8353df74e7SSzymon Olewniczak
847fbf4c39SSzymon Olewniczak        $label_ids = array();
857fbf4c39SSzymon Olewniczak        if (isset($data['label_id']) && $data['label_id'] != '') {
867fbf4c39SSzymon Olewniczak            $label_ids[] = $data['label_id'];
877fbf4c39SSzymon Olewniczak        }
887fbf4c39SSzymon Olewniczak        try {
897fbf4c39SSzymon Olewniczak            $this->beginTransaction();
9053df74e7SSzymon Olewniczak            parent::update_save($thread, $data);
917fbf4c39SSzymon Olewniczak
927fbf4c39SSzymon Olewniczak            $cur_label_ids = array_keys($thread->get_labels());
937fbf4c39SSzymon Olewniczak            $labels_to_add = array_diff($label_ids, $cur_label_ids);
947fbf4c39SSzymon Olewniczak            $labels_to_rem = array_diff($cur_label_ids, $label_ids);
957fbf4c39SSzymon Olewniczak
967fbf4c39SSzymon Olewniczak            foreach($labels_to_add as $label_id) {
977fbf4c39SSzymon Olewniczak                $thread->add_label($label_id);
987fbf4c39SSzymon Olewniczak            }
997fbf4c39SSzymon Olewniczak
1007fbf4c39SSzymon Olewniczak            foreach($labels_to_rem as $label_id) {
1017fbf4c39SSzymon Olewniczak                $thread->remove_label($label_id);
1027fbf4c39SSzymon Olewniczak            }
1037fbf4c39SSzymon Olewniczak
1047fbf4c39SSzymon Olewniczak            if($thread->coordinator != null && $thread->coordinator != $prev_coordinator) {
1057fbf4c39SSzymon Olewniczak                $thread->remove_participant_flags($prev_coordinator, array('coordinator'));
1067fbf4c39SSzymon Olewniczak                $thread->set_participant_flags($thread->coordinator, array('subscribent', 'coordinator'));
1077fbf4c39SSzymon Olewniczak            }
1087fbf4c39SSzymon Olewniczak
10953df74e7SSzymon Olewniczak            if ($thread->acl_of('private') >= BEZ_PERMISSION_CHANGE) {
11053df74e7SSzymon Olewniczak                $private = false;
11153df74e7SSzymon Olewniczak                if (isset($data['private'])) {
11253df74e7SSzymon Olewniczak                    $private = true;
11353df74e7SSzymon Olewniczak                }
11453df74e7SSzymon Olewniczak                $thread->set_private_flag($private);
11553df74e7SSzymon Olewniczak            }
11653df74e7SSzymon Olewniczak
1178a638198SSzymon Olewniczak            $this->commitTransaction();
1187fbf4c39SSzymon Olewniczak        } catch(Exception $exception) {
1198a638198SSzymon Olewniczak            $this->rollbackTransaction();
1208a638198SSzymon Olewniczak        }
1218a638198SSzymon Olewniczak
1228a638198SSzymon Olewniczak        if ($thread->state != 'proposal' && $this->model->user_nick != $thread->coordinator) {
1238a638198SSzymon Olewniczak            $thread->mail_inform_coordinator();
1247fbf4c39SSzymon Olewniczak        }
1257fbf4c39SSzymon Olewniczak    }
126de02284cSSzymon Olewniczak}
127