acquia_dam-1.0.0-rc1/src/Plugin/Field/FieldFormatter/ExpiryDateWarningFormatter.php
src/Plugin/Field/FieldFormatter/ExpiryDateWarningFormatter.php
<?php
declare(strict_types=1);
namespace Drupal\acquia_dam\Plugin\Field\FieldFormatter;
use Drupal\acquia_dam\Entity\MediaExpiryDateField;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FormatterBase;
use Drupal\Core\Field\Plugin\Field\FieldType\TimestampItem;
use Drupal\Core\Render\Markup;
use Drupal\Core\TypedData\Plugin\DataType\Timestamp;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Field formatter to render warning for expired assets.
*
* @FieldFormatter(
* id = "acquia_dam_expry_date_warning",
* label = @Translation("Expiration date warning"),
* field_types = {
* "timestamp"
* }
* )
*/
final class ExpiryDateWarningFormatter extends FormatterBase {
/**
* The time.
*
* @var \Drupal\Component\Datetime\TimeInterface
*/
private $time;
/**
* The module list service.
*
* @var \Drupal\Core\Extension\ModuleExtensionList
*/
private $moduleList;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
$instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
$instance->time = $container->get('datetime.time');
$instance->moduleList = $container->get('extension.list.module');
return $instance;
}
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = [];
if ($items->isEmpty()) {
return $elements;
}
$value = $items->first();
assert($value instanceof TimestampItem);
$value = $value->get('value');
assert($value instanceof Timestamp);
$elements['#attached']['library'][] = 'acquia_dam/acquia_dam.expired_assets';
$now = (new \DateTime())->setTimestamp($this->time->getRequestTime());
$expiration = (new \DateTime())->setTimestamp($value->getCastedValue());
if ($now >= $expiration) {
$svg = file_get_contents($this->moduleList->getPath('acquia_dam') . '/images/alert-triangle.svg');
$elements[0] = [
'#type' => 'inline_template',
'#template' => '<div class="acquia-dam-expired-asset-container"><div class="acquia-dam-expired-asset">{{ svg }}<div class="acquia-dam-asset-expired__popper">{{ description }}<div class="acquia-dam-asset-expired__arrow" data-popper-arrow></div></div></div><span class="acquia-dam-asset-expired__label">{{ label }}</span></div>',
'#context' => [
'label' => $this->t('Expired media'),
'description' => $this->t('Expired media is not visible to content viewers, replace the media.'),
'svg' => Markup::create($svg),
],
];
}
return $elements;
}
/**
* {@inheritdoc}
*/
public static function isApplicable(FieldDefinitionInterface $field_definition) {
return $field_definition->getName() === MediaExpiryDateField::EXPIRY_DATE_FIELD_NAME;
}
}
