You are here

class FileMatcher in Linkit 8.5

Same name and namespace in other branches
  1. 8.4 src/Plugin/Linkit/Matcher/FileMatcher.php \Drupal\linkit\Plugin\Linkit\Matcher\FileMatcher

Provides specific linkit matchers for the file entity type.

Plugin annotation


@Matcher(
  id = "entity:file",
  label = @Translation("File"),
  target_entity = "file",
  provider = "file"
)

Hierarchy

Expanded class hierarchy of FileMatcher

File

src/Plugin/Linkit/Matcher/FileMatcher.php, line 20

Namespace

Drupal\linkit\Plugin\Linkit\Matcher
View source
class FileMatcher extends EntityMatcher {

  /**
   * {@inheritdoc}
   */
  public function getSummary() {
    $summary = parent::getSummary();
    if (!empty($this->configuration['file_extensions'])) {
      $summary[] = $this
        ->t('Limit matches to the following file extensions: @file_extensions', [
        '@file_extensions' => str_replace(' ', ', ', $this->configuration['file_extensions']),
      ]);
    }
    $summary[] = $this
      ->t('Show image dimensions: @show_image_dimensions', [
      '@show_image_dimensions' => $this->configuration['images']['show_dimensions'] ? $this
        ->t('Yes') : $this
        ->t('No'),
    ]);
    $summary[] = $this
      ->t('Show image thumbnail: @show_image_thumbnail', [
      '@show_image_thumbnail' => $this->configuration['images']['show_thumbnail'] ? $this
        ->t('Yes') : $this
        ->t('No'),
    ]);
    if ($this->moduleHandler
      ->moduleExists('image') && $this->configuration['images']['show_thumbnail']) {
      $image_style = ImageStyle::load($this->configuration['images']['thumbnail_image_style']);
      if (!is_null($image_style)) {
        $summary[] = $this
          ->t('Thumbnail style: @thumbnail_style', [
          '@thumbnail_style' => $image_style
            ->label(),
        ]);
      }
    }
    return $summary;
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      'file_extensions' => '',
      'file_status' => FILE_STATUS_PERMANENT,
      'images' => [
        'show_dimensions' => FALSE,
        'show_thumbnail' => FALSE,
        'thumbnail_image_style' => 'linkit_result_thumbnail',
      ],
      'substitution_type' => 'file',
    ] + parent::defaultConfiguration();
  }

  /**
   * {@inheritdoc}
   */
  public function calculateDependencies() {
    $dependencies = parent::calculateDependencies() + [
      'module' => [
        'file',
      ],
    ];
    if ($this->configuration['images']['show_thumbnail']) {
      $dependencies['module'][] = 'image';
      $dependencies['config'][] = 'image.style.' . $this->configuration['images']['thumbnail_image_style'];
    }
    return $dependencies;
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildConfigurationForm($form, $form_state);
    $form['extensions'] = [
      '#type' => 'details',
      '#title' => $this
        ->t('File extensions'),
      '#open' => TRUE,
      '#weight' => -100,
    ];
    $file_extensions = str_replace(' ', ', ', $this->configuration['file_extensions']);
    $form['extensions']['file_extensions'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Allowed file extensions'),
      '#default_value' => $file_extensions,
      '#description' => $this
        ->t('Separate extensions with a space or comma and do not include the leading dot.'),
      '#element_validate' => [
        [
          '\\Drupal\\file\\Plugin\\Field\\FieldType\\FileItem',
          'validateExtensions',
        ],
      ],
      '#maxlength' => 256,
    ];
    $form['images'] = [
      '#type' => 'details',
      '#title' => $this
        ->t('Image file settings'),
      '#description' => $this
        ->t('Extra settings for image files in the result.'),
      '#open' => TRUE,
      '#tree' => TRUE,
    ];
    $form['images']['show_dimensions'] = [
      '#title' => $this
        ->t('Show pixel dimensions'),
      '#type' => 'checkbox',
      '#default_value' => $this->configuration['images']['show_dimensions'],
    ];
    if ($this->moduleHandler
      ->moduleExists('image')) {
      $form['images']['show_thumbnail'] = [
        '#title' => $this
          ->t('Show thumbnail'),
        '#type' => 'checkbox',
        '#default_value' => $this->configuration['images']['show_thumbnail'],
      ];
      $form['images']['thumbnail_image_style'] = [
        '#title' => $this
          ->t('Thumbnail image style'),
        '#type' => 'select',
        '#default_value' => $this->configuration['images']['thumbnail_image_style'],
        '#options' => image_style_options(FALSE),
        '#states' => [
          'visible' => [
            ':input[name="images[show_thumbnail]"]' => [
              'checked' => TRUE,
            ],
          ],
        ],
      ];
    }
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    parent::submitConfigurationForm($form, $form_state);
    $this->configuration['file_extensions'] = $form_state
      ->getValue('file_extensions');
    $values = $form_state
      ->getValue('images');
    if (!$values['show_thumbnail']) {
      $values['thumbnail_image_style'] = NULL;
    }
    $this->configuration['images'] = $values;
  }

  /**
   * {@inheritdoc}
   */
  protected function buildEntityQuery($search_string) {
    $query = parent::buildEntityQuery($search_string);
    $query
      ->condition('status', $this->configuration['file_status']);
    if (!empty($this->configuration['file_extensions'])) {
      $file_extensions = explode(' ', $this->configuration['file_extensions']);
      $group = $query
        ->orConditionGroup();
      foreach ($file_extensions as $file_extension) {
        $group
          ->condition('filename', '%\\.' . $this->database
          ->escapeLike($file_extension), 'LIKE');
      }
      $query
        ->condition($group);
    }
    return $query;
  }

  /**
   * {@inheritdoc}
   */
  protected function buildDescription(EntityInterface $entity) {
    $description_array = [];
    $description_array[] = parent::buildDescription($entity);

    /** @var \Drupal\file\FileInterface $entity */
    $file = $entity
      ->getFileUri();
    if ($this->configuration['images']['show_dimensions'] || $this->configuration['images']['show_thumbnail']) {
      $image_factory = \Drupal::service('image.factory');
      $supported_extensions = $image_factory
        ->getSupportedExtensions();

      // Check if the file extension is supported by the image toolkit.
      if (empty(file_validate_extensions($entity, implode(' ', $supported_extensions)))) {

        /** @var \Drupal\Core\Image\ImageInterface $image */
        $image = $image_factory
          ->get($file);
        if ($image
          ->isValid()) {
          if ($this->configuration['images']['show_dimensions']) {
            $description_array[] = $image
              ->getWidth() . 'x' . $image
              ->getHeight() . 'px';
          }
          if ($this->configuration['images']['show_thumbnail'] && $this->moduleHandler
            ->moduleExists('image')) {
            $image_element = [
              '#weight' => -10,
              '#theme' => 'image_style',
              '#style_name' => $this->configuration['images']['thumbnail_image_style'],
              '#uri' => $entity
                ->getFileUri(),
            ];
            $description_array[] = (string) \Drupal::service('renderer')
              ->render($image_element);
          }
        }
      }
    }
    $description = implode('<br />', $description_array);
    return LinkitXss::descriptionFilter($description);
  }

  /**
   * {@inheritdoc}
   */
  protected function buildPath(EntityInterface $entity) {

    /** @var \Drupal\file\FileInterface $entity */
    return file_url_transform_relative(file_create_url($entity
      ->getFileUri()));
  }

}

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
EntityMatcher::$currentUser protected property The current user.
EntityMatcher::$database protected property The database connection.
EntityMatcher::$entityRepository protected property The entity repository.
EntityMatcher::$entityTypeBundleInfo protected property The entity type bundle info.
EntityMatcher::$entityTypeManager protected property The entity type manager.
EntityMatcher::$moduleHandler protected property The module handler service.
EntityMatcher::$substitutionManager protected property The substitution manager.
EntityMatcher::$targetType protected property The target entity type ID.
EntityMatcher::addQueryTags protected function Adds query tags to the query.
EntityMatcher::buildGroup protected function Builds the group string used in the suggestion.
EntityMatcher::buildLabel protected function Builds the label string used in the suggestion.
EntityMatcher::create public static function Creates an instance of the plugin. Overrides MatcherBase::create
EntityMatcher::createSuggestion protected function Creates a suggestion.
EntityMatcher::DEFAULT_LIMIT constant The default limit for matches.
EntityMatcher::elementValidateFilter public static function Form element validation handler; Filters the #value property of an element.
EntityMatcher::execute public function Executes the matcher. Overrides MatcherInterface::execute
EntityMatcher::findEntityIdByUrl protected function Finds entity id from the given input.
EntityMatcher::validateConfigurationForm public function Form validation handler. Overrides PluginFormInterface::validateConfigurationForm
EntityMatcher::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides MatcherBase::__construct
FileMatcher::buildConfigurationForm public function Form constructor. Overrides EntityMatcher::buildConfigurationForm
FileMatcher::buildDescription protected function Builds the metadata string used in the suggestion. Overrides EntityMatcher::buildDescription
FileMatcher::buildEntityQuery protected function Builds an EntityQuery to get entities. Overrides EntityMatcher::buildEntityQuery
FileMatcher::buildPath protected function Builds the path string used in the suggestion. Overrides EntityMatcher::buildPath
FileMatcher::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides MatcherBase::calculateDependencies
FileMatcher::defaultConfiguration public function Gets default configuration for this plugin. Overrides EntityMatcher::defaultConfiguration
FileMatcher::getSummary public function Returns the summarized configuration of the matcher. Overrides EntityMatcher::getSummary
FileMatcher::submitConfigurationForm public function Form submission handler. Overrides EntityMatcher::submitConfigurationForm
MatcherBase::$uuid protected property The matcher ID.
MatcherBase::$weight protected property The weight of the matcher compared to others in a matcher collection.
MatcherBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
MatcherBase::getLabel public function Returns the matcher label. Overrides MatcherInterface::getLabel
MatcherBase::getUuid public function Returns the unique ID representing the matcher. Overrides MatcherInterface::getUuid
MatcherBase::getWeight public function Returns the weight of the matcher. Overrides MatcherInterface::getWeight
MatcherBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration
MatcherBase::setWeight public function Sets the weight for the matcher. Overrides MatcherInterface::setWeight
MatcherTokensTrait::getAvailableTokens public function Gets all available tokens.
MatcherTokensTrait::insertTokenList public function Inserts a form element with a list of available tokens.
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.