social_post-8.x-2.x-dev/src/Entity/Controller/SocialPostListBuilder.php

src/Entity/Controller/SocialPostListBuilder.php
<?php

namespace Drupal\social_post\Entity\Controller;

use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityListBuilder;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Link;
use Drupal\Core\Routing\UrlGeneratorInterface;
use Drupal\Core\Url;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Defines a class to build a listing of Social Post Entities.
 *
 * @ingroup social_post
 */
class SocialPostListBuilder extends EntityListBuilder {

  /**
   * The provider.
   *
   * @var string
   */
  protected $provider;

  /**
   * The url generator.
   *
   * @var \Drupal\Core\Routing\UrlGeneratorInterface
   */
  protected $urlGenerator;

  /**
   * The user entity storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface
   */
  protected $userEntity;

  /**
   * {@inheritdoc}
   */
  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
    return new static(
      $entity_type,
      $container->get('entity_type.manager')->getStorage($entity_type->id()),
      $container->get('entity_type.manager')->getStorage('user'),
      $container->get('url_generator')
    );
  }

  /**
   * SocialPostListBuilder constructor.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
   *   The entity storage for the social_post entity.
   * @param \Drupal\Core\Entity\EntityStorageInterface $user_entity
   *   The entity storage for the user entity.
   * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
   *   The url generator.
   */
  public function __construct(
    EntityTypeInterface $entity_type,
    EntityStorageInterface $storage,
    EntityStorageInterface $user_entity,
    UrlGeneratorInterface $url_generator,
  ) {
    parent::__construct($entity_type, $storage);
    $this->urlGenerator = $url_generator;
    $this->userEntity = $user_entity;
  }

  /**
   * Sets the provider for the users that should be listed.
   *
   * @param string $provider
   *   The provider id.
   */
  public function setProvider($provider) {
    $this->provider = $provider;
  }

  /**
   * {@inheritdoc}
   */
  public function buildHeader() {
    $header['social_id'] = $this->t('Social Network ID');
    $header['social_post_name'] = $this->t('Screen name');
    $header['user'] = $this->t('User ID');
    return $header + parent::buildHeader();
  }

  /**
   * {@inheritdoc}
   *
   * @param \Drupal\social_post\Entity\SocialPost|Drupal\Core\Entity\EntityTypeInterface $entity
   *   The Social Post entity to render.
   */
  public function buildRow(EntityInterface $entity) {
    $provider = $entity->getPluginId();

    if ($provider == 'social_post_' . $this->provider) {
      $row['provider_user_id'] = $entity->getProviderUserId();

      // Generates (or not) URL to user profile.
      $link = $entity->getLink();
      if ($link && $link->isEmpty()) {
        $row['social_post_name'] = $entity->getName();
      }
      else {
        $row['social_post_name'] = Link::fromTextAndUrl($link->title, $link->getUrl());
      }

      $user = $entity->get('user_id')->entity;
      $row['user'] = $user->toLink();

      return $row + parent::buildRow($entity);
    }

    return [];

  }

  /**
   * {@inheritdoc}
   *
   * @param \Drupal\social_post\Entity\SocialPost|Drupal\Core\Entity\EntityTypeInterface $entity
   *   The Social Post entity to process.
   */
  public function getDefaultOperations(EntityInterface $entity) {

    $provider = $entity->getPluginId();

    if ($provider == 'social_post_' . $this->provider) {
      $operations = parent::getDefaultOperations($entity);
      $operations['delete'] = [
        'title' => $this->t('Delete'),
        'url' => Url::fromRoute(
          'entity.social_post.delete_form',
          [
            'provider' => $this->provider,
            'social_post' => $entity->getId(),
            'user' => FALSE,
          ]
        ),
      ];

      return $operations;
    }

    return [];
  }

}

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

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