Commit | Line | Data |
---|---|---|
6a488035 | 1 | <?php |
6a488035 TO |
2 | /* |
3 | +--------------------------------------------------------------------+ | |
a30c801b | 4 | | Copyright CiviCRM LLC. All rights reserved. | |
6a488035 | 5 | | | |
a30c801b TO |
6 | | This work is published under the GNU AGPLv3 license with some | |
7 | | permitted exceptions and without any warranty. For full license | | |
8 | | and copyright information, see https://civicrm.org/licensing | | |
6a488035 TO |
9 | +--------------------------------------------------------------------+ |
10 | */ | |
11 | ||
12 | /** | |
c28e1768 | 13 | * This api exposes CiviCRM membership status. |
6a488035 TO |
14 | * |
15 | * @package CiviCRM_APIv3 | |
6a488035 TO |
16 | */ |
17 | ||
6a488035 | 18 | /** |
d1b0d05e | 19 | * Create a Membership Status. |
6a488035 | 20 | * |
cf470720 | 21 | * @param array $params |
d1b0d05e | 22 | * Array of name/value property values of civicrm_membership_status. |
6a488035 | 23 | * |
a6c01b45 | 24 | * @return array |
6a488035 TO |
25 | */ |
26 | function civicrm_api3_membership_status_create($params) { | |
ddaf2161 | 27 | return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MembershipStatus'); |
6a488035 TO |
28 | } |
29 | ||
4f94e3fa MM |
30 | /** |
31 | * Adjust Metadata for Create action. | |
32 | * | |
33 | * The metadata is used for setting defaults, documentation & validation. | |
34 | * | |
35 | * @param array $params | |
36 | * Array of parameters determined by getfields. | |
37 | */ | |
38 | function _civicrm_api3_membership_status_create_spec(&$params) { | |
39 | $params['name']['api.required'] = 1; | |
40 | } | |
41 | ||
6a488035 TO |
42 | /** |
43 | * Get a membership status. | |
44 | * | |
45 | * This api is used for finding an existing membership status. | |
46 | * | |
cf470720 TO |
47 | * @param array $params |
48 | * An associative array of name/value property values of civicrm_membership_status. | |
6a488035 | 49 | * |
16b10e64 CW |
50 | * @return array |
51 | * Array of all found membership status property values. | |
6a488035 TO |
52 | */ |
53 | function civicrm_api3_membership_status_get($params) { | |
54 | return _civicrm_api3_basic_get('CRM_Member_BAO_MembershipStatus', $params); | |
55 | } | |
56 | ||
57 | /** | |
d1b0d05e | 58 | * Update an existing membership status. |
6a488035 TO |
59 | * |
60 | * This api is used for updating an existing membership status. | |
b081365f | 61 | * Required parameters: id of a membership status |
6a488035 | 62 | * |
2241036a | 63 | * @param array $params |
dc64d047 EM |
64 | * Array of name/value property values of civicrm_membership_status. |
65 | * | |
6a488035 TO |
66 | * @deprecated - should just use create |
67 | * | |
a6c01b45 | 68 | * @return array |
16b10e64 | 69 | * Array of updated membership status property values |
6a488035 | 70 | */ |
d1b0d05e | 71 | function civicrm_api3_membership_status_update($params) { |
6a488035 | 72 | |
cf8f0fff | 73 | civicrm_api3_verify_mandatory($params, NULL, ['id']); |
6a488035 | 74 | //don't allow duplicate names. |
f748c073 | 75 | $name = $params['name'] ?? NULL; |
6a488035 | 76 | if ($name) { |
6a488035 TO |
77 | $status = new CRM_Member_DAO_MembershipStatus(); |
78 | $status->name = $params['name']; | |
79 | if ($status->find(TRUE) && $status->id != $params['id']) { | |
80 | return civicrm_api3_create_error(ts('A membership status with this name already exists.')); | |
81 | } | |
82 | } | |
83 | ||
6a488035 TO |
84 | $membershipStatusBAO = new CRM_Member_BAO_MembershipStatus(); |
85 | $membershipStatusBAO->id = $params['id']; | |
86 | if ($membershipStatusBAO->find(TRUE)) { | |
87 | $fields = $membershipStatusBAO->fields(); | |
88 | foreach ($fields as $name => $field) { | |
89 | if (array_key_exists($name, $params)) { | |
90 | $membershipStatusBAO->$name = $params[$name]; | |
91 | } | |
92 | } | |
93 | $membershipStatusBAO->save(); | |
94 | } | |
cf8f0fff | 95 | $membershipStatus = []; |
ceef521a CB |
96 | $cloneBAO = clone($membershipStatusBAO); |
97 | _civicrm_api3_object_to_array($cloneBAO, $membershipStatus); | |
6a488035 TO |
98 | $membershipStatus['is_error'] = 0; |
99 | return $membershipStatus; | |
100 | } | |
101 | ||
102 | /** | |
22242c87 | 103 | * Deletes an existing membership status. |
6a488035 TO |
104 | * |
105 | * This API is used for deleting a membership status | |
106 | * | |
decce855 | 107 | * @param array $params |
a6c01b45 | 108 | * @return array |
8089541a SL |
109 | * @throws API_Exception |
110 | * @throws CRM_Core_Exception | |
6a488035 TO |
111 | */ |
112 | function civicrm_api3_membership_status_delete($params) { | |
113 | ||
114 | $memberStatusDelete = CRM_Member_BAO_MembershipStatus::del($params['id'], TRUE); | |
a60c0bc8 SL |
115 | if ($memberStatusDelete) { |
116 | throw new API_Exception($memberStatusDelete['error_message']); | |
117 | } | |
118 | return civicrm_api3_create_success(); | |
6a488035 TO |
119 | } |
120 | ||
121 | /** | |
22242c87 | 122 | * Derives the Membership Status of a given Membership Record. |
6a488035 TO |
123 | * |
124 | * This API is used for deriving Membership Status of a given Membership | |
125 | * record using the rules encoded in the membership_status table. | |
126 | * | |
100fef9d | 127 | * @param array $membershipParams |
77b97be7 EM |
128 | * |
129 | * @throws API_Exception | |
6a488035 | 130 | * |
317fceb4 | 131 | * @return array |
72b3a70c | 132 | * Array of status id and status name |
6a488035 TO |
133 | */ |
134 | function civicrm_api3_membership_status_calc($membershipParams) { | |
6a488035 | 135 | if (!($membershipID = CRM_Utils_Array::value('membership_id', $membershipParams))) { |
5f11bbcc | 136 | throw new API_Exception('membershipParams do not contain membership_id'); |
6a488035 TO |
137 | } |
138 | ||
22e263ad | 139 | if (empty($membershipParams['id'])) { |
5f11bbcc EM |
140 | //for consistency lets make sure id is set as this will get passed to hooks downstream |
141 | $membershipParams['id'] = $membershipID; | |
142 | } | |
6a488035 | 143 | $query = " |
5f11bbcc | 144 | SELECT start_date, end_date, join_date, membership_type_id |
6a488035 TO |
145 | FROM civicrm_membership |
146 | WHERE id = %1 | |
147 | "; | |
148 | ||
cf8f0fff | 149 | $params = [1 => [$membershipID, 'Integer']]; |
5f11bbcc | 150 | $dao = CRM_Core_DAO::executeQuery($query, $params); |
6a488035 | 151 | if ($dao->fetch()) { |
5f11bbcc EM |
152 | $membershipTypeID = empty($membershipParams['membership_type_id']) ? $dao->membership_type_id : $membershipParams['membership_type_id']; |
153 | $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); | |
6a488035 | 154 | //make is error zero only when valid status found. |
a7488080 | 155 | if (!empty($result['id'])) { |
6a488035 TO |
156 | $result['is_error'] = 0; |
157 | } | |
158 | } | |
159 | else { | |
5f11bbcc | 160 | throw new API_Exception('did not find a membership record'); |
6a488035 | 161 | } |
6a488035 TO |
162 | return $result; |
163 | } | |
982ffaad MW |
164 | |
165 | /** | |
166 | * Adjust Metadata for Calc action. | |
167 | * | |
168 | * The metadata is used for setting defaults, documentation & validation. | |
169 | * | |
170 | * @param array $params | |
171 | * Array of parameters determined by getfields. | |
172 | */ | |
173 | function _civicrm_api3_membership_status_calc_spec(&$params) { | |
174 | $params['membership_id']['api.required'] = 1; | |
175 | $params['membership_id']['title'] = 'Membership ID'; | |
7aeb8ff1 MW |
176 | $params['ignore_admin_only']['title'] = 'Ignore admin only statuses'; |
177 | $params['ignore_admin_only']['description'] = 'Ignore statuses that are for admin/manual assignment only'; | |
178 | $params['ignore_admin_only']['type'] = CRM_Utils_Type::T_BOOLEAN; | |
982ffaad | 179 | } |