Delete repeat activities that are selected for deletion
authorKirk Jackson <kirk@circle-interactive.co.uk>
Mon, 29 Jul 2019 10:58:03 +0000 (11:58 +0100)
committerKirk Jackson <kirk@circle-interactive.co.uk>
Mon, 29 Jul 2019 10:58:03 +0000 (11:58 +0100)
CRM/Activity/Form/Activity.php

index c89b52f6c3a343136bc909ffbbe5a9784354aff6..dc6718406bf50af730ff03acaa203095dc8043e1 100644 (file)
@@ -909,19 +909,33 @@ class CRM_Activity_Form_Activity extends CRM_Contact_Form_Task {
    */
   public function postProcess($params = NULL) {
     if ($this->_action & CRM_Core_Action::DELETE) {
-      $deleteParams = ['id' => $this->_activityId];
-      $moveToTrash = CRM_Case_BAO_Case::isCaseActivity($this->_activityId);
-      CRM_Activity_BAO_Activity::deleteActivity($deleteParams, $moveToTrash);
-
-      // delete tags for the entity
-      $tagParams = [
-        'entity_table' => 'civicrm_activity',
-        'entity_id' => $this->_activityId,
-      ];
+      // Look up any repeat activities to be deleted.
+      $activityIds = array_column(CRM_Core_BAO_RecurringEntity::getEntitiesFor($this->_activityId, 'civicrm_activity', TRUE, NULL), 'id');
+      if (!$activityIds) {
+        // There are no repeat activities to delete - just this one.
+        $activityIds = [$this->_activityId];
+      }
+
+      // Delete each activity.
+      foreach ($activityIds as $activityId) {
+        $deleteParams = ['id' => $activityId];
+        $moveToTrash = CRM_Case_BAO_Case::isCaseActivity($activityId);
+        CRM_Activity_BAO_Activity::deleteActivity($deleteParams, $moveToTrash);
+
+        // delete tags for the entity
+        $tagParams = [
+          'entity_table' => 'civicrm_activity',
+          'entity_id' => $activityId,
+        ];
 
-      CRM_Core_BAO_EntityTag::del($tagParams);
+        CRM_Core_BAO_EntityTag::del($tagParams);
+      }
+
+      CRM_Core_Session::setStatus(
+        ts("Selected Activity has been deleted successfully.", ['plural' => '%count Activities have been deleted successfully.', 'count' => count($activityIds)]),
+        ts('Record Deleted', ['plural' => 'Records Deleted', 'count' => count($activityIds)]), 'success'
+      );
 
-      CRM_Core_Session::setStatus(ts("Selected Activity has been deleted successfully."), ts('Record Deleted'), 'success');
       return NULL;
     }