Merge pull request #15529 from civicrm/5.19
[civicrm-core.git] / CRM / Contribute / Page / ContributionPage.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
fee14197 4 | CiviCRM version 5 |
6a488035 5 +--------------------------------------------------------------------+
6b83d5bd 6 | Copyright CiviCRM LLC (c) 2004-2019 |
6a488035
TO
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 +--------------------------------------------------------------------+
d25dd0ee 26 */
6a488035
TO
27
28/**
29 *
30 * @package CRM
6b83d5bd 31 * @copyright CiviCRM LLC (c) 2004-2019
6a488035
TO
32 */
33
34/**
35 * Create a page for displaying Contribute Pages
36 * Contribute Pages are pages that are used to display
37 * contributions of different types. Pages consist
38 * of many customizable sections which can be
39 * accessed.
40 *
41 * This page provides a top level browse view
42 * of all the contribution pages in the system.
43 *
44 */
45class CRM_Contribute_Page_ContributionPage extends CRM_Core_Page {
46
47 /**
fe482240 48 * The action links that we need to display for the browse screen.
6a488035
TO
49 *
50 * @var array
51 */
52 private static $_actionLinks;
53 private static $_contributionLinks;
54 private static $_configureActionLinks;
55 private static $_onlineContributionLinks;
56
4bf0b605
AH
57 /**
58 * @var CRM_Utils_Pager
59 */
6a488035
TO
60 protected $_pager = NULL;
61
4bf0b605
AH
62 /**
63 * @var string
64 */
6a488035
TO
65 protected $_sortByCharacter;
66
67 /**
68 * Get the action links for this page.
69 *
a3379cc1
AH
70 * @return array
71 */
d1424f8f 72 public static function &actionLinks() {
6a488035
TO
73 // check if variable _actionsLinks is populated
74 if (!isset(self::$_actionLinks)) {
75 // helper variable for nicer formatting
76 $deleteExtra = ts('Are you sure you want to delete this Contribution page?');
77 $copyExtra = ts('Are you sure you want to make a copy of this Contribution page?');
78
79 self::$_actionLinks = array(
80 CRM_Core_Action::COPY => array(
81 'name' => ts('Make a Copy'),
82 'url' => CRM_Utils_System::currentPath(),
83 'qs' => 'action=copy&gid=%%id%%',
84 'title' => ts('Make a Copy of CiviCRM Contribution Page'),
85 'extra' => 'onclick = "return confirm(\'' . $copyExtra . '\');"',
86 ),
87 CRM_Core_Action::DISABLE => array(
88 'name' => ts('Disable'),
89 'title' => ts('Disable'),
4d17a233 90 'ref' => 'crm-enable-disable',
6a488035
TO
91 ),
92 CRM_Core_Action::ENABLE => array(
93 'name' => ts('Enable'),
4d17a233 94 'ref' => 'crm-enable-disable',
6a488035
TO
95 'title' => ts('Enable'),
96 ),
97 CRM_Core_Action::DELETE => array(
98 'name' => ts('Delete'),
99 'url' => CRM_Utils_System::currentPath(),
100 'qs' => 'action=delete&reset=1&id=%%id%%',
101 'title' => ts('Delete Custom Field'),
102 'extra' => 'onclick = "return confirm(\'' . $deleteExtra . '\');"',
103 ),
104 );
105 }
106 return self::$_actionLinks;
107 }
108
109 /**
110 * Get the configure action links for this page.
111 *
a3379cc1 112 * @return array
6a488035 113 */
00be9182 114 public function &configureActionLinks() {
6a488035
TO
115 // check if variable _actionsLinks is populated
116 if (!isset(self::$_configureActionLinks)) {
117 $urlString = 'civicrm/admin/contribute/';
118 $urlParams = 'reset=1&action=update&id=%%id%%';
119
120 self::$_configureActionLinks = array(
121 CRM_Core_Action::ADD => array(
122 'name' => ts('Title and Settings'),
123 'title' => ts('Title and Settings'),
124 'url' => $urlString . 'settings',
125 'qs' => $urlParams,
126 'uniqueName' => 'settings',
127 ),
128 CRM_Core_Action::UPDATE => array(
129 'name' => ts('Contribution Amounts'),
130 'title' => ts('Contribution Amounts'),
131 'url' => $urlString . 'amount',
132 'qs' => $urlParams,
133 'uniqueName' => 'amount',
134 ),
135 CRM_Core_Action::VIEW => array(
136 'name' => ts('Membership Settings'),
137 'title' => ts('Membership Settings'),
138 'url' => $urlString . 'membership',
139 'qs' => $urlParams,
140 'uniqueName' => 'membership',
141 ),
142 CRM_Core_Action::EXPORT => array(
143 'name' => ts('Thank-you and Receipting'),
144 'title' => ts('Thank-you and Receipting'),
145 'url' => $urlString . 'thankyou',
146 'qs' => $urlParams,
147 'uniqueName' => 'thankyou',
148 ),
149 CRM_Core_Action::BASIC => array(
150 'name' => ts('Tell a Friend'),
151 'title' => ts('Tell a Friend'),
152 'url' => $urlString . 'friend',
153 'qs' => $urlParams,
154 'uniqueName' => 'friend',
155 ),
156 CRM_Core_Action::PROFILE => array(
157 'name' => ts('Include Profiles'),
158 'title' => ts('Include Profiles'),
159 'url' => $urlString . 'custom',
160 'qs' => $urlParams,
161 'uniqueName' => 'custom',
162 ),
163 CRM_Core_Action::MAP => array(
164 'name' => ts('Contribution Widget'),
165 'title' => ts('Contribution Widget'),
166 'url' => $urlString . 'widget',
167 'qs' => $urlParams,
168 'uniqueName' => 'widget',
169 ),
170 CRM_Core_Action::FOLLOWUP => array(
171 'name' => ts('Premiums'),
172 'title' => ts('Premiums'),
173 'url' => $urlString . 'premium',
174 'qs' => $urlParams,
175 'uniqueName' => 'premium',
176 ),
177 CRM_Core_Action::ADVANCED => array(
178 'name' => ts('Personal Campaign Pages'),
179 'title' => ts('Personal Campaign Pages'),
180 'url' => $urlString . 'pcp',
181 'qs' => $urlParams,
182 'uniqueName' => 'pcp',
183 ),
184 );
48fe48a6 185 $context = array(
186 'urlString' => $urlString,
f413512f 187 'urlParams' => $urlParams,
48fe48a6 188 );
189 CRM_Utils_Hook::tabset('civicrm/admin/contribute', self::$_configureActionLinks, $context);
6a488035
TO
190 }
191
192 return self::$_configureActionLinks;
193 }
194
195 /**
196 * Get the online contribution links.
197 *
a3379cc1 198 * @return array
6a488035 199 */
00be9182 200 public function &onlineContributionLinks() {
6a488035
TO
201 if (!isset(self::$_onlineContributionLinks)) {
202 $urlString = 'civicrm/contribute/transact';
203 $urlParams = 'reset=1&id=%%id%%';
204 self::$_onlineContributionLinks = array(
205 CRM_Core_Action::RENEW => array(
206 'name' => ts('Live Page'),
207 'title' => ts('Live Page'),
208 'url' => $urlString,
209 'qs' => $urlParams,
210 'fe' => TRUE,
211 'uniqueName' => 'live_page',
212 ),
213 CRM_Core_Action::PREVIEW => array(
214 'name' => ts('Test-drive'),
215 'title' => ts('Test-drive'),
216 'url' => $urlString,
217 'qs' => $urlParams . '&action=preview',
1330f57a
SL
218 // Addresses https://lab.civicrm.org/dev/core/issues/658
219 'fe' => TRUE,
6a488035
TO
220 'uniqueName' => 'test_drive',
221 ),
222 );
223 }
224
225 return self::$_onlineContributionLinks;
226 }
227
228 /**
229 * Get the contributions links.
230 *
a3379cc1 231 * @return array
6a488035 232 */
00be9182 233 public function &contributionLinks() {
6a488035
TO
234 if (!isset(self::$_contributionLinks)) {
235 //get contribution dates.
236 $dates = CRM_Contribute_BAO_Contribution::getContributionDates();
35959bc5
AH
237 $now = $dates['now'];
238 $yearDate = $dates['yearDate'];
239 $monthDate = $dates['monthDate'];
6a488035
TO
240 $yearNow = $yearDate + 10000;
241
242 $urlString = 'civicrm/contribute/search';
243 $urlParams = 'reset=1&pid=%%id%%&force=1&test=0';
244
245 self::$_contributionLinks = array(
246 CRM_Core_Action::DETACH => array(
247 'name' => ts('Current Month-To-Date'),
248 'title' => ts('Current Month-To-Date'),
249 'url' => $urlString,
103c6822 250 'qs' => "{$urlParams}&receive_date_low={$monthDate}&receive_date_high={$now}",
6a488035
TO
251 'uniqueName' => 'current_month_to_date',
252 ),
253 CRM_Core_Action::REVERT => array(
254 'name' => ts('Fiscal Year-To-Date'),
255 'title' => ts('Fiscal Year-To-Date'),
256 'url' => $urlString,
103c6822 257 'qs' => "{$urlParams}&receive_date_low={$yearDate}&receive_date_high={$yearNow}",
6a488035
TO
258 'uniqueName' => 'fiscal_year_to_date',
259 ),
260 CRM_Core_Action::BROWSE => array(
261 'name' => ts('Cumulative'),
262 'title' => ts('Cumulative'),
263 'url' => $urlString,
103c6822 264 'qs' => "{$urlParams}&receive_date_low=&receive_date_high=$now",
6a488035
TO
265 'uniqueName' => 'cumulative',
266 ),
267 );
268 }
269
270 return self::$_contributionLinks;
271 }
272
273 /**
274 * Run the page.
275 *
276 * This method is called after the page is created. It checks for the
277 * type of action and executes that action.
278 * Finally it calls the parent's run method.
279 *
4bf0b605 280 * @return mixed
6a488035 281 */
00be9182 282 public function run() {
6a488035
TO
283 // get the requested action
284 $action = CRM_Utils_Request::retrieve('action', 'String',
285 // default to 'browse'
286 $this, FALSE, 'browse'
287 );
288
289 // assign vars to templates
290 $this->assign('action', $action);
291 $id = CRM_Utils_Request::retrieve('id', 'Positive',
292 $this, FALSE, 0
293 );
294
295 // set breadcrumb to append to 2nd layer pages
353ffa53
TO
296 $breadCrumb = array(
297 array(
298 'title' => ts('Manage Contribution Pages'),
6a488035
TO
299 'url' => CRM_Utils_System::url(CRM_Utils_System::currentPath(),
300 'reset=1'
301 ),
a130e045 302 ),
353ffa53 303 );
6a488035
TO
304
305 // what action to take ?
306 if ($action & CRM_Core_Action::ADD) {
307 $session = CRM_Core_Session::singleton();
308 $session->pushUserContext(CRM_Utils_System::url(CRM_Utils_System::currentPath(),
353ffa53
TO
309 'action=browse&reset=1'
310 ));
6a488035
TO
311
312 $controller = new CRM_Contribute_Controller_ContributionPage(NULL, $action);
313 CRM_Utils_System::setTitle(ts('Manage Contribution Page'));
314 CRM_Utils_System::appendBreadCrumb($breadCrumb);
315 return $controller->run();
316 }
317 elseif ($action & CRM_Core_Action::UPDATE) {
318 $config = CRM_Core_Config::singleton();
319
320 // assign vars to templates
321 $this->assign('id', $id);
322 $this->assign('title', CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_ContributionPage', $id, 'title'));
323 $this->assign('is_active', CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_ContributionPage', $id, 'is_active'));
324 if (in_array('CiviMember', $config->enableComponents)) {
325 $this->assign('CiviMember', TRUE);
326 }
327 }
328 elseif ($action & CRM_Core_Action::COPY) {
d121646d 329 // @todo Unused local variable can be safely removed.
aa344a47
AH
330 // But are there any side effects of CRM_Core_Session::singleton() that we
331 // need to preserve?
6a488035
TO
332 $session = CRM_Core_Session::singleton();
333 CRM_Core_Session::setStatus(ts('A copy of the contribution page has been created'), ts('Successfully Copied'), 'success');
334 $this->copy();
335 }
336 elseif ($action & CRM_Core_Action::DELETE) {
337 CRM_Utils_System::appendBreadCrumb($breadCrumb);
338
339 $session = CRM_Core_Session::singleton();
340 $session->pushUserContext(CRM_Utils_System::url(CRM_Utils_System::currentPath(),
353ffa53
TO
341 'reset=1&action=browse'
342 ));
6a488035
TO
343
344 $id = CRM_Utils_Request::retrieve('id', 'Positive',
345 $this, FALSE, 0
346 );
347 $query = "
348SELECT ccp.title
665e5ec7 349FROM civicrm_contribution_page ccp
6a488035
TO
350JOIN civicrm_pcp cp ON ccp.id = cp.page_id
351WHERE cp.page_id = {$id}
352AND cp.page_type = 'contribute'
353";
354
355 if ($pageTitle = CRM_Core_DAO::singleValueQuery($query)) {
356 CRM_Core_Session::setStatus(ts('The \'%1\' cannot be deleted! You must Delete all Personal Campaign Page(s) related with this contribution page prior to deleting the page.', array(1 => $pageTitle)), ts('Deletion Error'), 'error');
357
358 CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/admin/contribute', 'reset=1'));
359 }
360
361 $controller = new CRM_Core_Controller_Simple('CRM_Contribute_Form_ContributionPage_Delete',
362 'Delete Contribution Page',
363 CRM_Core_Action::DELETE
364 );
365 $controller->set('id', $id);
366 $controller->process();
367 return $controller->run();
368 }
369 else {
370 // finally browse the contribution pages
371 $this->browse();
372
373 CRM_Utils_System::setTitle(ts('Manage Contribution Pages'));
374 }
375
376 return parent::run();
377 }
378
379 /**
347e061b 380 * Make a copy of a contribution page, including all the fields in the page.
6a488035 381 */
00be9182 382 public function copy() {
6a488035
TO
383 $gid = CRM_Utils_Request::retrieve('gid', 'Positive',
384 $this, TRUE, 0, 'GET'
385 );
386
697cb7c0 387 $copy = CRM_Contribute_BAO_ContributionPage::copy($gid);
6a488035 388
697cb7c0
J
389 $urlString = CRM_Utils_System::currentPath();
390 $urlParams = 'reset=1';
391
392 // Redirect to copied contribution page
393 if ($copy->id) {
394 $urlString = 'civicrm/admin/contribute/settings';
395 $urlParams .= '&action=update&id=' . $copy->id;
396 }
397
398 CRM_Utils_System::redirect(CRM_Utils_System::url($urlString, $urlParams));
6a488035
TO
399 }
400
401 /**
fe482240 402 * Browse all contribution pages.
6a488035 403 *
4bf0b605
AH
404 * @param mixed $action
405 * Unused parameter.
6a488035 406 */
00be9182 407 public function browse($action = NULL) {
734b09fb
CW
408 Civi::resources()->addStyleFile('civicrm', 'css/searchForm.css', 1, 'html-header');
409
6a488035
TO
410 $this->_sortByCharacter = CRM_Utils_Request::retrieve('sortByCharacter',
411 'String',
412 $this
413 );
d121646d 414 // @todo Unused local variable can be safely removed.
aa344a47
AH
415 // But are there any side effects of CRM_Utils_Request::retrieve() that we
416 // need to preserve?
6a488035
TO
417 $createdId = CRM_Utils_Request::retrieve('cid', 'Positive',
418 $this, FALSE, 0
419 );
420
2a81202b 421 if ($this->_sortByCharacter == 'all' ||
6a488035
TO
422 !empty($_POST)
423 ) {
424 $this->_sortByCharacter = '';
425 $this->set('sortByCharacter', '');
426 }
427
428 $this->search();
429
430 $params = array();
431
432 $whereClause = $this->whereClause($params, FALSE);
1bb74559 433 $config = CRM_Core_Config::singleton();
434 if ($config->includeAlphabeticalPager) {
435 $this->pagerAToZ($whereClause, $params);
436 }
6a488035
TO
437 $params = array();
438 $whereClause = $this->whereClause($params, TRUE);
439 $this->pager($whereClause, $params);
440
441 list($offset, $rowCount) = $this->_pager->getOffsetAndRowCount();
442
443 //check for delete CRM-4418
444 $allowToDelete = CRM_Core_Permission::check('delete in CiviContribute');
445
446 $query = "
447 SELECT id
448 FROM civicrm_contribution_page
449 WHERE $whereClause
2a81202b 450 ORDER BY is_active desc, title asc
6a488035
TO
451 LIMIT $offset, $rowCount";
452 $contribPage = CRM_Core_DAO::executeQuery($query, $params, TRUE, 'CRM_Contribute_DAO_ContributionPage');
453 $contribPageIds = array();
454 while ($contribPage->fetch()) {
455 $contribPageIds[$contribPage->id] = $contribPage->id;
456 }
457 //get all section info.
458 $contriPageSectionInfo = CRM_Contribute_BAO_ContributionPage::getSectionInfo($contribPageIds);
459
460 $query = "
461SELECT *
462FROM civicrm_contribution_page
463WHERE $whereClause
2a81202b 464ORDER BY is_active desc, title asc
6a488035
TO
465 LIMIT $offset, $rowCount";
466
467 $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, 'CRM_Contribute_DAO_ContributionPage');
468
469 //get all campaigns.
470 $allCampaigns = CRM_Campaign_BAO_Campaign::getCampaigns(NULL, NULL, FALSE, FALSE, FALSE, TRUE);
471
472 //get configure actions links.
473 $configureActionLinks = self::configureActionLinks();
474
475 while ($dao->fetch()) {
476 $contribution[$dao->id] = array();
477 CRM_Core_DAO::storeValues($dao, $contribution[$dao->id]);
478
479 // form all action links
d1424f8f 480 $action = array_sum(array_keys(self::actionLinks()));
6a488035
TO
481
482 //add configure actions links.
483 $action += array_sum(array_keys($configureActionLinks));
484
485 //add online contribution links.
486 $action += array_sum(array_keys(self::onlineContributionLinks()));
487
488 //add contribution search links.
489 $action += array_sum(array_keys(self::contributionLinks()));
490
491 if ($dao->is_active) {
874c9be7 492 $action -= (int) CRM_Core_Action::ENABLE;
6a488035
TO
493 }
494 else {
874c9be7 495 $action -= (int) CRM_Core_Action::DISABLE;
6a488035
TO
496 }
497
498 //CRM-4418
499 if (!$allowToDelete) {
874c9be7 500 $action -= (int) CRM_Core_Action::DELETE;
6a488035
TO
501 }
502
503 //build the configure links.
504 $sectionsInfo = CRM_Utils_Array::value($dao->id, $contriPageSectionInfo, array());
505 $contribution[$dao->id]['configureActionLinks'] = CRM_Core_Action::formLink(self::formatConfigureLinks($sectionsInfo),
506 $action,
507 array('id' => $dao->id),
508 ts('Configure'),
87dab4a4
AH
509 TRUE,
510 'contributionpage.configure.actions',
511 'ContributionPage',
512 $dao->id
6a488035
TO
513 );
514
515 //build the contributions links.
516 $contribution[$dao->id]['contributionLinks'] = CRM_Core_Action::formLink(self::contributionLinks(),
517 $action,
518 array('id' => $dao->id),
519 ts('Contributions'),
87dab4a4
AH
520 TRUE,
521 'contributionpage.contributions.search',
522 'ContributionPage',
523 $dao->id
6a488035
TO
524 );
525
526 //build the online contribution links.
527 $contribution[$dao->id]['onlineContributionLinks'] = CRM_Core_Action::formLink(self::onlineContributionLinks(),
528 $action,
529 array('id' => $dao->id),
530 ts('Links'),
87dab4a4
AH
531 TRUE,
532 'contributionpage.online.links',
533 'ContributionPage',
534 $dao->id
6a488035
TO
535 );
536
537 //build the normal action links.
538 $contribution[$dao->id]['action'] = CRM_Core_Action::formLink(self::actionLinks(),
539 $action,
540 array('id' => $dao->id),
541 ts('more'),
87dab4a4
AH
542 TRUE,
543 'contributionpage.action.links',
544 'ContributionPage',
545 $dao->id
6a488035
TO
546 );
547
548 //show campaigns on selector.
549 $contribution[$dao->id]['campaign'] = CRM_Utils_Array::value($dao->campaign_id, $allCampaigns);
550 }
551
552 if (isset($contribution)) {
553 $this->assign('rows', $contribution);
554 }
555 }
556
00be9182 557 public function search() {
874c9be7 558 if (isset($this->_action) & (CRM_Core_Action::ADD |
6a488035
TO
559 CRM_Core_Action::UPDATE |
560 CRM_Core_Action::DELETE
561 )
562 ) {
563 return;
564 }
565
566 $form = new CRM_Core_Controller_Simple('CRM_Contribute_Form_SearchContribution',
567 ts('Search Contribution'),
568 CRM_Core_Action::ADD
569 );
570 $form->setEmbedded(TRUE);
571 $form->setParent($this);
572 $form->process();
573 $form->run();
574 }
575
186c9c17 576 /**
c490a46a 577 * @param array $params
186c9c17
EM
578 * @param bool $sortBy
579 *
580 * @return int|string
581 */
00be9182 582 public function whereClause(&$params, $sortBy = TRUE) {
d121646d 583 // @todo Unused local variable can be safely removed.
353ffa53
TO
584 $values = $clauses = array();
585 $title = $this->get('title');
6a488035
TO
586 $createdId = $this->get('cid');
587
588 if ($createdId) {
589 $clauses[] = "(created_id = {$createdId})";
590 }
591
592 if ($title) {
593 $clauses[] = "title LIKE %1";
594 if (strpos($title, '%') !== FALSE) {
595 $params[1] = array(trim($title), 'String', FALSE);
596 }
597 else {
598 $params[1] = array(trim($title), 'String', TRUE);
599 }
600 }
601
481a74f4 602 $value = $this->get('financial_type_id');
6a488035
TO
603 $val = array();
604 if ($value) {
605 if (is_array($value)) {
606 foreach ($value as $k => $v) {
607 if ($v) {
608 $val[$k] = $k;
609 }
610 }
611 $type = implode(',', $val);
612 }
d121646d 613 // @todo Variable 'type' might not have been defined.
8b647c3a 614 $clauses[] = "financial_type_id IN ({$type})";
6a488035
TO
615 }
616
8b647c3a 617 if ($sortBy && $this->_sortByCharacter !== NULL) {
6a488035
TO
618 $clauses[] = "title LIKE '" . strtolower(CRM_Core_DAO::escapeWildCardString($this->_sortByCharacter)) . "%'";
619 }
620
a64ad157 621 $campaignIds = $this->getCampaignIds();
42f91903 622 if (count($campaignIds) >= 1) {
a64ad157
AH
623 $clauses[] = '( campaign_id IN ( ' . implode(' , ', $campaignIds) . ' ) )';
624 }
6a488035
TO
625
626 if (empty($clauses)) {
627 // Let template know if user has run a search or not
628 $this->assign('isSearch', 0);
629 return 1;
630 }
631 else {
632 $this->assign('isSearch', 1);
633 }
634
635 return implode(' AND ', $clauses);
636 }
637
a64ad157
AH
638 /**
639 * Gets the campaign ids from the session.
640 *
641 * @return int[]
642 */
13efab9d 643 public function getCampaignIds() {
a64ad157
AH
644 // The unfiltered value from the session cannot be trusted, it needs to be
645 // processed to get a clean array of positive integers.
646 $ids = array();
874c9be7
TO
647 foreach ((array) $this->get('campaign_id') as $id) {
648 if ((string) (int) $id === (string) $id && $id > 0) {
a64ad157
AH
649 $ids[] = $id;
650 }
651 }
652 return $ids;
653 }
654
186c9c17
EM
655 /**
656 * @param $whereClause
100fef9d 657 * @param array $whereParams
186c9c17 658 */
a130e045 659 public function pager($whereClause, $whereParams) {
6a488035
TO
660
661 $params['status'] = ts('Contribution %%StatusMessage%%');
662 $params['csvString'] = NULL;
663 $params['buttonTop'] = 'PagerTopButton';
664 $params['buttonBottom'] = 'PagerBottomButton';
665 $params['rowCount'] = $this->get(CRM_Utils_Pager::PAGE_ROWCOUNT);
666 if (!$params['rowCount']) {
667 $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT;
668 }
669
670 $query = "
671SELECT count(id)
8b647c3a
AH
672FROM civicrm_contribution_page
673WHERE $whereClause";
6a488035
TO
674
675 $params['total'] = CRM_Core_DAO::singleValueQuery($query, $whereParams);
676
677 $this->_pager = new CRM_Utils_Pager($params);
678 $this->assign_by_ref('pager', $this->_pager);
679 }
680
186c9c17
EM
681 /**
682 * @param $whereClause
100fef9d 683 * @param array $whereParams
186c9c17 684 */
00be9182 685 public function pagerAtoZ($whereClause, $whereParams) {
6a488035
TO
686
687 $query = "
8b647c3a
AH
688SELECT DISTINCT UPPER(LEFT(title, 1)) as sort_name
689FROM civicrm_contribution_page
690WHERE $whereClause
bad98dd5 691ORDER BY UPPER(LEFT(title, 1))
6a488035
TO
692";
693 $dao = CRM_Core_DAO::executeQuery($query, $whereParams);
694
695 $aToZBar = CRM_Utils_PagerAToZ::getAToZBar($dao, $this->_sortByCharacter, TRUE);
696 $this->assign('aToZ', $aToZBar);
697 }
698
186c9c17 699 /**
8b647c3a 700 * @param array $sectionsInfo
186c9c17
EM
701 *
702 * @return array
703 */
00be9182 704 public function formatConfigureLinks($sectionsInfo) {
8b647c3a 705 // build the formatted configure links.
6a488035
TO
706 $formattedConfLinks = self::configureActionLinks();
707 foreach ($formattedConfLinks as $act => & $link) {
708 $sectionName = CRM_Utils_Array::value('uniqueName', $link);
709 if (!$sectionName) {
710 continue;
711 }
712
a7488080 713 if (empty($sectionsInfo[$sectionName])) {
6a488035
TO
714 $classes = array();
715 if (isset($link['class'])) {
716 $classes = $link['class'];
717 }
718 $link['class'] = array_merge($classes, array('disabled'));
719 }
720 }
721
722 return $formattedConfLinks;
723 }
96025800 724
6a488035 725}