Merge pull request #4961 from pratikshad/core-bugs
[civicrm-core.git] / CRM / Contribute / Page / ContributionPage.php
index 953f269c58a0b0c4bb07b055c262e24101b064f0..6ccdf2d34e7b3e6eba320b6ba37cfb301709b1fe 100644 (file)
@@ -71,7 +71,7 @@ class CRM_Contribute_Page_ContributionPage extends CRM_Core_Page {
    *
    * @return array
    */
-  function &actionLinks() {
+  public function &actionLinks() {
     // check if variable _actionsLinks is populated
     if (!isset(self::$_actionLinks)) {
       // helper variable for nicer formatting
@@ -288,18 +288,21 @@ class CRM_Contribute_Page_ContributionPage extends CRM_Core_Page {
     );
 
     // set breadcrumb to append to 2nd layer pages
-    $breadCrumb = array(array('title' => ts('Manage Contribution Pages'),
+    $breadCrumb = array(
+      array(
+        'title' => ts('Manage Contribution Pages'),
         'url' => CRM_Utils_System::url(CRM_Utils_System::currentPath(),
           'reset=1'
         ),
-      ));
+      ),
+    );
 
     // what action to take ?
     if ($action & CRM_Core_Action::ADD) {
       $session = CRM_Core_Session::singleton();
       $session->pushUserContext(CRM_Utils_System::url(CRM_Utils_System::currentPath(),
-          'action=browse&reset=1'
-        ));
+        'action=browse&reset=1'
+      ));
 
       $controller = new CRM_Contribute_Controller_ContributionPage(NULL, $action);
       CRM_Utils_System::setTitle(ts('Manage Contribution Page'));
@@ -330,8 +333,8 @@ class CRM_Contribute_Page_ContributionPage extends CRM_Core_Page {
 
       $session = CRM_Core_Session::singleton();
       $session->pushUserContext(CRM_Utils_System::url(CRM_Utils_System::currentPath(),
-          'reset=1&action=browse'
-        ));
+        'reset=1&action=browse'
+      ));
 
       $id = CRM_Utils_Request::retrieve('id', 'Positive',
         $this, FALSE, 0
@@ -369,7 +372,7 @@ AND         cp.page_type = 'contribute'
   }
 
   /**
-   * This function is to make a copy of a contribution page, including
+   * make a copy of a contribution page, including
    * all the fields in the page
    *
    * @return void
@@ -389,7 +392,6 @@ AND         cp.page_type = 'contribute'
    *
    * @param mixed $action
    *   Unused parameter.
-   * @static
    */
   public function browse($action = NULL) {
     $this->_sortByCharacter = CRM_Utils_Request::retrieve('sortByCharacter',
@@ -471,15 +473,15 @@ ORDER BY title asc
       $action += array_sum(array_keys(self::contributionLinks()));
 
       if ($dao->is_active) {
-        $action -= (int)CRM_Core_Action::ENABLE;
+        $action -= (int) CRM_Core_Action::ENABLE;
       }
       else {
-        $action -= (int)CRM_Core_Action::DISABLE;
+        $action -= (int) CRM_Core_Action::DISABLE;
       }
 
       //CRM-4418
       if (!$allowToDelete) {
-        $action -= (int)CRM_Core_Action::DELETE;
+        $action -= (int) CRM_Core_Action::DELETE;
       }
 
       //build the configure links.
@@ -537,8 +539,7 @@ ORDER BY title asc
   }
 
   public function search() {
-    if (isset($this->_action) &
-      (CRM_Core_Action::ADD |
+    if (isset($this->_action) & (CRM_Core_Action::ADD |
         CRM_Core_Action::UPDATE |
         CRM_Core_Action::DELETE
       )
@@ -564,8 +565,8 @@ ORDER BY title asc
    */
   public function whereClause(&$params, $sortBy = TRUE) {
     // @todo Unused local variable can be safely removed.
-    $values    = $clauses = array();
-    $title     = $this->get('title');
+    $values = $clauses = array();
+    $title = $this->get('title');
     $createdId = $this->get('cid');
 
     if ($createdId) {
@@ -582,7 +583,7 @@ ORDER BY title asc
       }
     }
 
-    $value = $this->get( 'financial_type_id' );
+    $value = $this->get('financial_type_id');
     $val = array();
     if ($value) {
       if (is_array($value)) {
@@ -601,14 +602,9 @@ ORDER BY title asc
       $clauses[] = "title LIKE '" . strtolower(CRM_Core_DAO::escapeWildCardString($this->_sortByCharacter)) . "%'";
     }
 
-    // @todo Fatal typo: $campainIds vs $campaignIds.
-    $campainIds = $this->get('campaign_id');
-    if (!CRM_Utils_System::isNull($campainIds)) {
-      if (!is_array($campainIds)) {
-        // @todo Undefined variable $campaignIds, due to fatal typo above.
-        $campaignIds = array($campaignIds);
-      }
-      $clauses[] = '( campaign_id IN ( ' . implode(' , ', array_values($campainIds)) . ' ) )';
+    $campaignIds = $this->getCampaignIds();
+    if (count($campaignIds) >= 1) {
+      $clauses[] = '( campaign_id IN ( ' . implode(' , ', $campaignIds) . ' ) )';
     }
 
     if (empty($clauses)) {
@@ -623,6 +619,23 @@ ORDER BY title asc
     return implode(' AND ', $clauses);
   }
 
+  /**
+   * Gets the campaign ids from the session.
+   *
+   * @return int[]
+   */
+  public function getCampaignIds() {
+    // The unfiltered value from the session cannot be trusted, it needs to be
+    // processed to get a clean array of positive integers.
+    $ids = array();
+    foreach ((array) $this->get('campaign_id') as $id) {
+      if ((string) (int) $id === (string) $id && $id > 0) {
+        $ids[] = $id;
+      }
+    }
+    return $ids;
+  }
+
   /**
    * @param $whereClause
    * @param array $whereParams