Merge pull request #16001 from agileware/CIVICRM-1383
[civicrm-core.git] / CRM / Contribute / Task.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
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 |
9 +--------------------------------------------------------------------+
10 */
11
12 /**
13 *
14 * @package CRM
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
16 */
17
18 /**
19 * Class to represent the actions that can be performed on a group of contacts.
20 *
21 * Used by the search forms.
22 */
23 class CRM_Contribute_Task extends CRM_Core_Task {
24
25 /**
26 * Contribution tasks
27 */
28 const
29 UPDATE_STATUS = 401,
30 PDF_RECEIPT = 402,
31 PDF_THANKYOU = 403,
32 PDF_INVOICE = 404;
33
34 /**
35 * @var string
36 */
37 public static $objectType = 'contribution';
38
39 /**
40 * These tasks are the core set of tasks that the user can perform
41 * on a contact / group of contacts
42 *
43 * @return array
44 * the set of tasks for a group of contacts
45 */
46 public static function tasks() {
47 if (!(self::$_tasks)) {
48 self::$_tasks = [
49 self::TASK_DELETE => [
50 'title' => ts('Delete contributions'),
51 'class' => 'CRM_Contribute_Form_Task_Delete',
52 'result' => FALSE,
53 ],
54 self::TASK_PRINT => [
55 'title' => ts('Print selected rows'),
56 'class' => 'CRM_Contribute_Form_Task_Print',
57 'result' => FALSE,
58 ],
59 self::TASK_EXPORT => [
60 'title' => ts('Export contributions'),
61 'class' => [
62 'CRM_Export_Form_Select',
63 'CRM_Export_Form_Map',
64 ],
65 'result' => FALSE,
66 ],
67 self::BATCH_UPDATE => [
68 'title' => ts('Update multiple contributions'),
69 'class' => [
70 'CRM_Contribute_Form_Task_PickProfile',
71 'CRM_Contribute_Form_Task_Batch',
72 ],
73 'result' => TRUE,
74 ],
75 self::TASK_EMAIL => [
76 'title' => ts('Email - send now (to %1 or less)', [
77 1 => Civi::settings()
78 ->get('simple_mail_limit'),
79 ]),
80 'class' => 'CRM_Contribute_Form_Task_Email',
81 'result' => TRUE,
82 ],
83 self::UPDATE_STATUS => [
84 'title' => ts('Update pending contribution status'),
85 'class' => 'CRM_Contribute_Form_Task_Status',
86 'result' => TRUE,
87 ],
88 self::PDF_RECEIPT => [
89 'title' => ts('Receipts - print or email'),
90 'class' => 'CRM_Contribute_Form_Task_PDF',
91 'result' => FALSE,
92 ],
93 self::PDF_THANKYOU => [
94 'title' => ts('Thank-you letters - print or email'),
95 'class' => 'CRM_Contribute_Form_Task_PDFLetter',
96 'result' => FALSE,
97 ],
98 self::PDF_INVOICE => [
99 'title' => ts('Invoices - print or email'),
100 'class' => 'CRM_Contribute_Form_Task_Invoice',
101 'result' => FALSE,
102 ],
103 ];
104
105 //CRM-4418, check for delete
106 if (!CRM_Core_Permission::check('delete in CiviContribute')) {
107 unset(self::$_tasks[self::TASK_DELETE]);
108 }
109 //CRM-12920 - check for edit permission
110 if (!CRM_Core_Permission::check('edit contributions')) {
111 unset(self::$_tasks[self::BATCH_UPDATE], self::$_tasks[self::UPDATE_STATUS]);
112 }
113
114 // remove action "Invoices - print or email"
115 $invoiceSettings = Civi::settings()->get('contribution_invoice_settings');
116 $invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings);
117 if (!$invoicing) {
118 unset(self::$_tasks[self::PDF_INVOICE]);
119 }
120
121 parent::tasks();
122 }
123
124 return self::$_tasks;
125 }
126
127 /**
128 * Show tasks selectively based on the permission level
129 * of the user
130 *
131 * @param int $permission
132 *
133 * @param array $params
134 * bool softCreditFiltering: derived from CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled
135 *
136 * @return array
137 * set of tasks that are valid for the user
138 */
139 public static function permissionedTaskTitles($permission, $params = []) {
140 if (!isset($params['softCreditFiltering'])) {
141 $params['softCreditFiltering'] = FALSE;
142 }
143 if (($permission == CRM_Core_Permission::EDIT)
144 || CRM_Core_Permission::check('edit contributions')
145 ) {
146 $tasks = self::taskTitles();
147 }
148 else {
149 $tasks = [
150 self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'],
151 self::TASK_EMAIL => self::$_tasks[self::TASK_EMAIL]['title'],
152 self::PDF_RECEIPT => self::$_tasks[self::PDF_RECEIPT]['title'],
153 ];
154
155 //CRM-4418,
156 if (CRM_Core_Permission::check('delete in CiviContribute')) {
157 $tasks[self::TASK_DELETE] = self::$_tasks[self::TASK_DELETE]['title'];
158 }
159 }
160 if ($params['softCreditFiltering']) {
161 unset($tasks[self::BATCH_UPDATE], $tasks[self::PDF_RECEIPT]);
162 }
163
164 $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params);
165 return $tasks;
166 }
167
168 /**
169 * These tasks are the core set of tasks that the user can perform
170 * on contributors
171 *
172 * @param int $value
173 *
174 * @return array
175 * the set of tasks for a group of contributors
176 */
177 public static function getTask($value) {
178 self::tasks();
179 if (!$value || !CRM_Utils_Array::value($value, self::$_tasks)) {
180 // make the print task by default
181 $value = self::TASK_PRINT;
182 }
183 return parent::getTask($value);
184 }
185
186 }