Merge pull request #2288 from eileenmcnaughton/CRM-14043
[civicrm-core.git] / CRM / Member / BAO / Membership.php
index 68d492516691b6d11d989b9157bb245d60b8fef1..9ee8b864ec8c8c766f64034fccdb0223dd7c9da4 100644 (file)
@@ -105,7 +105,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
 
     //get the log start date.
     //it is set during renewal of membership.
-    $logStartDate = CRM_Utils_array::value('log_start_date', $params);
+    $logStartDate = CRM_Utils_Array::value('log_start_date', $params);
     $logStartDate = ($logStartDate) ? CRM_Utils_Date::isoToMysql($logStartDate) : CRM_Utils_Date::isoToMysql($membership->start_date);
     $values       = self::getStatusANDTypeValues($membership->id);
 
@@ -235,6 +235,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
       !CRM_Utils_Array::value('skipStatusCal', $params)
     ) {
       $dates = array('start_date', 'end_date', 'join_date');
+      $start_date = $end_date = $join_date = NULL; // declare these out of courtesy as IDEs don't pick up the setting of them below
       foreach ($dates as $date) {
         $$date = $params[$date] = CRM_Utils_Date::processDate(CRM_Utils_Array::value($date, $params), NULL, TRUE, 'Ymd');
       }
@@ -333,6 +334,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
       CRM_Utils_Array::value('createActivity', $params)
     ) {
       if (CRM_Utils_Array::value('membership', $ids)) {
+        $data = array();
         CRM_Core_DAO::commonRetrieveAll('CRM_Member_DAO_Membership',
           'id',
           $membership->id,
@@ -966,7 +968,7 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
     if ($onlySameParentOrg && $memType) {
       // require the same parent org as the $memType
       $params = array('id' => $memType);
-      $defaults = array();
+      $defaults = $membershipType = array();
       if (CRM_Member_BAO_MembershipType::retrieve($params, $membershipType)) {
         $memberTypesSameParentOrg = CRM_Member_BAO_MembershipType::getMembershipTypesByOrg($membershipType['member_of_contact_id']);
         $memberTypesSameParentOrgList = implode(',', array_keys($memberTypesSameParentOrg));
@@ -1082,10 +1084,6 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
    */
   static function &exportableFields() {
     $expFieldMembership = CRM_Member_DAO_Membership::export();
-    //campaign fields.
-    if (isset($expFieldMembership['member_campaign_id'])) {
-      $expFieldMembership['member_campaign'] = array('title' => ts('Campaign Title'));
-    }
 
     $expFieldsMemType = CRM_Member_DAO_MembershipType::export();
     $fields           = array_merge($expFieldMembership, $expFieldsMemType);
@@ -1445,7 +1443,7 @@ AND civicrm_membership.is_test = %2";
         'legacy_redirect_path' => 'civicrm/contribute/transact',
         'legacy_redirect_query' => "_qf_Main_display=true&qfKey={$form->_params['qfKey']}",
       );
-      throw new CiviCRM_Exception($message, 0, $errorParams);
+      throw new CRM_Core_Exception($message, 0, $errorParams);
     }
 
     // CRM-7851
@@ -1487,6 +1485,10 @@ AND civicrm_membership.is_test = %2";
   }
 
   /**
+   * @todo - this form method needs to have the interaction with the form layer removed from it
+   * as a BAO function. Note that the api now supports membership renewals & it is not clear this function does anything
+   * not done by the membership.create api (with a lot less unit tests)
+   *
    * This method will renew / create the membership depending on
    * whether the given contact has a membership or not. And will add
    * the modified dates for membership and in the log table.
@@ -1526,6 +1528,8 @@ AND civicrm_membership.is_test = %2";
 
     // check is it pending. - CRM-4555
     $pending = FALSE;
+    //@todo this is a BAO function & should not inspect the form - the form should do this
+    // & pass required params to the BAO
     if (CRM_Utils_Array::value('minimum_fee', $membershipTypeDetails) > 0.0) {
       if (((isset($form->_contributeMode) && $form->_contributeMode == 'notify') ||
           CRM_Utils_Array::value('is_pay_later', $form->_params) ||
@@ -1544,11 +1548,15 @@ AND civicrm_membership.is_test = %2";
 
     //decide status here, if needed.
     $updateStatusId = NULL;
-
+    $membershipID = NULL;
+    //@todo would be better to accept $membershipID as an FN param & make form layer responsible for extracting it
+    if(isset($form->_membershipId)) {
+      $membershipID = $form->_membershipId;
+    }
     // CRM-7297 - allow membership type to be be changed during renewal so long as the parent org of new membershipType
     // is the same as the parent org of an existing membership of the contact
     $currentMembership = CRM_Member_BAO_Membership::getContactMembership($contactID, $membershipTypeID,
-      $is_test, $form->_membershipId, TRUE
+      $is_test, $membershipID, TRUE
     );
     if ($currentMembership) {
       $activityType = 'Membership Renewal';
@@ -1944,16 +1952,6 @@ SELECT c.contribution_page_id as pageID
   static function getMembershipFields($mode = NULL) {
     $fields = CRM_Member_DAO_Membership::export();
 
-    //campaign fields.
-    if (isset($fields['member_campaign_id'])) {
-      if ($mode == CRM_Export_Form_Select::MEMBER_EXPORT) {
-        $fields['member_campaign'] = array('title' => ts('Campaign Title'));
-      }
-      else {
-        $fields['member_campaign_id']['title'] = ts('Campaign');
-      }
-    }
-
     unset($fields['membership_contact_id']);
     $fields = array_merge($fields, CRM_Core_BAO_CustomField::getFieldsForImport('Membership'));
 
@@ -2404,7 +2402,7 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
   function processPriceSet($membershipId, $lineItem) {
     //FIXME : need to move this too
     if (!$membershipId || !is_array($lineItem)
-      || CRM_Utils_system::isNull($lineItem)
+      || CRM_Utils_System::isNull($lineItem)
     ) {
       return;
     }
@@ -2458,6 +2456,7 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
     $allTypes      = CRM_Member_PseudoConstant::membershipType();
     $contribStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
 
+    // get only memberships with active membership types
     $query = "
 SELECT     civicrm_membership.id                    as membership_id,
            civicrm_membership.is_override           as is_override,
@@ -2473,6 +2472,8 @@ SELECT     civicrm_membership.id                    as membership_id,
            civicrm_membership.contribution_recur_id as recur_id
 FROM       civicrm_membership
 INNER JOIN civicrm_contact ON ( civicrm_membership.contact_id = civicrm_contact.id )
+INNER JOIN civicrm_membership_type ON
+  (civicrm_membership.membership_type_id = civicrm_membership_type.id AND civicrm_membership_type.is_active = 1)
 WHERE      civicrm_membership.is_test = 0";
 
     $params = array();
@@ -2488,20 +2489,6 @@ WHERE      civicrm_membership.is_test = 0";
       // echo ".";
       $processCount++;
 
-      /**
-       $count++;
-       echo $dao->contact_id . ', '. CRM_Utils_System::memory( ) . "<p>\n";
-
-       CRM_Core_Error::debug( 'fBegin', count( $GLOBALS['_DB_DATAOBJECT']['RESULTS'] ) );
-       if ( $count > 2 ) {
-       foreach ( $GLOBALS['_DB_DATAOBJECT']['RESULTS'] as $r ) {
-       CRM_Core_Error::debug( 'r', $r->query );
-       }
-       // CRM_Core_Error::debug( 'f', $GLOBALS['_DB_DATAOBJECT']['RESULTS'] );
-       exit( );
-       }
-       **/
-
       // Put common parameters into array for easy access
       $memberParams = array(
         'id' => $dao->membership_id,