1<?php
2
3  /********************************************************\
4  | Show various reports on tasks                          |
5  | ~~~~~~~~~~~~~~~~~~~~~~~~                               |
6  \********************************************************/
7
8if (!defined('IN_FS')) {
9    die('Do not access this file directly.');
10}
11
12if (!$user->perms('view_reports')) {
13    Flyspray::Redirect($baseurl);
14}
15
16require_once(BASEDIR . '/includes/events.inc.php');
17$page->setTitle($fs->prefs['page_title'] . L('reports'));
18
19/**********************\
20*  Event reports       *
21\**********************/
22
23$events = array(1 => L('opened'),
24                13 => L('reopened'),
25                2 => L('closed'),
26                3 => L('edited'),
27                14 => L('assignmentchanged'),
28                29 => L('events.useraddedtoassignees'),
29                4 => L('commentadded'),
30                5 => L('commentedited'),
31                6 => L('commentdeleted'),
32                7 => L('attachmentadded'),
33                8 => L('attachmentdeleted'),
34                11 => L('relatedadded'),
35                12 => L('relateddeleted'),
36                9 => L('notificationadded'),
37                10 => L('notificationdeleted'),
38                17 => L('reminderadded'),
39                18 => L('reminderdeleted'));
40
41$user_events = array(30 => L('created'),
42                     31 => L('deleted'));
43
44$page->assign('events', $events);
45$page->assign('user_events', $user_events);
46
47$sort = strtoupper(Req::enum('sort', array('desc', 'asc')));
48
49$where = array();
50$params = array();
51$orderby = '';
52
53switch (Req::val('order')) {
54    case 'type':
55        $orderby = "h.event_type {$sort}, h.event_date {$sort}";
56        break;
57    case 'user':
58        $orderby = "user_id {$sort}, h.event_date {$sort}";
59        break;
60    case 'date': default:
61        $orderby = "h.event_date {$sort}, h.event_type {$sort}";
62}
63
64foreach (Req::val('events', array()) as $eventtype) {
65    $where[] = 'h.event_type = ?';
66    $params[] = $eventtype;
67}
68$where = '(' . implode(' OR ', $where) . ')';
69
70if ($proj->id) {
71    $where = $where . 'AND (t.project_id = ?  OR h.event_type > 29) ';
72    $params[] = $proj->id;
73}
74
75if ( ($fromdate = Req::val('fromdate')) || Req::val('todate')) {
76        $where .= ' AND ';
77        $todate = Req::val('todate');
78
79        if ($fromdate) {
80            $where .= ' h.event_date > ?';
81            $params[] = Flyspray::strtotime($fromdate) + 0;
82        }
83        if ($todate && $fromdate) {
84            $where .= ' AND h.event_date < ?';
85            $params[] = Flyspray::strtotime($todate) + 86400;
86        } else if ($todate) {
87            $where .= ' h.event_date < ?';
88            $params[] = Flyspray::strtotime($todate) + 86400;
89        }
90}
91
92if (count(Req::val('events'))) {
93    $histories = $db->Query("SELECT h.*
94                        FROM  {history} h
95                   LEFT JOIN {tasks} t ON h.task_id = t.task_id
96                        WHERE $where
97                     ORDER BY $orderby", $params, Req::num('event_number', -1));
98
99    $histories = $db->FetchAllArray($histories);
100}
101
102$page->uses('histories', 'sort');
103
104$page->pushTpl('reports.tpl');
105?>
106