xref: /plugin/bez/mdl/ThreadFactory.php (revision de02284c1e90f3c0d8df29c1c019b3ef912eafd9)
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