Merge remote-tracking branch 'upstream/4.3' into 4.3-master-2013-07-31-15-53-16
[civicrm-core.git] / CRM / Member / BAO / MembershipType.php
index 3f1f48c9ae9a762e21311ecfcc320a6e33aeddd2..8b710a02b2b9051ca802e3c4bb8c88883371ddc3 100644 (file)
@@ -118,8 +118,8 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
 
     self::createMembershipPriceField($params, $ids, $previousID, $membershipType->id);
     // update all price field value for quick config when membership type is set CRM-11718
-    if (CRM_Utils_Array::value('membershipType', $ids) && CRM_Utils_Array::value('financial_type_id', $params)) {
-      self::updateAllPriceFieldValue($ids['membershipType'], $params['financial_type_id']);
+    if (CRM_Utils_Array::value('membershipType', $ids)) {
+      self::updateAllPriceFieldValue($ids['membershipType'], $params);
     }
 
     return $membershipType;
@@ -141,8 +141,8 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
     );
 
     foreach ($dependancy as $name => $field) {
-      require_once (str_replace('_', DIRECTORY_SEPARATOR, "CRM_Member_DAO_" . $name) . ".php");
-      eval('$dao = new CRM_Member_DAO_' . $name . '();');
+      $baoString = 'CRM_Member_BAO_' . $name;
+      $dao = new $baoString();
       $dao->$field = $membershipTypeId;
       if ($dao->find(TRUE)) {
         $check = TRUE;
@@ -163,22 +163,11 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
 
       if (in_array('MembershipBlock', $status)) {
         $deleteURL = CRM_Utils_System::url('civicrm/admin/contribute', 'reset=1');
-        $message .= '<br/>' . ts('%2. This Membership Type is used in an <a href=\'%1\'>Online Contribution page</a>. Uncheck this membership type in the Memberships tab.', array(1 => $deleteURL, 2 => $cnt));
-      }
-      if (!$skipRedirect) {
-        $session = CRM_Core_Session::singleton();
-        CRM_Core_Session::setStatus($message, ts('Membership Not Deleted'), 'error');
-        return CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/admin/member/membershipType', 'reset=1&action=browse'));
-      }
-      else {
-        $error = array();
-        $error['is_error'] = 1;
-        //don't translate as api error message are not translated
-        $error['error_message'] = $message;
-        return $error;
+        $message .= ts('%2. This Membership Type is used in an <a href=\'%1\'>Online Contribution page</a>. Uncheck this membership type in the Memberships tab.', array(1 => $deleteURL, 2 => $cnt));
+        throw new CRM_Core_Exception($message);
       }
     }
-
+    CRM_Utils_Weight::delWeight('CRM_Member_DAO_MembershipType', $membershipTypeId);
     //delete from membership Type table
     $membershipType = new CRM_Member_DAO_MembershipType();
     $membershipType->id = $membershipTypeId;
@@ -391,7 +380,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
         if ($dateParts[2] >= $membershipTypeDetails['fixed_period_rollover_day']){
           $fixed_period_rollover = True;
         }
-        
+
         // Start date is always first day of actualStartDate month
         if (!$startDate) {
           $actualStartDate = $startDate = $year . '-' . $month . '-01';
@@ -659,7 +648,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
 
   public static function createMembershipPriceField($params, $ids, $previousID, $membershipTypeId) {
 
-    $priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_Set', 'default_membership_type_amount', 'id', 'name');
+    $priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', 'default_membership_type_amount', 'id', 'name');
 
     if (CRM_Utils_Array::value('member_of_contact_id', $params)) {
       $fieldName = $params['member_of_contact_id'];
@@ -674,7 +663,7 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
       'name' => $fieldName,
     );
     $results = array();
-    CRM_Price_BAO_Field::retrieve($fieldParams, $results);
+    CRM_Price_BAO_PriceField::retrieve($fieldParams, $results);
     if (empty($results)) {
       $fieldParams = array();
       $fieldParams['label'] = $fieldLabel;
@@ -684,6 +673,8 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
       $fieldParams['is_display_amounts'] = $fieldParams['is_required'] = 0;
       $fieldParams['weight'] = $fieldParams['option_weight'][1] = 1;
       $fieldParams['option_label'][1] = $params['name'];
+      $fieldParams['option_description'][1] = CRM_Utils_Array::value('description', $params);
+
       $fieldParams['membership_type_id'][1] = $membershipTypeId;
       $fieldParams['option_amount'][1] = empty($params['minimum_fee']) ? 0 : $params['minimum_fee'];
       $fieldParams['financial_type_id'] = CRM_Utils_Array::value('financial_type_id', $params);
@@ -692,8 +683,8 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
         CRM_Member_Form_MembershipType::checkPreviousPriceField($previousID, $priceSetId, $membershipTypeId, $optionsIds);
         $fieldParams['option_id'] = CRM_Utils_Array::value('option_id', $optionsIds);
       }
-      $priceField = CRM_Price_BAO_Field::create($fieldParams);
-    } 
+      $priceField = CRM_Price_BAO_PriceField::create($fieldParams);
+    }
     else {
       $fieldID = $results['id'];
       $fieldValueParams = array(
@@ -701,12 +692,12 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
         'membership_type_id' => $membershipTypeId,
       );
       $results = array();
-      CRM_Price_BAO_FieldValue::retrieve($fieldValueParams, $results);
+      CRM_Price_BAO_PriceFieldValue::retrieve($fieldValueParams, $results);
       if (!empty($results)) {
         $results['label']  = $results['name'] = $params['name'];
         $results['amount'] = empty($params['minimum_fee']) ? 0 : $params['minimum_fee'];
         $optionsIds['id']  = $results['id'];
-      } 
+      }
       else {
         $results = array(
           'price_field_id' => $fieldID,
@@ -725,26 +716,53 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType {
         }
       }
       $results['financial_type_id'] = CRM_Utils_Array::value('financial_type_id', $params);
-      CRM_Price_BAO_FieldValue::add($results, $optionsIds);
+      $results['description'] = CRM_Utils_Array::value('description', $params);
+      CRM_Price_BAO_PriceFieldValue::add($results, $optionsIds);
     }
   }
 
   /** This function updates all price field value for quick config
    * price set which has membership type
    *
-   *  @param  integer      membership type id 
+   *  @param  integer      membership type id
    *
-   *  @param  integer      financial type id 
+   *  @param  integer      financial type id
    */
-  static function updateAllPriceFieldValue($membershipTypeId, $financialTypeId) {
+  static function updateAllPriceFieldValue($membershipTypeId, $params) {
+    if (CRM_Utils_Array::value('minimum_fee', $params)){
+      $amount = $params['minimum_fee'];
+    }
+    else {
+      $amount = 0;
+    }
+
+    $updateValues = array(
+      2 => array('financial_type_id', 'financial_type_id', 'Integer'),
+      3 => array('label', 'name', 'String'),
+      4 => array('amount', 'minimum_fee', 'Float'),
+      5 => array('description', 'description', 'String'),
+    );
+
+    $queryParams = array(1 => array($membershipTypeId, 'Integer'));
+    foreach ($updateValues as $key => $value) {
+      if (array_key_exists($value[1], $params)) {
+        $updateFields[] = "cpfv." . $value[0] . " = %$key";
+        if ($value[1] == 'minimum_fee') {
+          $fieldValue = $amount;
+        }
+        else {
+          $fieldValue = $params[$value[1]];
+        }
+        $queryParams[$key] = array($fieldValue, $value[2]);
+      }
+    }
+
     $query = "UPDATE `civicrm_price_field_value` cpfv
-INNER JOIN civicrm_price_field cpf on cpf.id = cpfv.price_field_id 
+INNER JOIN civicrm_price_field cpf on cpf.id = cpfv.price_field_id
 INNER JOIN civicrm_price_set cps on cps.id = cpf.price_set_id
-SET cpfv.financial_type_id = %2
-WHERE cpfv.membership_type_id = %1 AND cps.is_quick_config = 1";
-    $params = array(1 => array($membershipTypeId, 'Integer'),
-      2 => array($financialTypeId, 'Integer'));
-      CRM_Core_DAO::executeQuery($query, $params);
-  } 
+SET " . implode(' , ', $updateFields) . " WHERE cpfv.membership_type_id = %1
+AND cps.is_quick_config = 1 AND cps.name != 'default_membership_type_amount'";
+    CRM_Core_DAO::executeQuery($query, $queryParams);
+  }
 }