Browse Source

Merge pull request #14 from chrismacdonaldw/BCIR-239

BCIR-239: Process fixity as user 1
pull/18/head v1.2.0
Noel Chiasson 11 months ago committed by GitHub
parent
commit
d4e009411e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 66
      src/Plugin/QueueWorker/ProcessSourceWorker.php

66
src/Plugin/QueueWorker/ProcessSourceWorker.php

@ -2,9 +2,12 @@
namespace Drupal\dgi_fixity\Plugin\QueueWorker; namespace Drupal\dgi_fixity\Plugin\QueueWorker;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Queue\QueueWorkerBase; use Drupal\Core\Queue\QueueWorkerBase;
use Drupal\Core\Queue\RequeueException; use Drupal\Core\Queue\RequeueException;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Session\AccountSwitcherInterface;
use Drupal\dgi_fixity\FixityCheckServiceInterface; use Drupal\dgi_fixity\FixityCheckServiceInterface;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
@ -26,6 +29,20 @@ class ProcessSourceWorker extends QueueWorkerBase implements ContainerFactoryPlu
*/ */
protected $fixity; protected $fixity;
/**
* The account switcher service.
*
* @var \Drupal\Core\Session\AccountSwitcherInterface
*/
protected $accountSwitcher;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/** /**
* Constructs a new FixityCheckWorker instance. * Constructs a new FixityCheckWorker instance.
* *
@ -37,10 +54,16 @@ class ProcessSourceWorker extends QueueWorkerBase implements ContainerFactoryPlu
* The plugin implementation definition. * The plugin implementation definition.
* @param \Drupal\dgi_fixity\FixityCheckServiceInterface $fixity * @param \Drupal\dgi_fixity\FixityCheckServiceInterface $fixity
* The fixity check service. * The fixity check service.
* @param \Drupal\Core\Session\AccountSwitcherInterface $account_switcher
* The account switcher service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/ */
public function __construct(array $configuration, $plugin_id, $plugin_definition, FixityCheckServiceInterface $fixity) { public function __construct(array $configuration, $plugin_id, $plugin_definition, FixityCheckServiceInterface $fixity, AccountSwitcherInterface $account_switcher, EntityTypeManagerInterface $entity_type_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition); parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->fixity = $fixity; $this->fixity = $fixity;
$this->accountSwitcher = $account_switcher;
$this->entityTypeManager = $entity_type_manager;
} }
/** /**
@ -52,6 +75,8 @@ class ProcessSourceWorker extends QueueWorkerBase implements ContainerFactoryPlu
$plugin_id, $plugin_id,
$plugin_definition, $plugin_definition,
$container->get('dgi_fixity.fixity_check'), $container->get('dgi_fixity.fixity_check'),
$container->get('account_switcher'),
$container->get('entity_type.manager'),
); );
} }
@ -59,20 +84,31 @@ class ProcessSourceWorker extends QueueWorkerBase implements ContainerFactoryPlu
* {@inheritdoc} * {@inheritdoc}
*/ */
public function processItem($data) { public function processItem($data) {
/** @var \Drupal\dgi_fixity\FixityCheckServiceInterface $fixity */ // To avoid expensive access calls.
$fixity = \Drupal::service('dgi_fixity.fixity_check'); $user_storage = $this->entityTypeManager->getStorage('user');
$view = $fixity->source($data, 1000); $account = $user_storage->load(1);
$view->execute();
// Only processes those which have not already enabled periodic checks. if ($account instanceof AccountInterface) {
foreach ($view->result as $row) { $this->accountSwitcher->switchTo($account);
/** @var \Drupal\dgi_fixity\FixityCheckInterface $check */
$check = $view->field['periodic']->getEntity($row); /** @var \Drupal\dgi_fixity\FixityCheckServiceInterface $fixity */
$check->setPeriodic(TRUE); $fixity = \Drupal::service('dgi_fixity.fixity_check');
$check->save(); $view = $fixity->source($data, 1000);
} $view->execute();
// Not finished processing. // Only processes those which have not already enabled periodic checks.
if (count($view->result) !== 0) { foreach ($view->result as $row) {
throw new RequeueException(); /** @var \Drupal\dgi_fixity\FixityCheckInterface $check */
$check = $view->field['periodic']->getEntity($row);
$check->setPeriodic(TRUE);
$check->save();
}
// Not finished processing.
if (count($view->result) !== 0) {
$this->accountSwitcher->switchBack();
throw new RequeueException();
}
$this->accountSwitcher->switchBack();
} }
} }

Loading…
Cancel
Save