Merge pull request #4896 from totten/master-movedep
[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 */
00be9182 45 public 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 58 */
00be9182 59 public static function getNavigationList() {
6a488035
TO
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 66 */
00be9182 67 public 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 */
00be9182 75 public static function getStatusMsg() {
02fc859b 76 require_once 'api/v3/utils.php';
353ffa53 77 $recordID = CRM_Utils_Type::escape($_GET['id'], 'Integer');
12798ddc 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',
21dfd5f5 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;
353ffa53 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(
353ffa53
TO
118 1 => $priceSet
119 )) . "<br/> $table";
6a488035
TO
120 }
121 else {
4d17a233 122 $ret['content'] = ts('Are you sure you want to disable \'%1\' Price Set?', array(1 => $priceSet));
6a488035
TO
123 }
124 break;
125
126 case 'CRM_Event_BAO_Event':
4d17a233 127 $ret['content'] = ts('Are you sure you want to disable this Event?');
6a488035
TO
128 break;
129
130 case 'CRM_Core_BAO_UFField':
4d17a233 131 $ret['content'] = ts('Are you sure you want to disable this CiviCRM Profile field?');
6a488035
TO
132 break;
133
134 case 'CRM_Contribute_BAO_ManagePremiums':
4d17a233 135 $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
136 break;
137
6e4cdf9c
CW
138 case 'CRM_Contact_BAO_Relationship':
139 $ret['content'] = ts('Are you sure you want to disable this relationship?');
140 break;
141
6a488035 142 case 'CRM_Contact_BAO_RelationshipType':
4d17a233 143 $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
144 break;
145
7b3622bf 146 case 'CRM_Financial_BAO_FinancialType':
4d17a233 147 $ret['content'] = ts('Are you sure you want to disable this financial type?');
6a488035 148 break;
8ef12e64 149
7b3622bf
PN
150 case 'CRM_Financial_BAO_FinancialAccount':
151 if (!CRM_Financial_BAO_FinancialAccount::getARAccounts($recordID)) {
4d17a233
CW
152 $ret['illegal'] = TRUE;
153 $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
154 }
155 else {
4d17a233 156 $ret['content'] = ts('Are you sure you want to disable this financial account?');
7b3622bf
PN
157 }
158 break;
6a488035 159
8ef12e64 160 case 'CRM_Financial_BAO_PaymentProcessor':
4d17a233 161 $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
162 break;
163
164 case 'CRM_Financial_BAO_PaymentProcessorType':
4d17a233 165 $ret['content'] = ts('Are you sure you want to disable this payment processor type?');
6a488035
TO
166 break;
167
168 case 'CRM_Core_BAO_LocationType':
4d17a233 169 $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
170 break;
171
172 case 'CRM_Event_BAO_ParticipantStatusType':
4d17a233 173 $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
174 break;
175
176 case 'CRM_Mailing_BAO_Component':
4d17a233 177 $ret['content'] = ts('Are you sure you want to disable this component?');
6a488035
TO
178 break;
179
180 case 'CRM_Core_BAO_CustomField':
4d17a233 181 $ret['content'] = ts('Are you sure you want to disable this custom data field?');
6a488035
TO
182 break;
183
184 case 'CRM_Core_BAO_CustomGroup':
4d17a233 185 $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
186 break;
187
c6327d7d 188 case 'CRM_Core_BAO_MessageTemplate':
4d17a233 189 $ret['content'] = ts('Are you sure you want to disable this message tempate?');
6a488035
TO
190 break;
191
192 case 'CRM_ACL_BAO_ACL':
4d17a233 193 $ret['content'] = ts('Are you sure you want to disable this ACL?');
6a488035
TO
194 break;
195
196 case 'CRM_ACL_BAO_EntityRole':
4d17a233 197 $ret['content'] = ts('Are you sure you want to disable this ACL Role Assignment?');
6a488035
TO
198 break;
199
200 case 'CRM_Member_BAO_MembershipType':
4d17a233 201 $ret['content'] = ts('Are you sure you want to disable this membership type?');
6a488035
TO
202 break;
203
204 case 'CRM_Member_BAO_MembershipStatus':
4d17a233 205 $ret['content'] = ts('Are you sure you want to disable this membership status rule?');
6a488035
TO
206 break;
207
9da8dc8c 208 case 'CRM_Price_BAO_PriceField':
4d17a233 209 $ret['content'] = ts('Are you sure you want to disable this price field?');
6a488035
TO
210 break;
211
212 case 'CRM_Contact_BAO_Group':
4d17a233 213 $ret['content'] = ts('Are you sure you want to disable this Group?');
6a488035
TO
214 break;
215
216 case 'CRM_Core_BAO_OptionGroup':
4d17a233 217 $ret['content'] = ts('Are you sure you want to disable this Option?');
6a488035
TO
218 break;
219
220 case 'CRM_Contact_BAO_ContactType':
4d17a233 221 $ret['content'] = ts('Are you sure you want to disable this Contact Type?');
6a488035
TO
222 break;
223
224 case 'CRM_Core_BAO_OptionValue':
6a488035 225 $label = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', $recordID, 'label');
4d17a233
CW
226 $ret['content'] = ts('Are you sure you want to disable the \'%1\' option ?', array(1 => $label));
227 $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
228 break;
229
230 case 'CRM_Contribute_BAO_ContributionRecur':
231 $recurDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($recordID);
4d17a233
CW
232 $ret['content'] = ts('Are you sure you want to mark this recurring contribution as cancelled?');
233 $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 234 if ($recurDetails->membership_id) {
4d17a233 235 $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
236 }
237 break;
8ef12e64 238
6a488035 239 default:
4d17a233 240 $ret['content'] = ts('Are you sure you want to disable this record?');
6a488035
TO
241 break;
242 }
243 }
4d17a233
CW
244 else {
245 $ret = array('status' => 'error', 'content' => 'Error: Unknown entity type.', 'illegal' => TRUE);
246 }
247 CRM_Core_Page_AJAX::returnJsonResponse($ret);
6a488035
TO
248 }
249
00be9182 250 public static function mergeTagList() {
2e02f487 251 $name = CRM_Utils_Type::escape($_GET['term'], 'String');
6a488035 252 $fromId = CRM_Utils_Type::escape($_GET['fromId'], 'Integer');
ebb5fc58 253 $limit = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'search_autocomplete_count', NULL, 10);
6a488035
TO
254
255 // build used-for clause to be used in main query
256 $usedForTagA = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Tag', $fromId, 'used_for');
257 $usedForClause = array();
258 if ($usedForTagA) {
259 $usedForTagA = explode(",", $usedForTagA);
260 foreach ($usedForTagA as $key => $value) {
261 $usedForClause[] = "t1.used_for LIKE '%{$value}%'";
262 }
263 }
264 $usedForClause = !empty($usedForClause) ? implode(' OR ', $usedForClause) : '1';
265 sort($usedForTagA);
266
267 // query to list mergable tags
268 $query = "
269SELECT t1.name, t1.id, t1.used_for, t2.name as parent
8ef12e64 270FROM civicrm_tag t1
6a488035 271LEFT JOIN civicrm_tag t2 ON t1.parent_id = t2.id
8ef12e64 272WHERE t1.id <> {$fromId} AND
6a488035 273 t1.name LIKE '%{$name}%' AND
8ef12e64 274 ({$usedForClause})
6a488035
TO
275LIMIT $limit";
276 $dao = CRM_Core_DAO::executeQuery($query);
ebb5fc58 277 $result = array();
6a488035
TO
278
279 while ($dao->fetch()) {
ebb5fc58
CW
280 $row = array(
281 'id' => $dao->id,
282 'text' => ($dao->parent ? "{$dao->parent} :: " : '') . $dao->name,
283 );
284 // Add warning about used_for types
6a488035
TO
285 if (!empty($dao->used_for)) {
286 $usedForTagB = explode(',', $dao->used_for);
287 sort($usedForTagB);
288 $usedForDiff = array_diff($usedForTagA, $usedForTagB);
289 if (!empty($usedForDiff)) {
ebb5fc58 290 $row['warning'] = TRUE;
6a488035
TO
291 }
292 }
ebb5fc58 293 $result[] = $row;
6a488035 294 }
ecdef330 295 CRM_Utils_JSON::output($result);
6a488035
TO
296 }
297
00be9182 298 public function mappingList() {
581c7be2
CW
299 if (empty($_GET['mappingID'])) {
300 CRM_Utils_JSON::output(array('status' => 'error', 'error_msg' => 'required params missing.'));
6a488035
TO
301 }
302
581c7be2 303 $selectionOptions = CRM_Core_BAO_ActionSchedule::getSelection1($_GET['mappingID']);
6a488035 304
581c7be2
CW
305 $output = array(
306 'sel4' => array(),
307 'sel5' => array(),
308 'recipientMapping' => $selectionOptions['recipientMapping'],
309 );
310 foreach (array(4, 5) as $sel) {
311 foreach ($selectionOptions["sel$sel"] as $id => $name) {
312 $output["sel$sel"][] = array(
313 'value' => $name,
314 'key' => $id,
315 );
316 }
6a488035 317 }
6a488035 318
581c7be2 319 CRM_Utils_JSON::output($output);
6a488035
TO
320 }
321
00be9182 322 public static function mergeTags() {
6a488035
TO
323 $tagAId = CRM_Utils_Type::escape($_POST['fromId'], 'Integer');
324 $tagBId = CRM_Utils_Type::escape($_POST['toId'], 'Integer');
325
326 $result = CRM_Core_BAO_EntityTag::mergeTags($tagAId, $tagBId);
327
328 if (!empty($result['tagB_used_for'])) {
329 $usedFor = CRM_Core_OptionGroup::values('tag_used_for');
330 foreach ($result['tagB_used_for'] as & $val) {
331 $val = $usedFor[$val];
332 }
333 $result['tagB_used_for'] = implode(', ', $result['tagB_used_for']);
334 }
335
ebb5fc58
CW
336 $result['message'] = ts('"%1" has been merged with "%2". All records previously tagged "%1" are now tagged "%2".',
337 array(1 => $result['tagA'], 2 => $result['tagB'])
338 );
339
ecdef330 340 CRM_Utils_JSON::output($result);
6a488035
TO
341 }
342
6a488035 343}