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