You are here

class UrlShortener in Shorten URLs 8

Same name and namespace in other branches
  1. 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

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\Filter
View 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

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FilterBase::$provider public property The name of the provider that owns this filter.
FilterBase::$settings public property An associative array containing the configured settings of this filter.
FilterBase::$status public property A Boolean indicating whether this filter is enabled.
FilterBase::$weight public property The weight of this filter compared to others in a filter collection.
FilterBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies 1
FilterBase::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConfigurableInterface::defaultConfiguration
FilterBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
FilterBase::getDescription public function Returns the administrative description for this filter plugin. Overrides FilterInterface::getDescription
FilterBase::getHTMLRestrictions public function Returns HTML allowed by this filter's configuration. Overrides FilterInterface::getHTMLRestrictions 4
FilterBase::getLabel public function Returns the administrative label for this filter plugin. Overrides FilterInterface::getLabel
FilterBase::getType public function Returns the processing type of this filter plugin. Overrides FilterInterface::getType
FilterBase::prepare public function Prepares the text for processing. Overrides FilterInterface::prepare
FilterBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration 1
FilterBase::tips public function Generates a filter's tip. Overrides FilterInterface::tips 9
FilterBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct 4
FilterInterface::TYPE_HTML_RESTRICTOR constant HTML tag and attribute restricting filters to prevent XSS attacks.
FilterInterface::TYPE_MARKUP_LANGUAGE constant Non-HTML markup language filters that generate HTML.
FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE constant Irreversible transformation filters.
FilterInterface::TYPE_TRANSFORM_REVERSIBLE constant Reversible transformation filters.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlShortener::process public function {@inheritdocs} Overrides FilterInterface::process
UrlShortener::settingsForm public function Builds the settings form for the input filter. Overrides FilterBase::settingsForm
UrlShortener::_shortener_url_behavior function Determines the link caption based on the filter behavior setting.
UrlShortener::_shortener_url_parse_partial_links function Processes matches on partial URLs and returns the "fixed" version.