You are here

function _activity_creator_activity_for_entity_updater in Open Social 8.4

Same name and namespace in other branches
  1. 8.9 modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  2. 8.2 modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  3. 8.3 modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  4. 8.5 modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  5. 8.6 modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  6. 8.7 modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  7. 8.8 modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  8. 10.3.x modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  9. 10.0.x modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  10. 10.1.x modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()
  11. 10.2.x modules/custom/activity_creator/activity_creator.module \_activity_creator_activity_for_entity_updater()

Update and or delete activities for given entity.

@TODO: When group is deleted delete activities where group is recipient. @TODO: When user is deleted delete activities where user is recipient. @TODO: Move this to a service.

Parameters

string $action: A string containing the action. Can be delete or update.

\Drupal\Core\Entity\EntityInterface $entity: The entity object which is updated or deleted.

2 calls to _activity_creator_activity_for_entity_updater()
activity_creator_entity_delete in modules/custom/activity_creator/activity_creator.module
Implements hook_entity_delete().
activity_creator_entity_update in modules/custom/activity_creator/activity_creator.module
Implements hook_entity_update().

File

modules/custom/activity_creator/activity_creator.module, line 255
Activity Creator module file.

Code

function _activity_creator_activity_for_entity_updater($action, EntityInterface $entity) {
  if ($entity !== NULL) {
    $entity_type = $entity
      ->getEntityTypeId();
    $entity_id = $entity
      ->id();

    // We never create activities for configuration entities but accessing
    // entity queries during configuration changes may cause errors.
    if ($entity instanceof ConfigEntityInterface) {
      return;
    }

    // TODO: The if statement below can be refactored after the code that was
    // added above but we didn't have time for that yet.
    if ($entity_type !== 'activity') {
      $entity_query = \Drupal::entityQuery('activity');
      $entity_query
        ->condition('field_activity_entity.target_id', $entity_id, '=');
      $entity_query
        ->condition('field_activity_entity.target_type', $entity_type, '=');
      $ids = $entity_query
        ->execute();
    }
    if ($entity_type == 'user' || $entity_type == 'group') {
      $entity_query = \Drupal::entityQuery('activity');
      $entity_query
        ->condition('field_activity_recipient_' . $entity_type, $entity_id, '=');
      $ids = $entity_query
        ->execute();
    }
    if ($entity_type == 'group_content') {

      /** @var \Drupal\group\Entity\GroupContent $group_content */
      $group_content = $entity;
      $linked_entity = $group_content
        ->getEntity();
      $group = $group_content
        ->getGroup();
      if ($linked_entity && $linked_entity
        ->getEntityTypeId() === 'node' && $group
        ->id()) {
        $entity_query = \Drupal::entityQuery('activity');
        $entity_query
          ->condition('field_activity_entity.target_id', $linked_entity
          ->id(), '=');
        $entity_query
          ->condition('field_activity_entity.target_type', $linked_entity
          ->getEntityTypeId(), '=');
        $entity_query
          ->condition('field_activity_recipient_group', $group
          ->id(), '=');
        $ids = $entity_query
          ->execute();
      }
    }
    if (empty($ids)) {
      return;
    }
    if ($action === 'update') {
      $tags = [];
      foreach ($ids as $id) {
        $tags[] = 'activity:' . $id;
      }
      Cache::invalidateTags($tags);
    }
    elseif ($action === 'delete') {
      entity_delete_multiple('activity', $ids);
    }
  }
}