Merge pull request #15825 from seamuslee001/dev_core_183_logging
[civicrm-core.git] / CRM / Contact / Task.php
CommitLineData
6a488035 1<?php
6a488035
TO
2/*
3 +--------------------------------------------------------------------+
bc77d7c0 4 | Copyright CiviCRM LLC. All rights reserved. |
6a488035 5 | |
bc77d7c0
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 9 +--------------------------------------------------------------------+
d25dd0ee 10 */
6a488035
TO
11
12/**
13 *
14 * @package CRM
ca5cec67 15 * @copyright CiviCRM LLC https://civicrm.org/licensing
6a488035
TO
16 */
17
18/**
95cdcc0f 19 * Class to represent the actions that can be performed on a group of contacts used by the search forms.
6a488035 20 */
f2774867 21class CRM_Contact_Task extends CRM_Core_Task {
6a488035 22
69078420
SL
23 /**
24 * Contact tasks
25 */
f2774867 26 const
f2774867
MW
27 HOUSEHOLD_CONTACTS = 101,
28 ORGANIZATION_CONTACTS = 102,
29 RECORD_CONTACTS = 103,
30 MAP_CONTACTS = 104,
31 ADD_EVENT = 105,
32 MERGE_CONTACTS = 106,
33 EMAIL_UNHOLD = 107,
34 RESTORE = 108,
35 COMMUNICATION_PREFS = 109,
36 INDIVIDUAL_CONTACTS = 110,
37 ADD_TO_CASE = 111;
38
69078420
SL
39 /**
40 * @var string
41 */
42 public static $objectType = 'contact';
6a488035 43
78b22ce9 44 public static function tasks() {
6a488035
TO
45 if (!self::$_tasks) {
46 self::$_tasks = array(
f2774867 47 self::GROUP_ADD => array(
7f82e636 48 'title' => ts('Group - add contacts'),
6a488035 49 'class' => 'CRM_Contact_Form_Task_AddToGroup',
061ff68c 50 'url' => 'civicrm/task/add-to-group',
6a488035 51 ),
f2774867 52 self::GROUP_REMOVE => array(
7f82e636 53 'title' => ts('Group - remove contacts'),
6a488035 54 'class' => 'CRM_Contact_Form_Task_RemoveFromGroup',
061ff68c 55 'url' => 'civicrm/task/remove-from-group',
6a488035 56 ),
f2774867 57 self::TAG_ADD => array(
79e4c2ad 58 'title' => ts('Tag - add to contacts'),
6a488035 59 'class' => 'CRM_Contact_Form_Task_AddToTag',
061ff68c 60 'url' => 'civicrm/task/add-to-tag',
6a488035 61 ),
f2774867 62 self::TAG_REMOVE => array(
7f82e636 63 'title' => ts('Tag - remove from contacts'),
6a488035 64 'class' => 'CRM_Contact_Form_Task_RemoveFromTag',
061ff68c 65 'url' => 'civicrm/task/remove-from-tag',
6a488035 66 ),
f2774867 67 self::TASK_EXPORT => array(
7f82e636 68 'title' => ts('Export contacts'),
6a488035
TO
69 'class' => array(
70 'CRM_Export_Form_Select',
71 'CRM_Export_Form_Map',
72 ),
73 'result' => FALSE,
74 ),
f2774867
MW
75 self::TASK_EMAIL => array(
76 'title' => ts('Email - send now (to %1 or less)', array(
77 1 => Civi::settings()
78 ->get('simple_mail_limit'),
79 )),
6a488035
TO
80 'class' => 'CRM_Contact_Form_Task_Email',
81 'result' => TRUE,
061ff68c 82 'url' => 'civicrm/task/send-email',
6a488035 83 ),
f2774867 84 self::TASK_DELETE => array(
7f82e636 85 'title' => ts('Delete contacts'),
6a488035
TO
86 'class' => 'CRM_Contact_Form_Task_Delete',
87 'result' => FALSE,
061ff68c 88 'url' => 'civicrm/task/delete-contact',
6a488035 89 ),
2a6af255 90 self::RECORD_CONTACTS => array(
7f82e636 91 'title' => ts('Add activity'),
6a488035
TO
92 'class' => 'CRM_Activity_Form_Activity',
93 ),
2a6af255 94 self::SAVE_SEARCH => array(
7f12f044 95 'title' => ts('Group - create smart group'),
6a488035
TO
96 'class' => 'CRM_Contact_Form_Task_SaveSearch',
97 'result' => TRUE,
98 ),
2a6af255 99 self::SAVE_SEARCH_UPDATE => array(
7f12f044 100 'title' => ts('Group - update smart group'),
6a488035
TO
101 'class' => 'CRM_Contact_Form_Task_SaveSearch_Update',
102 'result' => TRUE,
103 ),
f2774867 104 self::TASK_PRINT => array(
7f82e636 105 'title' => ts('Print selected rows'),
6a488035
TO
106 'class' => 'CRM_Contact_Form_Task_Print',
107 'result' => FALSE,
108 ),
2a6af255 109 self::LABEL_CONTACTS => array(
7f82e636 110 'title' => ts('Mailing labels - print'),
6a488035
TO
111 'class' => 'CRM_Contact_Form_Task_Label',
112 'result' => TRUE,
061ff68c 113 'url' => 'civicrm/task/make-mailing-label',
6a488035 114 ),
2a6af255 115 self::BATCH_UPDATE => array(
b581842f 116 'title' => ts('Update multiple contacts'),
6a488035
TO
117 'class' => array(
118 'CRM_Contact_Form_Task_PickProfile',
119 'CRM_Contact_Form_Task_Batch',
120 ),
121 'result' => TRUE,
061ff68c 122 'url' => 'civicrm/task/pick-profile',
6a488035 123 ),
f2774867 124 self::PDF_LETTER => array(
cd095eae 125 'title' => ts('Print/merge document'),
6a488035
TO
126 'class' => 'CRM_Contact_Form_Task_PDF',
127 'result' => TRUE,
061ff68c 128 'url' => 'civicrm/task/print-document',
6a488035 129 ),
2a6af255 130 self::EMAIL_UNHOLD => array(
79e4c2ad 131 'title' => ts('Email - unhold addresses'),
6a488035 132 'class' => 'CRM_Contact_Form_Task_Unhold',
061ff68c 133 'url' => 'civicrm/task/unhold-email',
6a488035 134 ),
2a6af255 135 self::COMMUNICATION_PREFS => array(
7f82e636 136 'title' => ts('Communication preferences - alter'),
6a488035 137 'class' => 'CRM_Contact_Form_Task_AlterPreferences',
061ff68c 138 'url' => 'civicrm/task/alter-contact-preference',
6a488035
TO
139 ),
140 self::RESTORE => array(
7f82e636 141 'title' => ts('Restore contacts from trash'),
6a488035
TO
142 'class' => 'CRM_Contact_Form_Task_Delete',
143 'result' => FALSE,
144 ),
145 self::DELETE_PERMANENTLY => array(
7f82e636 146 'title' => ts('Delete permanently'),
6a488035
TO
147 'class' => 'CRM_Contact_Form_Task_Delete',
148 'result' => FALSE,
149 ),
150 );
151
26b0e4d2
SB
152 //CRM-16329, if SMS provider is configured show sms action.
153 $providersCount = CRM_SMS_BAO_Provider::activeProviderCount();
63483feb 154 if ($providersCount && CRM_Core_Permission::check('send SMS')) {
f2774867 155 self::$_tasks[self::TASK_SMS] = array(
7f82e636 156 'title' => ts('SMS - schedule/send'),
26b0e4d2
SB
157 'class' => 'CRM_Contact_Form_Task_SMS',
158 'result' => TRUE,
159 );
160 }
161
6b5f37d3 162 if (CRM_Contact_BAO_ContactType::isActive('Individual')) {
163 $label = CRM_Contact_BAO_ContactType::getLabel('individual');
164 self::$_tasks[self::INDIVIDUAL_CONTACTS] = array(
165 'title' => ts('Add relationship - to %1',
166 array(1 => $label)
167 ),
168 'class' => 'CRM_Contact_Form_Task_AddToIndividual',
169 );
170 }
171
6a488035 172 if (CRM_Contact_BAO_ContactType::isActive('Household')) {
79e4c2ad 173 $label = CRM_Contact_BAO_ContactType::getLabel('household');
2a6af255 174 self::$_tasks[self::HOUSEHOLD_CONTACTS] = array(
79e4c2ad 175 'title' => ts('Add relationship - to %1',
6a488035
TO
176 array(1 => $label)
177 ),
178 'class' => 'CRM_Contact_Form_Task_AddToHousehold',
179 );
180 }
181
182 if (CRM_Contact_BAO_ContactType::isActive('Organization')) {
79e4c2ad 183 $label = CRM_Contact_BAO_ContactType::getLabel('organization');
2a6af255 184 self::$_tasks[self::ORGANIZATION_CONTACTS] = array(
79e4c2ad 185 'title' => ts('Add relationship - to %1',
6a488035
TO
186 array(1 => $label)
187 ),
188 'class' => 'CRM_Contact_Form_Task_AddToOrganization',
189 );
190 }
191
192 if (CRM_Core_Permission::check('merge duplicate contacts')) {
2a6af255 193 self::$_tasks[self::MERGE_CONTACTS] = array(
7f82e636 194 'title' => ts('Merge contacts'),
6a488035
TO
195 'class' => 'CRM_Contact_Form_Task_Merge',
196 'result' => TRUE,
197 );
198 }
199
200 //CRM-4418, check for delete
201 if (!CRM_Core_Permission::check('delete contacts')) {
f2774867 202 unset(self::$_tasks[self::TASK_DELETE]);
6a488035
TO
203 }
204
205 //show map action only if map provider and geoprovider are set (Google doesn't need geoprovider)
206 // should fix this to be more flexible as providers are added ??
207 $config = CRM_Core_Config::singleton();
208
209 if ($config->mapProvider &&
210 ($config->mapProvider == 'Google' ||
211 ($config->mapProvider == 'OpenStreetMaps' ||
212 $config->geoProvider == 'Google'
213 )
214 )
215 ) {
2a6af255 216 self::$_tasks[self::MAP_CONTACTS] = array(
7f82e636 217 'title' => ts('Map contacts'),
6a488035
TO
218 'class' => 'CRM_Contact_Form_Task_Map',
219 'result' => FALSE,
220 );
221 }
222
223 if (CRM_Core_Permission::access('CiviEvent')) {
2a6af255 224 self::$_tasks[self::ADD_EVENT] = array(
7f82e636 225 'title' => ts('Register participants for event'),
6a488035
TO
226 'class' => 'CRM_Event_Form_Participant',
227 );
228 }
229
0083c73f
TO
230 if (CRM_Core_Permission::access('CiviMail')
231 || (CRM_Mailing_Info::workflowEnabled() && CRM_Core_Permission::check('create mailings'))
232 ) {
233 self::$_tasks[self::CREATE_MAILING] = array(
db2e53c6 234 'title' => ts('Email - schedule/send via CiviMail'),
0083c73f
TO
235 'class' => 'CRM_Mailing_Form_Task_AdhocMailing',
236 'result' => FALSE,
237 );
6a488035
TO
238 }
239
cf0adfdc 240 if (CRM_Core_Permission::access('CiviCase')) {
3e240fc3 241 self::$_tasks[self::ADD_TO_CASE] = array(
cf0adfdc
CR
242 'title' => 'Add to case as role',
243 'class' => 'CRM_Case_Form_AddToCaseAsRole',
244 'result' => FALSE,
3e240fc3 245 );
cf0adfdc 246 }
f1d7f287 247
f2774867 248 parent::tasks();
6a488035
TO
249 }
250
f2774867 251 return self::$_tasks;
6a488035
TO
252 }
253
254 /**
100fef9d 255 * Show tasks selectively based on the permission level
6a488035
TO
256 * of the user
257 *
258 * @param int $permission
f2774867
MW
259 * @param array $params
260 * bool deletedContacts: Are these tasks for operating on deleted contacts?.
6a488035 261 *
a6c01b45
CW
262 * @return array
263 * set of tasks that are valid for the user
6a488035 264 */
f2774867
MW
265 public static function permissionedTaskTitles($permission, $params = array()) {
266 if (!isset($params['deletedContacts'])) {
267 $params['deletedContacts'] = FALSE;
268 }
269 self::tasks();
6a488035 270 $tasks = array();
f2774867 271 if ($params['deletedContacts']) {
6a488035
TO
272 if (CRM_Core_Permission::check('access deleted contacts')) {
273 $tasks[self::RESTORE] = self::$_tasks[self::RESTORE]['title'];
274 if (CRM_Core_Permission::check('delete contacts')) {
275 $tasks[self::DELETE_PERMANENTLY] = self::$_tasks[self::DELETE_PERMANENTLY]['title'];
276 }
277 }
278 }
279 elseif ($permission == CRM_Core_Permission::EDIT) {
280 $tasks = self::taskTitles();
281 }
282 else {
283 $tasks = array(
f2774867
MW
284 self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'],
285 self::TASK_EMAIL => self::$_tasks[self::TASK_EMAIL]['title'],
2a6af255 286 self::LABEL_CONTACTS => self::$_tasks[self::LABEL_CONTACTS]['title'],
6a488035
TO
287 );
288
474f2a8f
MM
289 foreach ([
290 self::MAP_CONTACTS,
291 self::CREATE_MAILING,
69078420 292 self::TASK_SMS,
474f2a8f
MM
293 ] as $task) {
294 if (isset(self::$_tasks[$task]) &&
295 !empty(self::$_tasks[$task]['title'])
296 ) {
297 $tasks[$task] = self::$_tasks[$task]['title'];
298 }
6a488035
TO
299 }
300 }
6a488035 301
f2774867 302 $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params);
6a488035
TO
303 return $tasks;
304 }
305
86538308
EM
306 /**
307 * @param $value
308 *
309 * @return array
310 */
00be9182 311 public static function getTask($value) {
f2774867 312 self::tasks();
6a488035
TO
313
314 if (!CRM_Utils_Array::value($value, self::$_tasks)) {
315 // make it the print task by default
f2774867 316 $value = self::TASK_PRINT;
061ff68c 317 }
f2774867 318 return parent::getTask($value);
061ff68c 319 }
320
6a488035 321}