You are here

class BulkDeleteForm in Bulk Delete 8

BackupDatabaseForm class.

Hierarchy

Expanded class hierarchy of BulkDeleteForm

1 string reference to 'BulkDeleteForm'
bulkdelete.routing.yml in ./bulkdelete.routing.yml
bulkdelete.routing.yml

File

src/Form/BulkDeleteForm.php, line 15

Namespace

Drupal\bulkdelete\Form
View source
class BulkDeleteForm extends FormBase {

  /**
   * The database connection.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $database;

  /**
   * {@inheritdoc}
   */
  public function __construct(Connection $database) {
    $this->database = $database;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('database'));
  }

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'bulkdelete_form';
  }

  /**
   * {@inheritdoc}
   *
   * @todo, displays last backup timestamp
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $options = [];

    // Get list of content type.
    $types = NodeType::loadMultiple();
    ksort($types);
    foreach ($types as $key => $values) {
      $query = \Drupal::entityQuery('node')
        ->condition('type', $key)
        ->count();
      $count = $query
        ->execute();
      if ($count > 0) {
        $options[$key] = $values
          ->get('name') . " ({$count})";
      }
    }
    if (empty($options)) {
      $form['default_msg'] = [
        '#type' => 'item',
        '#markup' => $this
          ->t('Node not available.'),
      ];
    }
    else {
      $form['types'] = [
        '#type' => 'checkboxes',
        '#title' => $this
          ->t('Content types for deletion'),
        '#options' => $options,
        '#description' => $this
          ->t('All nodes of these types will be deleted using the batch API.'),
      ];
      $form['actions']['#type'] = 'actions';
      $form['submit'] = [
        '#type' => 'submit',
        '#value' => $this
          ->t('Delete'),
        '#button_type' => 'primary',
      ];
    }
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $values = $form_state
      ->getValues();
    $types = array_filter($values['types']);
    if (count($types) > 0) {
      try {
        foreach ($types as $bundle) {
          $result = $this->database
            ->select('node');
          $query = $result
            ->fields('node', [
            'nid',
          ]);
          $query = $result
            ->condition('type', $bundle);
          $query = $result
            ->execute()
            ->fetchAll();
          $last_row = count($query);
          $operations = [];
          if (!empty($last_row)) {
            $message = t('All nodes of type @content mark for deletion', [
              '@content' => $bundle,
            ]);
            \Drupal::logger('bulkdelete')
              ->notice($message);

            // Create batch of 20 nodes.
            $count = 1;
            foreach ($query as $row) {
              $nids[] = $row->nid;
              if ($count % 20 === 0 || $count === $last_row) {
                $operations[] = [
                  [
                    get_class($this),
                    'processBatch',
                  ],
                  [
                    $nids,
                  ],
                ];
                $nids = [];
              }
              ++$count;
            }

            // Set up the Batch API.
            $batch = [
              'operations' => $operations,
              'finished' => [
                get_class($this),
                'bulkDeleteFinishedBatch',
              ],
              'title' => $this
                ->t('Node bulk delete'),
              'init_message' => $this
                ->t('Starting nodes deletion.'),
              'progress_message' => $this
                ->t('Completed @current step of @total.'),
              'error_message' => $this
                ->t('Bulk node deletion has encountered an error.'),
            ];
            batch_set($batch);
          }
        }
      } catch (Exception $e) {
        foreach ($e
          ->getErrors() as $error_message) {
          $this
            ->messenger()
            ->addError($error_message);
        }
      }
    }
  }

  /**
   * Processes the bulk node deletion.
   *
   * @param array $nids
   *   Node nid.
   * @param array $context
   *   The batch context.
   */
  public static function processBatch(array $nids, array &$context) {
    $nodes = Node::loadMultiple($nids);
    foreach ($nodes as $node) {
      $node
        ->delete();
    }
  }

  /**
   * Batch finish function.
   *
   * This function is called by the batch 'finished' parameter.
   * The cache must not be cleared as the last batch operation,
   * but after the batch is finished.
   *
   * @param bool $success
   *   Indicates if the batch was successfully finished.
   * @param array $results
   *   The value of the results item from the context variable used in the batch
   *   processing.
   * @param array $operations
   *   If the success parameter is false then this is a list of the operations
   *   that haven't completed yet.
   */
  public static function bulkDeleteFinishedBatch($success, array $results, array $operations) {
    drupal_flush_all_caches();
    $message = $success ? t('Bulkdelete performed successfully.') : t('Bulkdelete has not been finished successfully.');
    \Drupal::logger('bulkdelete')
      ->notice($message);
    \Drupal::messenger()
      ->addMessage($message);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BulkDeleteForm::$database protected property The database connection.
BulkDeleteForm::buildForm public function @todo, displays last backup timestamp Overrides FormInterface::buildForm
BulkDeleteForm::bulkDeleteFinishedBatch public static function Batch finish function.
BulkDeleteForm::create public static function Instantiates a new instance of this class. Overrides FormBase::create
BulkDeleteForm::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId
BulkDeleteForm::processBatch public static function Processes the bulk node deletion.
BulkDeleteForm::submitForm public function Form submission handler. Overrides FormInterface::submitForm
BulkDeleteForm::__construct public function
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FormBase::$configFactory protected property The config factory. 1
FormBase::$requestStack protected property The request stack. 1
FormBase::$routeMatch protected property The route match.
FormBase::config protected function Retrieves a configuration object.
FormBase::configFactory protected function Gets the config factory for this form. 1
FormBase::container private function Returns the service container.
FormBase::currentUser protected function Gets the current user.
FormBase::getRequest protected function Gets the request object.
FormBase::getRouteMatch protected function Gets the route match.
FormBase::logger protected function Gets the logger for a specific channel.
FormBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
FormBase::resetConfigFactory public function Resets the configuration factory.
FormBase::setConfigFactory public function Sets the config factory for this form.
FormBase::setRequestStack public function Sets the request stack object to use.
FormBase::validateForm public function Form validation handler. Overrides FormInterface::validateForm 62
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.