Commit | Line | Data |
---|---|---|
6a488035 | 1 | <?php |
6a488035 TO |
2 | |
3 | /* | |
4 | +--------------------------------------------------------------------+ | |
06b69b18 | 5 | | CiviCRM version 4.5 | |
6a488035 | 6 | +--------------------------------------------------------------------+ |
06b69b18 | 7 | | Copyright CiviCRM LLC (c) 2004-2014 | |
6a488035 TO |
8 | +--------------------------------------------------------------------+ |
9 | | This file is a part of CiviCRM. | | |
10 | | | | |
11 | | CiviCRM is free software; you can copy, modify, and distribute it | | |
12 | | under the terms of the GNU Affero General Public License | | |
13 | | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | | |
14 | | | | |
15 | | CiviCRM is distributed in the hope that it will be useful, but | | |
16 | | WITHOUT ANY WARRANTY; without even the implied warranty of | | |
17 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | | |
18 | | See the GNU Affero General Public License for more details. | | |
19 | | | | |
20 | | You should have received a copy of the GNU Affero General Public | | |
21 | | License and the CiviCRM Licensing Exception along | | |
22 | | with this program; if not, contact CiviCRM LLC | | |
23 | | at info[AT]civicrm[DOT]org. If you have questions about the | | |
24 | | GNU Affero General Public License or the licensing of CiviCRM, | | |
25 | | see the CiviCRM license FAQ at http://civicrm.org/licensing | | |
26 | +--------------------------------------------------------------------+ | |
27 | */ | |
28 | ||
29 | /** | |
30 | * | |
31 | * @package CRM | |
06b69b18 | 32 | * @copyright CiviCRM LLC (c) 2004-2014 |
6a488035 TO |
33 | * $Id$ |
34 | * | |
35 | */ | |
36 | ||
37 | /** | |
38 | * Page for invoking report instances | |
39 | */ | |
40 | class CRM_Report_Page_InstanceList extends CRM_Core_Page { | |
41 | ||
42 | static $_links = NULL; | |
43 | ||
44 | static $_exceptions = array( 'logging/contact/detail' ); | |
2f4c2f5d | 45 | |
6a488035 TO |
46 | /** |
47 | * Name of component if report list is filtered | |
48 | * | |
49 | * @var string | |
50 | **/ | |
51 | protected $_compName = NULL; | |
52 | ||
53 | /** | |
54 | * ID of component if report list is filtered | |
55 | * | |
56 | * @var int | |
57 | **/ | |
58 | protected $_compID = NULL; | |
59 | ||
2066e389 | 60 | /** |
61 | * ID of grouping if report list is filtered | |
62 | * | |
63 | * @var int | |
64 | **/ | |
37c20553 | 65 | protected $_grouping = NULL; |
2066e389 | 66 | |
6a488035 TO |
67 | /** |
68 | * ID of parent report template if list is filtered by template | |
69 | * | |
70 | * @var int | |
71 | **/ | |
72 | protected $_ovID = NULL; | |
73 | ||
74 | ||
75 | /** | |
76 | * Title of parent report template if list is filtered by template | |
77 | * | |
78 | * @var string | |
79 | **/ | |
80 | protected $_title = NULL; | |
81 | ||
82 | /** | |
83 | * Retrieves report instances, optionally filtered by parent report template ($ovID) | |
84 | * or by component ($compID) | |
85 | * | |
86 | * @return array $rows | |
87 | * @access public | |
88 | * @static | |
89 | */ | |
90 | public function &info() { | |
91 | ||
92 | $report = ''; | |
93 | if ($this->ovID) { | |
94 | $report .= " AND v.id = {$this->ovID} "; | |
95 | } | |
2f4c2f5d | 96 | |
6a488035 TO |
97 | if ($this->compID) { |
98 | if ($this->compID == 99) { | |
99 | $report .= " AND v.component_id IS NULL "; | |
100 | $this->_compName = 'Contact'; | |
37c20553 | 101 | } |
102 | else { | |
2f4c2f5d | 103 | $report .= " AND v.component_id = {$this->compID} "; |
6a488035 TO |
104 | $cmpName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Component', $this->compID, |
105 | 'name', 'id' | |
106 | ); | |
107 | $this->_compName = substr($cmpName, 4); | |
108 | if ($this->_compName == 'Contribute') { | |
109 | $this->_compName = 'Contribution'; | |
110 | } | |
111 | } | |
112 | } | |
37c20553 | 113 | elseif ($this->grouping) { |
114 | $report .= " AND v.grouping = '{$this->grouping}' "; | |
115 | } | |
6a488035 TO |
116 | |
117 | $sql = " | |
37c20553 | 118 | SELECT inst.id, inst.title, inst.report_id, inst.description, v.label, v.grouping, |
2066e389 | 119 | CASE |
120 | WHEN comp.name IS NOT NULL THEN SUBSTRING(comp.name, 5) | |
121 | WHEN v.grouping IS NOT NULL THEN v.grouping | |
122 | ELSE 'Contact' | |
123 | END as compName | |
6a488035 TO |
124 | FROM civicrm_option_group g |
125 | LEFT JOIN civicrm_option_value v | |
126 | ON v.option_group_id = g.id AND | |
127 | g.name = 'report_template' | |
128 | LEFT JOIN civicrm_report_instance inst | |
129 | ON v.value = inst.report_id | |
2f4c2f5d | 130 | LEFT JOIN civicrm_component comp |
6a488035 | 131 | ON v.component_id = comp.id |
2f4c2f5d | 132 | |
6a488035 TO |
133 | WHERE v.is_active = 1 {$report} |
134 | AND inst.domain_id = %1 | |
135 | ORDER BY v.weight"; | |
136 | ||
137 | $dao = CRM_Core_DAO::executeQuery($sql, array( | |
37c20553 | 138 | 1 => array(CRM_Core_Config::domainID(), 'Integer'), |
139 | )); | |
6a488035 TO |
140 | |
141 | $config = CRM_Core_Config::singleton(); | |
37c20553 | 142 | $rows = array(); |
143 | $url = 'civicrm/report/instance'; | |
6a488035 TO |
144 | while ($dao->fetch()) { |
145 | if (in_array($dao->report_id, self::$_exceptions)) { | |
146 | continue; | |
147 | } | |
148 | ||
149 | $enabled = in_array("Civi{$dao->compName}", $config->enableComponents); | |
37c20553 | 150 | if ($dao->compName == 'Contact' || $dao->compName == $dao->grouping) { |
6a488035 TO |
151 | $enabled = TRUE; |
152 | } | |
153 | //filter report listings by permissions | |
154 | if (!($enabled && CRM_Report_Utils_Report::isInstancePermissioned($dao->id))) { | |
155 | continue; | |
156 | } | |
157 | //filter report listing by group/role | |
158 | if (!($enabled && CRM_Report_Utils_Report::isInstanceGroupRoleAllowed($dao->id))) { | |
159 | continue; | |
160 | } | |
161 | ||
162 | if (trim($dao->title)) { | |
163 | if ($this->ovID) { | |
164 | $this->title = ts("Report(s) created from the template: %1", array(1 => $dao->label)); | |
165 | } | |
166 | $rows[$dao->compName][$dao->id]['title'] = $dao->title; | |
167 | $rows[$dao->compName][$dao->id]['label'] = $dao->label; | |
168 | $rows[$dao->compName][$dao->id]['description'] = $dao->description; | |
169 | $rows[$dao->compName][$dao->id]['url'] = CRM_Utils_System::url("{$url}/{$dao->id}", "reset=1"); | |
170 | if (CRM_Core_Permission::check('administer Reports')) { | |
171 | $rows[$dao->compName][$dao->id]['deleteUrl'] = CRM_Utils_System::url("{$url}/{$dao->id}", 'action=delete&reset=1'); | |
172 | } | |
173 | } | |
174 | } | |
6a488035 TO |
175 | return $rows; |
176 | } | |
177 | ||
178 | /** | |
179 | * run this page (figure out the action needed and perform it). | |
180 | * | |
181 | * @return void | |
182 | */ | |
183 | function run() { | |
184 | //Filters by source report template or by component | |
185 | $this->ovID = CRM_Utils_Request::retrieve('ovid', 'Positive', $this); | |
186 | $this->compID = CRM_Utils_Request::retrieve('compid', 'Positive', $this); | |
37c20553 | 187 | $this->grouping = CRM_Utils_Request::retrieve('grp', 'String', $this); |
188 | ||
6a488035 TO |
189 | $rows = $this->info(); |
190 | ||
191 | $this->assign('list', $rows); | |
192 | if ($this->ovID OR $this->compID) { | |
193 | // link to view all reports | |
194 | $reportUrl = CRM_Utils_System::url('civicrm/report/list', "reset=1"); | |
195 | $this->assign('reportUrl', $reportUrl); | |
196 | if ($this->ovID) { | |
197 | $this->assign('title', $this->title); | |
0c34116c DG |
198 | } else { |
199 | CRM_Utils_System::setTitle(ts('%1 Reports', array(1 => $this->_compName))); | |
6a488035 TO |
200 | } |
201 | } | |
202 | // assign link to template list for users with appropriate permissions | |
203 | if (CRM_Core_Permission::check('administer Reports')) { | |
204 | if ($this->compID) { | |
205 | $newButton = ts('New %1 Report', array(1 => $this->_compName)); | |
206 | $templateUrl = CRM_Utils_System::url('civicrm/report/template/list', "reset=1&compid={$this->compID}"); | |
207 | } else { | |
208 | $newButton = ts('New Report'); | |
209 | $templateUrl = CRM_Utils_System::url('civicrm/report/template/list', "reset=1"); | |
210 | } | |
211 | $this->assign('newButton', $newButton); | |
212 | $this->assign('templateUrl', $templateUrl); | |
213 | $this->assign('compName', $this->_compName); | |
214 | } | |
215 | return parent::run(); | |
216 | } | |
217 | } | |
218 |