Merge pull request #24047 from kurund/export-fixes
[civicrm-core.git] / CRM / Member / Task.php
index ade20080e17c79286165606a058ba640f90489fa..dd04d9e062f8875a7eb847ab42b673db9b793711 100644 (file)
@@ -40,78 +40,92 @@ class CRM_Member_Task extends CRM_Core_Task {
    *   the set of tasks for a group of contacts
    */
   public static function tasks() {
-    if (!self::$_tasks) {
-      self::$_tasks = [
-        self::TASK_DELETE => [
-          'title' => ts('Delete memberships'),
-          'class' => 'CRM_Member_Form_Task_Delete',
-          'result' => FALSE,
+    self::$_tasks = [
+      self::TASK_DELETE => [
+        'title' => ts('Delete memberships'),
+        'class' => 'CRM_Member_Form_Task_Delete',
+        'permissions' => ['delete in CiviMember'],
+        'result' => FALSE,
+        // Hopefully transitional key - if permission to edit the contact also required.
+        'requires_edit_contact_permission' => FALSE,
+      ],
+      self::TASK_PRINT => [
+        'title' => ts('Print selected rows'),
+        'class' => 'CRM_Member_Form_Task_Print',
+        'result' => FALSE,
+        'permissions' => [['view memberships', 'edit memberships']],
+        // Transitional key. May change.
+        'requires_edit_contact_permission' => FALSE,
+      ],
+      self::TASK_EXPORT => [
+        'title' => ts('Export members'),
+        'class' => [
+          'CRM_Member_Export_Form_Select',
+          'CRM_Member_Export_Form_Map',
         ],
-        self::TASK_PRINT => [
-          'title' => ts('Print selected rows'),
-          'class' => 'CRM_Member_Form_Task_Print',
-          'result' => FALSE,
+        'permissions' => [['view memberships', 'edit memberships']],
+        // Transitional key. May change.
+        'requires_edit_contact_permission' => FALSE,
+        'result' => FALSE,
+      ],
+      self::TASK_EMAIL => [
+        'title' => ts('Email - send now (to %1 or less)', [
+          1 => Civi::settings()
+            ->get('simple_mail_limit'),
+        ]),
+        'class' => 'CRM_Member_Form_Task_Email',
+        'result' => TRUE,
+        'permissions' => ['edit memberships'],
+        // Transitional key. May change.
+        'requires_edit_contact_permission' => TRUE,
+      ],
+      self::BATCH_UPDATE => [
+        'title' => ts('Update multiple memberships'),
+        'class' => [
+          'CRM_Member_Form_Task_PickProfile',
+          'CRM_Member_Form_Task_Batch',
         ],
-        self::TASK_EXPORT => [
-          'title' => ts('Export members'),
-          'class' => [
-            'CRM_Member_Export_Form_Select',
-            'CRM_Member_Export_Form_Map',
-          ],
-          'result' => FALSE,
+        'permissions' => ['edit memberships'],
+        // Transitional key. May change.
+        'requires_edit_contact_permission' => TRUE,
+        'result' => TRUE,
+      ],
+      self::LABEL_MEMBERS => [
+        'title' => ts('Mailing labels - print'),
+        'class' => [
+          'CRM_Member_Form_Task_Label',
         ],
-        self::TASK_EMAIL => [
-          'title' => ts('Email - send now (to %1 or less)', [
-            1 => Civi::settings()
-              ->get('simple_mail_limit'),
-          ]),
-          'class' => 'CRM_Member_Form_Task_Email',
-          'result' => TRUE,
-        ],
-        self::BATCH_UPDATE => [
-          'title' => ts('Update multiple memberships'),
-          'class' => [
-            'CRM_Member_Form_Task_PickProfile',
-            'CRM_Member_Form_Task_Batch',
-          ],
-          'result' => TRUE,
-        ],
-        self::LABEL_MEMBERS => [
-          'title' => ts('Mailing labels - print'),
-          'class' => [
-            'CRM_Member_Form_Task_Label',
-          ],
-          'result' => TRUE,
-        ],
-        self::PDF_LETTER => [
-          'title' => ts('Print/merge document for memberships'),
-          'class' => 'CRM_Member_Form_Task_PDFLetter',
-          'result' => FALSE,
-        ],
-        self::SAVE_SEARCH => [
-          'title' => ts('Group - create smart group'),
-          'class' => 'CRM_Contact_Form_Task_SaveSearch',
-          'result' => TRUE,
-        ],
-        self::SAVE_SEARCH_UPDATE => [
-          'title' => ts('Group - update smart group'),
-          'class' => 'CRM_Contact_Form_Task_SaveSearch_Update',
-          'result' => TRUE,
-        ],
-      ];
-
-      //CRM-4418, check for delete
-      if (!CRM_Core_Permission::check('delete in CiviMember')) {
-        unset(self::$_tasks[self::TASK_DELETE]);
-      }
-      //CRM-12920 - check for edit permission
-      if (!CRM_Core_Permission::check('edit memberships')) {
-        unset(self::$_tasks[self::BATCH_UPDATE]);
-      }
-
-      parent::tasks();
-    }
-
+        'permissions' => ['edit memberships'],
+        // Transitional key. May change.
+        'requires_edit_contact_permission' => TRUE,
+        'result' => TRUE,
+      ],
+      self::PDF_LETTER => [
+        'title' => ts('Print/merge document for memberships'),
+        'class' => 'CRM_Member_Form_Task_PDFLetter',
+        'result' => FALSE,
+        'permissions' => ['edit memberships'],
+        // Transitional key. May change.
+        'requires_edit_contact_permission' => TRUE,
+      ],
+      self::SAVE_SEARCH => [
+        'title' => ts('Group - create smart group'),
+        'class' => 'CRM_Contact_Form_Task_SaveSearch',
+        'result' => TRUE,
+        'permissions' => ['edit groups'],
+        // Transitional key. May change.
+        'requires_edit_contact_permission' => FALSE,
+      ],
+      self::SAVE_SEARCH_UPDATE => [
+        'title' => ts('Group - update smart group'),
+        'class' => 'CRM_Contact_Form_Task_SaveSearch_Update',
+        'result' => TRUE,
+        'permissions' => ['edit groups'],
+        // Transitional key. May change.
+        'requires_edit_contact_permission' => FALSE,
+      ],
+    ];
+    parent::tasks();
     return self::$_tasks;
   }
 
@@ -137,24 +151,8 @@ class CRM_Member_Task extends CRM_Core_Task {
    *   set of tasks that are valid for the user
    */
   public static function permissionedTaskTitles($permission, $params = []) {
-    if (($permission == CRM_Core_Permission::EDIT)
-      || CRM_Core_Permission::check('edit memberships')
-    ) {
-      $tasks = self::taskTitles();
-    }
-    else {
-      $tasks = [
-        self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'],
-        self::TASK_EMAIL => self::$_tasks[self::TASK_EMAIL]['title'],
-      ];
-      //CRM-4418,
-      if (CRM_Core_Permission::check('delete in CiviMember')) {
-        $tasks[self::TASK_DELETE] = self::$_tasks[self::TASK_DELETE]['title'];
-      }
-    }
-
-    $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params);
-    return $tasks;
+    $tasks = self::getTitlesFilteredByPermission(self::tasks(), $permission === CRM_Core_Permission::EDIT);
+    return parent::corePermissionedTaskTitles($tasks, $permission, $params);
   }
 
   /**
@@ -167,8 +165,7 @@ class CRM_Member_Task extends CRM_Core_Task {
    *   the set of tasks for a group of members
    */
   public static function getTask($value) {
-    self::tasks();
-    if (!$value || empty(self::$_tasks[$value])) {
+    if (!$value || empty(self::tasks()[$value])) {
       // Make the print task the default
       $value = self::TASK_PRINT;
     }