Perform periodic fixity checks on selected files.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
2.1 KiB

<?php
namespace Drupal\dgi_fixity\Routing;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\ParamConverter\EntityConverter;
use Drupal\dgi_fixity\FixityCheckServiceInterface;
use Symfony\Component\Routing\Route;
/**
* Converts an entity identifier into fixity_check entity.
*/
class FixityCheckConverter extends EntityConverter {
/**
* The fixity service.
*
* @var \Drupal\dgi_fixity\FixityCheckServiceInterface
*/
protected $fixity;
/**
* Construct a new FixityCheckConverter.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
* The entity repository.
* @param \Drupal\dgi_fixity\FixityCheckServiceInterface $fixity
* The fixity service.
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityRepositoryInterface $entity_repository, FixityCheckServiceInterface $fixity) {
parent::__construct($entity_type_manager, $entity_repository);
$this->fixity = $fixity;
}
/**
* {@inheritdoc}
*/
public function convert($value, $definition, $name, array $defaults) {
/** @var \Drupal\Core\Entity\EntityInterface $entity */
$entity = parent::convert($value, $definition, $name, $defaults);
return $this->fixity->fromEntity($entity);
}
/**
* {@inheritdoc}
*/
public function applies($definition, $name, Route $route) {
$supported_entity_types = $this->fixity->fromEntityTypes();
if (!empty($definition['type']) && strpos($definition['type'], 'fixity:') === 0) {
$entity_type_id = substr($definition['type'], strlen('fixity:'));
if (strpos($definition['type'], '{') !== FALSE) {
$entity_type_slug = substr($entity_type_id, 1, -1);
if ($name != $entity_type_slug && in_array($entity_type_slug, $route->compile()->getVariables(), TRUE)) {
return in_array($entity_type_slug, $supported_entity_types);
}
}
return in_array($entity_type_id, $supported_entity_types);
}
return FALSE;
}
}