ckeditor_mentions-8.x-2.x-dev/src/Plugin/MentionsType/User.php

src/Plugin/MentionsType/User.php
<?php

namespace Drupal\ckeditor_mentions\Plugin\MentionsType;

use Drupal\ckeditor_mentions\MentionsType\MentionsTypeBase;
use Drupal\Core\Database\Query\AlterableInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Provides a user mentions type.
 *
 * @MentionsType(
 *   id = "user",
 *   label = @Translation("User"),
 *   entity_type = "user"
 * )
 */
class User extends MentionsTypeBase {

  /**
   * Module handler.
   */
  protected ModuleHandlerInterface $moduleHandler;

  /**
   * The path to the placeholder image.
   */
  protected string $placeholderImage;

  /**
   * {@inheritDoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->moduleHandler = $container->get('module_handler');
    $instance->placeholderImage = base_path() . $instance->moduleHandler->getModule('ckeditor_mentions')->getPath() . '/img/placeholder.png';
    return $instance;
  }

  /**
   * {@inheritDoc}
   */
  protected function getQuery(): AlterableInterface {
    $query = $this->entityManager
      ->getStorage($this->getPluginDefinition()['entity_type'])
      ->getQuery()
      ->accessCheck();

    $or = $query->orConditionGroup()
      ->condition('name', $this->getMatch(), 'CONTAINS')
      ->condition('mail', $this->getMatch(), 'CONTAINS');

    return $query->condition($or);
  }

  /**
   * {@inheritDoc}
   */
  public function buildTokens(array $entities): array {
    $response_array = parent::buildTokens($entities);

    // The image style to use.
    // Move style type into configuration?
    /** @var \Drupal\image\Entity\ImageStyle $style */
    $style = $this->entityManager->getStorage('image_style')->load('mentions_icon');

    foreach ($entities as $id => $user) {
      $user_image_url = NULL;
      if ($user->hasField('user_picture') && !empty($user->user_picture->entity) && $style) {
        $user_image_url = $style->buildUrl($user->user_picture->entity->getFileUri());
      }

      // @todo We can probably implement ability to use templates.
      // All the array keys are considered as tokens for item/output templates.
      $response_array[$id] += [
        'user_name' => $user->getDisplayName(),
        'email' => $user->getEmail(),
        'avatar' => $user_image_url ?? $this->placeholderImage,
      ];
    }

    return $response_array;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc