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(); 50*a0cd8c78SSzymon Olewniczak 51*a0cd8c78SSzymon Olewniczak //save thread as project 52*a0cd8c78SSzymon Olewniczak if ($data['type'] == 'project') { 53*a0cd8c78SSzymon Olewniczak $thread->type = 'project'; 54*a0cd8c78SSzymon Olewniczak } 55*a0cd8c78SSzymon Olewniczak 5653df74e7SSzymon Olewniczak parent::initial_save($thread, $data); 577fbf4c39SSzymon Olewniczak 587fbf4c39SSzymon Olewniczak foreach($label_ids as $label_id) { 597fbf4c39SSzymon Olewniczak $thread->add_label($label_id); 607fbf4c39SSzymon Olewniczak } 617fbf4c39SSzymon Olewniczak 627fbf4c39SSzymon Olewniczak $thread->set_participant_flags($thread->original_poster, array('original_poster', 'subscribent')); 637fbf4c39SSzymon Olewniczak if($thread->coordinator != null) { 647fbf4c39SSzymon Olewniczak $thread->set_participant_flags($thread->coordinator, array('coordinator', 'subscribent')); 657fbf4c39SSzymon Olewniczak } 667fbf4c39SSzymon Olewniczak 67*a0cd8c78SSzymon Olewniczak if ($this->model->get_level() >= BEZ_AUTH_LEADER) { 6853df74e7SSzymon Olewniczak $private = false; 6953df74e7SSzymon Olewniczak if (isset($data['private'])) { 7053df74e7SSzymon Olewniczak $private = true; 7153df74e7SSzymon Olewniczak } 7253df74e7SSzymon Olewniczak $thread->set_private_flag($private); 7353df74e7SSzymon Olewniczak } 7453df74e7SSzymon Olewniczak 758a638198SSzymon Olewniczak $this->commitTransaction(); 767fbf4c39SSzymon Olewniczak } catch(Exception $exception) { 778a638198SSzymon Olewniczak $this->rollbackTransaction(); 788a638198SSzymon Olewniczak } 798a638198SSzymon Olewniczak 808a638198SSzymon Olewniczak if ($thread->state != 'proposal' && $this->model->user_nick != $thread->coordinator) { 818a638198SSzymon Olewniczak $thread->mail_inform_coordinator(); 827fbf4c39SSzymon Olewniczak } 837fbf4c39SSzymon Olewniczak } 847fbf4c39SSzymon Olewniczak 858a638198SSzymon Olewniczak public function update_save(Entity $thread, $data) { 867fbf4c39SSzymon Olewniczak $prev_coordinator = $thread->coordinator; 8753df74e7SSzymon Olewniczak 887fbf4c39SSzymon Olewniczak $label_ids = array(); 897fbf4c39SSzymon Olewniczak if (isset($data['label_id']) && $data['label_id'] != '') { 907fbf4c39SSzymon Olewniczak $label_ids[] = $data['label_id']; 917fbf4c39SSzymon Olewniczak } 927fbf4c39SSzymon Olewniczak try { 937fbf4c39SSzymon Olewniczak $this->beginTransaction(); 9453df74e7SSzymon Olewniczak parent::update_save($thread, $data); 957fbf4c39SSzymon Olewniczak 967fbf4c39SSzymon Olewniczak $cur_label_ids = array_keys($thread->get_labels()); 977fbf4c39SSzymon Olewniczak $labels_to_add = array_diff($label_ids, $cur_label_ids); 987fbf4c39SSzymon Olewniczak $labels_to_rem = array_diff($cur_label_ids, $label_ids); 997fbf4c39SSzymon Olewniczak 1007fbf4c39SSzymon Olewniczak foreach($labels_to_add as $label_id) { 1017fbf4c39SSzymon Olewniczak $thread->add_label($label_id); 1027fbf4c39SSzymon Olewniczak } 1037fbf4c39SSzymon Olewniczak 1047fbf4c39SSzymon Olewniczak foreach($labels_to_rem as $label_id) { 1057fbf4c39SSzymon Olewniczak $thread->remove_label($label_id); 1067fbf4c39SSzymon Olewniczak } 1077fbf4c39SSzymon Olewniczak 1087fbf4c39SSzymon Olewniczak if($thread->coordinator != null && $thread->coordinator != $prev_coordinator) { 1097fbf4c39SSzymon Olewniczak $thread->remove_participant_flags($prev_coordinator, array('coordinator')); 1107fbf4c39SSzymon Olewniczak $thread->set_participant_flags($thread->coordinator, array('subscribent', 'coordinator')); 1117fbf4c39SSzymon Olewniczak } 1127fbf4c39SSzymon Olewniczak 11353df74e7SSzymon Olewniczak if ($thread->acl_of('private') >= BEZ_PERMISSION_CHANGE) { 11453df74e7SSzymon Olewniczak $private = false; 11553df74e7SSzymon Olewniczak if (isset($data['private'])) { 11653df74e7SSzymon Olewniczak $private = true; 11753df74e7SSzymon Olewniczak } 11853df74e7SSzymon Olewniczak $thread->set_private_flag($private); 11953df74e7SSzymon Olewniczak } 12053df74e7SSzymon Olewniczak 1218a638198SSzymon Olewniczak $this->commitTransaction(); 1227fbf4c39SSzymon Olewniczak } catch(Exception $exception) { 1238a638198SSzymon Olewniczak $this->rollbackTransaction(); 1248a638198SSzymon Olewniczak } 1258a638198SSzymon Olewniczak 1268a638198SSzymon Olewniczak if ($thread->state != 'proposal' && $this->model->user_nick != $thread->coordinator) { 1278a638198SSzymon Olewniczak $thread->mail_inform_coordinator(); 1287fbf4c39SSzymon Olewniczak } 1297fbf4c39SSzymon Olewniczak } 130de02284cSSzymon Olewniczak} 131