Merge pull request #15768 from civicrm/5.20
[civicrm-core.git] / api / v3 / Constant.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 5 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2020 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
26 */
27
28 /**
29 * CiviCRM APIv3 pseudoconstants
30 *
31 * @deprecated
32 * The Constant api is deprecated as of CiviCRM 4.4. Please use the getoptions api action instead.
33 * @package CiviCRM_APIv3
34 */
35
36 /**
37 * Declare deprecated api entity.
38 *
39 * @deprecated api notice
40 * @return string
41 * to indicate this entire api entity is deprecated
42 */
43 function _civicrm_api3_constant_deprecation() {
44 return 'The Constant api is deprecated as of CiviCRM 4.4. Please use the getoptions api action instead.';
45 }
46
47 /**
48 * Get constant values (deprecated).
49 *
50 * @deprecated as of CiviCRM 4.4.
51 * It's recommended to use the api getoptions action instead
52 *
53 * @param array $params
54 * Name of a public static method of
55 * CRM_Core_PseudoConstant: one of
56 * activityStatus
57 * activityType
58 * addressee
59 * allGroup
60 * country
61 * countryIsoCode
62 * county
63 * currencyCode
64 * currencySymbols
65 * customGroup
66 * emailGreeting
67 * fromEmailAddress
68 * gender
69 * group
70 * groupIterator
71 * honor
72 * IMProvider
73 * individualPrefix
74 * individualSuffix
75 * locationType
76 * locationVcardName
77 * mailProtocol
78 * mappingTypes
79 * paymentProcessor
80 * paymentProcessorType
81 * pcm
82 * phoneType
83 * postalGreeting
84 * priority
85 * relationshipType
86 * stateProvince
87 * stateProvinceAbbreviation
88 * stateProvinceForCountry
89 * staticGroup
90 * tag
91 * tasks
92 * ufGroup
93 * visibility
94 * worldRegion
95 * wysiwygEditor
96 *
97 * @return array
98 */
99 function civicrm_api3_constant_get($params) {
100
101 $name = $params['name'];
102 // all the stuff about classes should be adequately replaced by the bit in the 'else'
103 //ie $values = call_user_func(array('CRM_Utils_PseudoConstant', 'getConstant'), $name);
104 // once tests are 100% can try removing the first block & a similar block from Generic:getoptions
105
106 // Whitelist approach is safer
107 $allowedClasses = [
108 'CRM_Core_PseudoConstant',
109 'CRM_Event_PseudoConstant',
110 'CRM_Contribute_PseudoConstant',
111 'CRM_Member_PseudoConstant',
112 ];
113 $className = $allowedClasses[0];
114 if (!empty($params['class']) && in_array($params['class'], $allowedClasses)) {
115 $className = $params['class'];
116 }
117 $callable = "$className::$name";
118 if (is_callable($callable)) {
119 if (empty($params)) {
120 $values = call_user_func([$className, $name]);
121 }
122 else {
123 $values = call_user_func([$className, $name]);
124 //@TODO XAV take out the param the COOKIE, Entity, Action and so there are only the "real param" in it
125 //$values = call_user_func_array( array( $className, $name ), $params );
126 }
127 return civicrm_api3_create_success($values, $params, 'Constant');
128 }
129 else {
130 $values = call_user_func(['CRM_Utils_PseudoConstant', 'getConstant'], $name);
131 if (!empty($values)) {
132 return civicrm_api3_create_success($values, $params, 'Constant');
133 }
134 }
135 return civicrm_api3_create_error('Unknown civicrm constant or method not callable');
136 }
137
138 /**
139 * Adjust metadata for constant get action.
140 *
141 * @param array $params
142 */
143 function _civicrm_api3_constant_get_spec(&$params) {
144 $options = [
145 'activityStatus',
146 'activityType',
147 'addressee',
148 'allGroup',
149 'country',
150 'countryIsoCode',
151 'county',
152 'currencyCode',
153 'currencySymbols',
154 'customGroup',
155 'emailGreeting',
156 'fromEmailAddress',
157 'gender',
158 'group',
159 'honor',
160 'IMProvider',
161 'individualPrefix',
162 'individualSuffix',
163 'locationType',
164 'locationVcardName',
165 'mailProtocol',
166 'mappingTypes',
167 'paymentInstrument',
168 'paymentProcessor',
169 'paymentProcessorType',
170 'pcm',
171 'phoneType',
172 'postalGreeting',
173 'priority',
174 'relationshipType',
175 'stateProvince',
176 'stateProvinceAbbreviation',
177 'stateProvinceForCountry',
178 'staticGroup',
179 'tag',
180 'tasks',
181 'ufGroup',
182 'visibility',
183 'worldRegion',
184 'wysiwygEditor',
185 ];
186 $params = [
187 'name' => [
188 'title' => 'Constant Name',
189 'name' => 'name',
190 'api.required' => 1,
191 'options' => array_combine($options, $options),
192 'type' => CRM_Utils_Type::T_STRING,
193 ],
194 ];
195 }