Updated to Drupal 8.6.4, which is PHP 7.3 friendly. Also updated HTMLaw library....
[yaffs-website] / web / core / lib / Drupal / Core / ParamConverter / EntityRevisionParamConverter.php
1 <?php
2
3 namespace Drupal\Core\ParamConverter;
4
5 use Drupal\Core\Entity\EntityRepositoryInterface;
6 use Drupal\Core\Entity\EntityTypeManagerInterface;
7 use Symfony\Component\Routing\Route;
8
9 /**
10  * Parameter converter for upcasting entity revision IDs to full objects.
11  *
12  * This is useful for pages which want to show a specific revision, like
13  * "/entity_example/{entity_example}/revision/{entity_example_revision}".
14  *
15  *
16  * In order to use it you should specify some additional options in your route:
17  * @code
18  * example.route:
19  *   path: /foo/{entity_example_revision}
20  *   options:
21  *     parameters:
22  *       entity_example_revision:
23  *         type: entity_revision:entity_example
24  * @endcode
25  */
26 class EntityRevisionParamConverter implements ParamConverterInterface {
27
28   /**
29    * The entity type manager.
30    *
31    * @var \Drupal\Core\Entity\EntityTypeManagerInterface
32    */
33   protected $entityTypeManager;
34
35   /**
36    * The entity repository.
37    *
38    * @var \Drupal\Core\Entity\EntityRepositoryInterface
39    */
40   protected $entityRepository;
41
42   /**
43    * Creates a new EntityRevisionParamConverter instance.
44    *
45    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
46    *   The entity type manager.
47    * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
48    *   The entity repository.
49    */
50   public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityRepositoryInterface $entity_repository) {
51     $this->entityTypeManager = $entity_type_manager;
52     $this->entityRepository = $entity_repository;
53   }
54
55   /**
56    * {@inheritdoc}
57    */
58   public function convert($value, $definition, $name, array $defaults) {
59     list (, $entity_type_id) = explode(':', $definition['type'], 2);
60     $entity = $this->entityTypeManager->getStorage($entity_type_id)->loadRevision($value);
61     return $this->entityRepository->getTranslationFromContext($entity);
62   }
63
64   /**
65    * {@inheritdoc}
66    */
67   public function applies($definition, $name, Route $route) {
68     return isset($definition['type']) && strpos($definition['type'], 'entity_revision:') !== FALSE;
69   }
70
71 }