}
/**
- * Takes a bunch of params that are needed to match certain criteria and
- * retrieves the relevant objects. Typically the valid params are only
- * contact_id. We'll tweak this function to be more full featured over a period
- * of time. This is the inverse function of create. It also stores all the retrieved
- * values in the default array
+ * Fetch object based on array of properties
*
* @param array $params (reference ) an assoc array of name/value pairs
* @param array $defaults (reference ) an assoc array to hold the flattened values
*
- * @return object CRM_Member_BAO_MembershipType object
+ * @return CRM_Member_BAO_MembershipType object
* @access public
* @static
*/
}
/**
- * function to add the membership types
+ * add the membership types
*
* @param array $params reference array contains the values submitted by the form
- * @param array $ids reference array contains the id
+ * @param array $ids array contains the id (deprecated)
*
* @access public
* @static
*
* @return object
*/
- static function add(&$params, &$ids) {
- $params['is_active'] = CRM_Utils_Array::value('is_active', $params, FALSE);
+ static function add(&$params, $ids = array()) {
+ $id = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('membershipType', $ids));
+ if (!$id) {
+ if (!isset($params['is_active'])) {
+ // do we need this?
+ $params['is_active'] = FALSE;
+ }
+ if (!isset($params['domain_id'])) {
+ $params['domain_id'] = CRM_Core_Config::domainID();
+ }
+ }
// action is taken depending upon the mode
$membershipType = new CRM_Member_DAO_MembershipType();
-
$membershipType->copyValues($params);
+ $membershipType->id = $id;
- $membershipType->domain_id = CRM_Core_Config::domainID();
-
- $membershipType->id = CRM_Utils_Array::value('membershipType', $ids);
-
- // $previousID is the old organization id for membership type i.e 'member_of_contact_id'. This is used when an oganization is changed.
+ // $previousID is the old organization id for membership type i.e 'member_of_contact_id'. This is used when an organization is changed.
$previousID = NULL;
- if ($membershipType->id) {
- $previousID = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipType', $membershipType->id, 'member_of_contact_id');
+ if ($id) {
+ $previousID = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipType', $id, 'member_of_contact_id');
}
$membershipType->save();
-
- self::createMembershipPriceField($params, $ids, $previousID, $membershipType->id);
+ if ($id) {
+ // on update we may need to retrieve some details for the price field function - otherwise we get e-notices on attempts to retrieve
+ // name etc - the presence of previous id tells us this is an update
+ $params = array_merge(civicrm_api3('membership_type', 'getsingle', array('id' => $membershipType->id)), $params);
+ }
+ self::createMembershipPriceField($params, $previousID, $membershipType->id);
// update all price field value for quick config when membership type is set CRM-11718
- if (!empty($ids['membershipType'])) {
- self::updateAllPriceFieldValue($ids['membershipType'], $params);
+ if ($id) {
+ self::updateAllPriceFieldValue($id, $params);
}
return $membershipType;
}
/**
- * Function to delete membership Types
+ * delete membership Types
*
* @param int $membershipTypeId
*
}
/**
- * Function to convert membership Type's 'start day' & 'rollover day' to human readable formats.
+ * convert membership Type's 'start day' & 'rollover day' to human readable formats.
*
* @param array $membershipType an array of membershipType-details.
* @static
* @param bool $public
*
* @return array
- * @internal param int $membershipTypeId
* @static
*/
static function getMembershipTypes($public = TRUE) {
/**
* Function to calculate start date and end date for new membership
*
- * @param int $membershipTypeId membership type id
+ * @param int $membershipTypeId membership type id
* @param date $joinDate member since ( in mysql date format )
* @param date $startDate start date ( in mysql date format )
- * @param int $numRenewTerms how many membership terms are being added to end date (default is 1)
+ * @param null $endDate
+ * @param int $numRenewTerms how many membership terms are being added to end date (default is 1)
*
* @return array associated array with start date, end date and join date for the membership
* @static
/**
* The function returns all the Organization for all membershiptypes .
*
- * @param null $membershipTypeId
+ * @param int $membershipTypeId
*
* @return array
- * @internal param array $allmembershipTypes array of allMembershipTypes
- * with organization id Key - value pairs.
*/
static function getMembershipTypeOrganization($membershipTypeId = NULL) {
$allmembershipTypes = array();
}
- public static function createMembershipPriceField($params, $ids, $previousID, $membershipTypeId) {
+ /**
+ * @param array $params
+ * @param $previousID
+ * @param $membershipTypeId
+ */
+ public static function createMembershipPriceField($params, $previousID, $membershipTypeId) {
$priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', 'default_membership_type_amount', 'id', 'name');
CRM_Member_Form_MembershipType::checkPreviousPriceField($previousID, $priceSetId, $membershipTypeId, $optionsIds);
$fieldParams['option_id'] = CRM_Utils_Array::value('option_id', $optionsIds);
}
- $priceField = CRM_Price_BAO_PriceField::create($fieldParams);
+ CRM_Price_BAO_PriceField::create($fieldParams);
}
else {
$fieldID = $results['id'];