1*de02284cSSzymon Olewniczak<?php 2*de02284cSSzymon Olewniczak 3*de02284cSSzymon Olewniczaknamespace dokuwiki\plugin\bez\mdl; 4*de02284cSSzymon Olewniczak 5*de02284cSSzymon Olewniczak//if(!defined('DOKU_INC')) die(); 6*de02284cSSzymon Olewniczak 7*de02284cSSzymon Olewniczak//require_once 'factory.php'; 8*de02284cSSzymon Olewniczak//require_once 'thread.php'; 9*de02284cSSzymon Olewniczak 10*de02284cSSzymon Olewniczak 11*de02284cSSzymon Olewniczak 12*de02284cSSzymon Olewniczakclass ThreadFactory extends Factory { 13*de02284cSSzymon Olewniczak 14*de02284cSSzymon Olewniczak// public function __construct($model) { 15*de02284cSSzymon Olewniczak// parent::__construct($model); 16*de02284cSSzymon Olewniczak 17*de02284cSSzymon Olewniczak /* state_string: 18*de02284cSSzymon Olewniczak 0 -> opened 19*de02284cSSzymon Olewniczak 1 -> closed 20*de02284cSSzymon Olewniczak 2 -> rejected 21*de02284cSSzymon Olewniczak if state = 0 and all tasks are done -> done 22*de02284cSSzymon Olewniczak */ 23*de02284cSSzymon Olewniczak// $this->select_query = "SELECT *, 24*de02284cSSzymon Olewniczak// (CASE 25*de02284cSSzymon Olewniczak// WHEN state = 2 26*de02284cSSzymon Olewniczak// THEN '".$this->model->action->getLang('state_rejected')."' 27*de02284cSSzymon Olewniczak// WHEN coordinator = '-proposal' 28*de02284cSSzymon Olewniczak// THEN '".$this->model->action->getLang('state_proposal')."' 29*de02284cSSzymon Olewniczak// WHEN state = 0 AND assigned_tasks_count > 0 30*de02284cSSzymon Olewniczak// AND opened_tasks_count = 0 31*de02284cSSzymon Olewniczak// THEN '".$this->model->action->getLang('state_done')."' 32*de02284cSSzymon Olewniczak// WHEN state = 0 33*de02284cSSzymon Olewniczak// THEN '".$this->model->action->getLang('state_opened')."' 34*de02284cSSzymon Olewniczak// WHEN state = 1 35*de02284cSSzymon Olewniczak// THEN '".$this->model->action->getLang('state_closed')."' 36*de02284cSSzymon Olewniczak// END) AS state_string, 37*de02284cSSzymon Olewniczak// 38*de02284cSSzymon Olewniczak// (CASE 39*de02284cSSzymon Olewniczak// WHEN state = 2 40*de02284cSSzymon Olewniczak// THEN '2' 41*de02284cSSzymon Olewniczak// WHEN coordinator = '-proposal' 42*de02284cSSzymon Olewniczak// THEN '-proposal' 43*de02284cSSzymon Olewniczak// WHEN state = 0 AND assigned_tasks_count > 0 44*de02284cSSzymon Olewniczak// AND opened_tasks_count = 0 45*de02284cSSzymon Olewniczak// THEN '-done' 46*de02284cSSzymon Olewniczak// WHEN state = 0 47*de02284cSSzymon Olewniczak// THEN '0' 48*de02284cSSzymon Olewniczak// WHEN state = 1 49*de02284cSSzymon Olewniczak// THEN '1' 50*de02284cSSzymon Olewniczak// END) AS full_state, 51*de02284cSSzymon Olewniczak// 52*de02284cSSzymon Olewniczak// (CASE WHEN state = 2 then '3' 53*de02284cSSzymon Olewniczak// WHEN task_priority IS NULL THEN 'None' 54*de02284cSSzymon Olewniczak// ELSE task_priority 55*de02284cSSzymon Olewniczak// END) AS priority 56*de02284cSSzymon Olewniczak// 57*de02284cSSzymon Olewniczak// FROM (SELECT issues.*, 58*de02284cSSzymon Olewniczak// (SELECT COUNT(*) FROM tasks 59*de02284cSSzymon Olewniczak// WHERE tasks.issue = issues.id) 60*de02284cSSzymon Olewniczak// AS assigned_tasks_count, 61*de02284cSSzymon Olewniczak// (SELECT COUNT(*) FROM tasks 62*de02284cSSzymon Olewniczak// WHERE tasks.issue = issues.id AND tasks.state = 0) 63*de02284cSSzymon Olewniczak// AS opened_tasks_count, 64*de02284cSSzymon Olewniczak// (SELECT MIN((CASE WHEN tasks.state > 0 THEN '3' 65*de02284cSSzymon Olewniczak// WHEN tasks.plan_date >= date('now', '+1 month') THEN '2' 66*de02284cSSzymon Olewniczak// WHEN tasks.plan_date >= date('now') THEN '1' 67*de02284cSSzymon Olewniczak// ELSE '0' END)) FROM tasks WHERE tasks.issue = issues.id) 68*de02284cSSzymon Olewniczak// AS task_priority, 69*de02284cSSzymon Olewniczak// (SELECT SUM(tasks.cost) FROM tasks 70*de02284cSSzymon Olewniczak// WHERE tasks.issue = issues.id) 71*de02284cSSzymon Olewniczak// AS cost, 72*de02284cSSzymon Olewniczak// issuetypes.".$this->model->conf['lang']." AS type_string 73*de02284cSSzymon Olewniczak// FROM issues 74*de02284cSSzymon Olewniczak// LEFT JOIN issuetypes ON issues.type = issuetypes.id)"; 75*de02284cSSzymon Olewniczak// } 76*de02284cSSzymon Olewniczak 77*de02284cSSzymon Olewniczak protected function select_query() { 78*de02284cSSzymon Olewniczak return "SELECT thread.*, label.name AS label FROM thread 79*de02284cSSzymon Olewniczak LEFT JOIN thread_label ON thread.id = thread_label.thread_id 80*de02284cSSzymon Olewniczak LEFT JOIN label ON label.id = thread_label.label_id"; 81*de02284cSSzymon Olewniczak } 82*de02284cSSzymon Olewniczak 83*de02284cSSzymon Olewniczak public function get_years_scope() { 84*de02284cSSzymon Olewniczak $r = $this->model->sqlite->query('SELECT create_date FROM thread ORDER BY id LIMIT 1'); 85*de02284cSSzymon Olewniczak $date = $this->model->sqlite->res2single($r); 86*de02284cSSzymon Olewniczak 87*de02284cSSzymon Olewniczak //get only year 88*de02284cSSzymon Olewniczak $first = (int) substr($date, 0, strpos($date, '-')); 89*de02284cSSzymon Olewniczak $last = (int) date('Y'); 90*de02284cSSzymon Olewniczak 91*de02284cSSzymon Olewniczak $years = array(); 92*de02284cSSzymon Olewniczak for ($year = $first; $year <= $last; $year++) { 93*de02284cSSzymon Olewniczak $years[] = (string) $year; 94*de02284cSSzymon Olewniczak } 95*de02284cSSzymon Olewniczak return $years; 96*de02284cSSzymon Olewniczak } 97*de02284cSSzymon Olewniczak} 98