FileDownloadUrl.php in JSON:API 8
Namespace
Drupal\jsonapi\FieldFile
src/Field/FileDownloadUrl.phpView source
<?php
namespace Drupal\jsonapi\Field;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StreamWrapper\StreamWrapperInterface;
use Drupal\Core\TypedData\ComputedItemListTrait;
/**
* Extends core URL field functionality.
*
* @internal
*/
class FileDownloadUrl extends FieldItemList {
use ComputedItemListTrait;
/**
* Creates a relative URL out of a URI.
*
* This is a wrapper to the procedural code for testing purposes. For obvious
* reasons this method will not be unit tested, but that is fine since it's
* only using already tested Drupal API functions.
*
* @param string $uri
* The URI to transform.
*
* @return string
* The transformed relative URL.
*/
protected function fileCreateRootRelativeUrl($uri) {
$wrapper = \Drupal::service('stream_wrapper_manager')
->getViaUri($uri);
if ($wrapper && $wrapper
->getType() & StreamWrapperInterface::VISIBLE) {
return file_url_transform_relative(file_create_url($uri));
}
// For testing purposes, return the $uri when the scheme is not a wrapper or
// not visible.
return $uri;
}
/**
* {@inheritdoc}
*/
public function access($operation = 'view', AccountInterface $account = NULL, $return_as_object = FALSE) {
return $this
->getEntity()
->get('uri')
->access($operation, $account, $return_as_object);
}
/**
* Initialize the internal field list with the modified items.
*/
protected function computeValue() {
$url_list = [];
foreach ($this
->getEntity()
->get('uri') as $delta => $uri_item) {
$path = $this
->fileCreateRootRelativeUrl($uri_item->value);
$url_list[$delta] = $this
->createItem($delta, $path);
}
$this->list = $url_list;
}
}
Classes
Name![]() |
Description |
---|---|
FileDownloadUrl | Extends core URL field functionality. |