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}