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 * * @return array */ 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 Record. * * This API is used for deriving Membership Status of a given Membership * record using the rules encoded in the membership_status table. * * @param array $membershipParams * * @throws API_Exception * * @return array * Array of status id and status name */ 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; }