You are here

public function WebformSubmissionStorage::delete in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/WebformSubmissionStorage.php \Drupal\webform\WebformSubmissionStorage::delete()

Deletes permanently saved entities.

Parameters

array $entities: An array of entity objects to delete.

Throws

\Drupal\Core\Entity\EntityStorageException In case of failures, an exception is thrown.

Overrides SqlContentEntityStorage::delete

2 calls to WebformSubmissionStorage::delete()
WebformSubmissionStorage::deleteAll in src/WebformSubmissionStorage.php
Delete all webform submissions.
WebformSubmissionStorage::purge in src/WebformSubmissionStorage.php
Purge webform submissions.

File

src/WebformSubmissionStorage.php, line 1144

Class

WebformSubmissionStorage
Defines the webform submission storage.

Namespace

Drupal\webform

Code

public function delete(array $entities) {

  /** @var \Drupal\webform\WebformSubmissionInterface $entity */
  if (!$entities) {

    // If no entities were passed, do nothing.
    return;
  }
  foreach ($entities as $entity) {
    $this
      ->invokeWebformElements('preDelete', $entity);
    $this
      ->invokeWebformHandlers('preDelete', $entity);
  }
  $return = parent::delete($entities);
  $this
    ->deleteData($entities);
  foreach ($entities as $entity) {
    $this
      ->invokeWebformElements('postDelete', $entity);
    $this
      ->invokeWebformHandlers('postDelete', $entity);
    WebformManagedFileBase::deleteFiles($entity);
  }

  // Remove empty webform submission specific file directory
  // for all stream wrappers.
  // @see \Drupal\webform\Plugin\WebformElement\WebformManagedFileBase
  // @see \Drupal\webform\Plugin\WebformElement\WebformSignature
  foreach ($entities as $entity) {
    $webform = $entity
      ->getWebform();
    if ($webform) {
      $stream_wrappers = array_keys($this->streamWrapperManager
        ->getNames(StreamWrapperInterface::WRITE_VISIBLE));
      foreach ($stream_wrappers as $stream_wrapper) {
        $file_directory = $stream_wrapper . '://webform/' . $webform
          ->id() . '/' . $entity
          ->id();

        // Clear empty webform submission directory.
        if (file_exists($file_directory) && empty($this->fileSystem
          ->scanDirectory($file_directory, '/.*/'))) {
          $this->fileSystem
            ->deleteRecursive($file_directory);
        }
      }
    }
  }

  // Log deleted.
  foreach ($entities as $entity) {
    $webform = $entity
      ->getWebform();
    $this->loggerFactory
      ->get('webform')
      ->notice('Deleted @form: Submission #@id.', [
      '@id' => $entity
        ->id(),
      '@form' => $webform ? $webform
        ->label() : '[' . t('Webform') . ']',
    ]);
  }
  return $return;
}