You are here

function salesforce_mapping_entity_delete in Salesforce Suite 8.4

Same name and namespace in other branches
  1. 8.3 modules/salesforce_mapping/salesforce_mapping.module \salesforce_mapping_entity_delete()
  2. 7.3 modules/salesforce_mapping/salesforce_mapping.module \salesforce_mapping_entity_delete()
  3. 5.0.x modules/salesforce_mapping/salesforce_mapping.module \salesforce_mapping_entity_delete()

Implements hook_entity_delete().

Delete any corresponding Mapped Objects when an entity is deleted.

File

modules/salesforce_mapping/salesforce_mapping.module, line 43
Manages Salesforce object and Drupal entity mappings.

Code

function salesforce_mapping_entity_delete(EntityInterface $entity) {
  $storage = \Drupal::entityTypeManager()
    ->getStorage('salesforce_mapped_object');
  if (\Drupal::moduleHandler()
    ->moduleExists('salesforce_push') && \Drupal::database()
    ->schema()
    ->tableExists('salesforce_push_queue')) {
    $mapped_objects = $storage
      ->loadByEntity($entity);
    if (!$mapped_objects) {
      return;
    }
    foreach ($mapped_objects as $mapped_object) {
      $mapping = $mapped_object
        ->getMapping();
      $queued_items = \Drupal::database()
        ->select('salesforce_push_queue', 'spq')
        ->fields('spq', [
        'item_id',
      ])
        ->condition('entity_id', $entity
        ->id())
        ->condition('name', $mapping
        ->id())
        ->condition('op', 'push_delete')
        ->execute();

      // If this was queued to be deleted, don't delete the mapping yet, defer
      // to salesforce_push.
      if (!$queued_items
        ->fetch()) {
        $mapped_object
          ->delete();
      }
    }
  }
  else {
    $storage
      ->delete($storage
      ->loadByEntity($entity));
  }
}