3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
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 +--------------------------------------------------------------------+
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
19 * Class to represent the actions that can be performed on a group of contacts.
21 * Used by the search forms.
23 class CRM_Contribute_Task
extends CRM_Core_Task
{
37 public static $objectType = 'contribution';
40 * These tasks are the core set of tasks that the user can perform
41 * on a contact / group of contacts
44 * the set of tasks for a group of contacts
46 public static function tasks() {
47 if (!(self
::$_tasks)) {
49 self
::TASK_DELETE
=> [
50 'title' => ts('Delete contributions'),
51 'class' => 'CRM_Contribute_Form_Task_Delete',
55 'title' => ts('Print selected rows'),
56 'class' => 'CRM_Contribute_Form_Task_Print',
59 self
::TASK_EXPORT
=> [
60 'title' => ts('Export contributions'),
62 'CRM_Contribute_Export_Form_Select',
63 'CRM_Contribute_Export_Form_Map',
67 self
::BATCH_UPDATE
=> [
68 'title' => ts('Update multiple contributions'),
70 'CRM_Contribute_Form_Task_PickProfile',
71 'CRM_Contribute_Form_Task_Batch',
76 'title' => ts('Email - send now (to %1 or less)', [
78 ->get('simple_mail_limit'),
80 'class' => 'CRM_Contribute_Form_Task_Email',
83 self
::UPDATE_STATUS
=> [
84 'title' => ts('Record payments for contributions'),
85 'class' => 'CRM_Contribute_Form_Task_Status',
88 self
::PDF_RECEIPT
=> [
89 'title' => ts('Receipts - print or email'),
90 'class' => 'CRM_Contribute_Form_Task_PDF',
92 'title_single_mode' => ts('Send Receipt'),
93 'name' => ts('Send Receipt'),
94 'url' => 'civicrm/contribute/task?reset=1&task_item=receipt',
96 'icon' => 'fa-envelope-o',
97 'filters' => ['contribution_status_id' => [CRM_Core_PseudoConstant
::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed')]],
98 'is_single_mode' => TRUE,
100 self
::PDF_THANKYOU
=> [
101 'title' => ts('Thank-you letters - print or email'),
102 'class' => 'CRM_Contribute_Form_Task_PDFLetter',
104 'url' => 'civicrm/contribute/task?reset=1&task_item=letter',
106 'name' => ts('Send Letter'),
107 'is_single_mode' => TRUE,
108 'title_single_mode' => ts('Thank-you letter - print or email'),
110 self
::PDF_INVOICE
=> [
111 'title' => ts('Invoices - print or email'),
112 'class' => 'CRM_Contribute_Form_Task_Invoice',
117 //CRM-4418, check for delete
118 if (!CRM_Core_Permission
::check('delete in CiviContribute')) {
119 unset(self
::$_tasks[self
::TASK_DELETE
]);
121 //CRM-12920 - check for edit permission
122 if (!CRM_Core_Permission
::check('edit contributions')) {
123 unset(self
::$_tasks[self
::BATCH_UPDATE
], self
::$_tasks[self
::UPDATE_STATUS
]);
126 // remove action "Invoices - print or email"
127 $invoicing = CRM_Invoicing_Utils
::isInvoicingEnabled();
129 unset(self
::$_tasks[self
::PDF_INVOICE
]);
135 return self
::$_tasks;
139 * Get links appropriate to the context of the row.
145 public static function getContextualLinks($row) {
146 $tasks = self
::tasks();
147 foreach ($tasks as $key => $task) {
148 if (empty($task['is_single_mode'])) {
152 if (!empty($task['filters'])) {
153 foreach ($task['filters'] as $filter => $values) {
154 if (!in_array($row[$filter], $values, FALSE)) {
160 $tasks[$key]['url'] = $task['url'];
161 $tasks[$key]['qs'] = ['id' => $row['contribution_id']];
162 $tasks[$key]['title'] = $task['title_single_mode'] ??
$task['title'];
168 * Show tasks selectively based on the permission level
171 * @param int $permission
173 * @param array $params
174 * bool softCreditFiltering: derived from CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled
177 * set of tasks that are valid for the user
179 public static function permissionedTaskTitles($permission, $params = []) {
180 if (!isset($params['softCreditFiltering'])) {
181 $params['softCreditFiltering'] = FALSE;
183 if (($permission == CRM_Core_Permission
::EDIT
)
184 || CRM_Core_Permission
::check('edit contributions')
186 $tasks = self
::taskTitles();
190 self
::TASK_EXPORT
=> self
::$_tasks[self
::TASK_EXPORT
]['title'],
191 self
::TASK_EMAIL
=> self
::$_tasks[self
::TASK_EMAIL
]['title'],
192 self
::PDF_RECEIPT
=> self
::$_tasks[self
::PDF_RECEIPT
]['title'],
196 if (CRM_Core_Permission
::check('delete in CiviContribute')) {
197 $tasks[self
::TASK_DELETE
] = self
::$_tasks[self
::TASK_DELETE
]['title'];
200 if ($params['softCreditFiltering']) {
201 unset($tasks[self
::BATCH_UPDATE
], $tasks[self
::PDF_RECEIPT
]);
204 $tasks = parent
::corePermissionedTaskTitles($tasks, $permission, $params);
209 * These tasks are the core set of tasks that the user can perform
215 * the set of tasks for a group of contributors
217 public static function getTask($value) {
219 if (!$value ||
empty(self
::$_tasks[$value])) {
220 // make the print task by default
221 $value = self
::TASK_PRINT
;
223 return parent
::getTask($value);