Unverified Commit 68c0fd81 authored by alexpott's avatar alexpott

Issue #2922487 by Wim Leers, Jo Fitzgerald, Berdir, tedbow, borisson_,...

Issue #2922487 by Wim Leers, Jo Fitzgerald, Berdir, tedbow, borisson_, dawehner, alexpott: Follow-up for #2910211: fix all deprecation warnings
parent 887e1dcd
......@@ -179,17 +179,25 @@ public function denormalize($data, $class, $format = NULL, array $context = [])
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* The entity.
* @param array $context
* Normalization/serialization context.
*
* @return string
* The entity URI.
*/
protected function getEntityUri(EntityInterface $entity) {
protected function getEntityUri(EntityInterface $entity, array $context = []) {
// Some entity types don't provide a canonical link template, at least call
// out to ->url().
if ($entity->isNew() || !$entity->hasLinkTemplate('canonical')) {
return $entity->url('canonical', []);
}
$url = $entity->urlInfo('canonical', ['absolute' => TRUE]);
return $url->setRouteParameter('_format', 'hal_json')->toString();
$url = $entity->toUrl('canonical', ['absolute' => TRUE]);
if (!$url->isExternal()) {
$url->setRouteParameter('_format', 'hal_json');
}
$generated_url = $url->toString(TRUE);
$this->addCacheableDependency($context, $generated_url);
return $generated_url->getGeneratedUrl();
}
/**
......
......@@ -3,8 +3,10 @@
namespace Drupal\hal\Normalizer;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\file\FileInterface;
use Drupal\hal\LinkManager\LinkManagerInterface;
/**
......@@ -69,4 +71,19 @@ public function normalize($entity, $format = NULL, array $context = []) {
return $data;
}
/**
* {@inheritdoc}
*/
protected function getEntityUri(EntityInterface $entity, array $context = []) {
assert($entity instanceof FileInterface);
// https://www.drupal.org/project/drupal/issues/2277705 introduced a hack
// in \Drupal\file\Entity\File::url(), but EntityInterface::url() was
// deprecated in favor of ::toUrl(). The parent implementation now calls
// ::toUrl(), but this normalizer (for File entities) needs to override that
// back to the old behavior because it relies on said hack, not just to
// generate the value for the 'uri' field of a file (see ::normalize()), but
// also for the HAL normalization's '_links' value.
return file_create_url($entity->getFileUri());
}
}
......@@ -55,8 +55,14 @@ public function normalize($field_item, $format = NULL, array $context = []) {
// Add a 'url' value if there is a reference and a canonical URL. Hard
// code 'canonical' here as config entities override the default $rel
// parameter value to 'edit-form.
if ($url = $entity->url('canonical')) {
$values['url'] = $url;
if ($entity->hasLinkTemplate('canonical') && $url = $entity->toUrl('canonical')->toString(TRUE)) {
$this->addCacheableDependency($context, $url);
$values['url'] = $url->getGeneratedUrl();
}
// @todo Remove in https://www.drupal.org/project/drupal/issues/2925520
// @see \Drupal\hal\Normalizer\FileEntityNormalizer
elseif ($entity->getEntityTypeId() === 'file') {
$values['url'] = file_create_url($entity->getFileUri());
}
}
......
......@@ -4,6 +4,7 @@
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\GeneratedUrl;
use Drupal\Core\TypedData\Type\IntegerInterface;
use Drupal\Core\TypedData\TypedDataInterface;
use Drupal\Core\Entity\EntityRepositoryInterface;
......@@ -11,6 +12,7 @@
use Drupal\Core\Field\FieldItemInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
use Drupal\Core\Url;
use Drupal\locale\StringInterface;
use Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer;
use Drupal\Tests\UnitTestCase;
......@@ -106,9 +108,17 @@ public function testSupportsDenormalization() {
public function testNormalize() {
$test_url = '/test/100';
$generated_url = (new GeneratedUrl())->setGeneratedUrl($test_url);
$url = $this->prophesize(Url::class);
$url->toString(TRUE)
->willReturn($generated_url);
$entity = $this->prophesize(EntityInterface::class);
$entity->url('canonical')
->willReturn($test_url)
$entity->hasLinkTemplate('canonical')
->willReturn(TRUE);
$entity->toUrl('canonical')
->willReturn($url)
->shouldBeCalled();
$entity->uuid()
->willReturn('080e3add-f9d5-41ac-9821-eea55b7b42fb')
......
......@@ -125,7 +125,6 @@ public static function getSkippedDeprecations() {
'CommentType is deprecated in Drupal 8.4.x and will be removed before Drupal 9.0.x. Use \Drupal\node\Plugin\migrate\source\d7\NodeType instead.',
'CommentVariablePerCommentType is deprecated in Drupal 8.4.x and will be removed before Drupal 9.0.x. Use \Drupal\node\Plugin\migrate\source\d6\NodeType instead.',
'The Drupal\migrate_drupal\Plugin\migrate\source\d6\i18nVariable is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead, use Drupal\migrate_drupal\Plugin\migrate\source\d6\VariableTranslation',
'Implicit cacheability metadata bubbling (onto the global render context) in normalizers is deprecated since Drupal 8.5.0 and will be removed in Drupal 9.0.0. Use the "cacheability" serialization context instead, for explicit cacheability metadata bubbling. See https://www.drupal.org/node/2918937',
'Adding or retrieving messages prior to the container being initialized was deprecated in Drupal 8.5.0 and this functionality will be removed before Drupal 9.0.0. Please report this usage at https://www.drupal.org/node/2928994.',
'The "serializer.normalizer.file_entity.hal" normalizer service is deprecated: it is obsolete, it only remains available for backwards compatibility.',
'The Symfony\Component\ClassLoader\ApcClassLoader class is deprecated since Symfony 3.3 and will be removed in 4.0. Use `composer install --apcu-autoloader` instead.',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment