import
[web.mtrack] / web / roadmap.php
1 <?php # vim:ts=2:sw=2:et:
2 /* For licensing and copyright terms, see the file named LICENSE */
3
4 include '../inc/common.php';
5
6 MTrackACL::requireAllRights('Roadmap', 'read');
7
8 mtrack_head("Roadmap");
9
10 $completed = isset($_GET['completed']) ? 'checked' : '';
11 $watched = isset($_GET['watched']) ?
12   'checked' : (count($_GET) ? '' : 'checked');
13
14 echo <<<HTML
15 <h1>Roadmap</h1>
16 <div style="float:right">
17 <form method="get">
18   <input type="checkbox" id='completed' name="completed" $completed>
19   <label for='completed'>Show completed milestones</label><br/>
20   <input type="checkbox" id='watched' name="watched" $watched>
21   <label for='watched'>Show only watched milestones</label><br/>
22   <button type="submit" name='s'>Update</button><br>
23 </form>
24 <button onclick="document.location.href='{$ABSWEB}milestone.php?new=1';return false;">Add Milestone</button>
25 <script type='text/javascript'>
26 var showingGraphs = true;
27 function toggleGraphs()
28 {
29   if (showingGraphs) {
30     $('.burndown').hide();
31   } else {
32     $('.burndown').show();
33   }
34   showingGraphs = !showingGraphs;
35 }
36 </script>
37 <button onclick="toggleGraphs(); return false;">Toggle Graphs</button>
38 </div>
39 HTML;
40 $db = MTrackDB::get();
41
42 if (!empty($_GET['completed'])) {
43   $comp = "";
44 } else {
45   $comp = " AND completed IS NULL ";
46 }
47
48 if ($watched == 'checked') {
49   $me = $db->quote(mtrack_canon_username(MTrackAuth::whoami()));
50   if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'pgsql') {
51     $oid = 'w.oid::integer';
52   } else {
53     $oid = 'w.oid';
54   }
55   $sql = <<<SQL
56 SELECT distinct name, duedate
57 FROM watches w
58 LEFT JOIN milestones m on (m.mid = $oid)
59   WHERE
60     w.userid = $me AND
61     w.otype = 'milestone' AND
62     deleted != 1
63     AND pmid IS NULL
64     $comp
65 ORDER by duedate ASC, name
66 SQL;
67
68 } else {
69   $sql = <<<SQL
70 SELECT name
71 FROM milestones
72   WHERE 
73     deleted != 1
74     AND pmid IS NULL
75   $comp 
76 ORDER by case when duedate IS NULL then 1 else 0 end, duedate ASC, name
77 SQL;
78 }
79
80 $i = 0;
81 foreach ($db->query($sql)->fetchAll(PDO::FETCH_ASSOC) as $row) {
82   echo MTrackMilestone::macro_MilestoneSummary($row['name']);
83   $i++;
84 }
85
86 if ($i == 0) {
87   $milestones = $watched == 'checked' ? 'watched milestones' : 'milestones';
88   echo <<<HTML
89 <p><em>No $milestones were found.</em></p>
90 HTML;
91 }
92
93 mtrack_foot();
94