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