phpcs - Fix error, "CONST keyword must be lowercase; expected const but found CONST"
[civicrm-core.git] / CRM / Admin / Page / AJAX.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
39de6fd5 4 | CiviCRM version 4.6 |
6a488035 5 +--------------------------------------------------------------------+
06b69b18 6 | Copyright CiviCRM LLC (c) 2004-2014 |
6a488035
TO
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 *
30 * @package CRM
06b69b18 31 * @copyright CiviCRM LLC (c) 2004-2014
6a488035
TO
32 * $Id$
33 *
34 */
35
36/**
37 * This class contains all the function that are called using AJAX
38 */
39class CRM_Admin_Page_AJAX {
40
41 /**
73538697
CW
42 * CRM-12337 Output navigation menu as executable javascript
43 * @see smarty_function_crmNavigationMenu
44 */
45 static function getNavigationMenu() {
3d527838 46 $contactID = CRM_Core_Session::singleton()->get('userID');
73538697 47 if ($contactID) {
4cc9b813 48 CRM_Core_Page_AJAX::setJsHeaders();
9b7526a8 49 print CRM_Core_Smarty::singleton()->fetchWith('CRM/common/navigation.js.tpl', array(
3d527838
CW
50 'navigation' => CRM_Core_BAO_Navigation::createNavigation($contactID),
51 ));
73538697 52 }
0a15daa2 53 CRM_Utils_System::civiExit();
73538697
CW
54 }
55
56 /**
57 * Return menu tree as json data for editing
6a488035
TO
58 */
59 static function getNavigationList() {
60 echo CRM_Core_BAO_Navigation::buildNavigation(TRUE, FALSE);
61 CRM_Utils_System::civiExit();
62 }
63
64 /**
100fef9d 65 * Process drag/move action for menu tree
6a488035
TO
66 */
67 static function menuTree() {
73538697 68 CRM_Core_BAO_Navigation::processNavigation($_GET);
6a488035
TO
69 }
70
71 /**
100fef9d 72 * Build status message while
6a488035
TO
73 * enabling/ disabling various objects
74 */
75 static function getStatusMsg() {
12798ddc
CW
76 require_once('api/v3/utils.php');
77 $recordID = CRM_Utils_Type::escape($_GET['id'], 'Integer');
78 $entity = CRM_Utils_Type::escape($_GET['entity'], 'String');
4d17a233 79 $ret = array();
6a488035 80
4d17a233 81 if ($recordID && $entity && $recordBAO = _civicrm_api3_get_BAO($entity)) {
6a488035
TO
82 switch ($recordBAO) {
83 case 'CRM_Core_BAO_UFGroup':
6a488035
TO
84 $method = 'getUFJoinRecord';
85 $result = array($recordBAO, $method);
86 $ufJoin = call_user_func_array(($result), array($recordID, TRUE));
87 if (!empty($ufJoin)) {
4d17a233 88 $ret['content'] = ts('This profile is currently used for %1.', array(1 => implode(', ', $ufJoin))) . ' <br/><br/>' . ts('If you disable the profile - it will be removed from these forms and/or modules. Do you want to continue?');
6a488035
TO
89 }
90 else {
4d17a233 91 $ret['content'] = ts('Are you sure you want to disable this profile?');
6a488035
TO
92 }
93 break;
94
9da8dc8c 95 case 'CRM_Price_BAO_PriceSet':
9da8dc8c 96 $usedBy = CRM_Price_BAO_PriceSet::getUsedBy($recordID);
97 $priceSet = CRM_Price_BAO_PriceSet::getTitle($recordID);
6a488035
TO
98
99 if (!CRM_Utils_System::isNull($usedBy)) {
100 $template = CRM_Core_Smarty::singleton();
101 $template->assign('usedBy', $usedBy);
102 $comps = array(
103 'Event' => 'civicrm_event',
104 'Contribution' => 'civicrm_contribution_page',
c34e4bb4 105 'EventTemplate' => 'civicrm_event_template'
6a488035
TO
106 );
107 $contexts = array();
108 foreach ($comps as $name => $table) {
109 if (array_key_exists($table, $usedBy)) {
110 $contexts[] = $name;
111 }
112 }
113 $template->assign('contexts', $contexts);
114
4d17a233 115 $ret['illegal'] = TRUE;
6a488035 116 $table = $template->fetch('CRM/Price/Page/table.tpl');
4d17a233 117 $ret['content'] = ts('Unable to disable the \'%1\' price set - it is currently in use by one or more active events, contribution pages or contributions.', array(
6a488035
TO
118 1 => $priceSet)) . "<br/> $table";
119 }
120 else {
4d17a233 121 $ret['content'] = ts('Are you sure you want to disable \'%1\' Price Set?', array(1 => $priceSet));
6a488035
TO
122 }
123 break;
124
125 case 'CRM_Event_BAO_Event':
4d17a233 126 $ret['content'] = ts('Are you sure you want to disable this Event?');
6a488035
TO
127 break;
128
129 case 'CRM_Core_BAO_UFField':
4d17a233 130 $ret['content'] = ts('Are you sure you want to disable this CiviCRM Profile field?');
6a488035
TO
131 break;
132
133 case 'CRM_Contribute_BAO_ManagePremiums':
4d17a233 134 $ret['content'] = ts('Are you sure you want to disable this premium? This action will remove the premium from any contribution pages that currently offer it. However it will not delete the premium record - so you can re-enable it and add it back to your contribution page(s) at a later time.');
6a488035
TO
135 break;
136
6e4cdf9c
CW
137 case 'CRM_Contact_BAO_Relationship':
138 $ret['content'] = ts('Are you sure you want to disable this relationship?');
139 break;
140
6a488035 141 case 'CRM_Contact_BAO_RelationshipType':
4d17a233 142 $ret['content'] = ts('Are you sure you want to disable this relationship type?') . '<br/><br/>' . ts('Users will no longer be able to select this value when adding or editing relationships between contacts.');
6a488035
TO
143 break;
144
7b3622bf 145 case 'CRM_Financial_BAO_FinancialType':
4d17a233 146 $ret['content'] = ts('Are you sure you want to disable this financial type?');
6a488035 147 break;
8ef12e64 148
7b3622bf
PN
149 case 'CRM_Financial_BAO_FinancialAccount':
150 if (!CRM_Financial_BAO_FinancialAccount::getARAccounts($recordID)) {
4d17a233
CW
151 $ret['illegal'] = TRUE;
152 $ret['content'] = ts('The selected financial account cannot be disabled because at least one Accounts Receivable type account is required (to ensure that accounting transactions are in balance).');
7b3622bf
PN
153 }
154 else {
4d17a233 155 $ret['content'] = ts('Are you sure you want to disable this financial account?');
7b3622bf
PN
156 }
157 break;
6a488035 158
8ef12e64 159 case 'CRM_Financial_BAO_PaymentProcessor':
4d17a233 160 $ret['content'] = ts('Are you sure you want to disable this payment processor?') . ' <br/><br/>' . ts('Users will no longer be able to select this value when adding or editing transaction pages.');
6a488035
TO
161 break;
162
163 case 'CRM_Financial_BAO_PaymentProcessorType':
4d17a233 164 $ret['content'] = ts('Are you sure you want to disable this payment processor type?');
6a488035
TO
165 break;
166
167 case 'CRM_Core_BAO_LocationType':
4d17a233 168 $ret['content'] = ts('Are you sure you want to disable this location type?') . ' <br/><br/>' . ts('Users will no longer be able to select this value when adding or editing contact locations.');
6a488035
TO
169 break;
170
171 case 'CRM_Event_BAO_ParticipantStatusType':
4d17a233 172 $ret['content'] = ts('Are you sure you want to disable this Participant Status?') . '<br/><br/> ' . ts('Users will no longer be able to select this value when adding or editing Participant Status.');
6a488035
TO
173 break;
174
175 case 'CRM_Mailing_BAO_Component':
4d17a233 176 $ret['content'] = ts('Are you sure you want to disable this component?');
6a488035
TO
177 break;
178
179 case 'CRM_Core_BAO_CustomField':
4d17a233 180 $ret['content'] = ts('Are you sure you want to disable this custom data field?');
6a488035
TO
181 break;
182
183 case 'CRM_Core_BAO_CustomGroup':
4d17a233 184 $ret['content'] = ts('Are you sure you want to disable this custom data group? Any profile fields that are linked to custom fields of this group will be disabled.');
6a488035
TO
185 break;
186
c6327d7d 187 case 'CRM_Core_BAO_MessageTemplate':
4d17a233 188 $ret['content'] = ts('Are you sure you want to disable this message tempate?');
6a488035
TO
189 break;
190
191 case 'CRM_ACL_BAO_ACL':
4d17a233 192 $ret['content'] = ts('Are you sure you want to disable this ACL?');
6a488035
TO
193 break;
194
195 case 'CRM_ACL_BAO_EntityRole':
4d17a233 196 $ret['content'] = ts('Are you sure you want to disable this ACL Role Assignment?');
6a488035
TO
197 break;
198
199 case 'CRM_Member_BAO_MembershipType':
4d17a233 200 $ret['content'] = ts('Are you sure you want to disable this membership type?');
6a488035
TO
201 break;
202
203 case 'CRM_Member_BAO_MembershipStatus':
4d17a233 204 $ret['content'] = ts('Are you sure you want to disable this membership status rule?');
6a488035
TO
205 break;
206
9da8dc8c 207 case 'CRM_Price_BAO_PriceField':
4d17a233 208 $ret['content'] = ts('Are you sure you want to disable this price field?');
6a488035
TO
209 break;
210
211 case 'CRM_Contact_BAO_Group':
4d17a233 212 $ret['content'] = ts('Are you sure you want to disable this Group?');
6a488035
TO
213 break;
214
215 case 'CRM_Core_BAO_OptionGroup':
4d17a233 216 $ret['content'] = ts('Are you sure you want to disable this Option?');
6a488035
TO
217 break;
218
219 case 'CRM_Contact_BAO_ContactType':
4d17a233 220 $ret['content'] = ts('Are you sure you want to disable this Contact Type?');
6a488035
TO
221 break;
222
223 case 'CRM_Core_BAO_OptionValue':
6a488035 224 $label = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', $recordID, 'label');
4d17a233
CW
225 $ret['content'] = ts('Are you sure you want to disable the \'%1\' option ?', array(1 => $label));
226 $ret['content'] .= '<br /><br />' . ts('WARNING - Disabling an option which has been assigned to existing records will result in that option being cleared when the record is edited.');
6a488035
TO
227 break;
228
229 case 'CRM_Contribute_BAO_ContributionRecur':
230 $recurDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($recordID);
4d17a233
CW
231 $ret['content'] = ts('Are you sure you want to mark this recurring contribution as cancelled?');
232 $ret['content'] .= '<br /><br /><strong>' . ts('WARNING - This action sets the CiviCRM recurring contribution status to Cancelled, but does NOT send a cancellation request to the payment processor. You will need to ensure that this recurring payment (subscription) is cancelled by the payment processor.') . '</strong>';
6a488035 233 if ($recurDetails->membership_id) {
4d17a233 234 $ret['content'] .= '<br /><br /><strong>' . ts('This recurring contribution is linked to an auto-renew membership. If you cancel it, the associated membership will no longer renew automatically. However, the current membership status will not be affected.') . '</strong>';
6a488035
TO
235 }
236 break;
8ef12e64 237
6a488035 238 default:
4d17a233 239 $ret['content'] = ts('Are you sure you want to disable this record?');
6a488035
TO
240 break;
241 }
242 }
4d17a233
CW
243 else {
244 $ret = array('status' => 'error', 'content' => 'Error: Unknown entity type.', 'illegal' => TRUE);
245 }
246 CRM_Core_Page_AJAX::returnJsonResponse($ret);
6a488035
TO
247 }
248
6a488035 249 static function mergeTagList() {
2e02f487 250 $name = CRM_Utils_Type::escape($_GET['term'], 'String');
6a488035 251 $fromId = CRM_Utils_Type::escape($_GET['fromId'], 'Integer');
ebb5fc58 252 $limit = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'search_autocomplete_count', NULL, 10);
6a488035
TO
253
254 // build used-for clause to be used in main query
255 $usedForTagA = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Tag', $fromId, 'used_for');
256 $usedForClause = array();
257 if ($usedForTagA) {
258 $usedForTagA = explode(",", $usedForTagA);
259 foreach ($usedForTagA as $key => $value) {
260 $usedForClause[] = "t1.used_for LIKE '%{$value}%'";
261 }
262 }
263 $usedForClause = !empty($usedForClause) ? implode(' OR ', $usedForClause) : '1';
264 sort($usedForTagA);
265
266 // query to list mergable tags
267 $query = "
268SELECT t1.name, t1.id, t1.used_for, t2.name as parent
8ef12e64 269FROM civicrm_tag t1
6a488035 270LEFT JOIN civicrm_tag t2 ON t1.parent_id = t2.id
8ef12e64 271WHERE t1.id <> {$fromId} AND
6a488035 272 t1.name LIKE '%{$name}%' AND
8ef12e64 273 ({$usedForClause})
6a488035
TO
274LIMIT $limit";
275 $dao = CRM_Core_DAO::executeQuery($query);
ebb5fc58 276 $result = array();
6a488035
TO
277
278 while ($dao->fetch()) {
ebb5fc58
CW
279 $row = array(
280 'id' => $dao->id,
281 'text' => ($dao->parent ? "{$dao->parent} :: " : '') . $dao->name,
282 );
283 // Add warning about used_for types
6a488035
TO
284 if (!empty($dao->used_for)) {
285 $usedForTagB = explode(',', $dao->used_for);
286 sort($usedForTagB);
287 $usedForDiff = array_diff($usedForTagA, $usedForTagB);
288 if (!empty($usedForDiff)) {
ebb5fc58 289 $row['warning'] = TRUE;
6a488035
TO
290 }
291 }
ebb5fc58 292 $result[] = $row;
6a488035 293 }
ecdef330 294 CRM_Utils_JSON::output($result);
6a488035
TO
295 }
296
6a488035 297 function mappingList() {
581c7be2
CW
298 if (empty($_GET['mappingID'])) {
299 CRM_Utils_JSON::output(array('status' => 'error', 'error_msg' => 'required params missing.'));
6a488035
TO
300 }
301
581c7be2 302 $selectionOptions = CRM_Core_BAO_ActionSchedule::getSelection1($_GET['mappingID']);
6a488035 303
581c7be2
CW
304 $output = array(
305 'sel4' => array(),
306 'sel5' => array(),
307 'recipientMapping' => $selectionOptions['recipientMapping'],
308 );
309 foreach (array(4, 5) as $sel) {
310 foreach ($selectionOptions["sel$sel"] as $id => $name) {
311 $output["sel$sel"][] = array(
312 'value' => $name,
313 'key' => $id,
314 );
315 }
6a488035 316 }
6a488035 317
581c7be2 318 CRM_Utils_JSON::output($output);
6a488035
TO
319 }
320
321 static function mergeTags() {
322 $tagAId = CRM_Utils_Type::escape($_POST['fromId'], 'Integer');
323 $tagBId = CRM_Utils_Type::escape($_POST['toId'], 'Integer');
324
325 $result = CRM_Core_BAO_EntityTag::mergeTags($tagAId, $tagBId);
326
327 if (!empty($result['tagB_used_for'])) {
328 $usedFor = CRM_Core_OptionGroup::values('tag_used_for');
329 foreach ($result['tagB_used_for'] as & $val) {
330 $val = $usedFor[$val];
331 }
332 $result['tagB_used_for'] = implode(', ', $result['tagB_used_for']);
333 }
334
ebb5fc58
CW
335 $result['message'] = ts('"%1" has been merged with "%2". All records previously tagged "%1" are now tagged "%2".',
336 array(1 => $result['tagA'], 2 => $result['tagB'])
337 );
338
ecdef330 339 CRM_Utils_JSON::output($result);
6a488035
TO
340 }
341
6a488035
TO
342}
343