name = $params['name']; if ($status->find(TRUE) && $status->id != $params['id']) { return civicrm_api3_create_error(ts('A membership status with this name already exists.')); } } $membershipStatusBAO = new CRM_Member_BAO_MembershipStatus(); $membershipStatusBAO->id = $params['id']; if ($membershipStatusBAO->find(TRUE)) { $fields = $membershipStatusBAO->fields(); foreach ($fields as $name => $field) { if (array_key_exists($name, $params)) { $membershipStatusBAO->$name = $params[$name]; } } $membershipStatusBAO->save(); } $membershipStatus = array(); _civicrm_api3_object_to_array(clone($membershipStatusBAO), $membershipStatus); $membershipStatus['is_error'] = 0; return $membershipStatus; } /** * Deletes an existing membership status * * This API is used for deleting a membership status * * @param array Params array containing 'id' - Id of the membership status to be deleted * {@getfields MembershipStatus_delete} * * @return array i * @access public */ function civicrm_api3_membership_status_delete($params) { $memberStatusDelete = CRM_Member_BAO_MembershipStatus::del($params['id'], TRUE); return $memberStatusDelete ? civicrm_api3_create_error($memberStatusDelete['error_message']) : civicrm_api3_create_success(); } /** * Derives the Membership Status of a given Membership Reocrd * * This API is used for deriving Membership Status of a given Membership * record using the rules encoded in the membership_status table. * * @param $membershipParams * * @throws API_Exception * @internal param Int $membershipID Id of a membership * @internal param String $statusDate * * @return Array Array of status id and status name * @public */ function civicrm_api3_membership_status_calc($membershipParams) { if (!($membershipID = CRM_Utils_Array::value('membership_id', $membershipParams))) { throw new API_Exception('membershipParams do not contain membership_id'); } if(empty($membershipParams['id'])) { //for consistency lets make sure id is set as this will get passed to hooks downstream $membershipParams['id'] = $membershipID; } $query = " SELECT start_date, end_date, join_date, membership_type_id FROM civicrm_membership WHERE id = %1 "; $params = array(1 => array($membershipID, 'Integer')); $dao = CRM_Core_DAO::executeQuery($query, $params); if ($dao->fetch()) { $membershipTypeID = empty($membershipParams['membership_type_id']) ? $dao->membership_type_id : $membershipParams['membership_type_id']; $result = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate($dao->start_date, $dao->end_date, $dao->join_date, 'today', CRM_Utils_Array::value('ignore_admin_only', $membershipParams), $membershipTypeID, $membershipParams); //make is error zero only when valid status found. if (!empty($result['id'])) { $result['is_error'] = 0; } } else { $dao->free(); throw new API_Exception('did not find a membership record'); } $dao->free(); return $result; }