You are here

class ContentHubImportQueue in Acquia Content Hub 8

Same name in this branch
  1. 8 src/Controller/ContentHubImportQueue.php \Drupal\acquia_contenthub\Controller\ContentHubImportQueue
  2. 8 src/Plugin/QueueWorker/ContentHubImportQueue.php \Drupal\acquia_contenthub\Plugin\QueueWorker\ContentHubImportQueue

Implements an Import Queue for entities.

@package Drupal\acquia_contenthub\Controller

Hierarchy

Expanded class hierarchy of ContentHubImportQueue

File

src/Controller/ContentHubImportQueue.php, line 18

Namespace

Drupal\acquia_contenthub\Controller
View source
class ContentHubImportQueue extends ControllerBase {

  /**
   * Queue Factory.
   *
   * @var \Drupal\Core\Queue\QueueFactory
   */
  protected $queueFactory;

  /**
   * Config Factory Interface.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $config;

  /**
   * {@inheritdoc}
   */
  public function __construct(ConfigFactoryInterface $config_factory, QueueFactory $queue_factory) {
    $this->config = $config_factory;
    $this->queueFactory = $queue_factory;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('config.factory'), $container
      ->get('queue'));
  }

  /**
   * Handle the route to create a batch process.
   */
  public function process() {
    $config = $this
      ->config('acquia_contenthub.entity_config');
    $queue = $this->queueFactory
      ->get('acquia_contenthub_import_queue');
    if ($queue
      ->numberOfItems() < 1) {
      $this
        ->messenger()
        ->addStatus('No items to process.');
      $this
        ->redirect('acquia_contenthub.import_queue');
    }
    $batch = [
      'title' => $this
        ->t('Process all remaining entities'),
      'operations' => [],
      'finished' => [
        self::class,
        'batchFinished',
      ],
    ];

    // Define a default value for batch_size in case it is not defined.
    $batch_size = $config
      ->get('import_queue_batch_size');
    $batch_size = !empty($batch_size) && is_numeric($batch_size) ? $batch_size : 1;

    // Batch operations.
    for ($i = 0; ceil($i < $queue
      ->numberOfItems() / $batch_size); $i++) {
      $batch['operations'][] = [
        [
          self::class,
          'batchProcess',
        ],
        [
          $config,
        ],
      ];
    }
    batch_set($batch);
    return batch_process('/admin/config/services/acquia-contenthub/import-queue');
  }

  /**
   * Process the batch.
   *
   * The batch worker will run through the queued items and process them
   * according to their queue method.
   *
   * @param \Drupal\Core\Config\ImmutableConfig $config
   *   The import configuration.
   * @param mixed $context
   *   The batch context.
   */
  public static function batchProcess(ImmutableConfig $config, &$context) {

    /** @var \Drupal\Core\Queue\QueueFactory $queue_factory */
    $queue_factory = \Drupal::service('queue');

    /** @var \Drupal\Core\Queue\QueueWorkerManagerInterface $queue_manager */
    $queue_manager = \Drupal::service('plugin.manager.queue_worker');
    $queue = $queue_factory
      ->get('acquia_contenthub_import_queue');
    $worker = $queue_manager
      ->createInstance('acquia_contenthub_import_queue');
    $queue_batch_size = $config
      ->get('import_queue_batch_size');
    $batch_size = $queue_batch_size === 'all' || $queue
      ->numberOfItems() < $queue_batch_size ? $queue
      ->numberOfItems() : $queue_batch_size;
    for ($i = 0; $i < $batch_size; $i++) {
      if ($item = $queue
        ->claimItem()) {
        try {
          $worker
            ->processItem($item->data);
          $queue
            ->deleteItem($item);
        } catch (SuspendQueueException $exception) {
          $context['errors'][] = $exception
            ->getMessage();
          $context['success'] = FALSE;
          $queue
            ->releaseItem($item);
          break;
        } catch (EntityStorageException $exception) {
          $context['errors'][] = $exception
            ->getMessage();
          $context['success'] = FALSE;
          $queue
            ->releaseItem($item);
          break;
        }
      }
    }
  }

  /**
   * Batch finish callback.
   *
   * This will inspect the results of the batch and will display a message to
   * indicate how the batch process ended.
   *
   * @param bool $success
   *   The result of batch process.
   * @param array $result
   *   The result of $context.
   * @param array $operations
   *   The operations that were run.
   */
  public static function batchFinished($success, array $result, array $operations) {
    if ($success) {
      \Drupal::messenger()
        ->addStatus(t("Processed all Content Hub entities."));
      return;
    }
    $error_operation = reset($operations);
    \Drupal::messenger()
      ->addStatus(t('An error occurred while processing @operation with arguments : @args', [
      '@operation' => $error_operation[0],
      '@args' => print_r($error_operation[0], TRUE),
    ]));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ContentHubImportQueue::$config protected property Config Factory Interface.
ContentHubImportQueue::$queueFactory protected property Queue Factory.
ContentHubImportQueue::batchFinished public static function Batch finish callback.
ContentHubImportQueue::batchProcess public static function Process the batch.
ContentHubImportQueue::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
ContentHubImportQueue::process public function Handle the route to create a batch process.
ContentHubImportQueue::__construct public function
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityManager protected property The entity manager.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityManager Deprecated protected function Retrieves the entity manager service.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
ControllerBase::state protected function Returns the state storage service.
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.