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.
69 lines
1.9 KiB
69 lines
1.9 KiB
<?php |
|
|
|
namespace Drupal\islandora\EventSubscriber; |
|
|
|
use Drupal\node\NodeInterface; |
|
use Symfony\Component\HttpKernel\Event\FilterResponseEvent; |
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface; |
|
|
|
/** |
|
* Class NodeLinkHeaderSubscriber. |
|
* |
|
* @package Drupal\islandora\EventSubscriber |
|
*/ |
|
class NodeLinkHeaderSubscriber extends LinkHeaderSubscriber implements EventSubscriberInterface { |
|
|
|
/** |
|
* Adds node-specific link headers to appropriate responses. |
|
* |
|
* @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event |
|
* Event containing the response. |
|
*/ |
|
public function onResponse(FilterResponseEvent $event) { |
|
$response = $event->getResponse(); |
|
|
|
$node = $this->getObject($response, 'node'); |
|
|
|
if ($node === FALSE) { |
|
return; |
|
} |
|
|
|
$links = array_merge( |
|
$this->generateEntityReferenceLinks($node), |
|
$this->generateRelatedMediaLinks($node), |
|
$this->generateRestLinks($node) |
|
); |
|
|
|
// Add the link headers to the response. |
|
if (empty($links)) { |
|
return; |
|
} |
|
|
|
$response->headers->set('Link', $links, FALSE); |
|
} |
|
|
|
/** |
|
* Generates link headers for media associated with a node. |
|
*/ |
|
protected function generateRelatedMediaLinks(NodeInterface $node) { |
|
$links = []; |
|
foreach ($this->utils->getMedia($node) as $media) { |
|
$url = $this->utils->getEntityUrl($media); |
|
foreach ($media->referencedEntities() as $term) { |
|
if ($term->getEntityTypeId() == 'taxonomy_term' && $term->hasField('field_external_uri')) { |
|
$field = $term->get('field_external_uri'); |
|
if (!$field->isEmpty()) { |
|
$link = $field->first()->getValue(); |
|
$uri = $link['uri']; |
|
if (strpos($uri, 'http://pcdm.org/use#') === 0) { |
|
$title = $term->label(); |
|
$links[] = "<$url>; rel=\"related\"; title=\"$title\""; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return $links; |
|
} |
|
|
|
}
|
|
|