class LinkitFilter in Linkit 8.5
Provides a Linkit filter.
Plugin annotation
@Filter(
id = "linkit",
title = @Translation("Linkit URL converter"),
description = @Translation("Updates links inserted by Linkit to point to entity URL aliases."),
settings = {
"title" = TRUE,
},
type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_REVERSIBLE
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\filter\Plugin\FilterBase implements FilterInterface
- class \Drupal\linkit\Plugin\Filter\LinkitFilter implements ContainerFactoryPluginInterface
- class \Drupal\filter\Plugin\FilterBase implements FilterInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of LinkitFilter
File
- src/
Plugin/ Filter/ LinkitFilter.php, line 27
Namespace
Drupal\linkit\Plugin\FilterView source
class LinkitFilter extends FilterBase implements ContainerFactoryPluginInterface {
/**
* The entity repository.
*
* @var \Drupal\Core\Entity\EntityRepositoryInterface
*/
protected $entityRepository;
/**
* The substitution manager.
*
* @var \Drupal\linkit\SubstitutionManagerInterface
*/
protected $substitutionManager;
/**
* Constructs a LinkitFilter object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
* The entity repository service.
* @param \Drupal\linkit\SubstitutionManagerInterface $substitution_manager
* The substitution manager.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityRepositoryInterface $entity_repository, SubstitutionManagerInterface $substitution_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityRepository = $entity_repository;
$this->substitutionManager = $substitution_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity.repository'), $container
->get('plugin.manager.linkit.substitution'));
}
/**
* {@inheritdoc}
*/
public function process($text, $langcode) {
$result = new FilterProcessResult($text);
if (strpos($text, 'data-entity-type') !== FALSE && strpos($text, 'data-entity-uuid') !== FALSE) {
$dom = Html::load($text);
$xpath = new \DOMXPath($dom);
foreach ($xpath
->query('//a[@data-entity-type and @data-entity-uuid]') as $element) {
/** @var \DOMElement $element */
try {
// Load the appropriate translation of the linked entity.
$entity_type = $element
->getAttribute('data-entity-type');
$uuid = $element
->getAttribute('data-entity-uuid');
// Skip empty attributes to prevent loading of non-existing
// content type.
if ($entity_type === '' || $uuid === '') {
continue;
}
// Make the substitution optional, for backwards compatibility,
// maintaining the previous hard-coded direct file link assumptions,
// for content created before the substitution feature.
if (!($substitution_type = $element
->getAttribute('data-entity-substitution'))) {
$substitution_type = $entity_type === 'file' ? 'file' : SubstitutionManagerInterface::DEFAULT_SUBSTITUTION;
}
$entity = $this->entityRepository
->loadEntityByUuid($entity_type, $uuid);
if ($entity) {
$entity = $this->entityRepository
->getTranslationFromContext($entity, $langcode);
/** @var \Drupal\Core\GeneratedUrl $url */
$url = $this->substitutionManager
->createInstance($substitution_type)
->getUrl($entity);
// Parse link href as url, extract query and fragment from it.
$href_url = parse_url($element
->getAttribute('href'));
$anchor = empty($href_url["fragment"]) ? '' : '#' . $href_url["fragment"];
$query = empty($href_url["query"]) ? '' : '?' . $href_url["query"];
$element
->setAttribute('href', $url
->getGeneratedUrl() . $query . $anchor);
// Set the appropriate title attribute.
if ($this->settings['title'] && !$element
->getAttribute('title')) {
$access = $entity
->access('view', NULL, TRUE);
if (!$access
->isForbidden()) {
$element
->setAttribute('title', $entity
->label());
}
// Cache the linked entity access for the current user.
$result
->addCacheableDependency($access);
}
// The processed text now depends on:
$result
->addCacheableDependency($url)
->addCacheableDependency($entity);
}
} catch (\Exception $e) {
watchdog_exception('linkit_filter', $e);
}
}
$result
->setProcessedText(Html::serialize($dom));
}
return $result;
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$form['title'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Automatically set the <code>title</code> attribute to that of the (translated) referenced content'),
'#default_value' => $this->settings['title'],
'#attached' => [
'library' => [
'linkit/linkit.filter_html.admin',
],
],
];
return $form;
}
}
Members
Name![]() |
Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
FilterBase:: |
public | property | The name of the provider that owns this filter. | |
FilterBase:: |
public | property | An associative array containing the configured settings of this filter. | |
FilterBase:: |
public | property | A Boolean indicating whether this filter is enabled. | |
FilterBase:: |
public | property | The weight of this filter compared to others in a filter collection. | |
FilterBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
1 |
FilterBase:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurableInterface:: |
|
FilterBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
FilterBase:: |
public | function |
Returns the administrative description for this filter plugin. Overrides FilterInterface:: |
|
FilterBase:: |
public | function |
Returns HTML allowed by this filter's configuration. Overrides FilterInterface:: |
4 |
FilterBase:: |
public | function |
Returns the administrative label for this filter plugin. Overrides FilterInterface:: |
|
FilterBase:: |
public | function |
Returns the processing type of this filter plugin. Overrides FilterInterface:: |
|
FilterBase:: |
public | function |
Prepares the text for processing. Overrides FilterInterface:: |
|
FilterBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
1 |
FilterBase:: |
public | function |
Generates a filter's tip. Overrides FilterInterface:: |
9 |
FilterInterface:: |
constant | HTML tag and attribute restricting filters to prevent XSS attacks. | ||
FilterInterface:: |
constant | Non-HTML markup language filters that generate HTML. | ||
FilterInterface:: |
constant | Irreversible transformation filters. | ||
FilterInterface:: |
constant | Reversible transformation filters. | ||
LinkitFilter:: |
protected | property | The entity repository. | |
LinkitFilter:: |
protected | property | The substitution manager. | |
LinkitFilter:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
LinkitFilter:: |
public | function |
Performs the filter processing. Overrides FilterInterface:: |
|
LinkitFilter:: |
public | function |
Generates a filter's settings form. Overrides FilterBase:: |
|
LinkitFilter:: |
public | function |
Constructs a LinkitFilter object. Overrides FilterBase:: |
|
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |