3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.6 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2014 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
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. |
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. |
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 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2014
37 * Create a page for displaying Contribute Pages
38 * Contribute Pages are pages that are used to display
39 * contributions of different types. Pages consist
40 * of many customizable sections which can be
43 * This page provides a top level browse view
44 * of all the contribution pages in the system.
47 class CRM_Contribute_Page_ContributionPage
extends CRM_Core_Page
{
50 * The action links that we need to display for the browse screen
54 private static $_actionLinks;
55 private static $_contributionLinks;
56 private static $_configureActionLinks;
57 private static $_onlineContributionLinks;
59 private static $_links = NULL;
61 protected $_pager = NULL;
63 protected $_sortByCharacter;
66 * Get the action links for this page.
68 * @return array $_actionLinks
70 */ function &actionLinks() {
71 // check if variable _actionsLinks is populated
72 if (!isset(self
::$_actionLinks)) {
73 // helper variable for nicer formatting
74 $deleteExtra = ts('Are you sure you want to delete this Contribution page?');
75 $copyExtra = ts('Are you sure you want to make a copy of this Contribution page?');
77 self
::$_actionLinks = array(
78 CRM_Core_Action
::COPY
=> array(
79 'name' => ts('Make a Copy'),
80 'url' => CRM_Utils_System
::currentPath(),
81 'qs' => 'action=copy&gid=%%id%%',
82 'title' => ts('Make a Copy of CiviCRM Contribution Page'),
83 'extra' => 'onclick = "return confirm(\'' . $copyExtra . '\');"',
85 CRM_Core_Action
::DISABLE
=> array(
86 'name' => ts('Disable'),
87 'title' => ts('Disable'),
88 'ref' => 'crm-enable-disable',
90 CRM_Core_Action
::ENABLE
=> array(
91 'name' => ts('Enable'),
92 'ref' => 'crm-enable-disable',
93 'title' => ts('Enable'),
95 CRM_Core_Action
::DELETE
=> array(
96 'name' => ts('Delete'),
97 'url' => CRM_Utils_System
::currentPath(),
98 'qs' => 'action=delete&reset=1&id=%%id%%',
99 'title' => ts('Delete Custom Field'),
100 'extra' => 'onclick = "return confirm(\'' . $deleteExtra . '\');"',
104 return self
::$_actionLinks;
108 * Get the configure action links for this page.
110 * @return array $_configureActionLinks
113 public function &configureActionLinks() {
114 // check if variable _actionsLinks is populated
115 if (!isset(self
::$_configureActionLinks)) {
116 $urlString = 'civicrm/admin/contribute/';
117 $urlParams = 'reset=1&action=update&id=%%id%%';
119 self
::$_configureActionLinks = array(
120 CRM_Core_Action
::ADD
=> array(
121 'name' => ts('Title and Settings'),
122 'title' => ts('Title and Settings'),
123 'url' => $urlString . 'settings',
125 'uniqueName' => 'settings',
127 CRM_Core_Action
::UPDATE
=> array(
128 'name' => ts('Contribution Amounts'),
129 'title' => ts('Contribution Amounts'),
130 'url' => $urlString . 'amount',
132 'uniqueName' => 'amount',
134 CRM_Core_Action
::VIEW
=> array(
135 'name' => ts('Membership Settings'),
136 'title' => ts('Membership Settings'),
137 'url' => $urlString . 'membership',
139 'uniqueName' => 'membership',
141 CRM_Core_Action
::EXPORT
=> array(
142 'name' => ts('Thank-you and Receipting'),
143 'title' => ts('Thank-you and Receipting'),
144 'url' => $urlString . 'thankyou',
146 'uniqueName' => 'thankyou',
148 CRM_Core_Action
::BASIC
=> array(
149 'name' => ts('Tell a Friend'),
150 'title' => ts('Tell a Friend'),
151 'url' => $urlString . 'friend',
153 'uniqueName' => 'friend',
155 CRM_Core_Action
::PROFILE
=> array(
156 'name' => ts('Include Profiles'),
157 'title' => ts('Include Profiles'),
158 'url' => $urlString . 'custom',
160 'uniqueName' => 'custom',
162 CRM_Core_Action
::MAP
=> array(
163 'name' => ts('Contribution Widget'),
164 'title' => ts('Contribution Widget'),
165 'url' => $urlString . 'widget',
167 'uniqueName' => 'widget',
169 CRM_Core_Action
::FOLLOWUP
=> array(
170 'name' => ts('Premiums'),
171 'title' => ts('Premiums'),
172 'url' => $urlString . 'premium',
174 'uniqueName' => 'premium',
176 CRM_Core_Action
::ADVANCED
=> array(
177 'name' => ts('Personal Campaign Pages'),
178 'title' => ts('Personal Campaign Pages'),
179 'url' => $urlString . 'pcp',
181 'uniqueName' => 'pcp',
186 return self
::$_configureActionLinks;
190 * Get the online contribution links.
192 * @return array $_onlineContributionLinks.
195 public function &onlineContributionLinks() {
196 if (!isset(self
::$_onlineContributionLinks)) {
197 $urlString = 'civicrm/contribute/transact';
198 $urlParams = 'reset=1&id=%%id%%';
199 self
::$_onlineContributionLinks = array(
200 CRM_Core_Action
::RENEW
=> array(
201 'name' => ts('Live Page'),
202 'title' => ts('Live Page'),
206 'uniqueName' => 'live_page',
208 CRM_Core_Action
::PREVIEW
=> array(
209 'name' => ts('Test-drive'),
210 'title' => ts('Test-drive'),
212 'qs' => $urlParams . '&action=preview',
213 'uniqueName' => 'test_drive',
218 return self
::$_onlineContributionLinks;
222 * Get the contributions links.
224 * @return array $_contributionLinks
227 public function &contributionLinks() {
228 if (!isset(self
::$_contributionLinks)) {
229 //get contribution dates.
230 $dates = CRM_Contribute_BAO_Contribution
::getContributionDates();
231 $now = $dates['now'];
232 $yearDate = $dates['yearDate'];
233 $monthDate = $dates['monthDate'];
234 $yearNow = $yearDate +
10000;
236 $urlString = 'civicrm/contribute/search';
237 $urlParams = 'reset=1&pid=%%id%%&force=1&test=0';
239 self
::$_contributionLinks = array(
240 CRM_Core_Action
::DETACH
=> array(
241 'name' => ts('Current Month-To-Date'),
242 'title' => ts('Current Month-To-Date'),
244 'qs' => "{$urlParams}&start={$monthDate}&end={$now}",
245 'uniqueName' => 'current_month_to_date',
247 CRM_Core_Action
::REVERT
=> array(
248 'name' => ts('Fiscal Year-To-Date'),
249 'title' => ts('Fiscal Year-To-Date'),
251 'qs' => "{$urlParams}&start={$yearDate}&end={$yearNow}",
252 'uniqueName' => 'fiscal_year_to_date',
254 CRM_Core_Action
::BROWSE
=> array(
255 'name' => ts('Cumulative'),
256 'title' => ts('Cumulative'),
258 'qs' => "{$urlParams}&start=&end=$now",
259 'uniqueName' => 'cumulative',
264 return self
::$_contributionLinks;
270 * This method is called after the page is created. It checks for the
271 * type of action and executes that action.
272 * Finally it calls the parent's run method.
277 public function run() {
278 // get the requested action
279 $action = CRM_Utils_Request
::retrieve('action', 'String',
280 // default to 'browse'
281 $this, FALSE, 'browse'
284 // assign vars to templates
285 $this->assign('action', $action);
286 $id = CRM_Utils_Request
::retrieve('id', 'Positive',
290 // set breadcrumb to append to 2nd layer pages
291 $breadCrumb = array(array('title' => ts('Manage Contribution Pages'),
292 'url' => CRM_Utils_System
::url(CRM_Utils_System
::currentPath(),
297 // what action to take ?
298 if ($action & CRM_Core_Action
::ADD
) {
299 $session = CRM_Core_Session
::singleton();
300 $session->pushUserContext(CRM_Utils_System
::url(CRM_Utils_System
::currentPath(),
301 'action=browse&reset=1'
304 $controller = new CRM_Contribute_Controller_ContributionPage(NULL, $action);
305 CRM_Utils_System
::setTitle(ts('Manage Contribution Page'));
306 CRM_Utils_System
::appendBreadCrumb($breadCrumb);
307 return $controller->run();
309 elseif ($action & CRM_Core_Action
::UPDATE
) {
310 $config = CRM_Core_Config
::singleton();
312 // assign vars to templates
313 $this->assign('id', $id);
314 $this->assign('title', CRM_Core_DAO
::getFieldValue('CRM_Contribute_DAO_ContributionPage', $id, 'title'));
315 $this->assign('is_active', CRM_Core_DAO
::getFieldValue('CRM_Contribute_DAO_ContributionPage', $id, 'is_active'));
316 if (in_array('CiviMember', $config->enableComponents
)) {
317 $this->assign('CiviMember', TRUE);
320 elseif ($action & CRM_Core_Action
::COPY
) {
321 $session = CRM_Core_Session
::singleton();
322 CRM_Core_Session
::setStatus(ts('A copy of the contribution page has been created'), ts('Successfully Copied'), 'success');
325 elseif ($action & CRM_Core_Action
::DELETE
) {
326 CRM_Utils_System
::appendBreadCrumb($breadCrumb);
328 $session = CRM_Core_Session
::singleton();
329 $session->pushUserContext(CRM_Utils_System
::url(CRM_Utils_System
::currentPath(),
330 'reset=1&action=browse'
333 $id = CRM_Utils_Request
::retrieve('id', 'Positive',
338 FROM civicrm_contribution_page ccp
339 JOIN civicrm_pcp cp ON ccp.id = cp.page_id
340 WHERE cp.page_id = {$id}
341 AND cp.page_type = 'contribute'
344 if ($pageTitle = CRM_Core_DAO
::singleValueQuery($query)) {
345 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');
347 CRM_Utils_System
::redirect(CRM_Utils_System
::url('civicrm/admin/contribute', 'reset=1'));
350 $controller = new CRM_Core_Controller_Simple('CRM_Contribute_Form_ContributionPage_Delete',
351 'Delete Contribution Page',
352 CRM_Core_Action
::DELETE
354 $controller->set('id', $id);
355 $controller->process();
356 return $controller->run();
359 // finally browse the contribution pages
362 CRM_Utils_System
::setTitle(ts('Manage Contribution Pages'));
365 return parent
::run();
369 * This function is to make a copy of a contribution page, including
370 * all the fields in the page
374 public function copy() {
375 $gid = CRM_Utils_Request
::retrieve('gid', 'Positive',
376 $this, TRUE, 0, 'GET'
379 CRM_Contribute_BAO_ContributionPage
::copy($gid);
381 CRM_Utils_System
::redirect(CRM_Utils_System
::url(CRM_Utils_System
::currentPath(), 'reset=1'));
385 * Browse all contribution pages
387 * @param null $action
392 public function browse($action = NULL) {
393 $this->_sortByCharacter
= CRM_Utils_Request
::retrieve('sortByCharacter',
397 $createdId = CRM_Utils_Request
::retrieve('cid', 'Positive',
401 if ($this->_sortByCharacter
== 1 ||
404 $this->_sortByCharacter
= '';
405 $this->set('sortByCharacter', '');
412 $whereClause = $this->whereClause($params, FALSE);
413 $this->pagerAToZ($whereClause, $params);
416 $whereClause = $this->whereClause($params, TRUE);
417 $this->pager($whereClause, $params);
419 list($offset, $rowCount) = $this->_pager
->getOffsetAndRowCount();
421 //check for delete CRM-4418
422 $allowToDelete = CRM_Core_Permission
::check('delete in CiviContribute');
426 FROM civicrm_contribution_page
428 LIMIT $offset, $rowCount";
429 $contribPage = CRM_Core_DAO
::executeQuery($query, $params, TRUE, 'CRM_Contribute_DAO_ContributionPage');
430 $contribPageIds = array();
431 while ($contribPage->fetch()) {
432 $contribPageIds[$contribPage->id
] = $contribPage->id
;
434 //get all section info.
435 $contriPageSectionInfo = CRM_Contribute_BAO_ContributionPage
::getSectionInfo($contribPageIds);
439 FROM civicrm_contribution_page
442 LIMIT $offset, $rowCount";
444 $dao = CRM_Core_DAO
::executeQuery($query, $params, TRUE, 'CRM_Contribute_DAO_ContributionPage');
447 $allCampaigns = CRM_Campaign_BAO_Campaign
::getCampaigns(NULL, NULL, FALSE, FALSE, FALSE, TRUE);
449 //get configure actions links.
450 $configureActionLinks = self
::configureActionLinks();
452 while ($dao->fetch()) {
453 $contribution[$dao->id
] = array();
454 CRM_Core_DAO
::storeValues($dao, $contribution[$dao->id
]);
456 // form all action links
457 $action = array_sum(array_keys($this->actionLinks()));
459 //add configure actions links.
460 $action +
= array_sum(array_keys($configureActionLinks));
462 //add online contribution links.
463 $action +
= array_sum(array_keys(self
::onlineContributionLinks()));
465 //add contribution search links.
466 $action +
= array_sum(array_keys(self
::contributionLinks()));
468 if ($dao->is_active
) {
469 $action -= CRM_Core_Action
::ENABLE
;
472 $action -= CRM_Core_Action
::DISABLE
;
476 if (!$allowToDelete) {
477 $action -= CRM_Core_Action
::DELETE
;
480 //build the configure links.
481 $sectionsInfo = CRM_Utils_Array
::value($dao->id
, $contriPageSectionInfo, array());
482 $contribution[$dao->id
]['configureActionLinks'] = CRM_Core_Action
::formLink(self
::formatConfigureLinks($sectionsInfo),
484 array('id' => $dao->id
),
487 'contributionpage.configure.actions',
492 //build the contributions links.
493 $contribution[$dao->id
]['contributionLinks'] = CRM_Core_Action
::formLink(self
::contributionLinks(),
495 array('id' => $dao->id
),
498 'contributionpage.contributions.search',
503 //build the online contribution links.
504 $contribution[$dao->id
]['onlineContributionLinks'] = CRM_Core_Action
::formLink(self
::onlineContributionLinks(),
506 array('id' => $dao->id
),
509 'contributionpage.online.links',
514 //build the normal action links.
515 $contribution[$dao->id
]['action'] = CRM_Core_Action
::formLink(self
::actionLinks(),
517 array('id' => $dao->id
),
520 'contributionpage.action.links',
525 //show campaigns on selector.
526 $contribution[$dao->id
]['campaign'] = CRM_Utils_Array
::value($dao->campaign_id
, $allCampaigns);
529 if (isset($contribution)) {
530 $this->assign('rows', $contribution);
534 public function search() {
535 if (isset($this->_action
) &
536 (CRM_Core_Action
::ADD |
537 CRM_Core_Action
::UPDATE |
538 CRM_Core_Action
::DELETE
544 $form = new CRM_Core_Controller_Simple('CRM_Contribute_Form_SearchContribution',
545 ts('Search Contribution'),
548 $form->setEmbedded(TRUE);
549 $form->setParent($this);
555 * @param array $params
556 * @param bool $sortBy
560 public function whereClause(&$params, $sortBy = TRUE) {
561 $values = $clauses = array();
562 $title = $this->get('title');
563 $createdId = $this->get('cid');
566 $clauses[] = "(created_id = {$createdId})";
570 $clauses[] = "title LIKE %1";
571 if (strpos($title, '%') !== FALSE) {
572 $params[1] = array(trim($title), 'String', FALSE);
575 $params[1] = array(trim($title), 'String', TRUE);
579 $value = $this->get( 'financial_type_id' );
582 if (is_array($value)) {
583 foreach ($value as $k => $v) {
588 $type = implode(',', $val);
591 $clauses[] = "financial_type_id IN ({$type})";
595 $this->_sortByCharacter
!== NULL
597 $clauses[] = "title LIKE '" . strtolower(CRM_Core_DAO
::escapeWildCardString($this->_sortByCharacter
)) . "%'";
600 $campainIds = $this->get('campaign_id');
601 if (!CRM_Utils_System
::isNull($campainIds)) {
602 if (!is_array($campainIds)) {
603 $campaignIds = array($campaignIds);
605 $clauses[] = '( campaign_id IN ( ' . implode(' , ', array_values($campainIds)) . ' ) )';
608 if (empty($clauses)) {
609 // Let template know if user has run a search or not
610 $this->assign('isSearch', 0);
614 $this->assign('isSearch', 1);
617 return implode(' AND ', $clauses);
621 * @param $whereClause
622 * @param array $whereParams
624 public function pager($whereClause, $whereParams) {
626 $params['status'] = ts('Contribution %%StatusMessage%%');
627 $params['csvString'] = NULL;
628 $params['buttonTop'] = 'PagerTopButton';
629 $params['buttonBottom'] = 'PagerBottomButton';
630 $params['rowCount'] = $this->get(CRM_Utils_Pager
::PAGE_ROWCOUNT
);
631 if (!$params['rowCount']) {
632 $params['rowCount'] = CRM_Utils_Pager
::ROWCOUNT
;
637 FROM civicrm_contribution_page
640 $params['total'] = CRM_Core_DAO
::singleValueQuery($query, $whereParams);
642 $this->_pager
= new CRM_Utils_Pager($params);
643 $this->assign_by_ref('pager', $this->_pager
);
647 * @param $whereClause
648 * @param array $whereParams
650 public function pagerAtoZ($whereClause, $whereParams) {
653 SELECT DISTINCT UPPER(LEFT(title, 1)) as sort_name
654 FROM civicrm_contribution_page
656 ORDER BY LEFT(title, 1)
658 $dao = CRM_Core_DAO
::executeQuery($query, $whereParams);
660 $aToZBar = CRM_Utils_PagerAToZ
::getAToZBar($dao, $this->_sortByCharacter
, TRUE);
661 $this->assign('aToZ', $aToZBar);
665 * @param $sectionsInfo
669 public function formatConfigureLinks($sectionsInfo) {
670 //build the formatted configure links.
671 $formattedConfLinks = self
::configureActionLinks();
672 foreach ($formattedConfLinks as $act => & $link) {
673 $sectionName = CRM_Utils_Array
::value('uniqueName', $link);
679 if (isset($link['class'])) {
680 $classes = $link['class'];
683 if (empty($sectionsInfo[$sectionName])) {
685 if (isset($link['class'])) {
686 $classes = $link['class'];
688 $link['class'] = array_merge($classes, array('disabled'));
692 return $formattedConfLinks;