Merge pull request #13837 from eileenmcnaughton/event_conf
[civicrm-core.git] / CRM / Member / Page / DashBoard.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 5 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2019 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
26 */
27
28 /**
29 *
30 * @package CRM
31 * @copyright CiviCRM LLC (c) 2004-2019
32 * $Id$
33 *
34 */
35
36 /**
37 * Page for displaying list of Payment-Instrument
38 */
39 class CRM_Member_Page_DashBoard extends CRM_Core_Page {
40
41 /**
42 * Heart of the viewing process. The runner gets all the meta data for
43 * the contact and calls the appropriate type of page to view.
44 *
45 * @return void
46 */
47 public function preProcess() {
48
49 //CRM-13901 don't show dashboard to contacts with limited view writes & it does not relect
50 //what they have access to
51 //@todo implement acls on dashboard querys (preferably via api to enhance that at the same time)
52 if (!CRM_Core_Permission::check('view all contacts') && !CRM_Core_Permission::check('edit all contacts')) {
53 $this->showMembershipSummary = FALSE;
54 $this->assign('membershipSummary', FALSE);
55 return;
56 }
57 $this->assign('membershipSummary', TRUE);
58 CRM_Utils_System::setTitle(ts('CiviMember'));
59 $membershipSummary = array();
60 $preMonth = date("Y-m-d", mktime(0, 0, 0, date("m") - 1, 01, date("Y")));
61 $preMonthEnd = date("Y-m-t", mktime(0, 0, 0, date("m") - 1, 01, date("Y")));
62
63 $preMonthYear = mktime(0, 0, 0, substr($preMonth, 4, 2), 1, substr($preMonth, 0, 4));
64
65 $today = getdate();
66 $date = CRM_Utils_Date::getToday();
67 $isCurrentMonth = 0;
68
69 // You can force the dashboard to display based upon a certain date
70 $ym = CRM_Utils_Array::value('date', $_GET);
71
72 if ($ym) {
73 if (preg_match('/^\d{6}$/', $ym) == 0 ||
74 !checkdate(substr($ym, 4, 2), 1, substr($ym, 0, 4)) ||
75 substr($ym, 0, 1) == 0
76 ) {
77 CRM_Core_Error::fatal(ts('Invalid date query "%1" in URL (valid syntax is yyyymm).', array(1 => $ym)));
78 }
79
80 $isPreviousMonth = 0;
81 $isCurrentMonth = substr($ym, 0, 4) == $today['year'] && substr($ym, 4, 2) == $today['mon'];
82 $ymd = date('Y-m-d', mktime(0, 0, -1, substr($ym, 4, 2) + 1, 1, substr($ym, 0, 4)));
83 $monthStartTs = mktime(0, 0, 0, substr($ym, 4, 2), 1, substr($ym, 0, 4));
84 $current = CRM_Utils_Date::customFormat($date, '%Y-%m-%d');
85 $ym = substr($ym, 0, 4) . '-' . substr($ym, 4, 2);
86 }
87 else {
88 $ym = sprintf("%04d-%02d", $today['year'], $today['mon']);
89 $ymd = sprintf("%04d-%02d-%02d", $today['year'], $today['mon'], $today['mday']);
90 $monthStartTs = mktime(0, 0, 0, $today['mon'], 1, $today['year']);
91 $current = CRM_Utils_Date::customFormat($date, '%Y-%m-%d');
92 $isCurrentMonth = 1;
93 $isPreviousMonth = 1;
94 }
95 $monthStart = $ym . '-01';
96 $yearStart = substr($ym, 0, 4) . '-01-01';
97
98 $membershipTypes = CRM_Member_BAO_MembershipType::getMembershipTypes(FALSE);
99 // added
100 //$membership = new CRM_Member_BAO_Membership;
101
102 foreach ($membershipTypes as $key => $value) {
103
104 $membershipSummary[$key]['premonth']['new'] = array(
105 'count' => CRM_Member_BAO_Membership::getMembershipJoins($key, $preMonth, $preMonthEnd),
106 'name' => $value,
107 );
108
109 $membershipSummary[$key]['premonth']['renew'] = array(
110 'count' => CRM_Member_BAO_Membership::getMembershipRenewals($key, $preMonth, $preMonthEnd),
111 'name' => $value,
112 );
113
114 $membershipSummary[$key]['premonth']['total'] = array(
115 'count' => CRM_Member_BAO_Membership::getMembershipStarts($key, $preMonth, $preMonthEnd),
116 'name' => $value,
117 );
118
119 $membershipSummary[$key]['month']['new'] = array(
120 'count' => CRM_Member_BAO_Membership::getMembershipJoins($key, $monthStart, $ymd),
121 'name' => $value,
122 );
123
124 $membershipSummary[$key]['month']['renew'] = array(
125 'count' => CRM_Member_BAO_Membership::getMembershipRenewals($key, $monthStart, $ymd),
126 'name' => $value,
127 );
128
129 $membershipSummary[$key]['month']['total'] = array(
130 'count' => CRM_Member_BAO_Membership::getMembershipStarts($key, $monthStart, $ymd),
131 'name' => $value,
132 );
133
134 $membershipSummary[$key]['year']['new'] = array(
135 'count' => CRM_Member_BAO_Membership::getMembershipJoins($key, $yearStart, $ymd),
136 'name' => $value,
137 );
138
139 $membershipSummary[$key]['year']['renew'] = array(
140 'count' => CRM_Member_BAO_Membership::getMembershipRenewals($key, $yearStart, $ymd),
141 'name' => $value,
142 );
143
144 $membershipSummary[$key]['year']['total'] = array(
145 'count' => CRM_Member_BAO_Membership::getMembershipStarts($key, $yearStart, $ymd),
146 'name' => $value,
147 );
148
149 $membershipSummary[$key]['current']['total'] = array(
150 'count' => CRM_Member_BAO_Membership::getMembershipCount($key, $current),
151 'name' => $value,
152 );
153
154 $membershipSummary[$key]['total']['total'] = array('count' => CRM_Member_BAO_Membership::getMembershipCount($key, $ymd));
155
156 //LCD also get summary stats for membership owners
157 $membershipSummary[$key]['premonth_owner']['premonth_owner'] = array(
158 'count' => CRM_Member_BAO_Membership::getMembershipStarts($key, $preMonth, $preMonthEnd, 0, 1),
159 'name' => $value,
160 );
161
162 $membershipSummary[$key]['month_owner']['month_owner'] = array(
163 'count' => CRM_Member_BAO_Membership::getMembershipStarts($key, $monthStart, $ymd, 0, 1),
164 'name' => $value,
165 );
166
167 $membershipSummary[$key]['year_owner']['year_owner'] = array(
168 'count' => CRM_Member_BAO_Membership::getMembershipStarts($key, $yearStart, $ymd, 0, 1),
169 'name' => $value,
170 );
171
172 $membershipSummary[$key]['current_owner']['current_owner'] = array(
173 'count' => CRM_Member_BAO_Membership::getMembershipCount($key, $current, 0, 1),
174 'name' => $value,
175 );
176
177 $membershipSummary[$key]['total_owner']['total_owner'] = array('count' => CRM_Member_BAO_Membership::getMembershipCount($key, $ymd, 0, 1));
178 //LCD end
179 }
180
181 $status = CRM_Member_BAO_MembershipStatus::getMembershipStatusCurrent();
182 $status = implode(',', $status);
183
184 foreach ($membershipSummary as $typeID => $details) {
185 if (!$isCurrentMonth) {
186 $membershipSummary[$typeID]['total']['total']['url'] = CRM_Utils_System::url('civicrm/member/search',
187 "reset=1&force=1&start=&end=$ymd&status=$status&type=$typeID"
188 );
189 $membershipSummary[$typeID]['total_owner']['total_owner']['url'] = CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&start=&end=$ymd&status=$status&type=$typeID&owner=1");
190 }
191 else {
192 $membershipSummary[$typeID]['total']['total']['url'] = CRM_Utils_System::url('civicrm/member/search',
193 "reset=1&force=1&status=$status"
194 );
195 $membershipSummary[$typeID]['total_owner']['total_owner']['url'] = CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&status=$status&owner=1");
196 }
197 $membershipSummary[$typeID]['current']['total']['url'] = CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&status=$status&type=$typeID");
198 $membershipSummary[$typeID]['current_owner']['current_owner']['url'] = CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&status=$status&type=$typeID&owner=1");
199 }
200
201 $totalCount = array();
202
203 $newCountPreMonth = $newCountMonth = $newCountYear = 0;
204 $renewCountPreMonth = $renewCountMonth = $renewCountYear = 0;
205
206 $totalCountPreMonth = $totalCountMonth = $totalCountYear = $totalCountCurrent = $totalCountTotal = 0;
207 $totalCountPreMonth_owner = $totalCountMonth_owner = $totalCountYear_owner = $totalCountCurrent_owner = $totalCountTotal_owner = 0;
208 foreach ($membershipSummary as $key => $value) {
209 $newCountPreMonth = $newCountPreMonth + $value['premonth']['new']['count'];
210 $renewCountPreMonth = $renewCountPreMonth + $value['premonth']['renew']['count'];
211 $totalCountPreMonth = $totalCountPreMonth + $value['premonth']['total']['count'];
212 $newCountMonth = $newCountMonth + $value['month']['new']['count'];
213 $renewCountMonth = $renewCountMonth + $value['month']['renew']['count'];
214 $totalCountMonth = $totalCountMonth + $value['month']['total']['count'];
215 $newCountYear = $newCountYear + $value['year']['new']['count'];
216 $renewCountYear = $renewCountYear + $value['year']['renew']['count'];
217 $totalCountYear = $totalCountYear + $value['year']['total']['count'];
218 $totalCountCurrent = $totalCountCurrent + $value['current']['total']['count'];
219 $totalCountTotal = $totalCountTotal + $value['total']['total']['count'];
220
221 //LCD add owner values
222 $totalCountPreMonth_owner = $totalCountPreMonth_owner + $value['premonth_owner']['premonth_owner']['count'];
223 $totalCountMonth_owner = $totalCountMonth_owner + $value['month_owner']['month_owner']['count'];
224 $totalCountYear_owner = $totalCountYear_owner + $value['year_owner']['year_owner']['count'];
225 $totalCountCurrent_owner = $totalCountCurrent_owner + $value['current_owner']['current_owner']['count'];
226 $totalCountTotal_owner = $totalCountTotal_owner + $value['total_owner']['total_owner']['count'];
227 }
228
229 $totalCount['premonth']['new'] = array(
230 'count' => $newCountPreMonth,
231 );
232
233 $totalCount['premonth']['renew'] = array(
234 'count' => $renewCountPreMonth,
235 );
236
237 $totalCount['premonth']['total'] = array(
238 'count' => $totalCountPreMonth,
239 );
240
241 $totalCount['month']['new'] = array(
242 'count' => $newCountMonth,
243 );
244
245 $totalCount['month']['renew'] = array(
246 'count' => $renewCountMonth,
247 );
248
249 $totalCount['month']['total'] = array(
250 'count' => $totalCountMonth,
251 );
252
253 $totalCount['year']['new'] = array(
254 'count' => $newCountYear,
255 );
256
257 $totalCount['year']['renew'] = array(
258 'count' => $renewCountYear,
259 );
260
261 $totalCount['year']['total'] = array(
262 'count' => $totalCountYear,
263 );
264
265 $totalCount['current']['total'] = array(
266 'count' => $totalCountCurrent,
267 'url' => CRM_Utils_System::url('civicrm/member/search',
268 "reset=1&force=1&status=$status"
269 ),
270 );
271
272 $totalCount['total']['total'] = array(
273 'count' => $totalCountTotal,
274 'url' => CRM_Utils_System::url('civicrm/member/search',
275 "reset=1&force=1&status=$status"
276 ),
277 );
278
279 if (!$isCurrentMonth) {
280 $totalCount['total']['total'] = array(
281 'count' => $totalCountTotal,
282 'url' => CRM_Utils_System::url('civicrm/member/search',
283 "reset=1&force=1&status=$status&start=&end=$ymd"
284 ),
285 );
286 }
287
288 // Activity search also unable to handle owner vs. inherited
289
290 //LCD add owner values
291 $totalCount['premonth_owner']['premonth_owner'] = array(
292 'count' => $totalCountPreMonth_owner,
293 // 'url' => CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&status=$status&start=$preMonth&end=$preMonthEnd&owner=1"),
294 );
295
296 $totalCount['month_owner']['month_owner'] = array(
297 'count' => $totalCountMonth_owner,
298 // 'url' => CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&status=$status&start=$monthStart&end=$ymd&owner=1"),
299 );
300
301 $totalCount['year_owner']['year_owner'] = array(
302 'count' => $totalCountYear_owner,
303 // 'url' => CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&status=$status&start=$yearStart&end=$ymd&owner=1"),
304 );
305
306 $totalCount['current_owner']['current_owner'] = array(
307 'count' => $totalCountCurrent_owner,
308 // 'url' => CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&status=$status&owner=1"),
309 );
310
311 $totalCount['total_owner']['total_owner'] = array(
312 'count' => $totalCountTotal_owner,
313 // 'url' => CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&status=$status&owner=1"),
314 );
315
316 if (!$isCurrentMonth) {
317 $totalCount['total_owner']['total_owner'] = array(
318 'count' => $totalCountTotal_owner,
319 // 'url' => CRM_Utils_System::url('civicrm/member/search', "reset=1&force=1&status=$status&start=&end=$ymd&owner=1"),
320 );
321 }
322 //LCD end
323
324 $this->assign('membershipSummary', $membershipSummary);
325 $this->assign('totalCount', $totalCount);
326 $this->assign('month', CRM_Utils_Date::customFormatTs($monthStartTs, '%B'));
327 $this->assign('year', date('Y', $monthStartTs));
328 $this->assign('premonth', CRM_Utils_Date::customFormat($preMonth, '%B'));
329 $this->assign('currentMonth', date('F'));
330 $this->assign('currentYear', date('Y'));
331 $this->assign('isCurrent', $isCurrentMonth);
332 $this->assign('preMonth', $isPreviousMonth);
333 }
334
335 /**
336 * the main function that is called when the page loads,
337 * it decides the which action has to be taken for the page.
338 *
339 * @return null
340 */
341 public function run() {
342 $this->preProcess();
343
344 $controller = new CRM_Core_Controller_Simple('CRM_Member_Form_Search', ts('Member'), NULL);
345 $controller->setEmbedded(TRUE);
346 $controller->reset();
347 $controller->set('limit', 20);
348 $controller->set('force', 1);
349 $controller->set('context', 'dashboard');
350 $controller->process();
351 $controller->run();
352
353 return parent::run();
354 }
355
356 }