Skip to content
Snippets Groups Projects

Add changes from earlier branch to 10.4.x, rebase onto 11.x

Closed Björn Brala requested to merge issue/drupal-3100732:3100732-fresh-branch into 11.x
Compare and
10 files
+ 583
5
Compare changes
  • Side-by-side
  • Inline
Files
10
@@ -31,6 +31,7 @@
use Drupal\jsonapi\Context\FieldResolver;
use Drupal\jsonapi\Entity\EntityValidationTrait;
use Drupal\jsonapi\Access\TemporaryQueryGuard;
use Drupal\jsonapi\Events\CollectRelationshipMetaEvent;
use Drupal\jsonapi\Exception\EntityAccessDeniedHttpException;
use Drupal\jsonapi\IncludeResolver;
use Drupal\jsonapi\JsonApiResource\IncludedData;
@@ -52,6 +53,7 @@
use Drupal\jsonapi\ResourceType\ResourceTypeField;
use Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface;
use Drupal\jsonapi\Revisions\ResourceVersionRouteEnhancer;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Drupal\Core\Http\Exception\CacheableBadRequestHttpException;
@@ -151,6 +153,13 @@ class EntityResource {
*/
protected $user;
/**
* The event dispatcher.
*
* @var \Symfony\Component\EventDispatcher\EventDispatcherInterface
*/
protected EventDispatcherInterface $eventDispatcher;
/**
* Instantiates an EntityResource object.
*
@@ -176,8 +185,10 @@ class EntityResource {
* The time service.
* @param \Drupal\Core\Session\AccountInterface $user
* The current user account.
* @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
* The event dispatcher.
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $field_manager, ResourceTypeRepositoryInterface $resource_type_repository, RendererInterface $renderer, EntityRepositoryInterface $entity_repository, IncludeResolver $include_resolver, EntityAccessChecker $entity_access_checker, FieldResolver $field_resolver, SerializerInterface $serializer, TimeInterface $time, AccountInterface $user) {
public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $field_manager, ResourceTypeRepositoryInterface $resource_type_repository, RendererInterface $renderer, EntityRepositoryInterface $entity_repository, IncludeResolver $include_resolver, EntityAccessChecker $entity_access_checker, FieldResolver $field_resolver, SerializerInterface $serializer, TimeInterface $time, AccountInterface $user, ?EventDispatcherInterface $event_dispatcher = NULL) {
$this->entityTypeManager = $entity_type_manager;
$this->fieldManager = $field_manager;
$this->resourceTypeRepository = $resource_type_repository;
@@ -189,6 +200,12 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager, Ent
$this->serializer = $serializer;
$this->time = $time;
$this->user = $user;
if (!isset($event_dispatcher)) {
@trigger_error('Calling ' . __METHOD__ . '() without the $event_dispatcher argument is deprecated in drupal:11.2.0 and will be required in drupal:12.0.0. See https://www.drupal.org/node/3280569', E_USER_DEPRECATED);
$event_dispatcher = \Drupal::service('event_dispatcher');
}
$this->eventDispatcher = $event_dispatcher;
}
/**
@@ -585,12 +602,20 @@ public function getRelationship(ResourceType $resource_type, FieldableEntityInte
// Access will have already been checked by the RelationshipRouteAccessCheck
// service, so we don't need to call ::getAccessCheckedResourceObject().
$resource_object = ResourceObject::createFromEntity($resource_type, $entity);
$relationship = Relationship::createFromEntityReferenceField($resource_object, $field_list);
$collect_meta_event = new CollectRelationshipMetaEvent($resource_object, $related);
$this->eventDispatcher->dispatch($collect_meta_event);
$relationship = Relationship::createFromEntityReferenceField(context: $resource_object, field: $field_list, meta: $collect_meta_event->getMeta());
$response = $this->buildWrappedResponse($relationship, $request, $this->getIncludes($request, $resource_object), $response_code);
// Add the host entity as a cacheable dependency.
if ($response instanceof CacheableResponseInterface) {
$response->addCacheableDependency($entity);
// Cacheability from the classes subscribed to CollectRelationshipMetaEvent is added to the response.
$response->addCacheableDependency($collect_meta_event);
}
return $response;
}
Loading