class UrlShortener in Shorten URLs 8
Same name and namespace in other branches
- 8.2 modules/shortener/src/Plugin/Filter/UrlShortener.php \Drupal\shortener\Plugin\Filter\UrlShortener
Provides a filter to limit allowed HTML tags.
Plugin annotation
@Filter(
id = "url_shortener",
title = @Translation("URL shortener"),
description = @Translation("Replaces URLs with a shortened version."),
type = Drupal\filter\Plugin\FilterInterface::TYPE_MARKUP_LANGUAGE,
settings = {
"shortener_url_behavior" = "short",
"shortener_url_length" = 72
},
weight = -20
)
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\shortener\Plugin\Filter\UrlShortener
- class \Drupal\filter\Plugin\FilterBase implements FilterInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of UrlShortener
File
- modules/
shortener/ src/ Plugin/ Filter/ UrlShortener.php, line 31 - Contains \Drupal\shortener\Plugin\Filter\UrlShortener.
Namespace
Drupal\shortener\Plugin\FilterView source
class UrlShortener extends FilterBase {
/**
* Builds the settings form for the input filter.
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$form['shortener_url_behavior'] = array(
'#type' => 'radios',
'#title' => t('Behavior'),
'#default_value' => $this->settings['shortener_url_behavior'],
'#options' => array(
'short' => t('Display the shortened URL by default, and add an "(expand)"/"(shorten)" link'),
'strict' => t('Display the shortened URL by default, and do not allow expanding it'),
'long' => t('Display the full URL by default, and add a "(shorten)"/"(expand)" link'),
),
);
$form['shortener_url_length'] = array(
'#type' => 'textfield',
'#title' => t('Maximum link text length'),
'#default_value' => $this->settings['shortener_url_length'],
'#maxlength' => 4,
'#description' => t('URLs longer than this number of characters will be truncated to prevent long strings that break formatting. The link itself will be retained; just the text portion of the link will be truncated.'),
);
return $form;
}
/**
* {@inheritdocs}
*/
public function process($text, $langcode) {
$length = $this->settings['shortener_url_length'];
// Pass length to regexp callback.
_filter_url_trim('', $length);
// Pass behavior to regexp callback.
$this
->_shortener_url_behavior(NULL, FALSE, $this->settings['shortener_url_behavior'], $length);
$text = ' ' . $text . ' ';
// Match absolute URLs.
$text = preg_replace_callback("`(<p>|<li>|<br\\s*/?>|[ \n\r\t\\(])((http://|https://)([a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+*~#&=/;-]))([.,?!]*?)(?=(</p>|</li>|<br\\s*/?>|[ \n\r\t\\)]))`i", array(
get_class($this),
'_shortener_url_behavior',
), $text);
// Match www domains/addresses.
$text = preg_replace_callback("`(<p>|<li>|[ \n\r\t\\(])(www\\.[a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+~#\\&=/;-])([.,?!]*?)(?=(</p>|</li>|<br\\s*/?>|[ \n\r\t\\)]))`i", array(
get_class($this),
'_shortener_url_parse_partial_links',
), $text);
$text = substr($text, 1, -1);
// return new FilterProcessResult($text);
$result = new FilterProcessResult($text);
$result
->setAttachments(array(
'library' => array(
'shortener/shortener',
),
));
return $result;
}
/**
* Processes matches on partial URLs and returns the "fixed" version.
*/
function _shortener_url_parse_partial_links($match) {
return _shortener_url_behavior($match, TRUE);
}
/**
* Determines the link caption based on the filter behavior setting.
*/
function _shortener_url_behavior($match, $partial = FALSE, $behavior = NULL, $max_length = NULL) {
static $_behavior;
if ($behavior !== NULL) {
$_behavior = $behavior;
}
static $_max_length;
if ($max_length !== NULL) {
$_max_length = $max_length;
}
if (!empty($match)) {
$match[2] = \Drupal\Component\Utility\Html::decodeEntities($match[2]);
$caption = '';
$href = $match[2];
$title = check_url($match[2]);
if ($_behavior == 'short' || $_behavior == 'strict') {
$caption = shorten_url($match[2]);
$href = $caption;
}
else {
$caption = \Drupal\Component\Utility\Html::escape(_filter_url_trim($match[2]));
if ($partial) {
$href = 'http://' . check_url($match[2]);
}
$title = shorten_url($match[2]);
}
return $match[1] . '<a href="' . $href . '" title="' . $title . '" class="shortener-length-' . $_max_length . ' shortener-link shortener-' . $_behavior . '">' . $caption . '</a>' . $match[$partial ? 3 : 5];
}
return '';
}
}
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 |
FilterBase:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase:: |
4 |
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. | ||
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. | |
UrlShortener:: |
public | function |
{@inheritdocs} Overrides FilterInterface:: |
|
UrlShortener:: |
public | function |
Builds the settings form for the input filter. Overrides FilterBase:: |
|
UrlShortener:: |
function | Determines the link caption based on the filter behavior setting. | ||
UrlShortener:: |
function | Processes matches on partial URLs and returns the "fixed" version. |