You are here

class EntityHelper in Simple XML sitemap 8.2

Same name and namespace in other branches
  1. 8.3 src/EntityHelper.php \Drupal\simple_sitemap\EntityHelper

Class EntityHelper @package Drupal\simple_sitemap

Hierarchy

Expanded class hierarchy of EntityHelper

7 files declare their use of EntityHelper
ArbitraryUrlGenerator.php in src/Plugin/simple_sitemap/UrlGenerator/ArbitraryUrlGenerator.php
CustomUrlGenerator.php in src/Plugin/simple_sitemap/UrlGenerator/CustomUrlGenerator.php
EntityMenuLinkContentUrlGenerator.php in src/Plugin/simple_sitemap/UrlGenerator/EntityMenuLinkContentUrlGenerator.php
EntityUrlGenerator.php in src/Plugin/simple_sitemap/UrlGenerator/EntityUrlGenerator.php
FormHelper.php in src/Form/FormHelper.php

... See full list

1 string reference to 'EntityHelper'
simple_sitemap.services.yml in ./simple_sitemap.services.yml
simple_sitemap.services.yml
1 service uses EntityHelper
simple_sitemap.entity_helper in ./simple_sitemap.services.yml
Drupal\simple_sitemap\EntityHelper

File

src/EntityHelper.php, line 15

Namespace

Drupal\simple_sitemap
View source
class EntityHelper {

  /**
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * @var \Drupal\Core\Database\Connection
   */
  protected $db;

  /**
   * EntityHelper constructor.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
   * @param \Drupal\Core\Database\Connection $database
   */
  public function __construct(EntityTypeManagerInterface $entityTypeManager, Connection $database) {
    $this->entityTypeManager = $entityTypeManager;
    $this->db = $database;
  }

  /**
   * Gets an entity's bundle name.
   *
   * @param \Drupal\Core\Entity\EntityInterface $entity
   * @return string
   */
  public function getEntityInstanceBundleName(EntityInterface $entity) {
    return $entity
      ->getEntityTypeId() === 'menu_link_content' ? $entity
      ->getMenuName() : $entity
      ->bundle();
  }

  /**
   * Gets the entity type id for a bundle.
   *
   * @param \Drupal\Core\Entity\EntityInterface $entity
   * @return null|string
   */
  public function getBundleEntityTypeId(EntityInterface $entity) {
    return $entity
      ->getEntityTypeId() === 'menu' ? 'menu_link_content' : $entity
      ->getEntityType()
      ->getBundleOf();
  }

  /**
   * Returns objects of entity types that can be indexed.
   *
   * @return array
   *   Objects of entity types that can be indexed by the sitemap.
   */
  public function getSupportedEntityTypes() {
    $entity_types = $this->entityTypeManager
      ->getDefinitions();
    foreach ($entity_types as $entity_type_id => $entity_type) {
      if (!$entity_type instanceof ContentEntityTypeInterface || !method_exists($entity_type, 'getBundleEntityType') || !$entity_type
        ->hasLinkTemplate('canonical')) {
        unset($entity_types[$entity_type_id]);
      }
    }
    return $entity_types;
  }

  /**
   * Checks whether an entity type does not provide bundles.
   *
   * @param string $entity_type_id
   * @return bool
   */
  public function entityTypeIsAtomic($entity_type_id) {

    // Menu fix.
    if ($entity_type_id === 'menu_link_content') {
      return FALSE;
    }
    $entity_types = $this->entityTypeManager
      ->getDefinitions();
    if (!isset($entity_types[$entity_type_id])) {

      // todo: Throw exception.
    }
    return empty($entity_types[$entity_type_id]
      ->getBundleEntityType()) ? TRUE : FALSE;
  }

  /**
   * @param $url_object
   * @return object|null
   */
  public function getEntityFromUrlObject(Url $url_object) {
    return $url_object
      ->isRouted() && !empty($route_parameters = $url_object
      ->getRouteParameters()) && $this->entityTypeManager
      ->getDefinition($entity_type_id = key($route_parameters), FALSE) ? $this->entityTypeManager
      ->getStorage($entity_type_id)
      ->load($route_parameters[$entity_type_id]) : NULL;
  }

  /**
   * @param $entity_type_name
   * @param $entity_id
   * @return array
   */
  public function getEntityImageUrls($entity_type_name, $entity_id) {
    $query = $this->db
      ->select('file_managed', 'fm');
    $query
      ->fields('fm', [
      'uri',
    ]);
    $query
      ->join('file_usage', 'fu', 'fu.fid = fm.fid');
    $query
      ->condition('fm.filemime', 'image/%', 'LIKE');
    $query
      ->condition('fu.type', $entity_type_name);
    $query
      ->condition('fu.id', $entity_id);
    foreach ($query
      ->execute() as $row) {
      $imageUris[] = file_create_url($row->uri);
    }
    return !empty($imageUris) ? $imageUris : [];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
EntityHelper::$db protected property
EntityHelper::$entityTypeManager protected property
EntityHelper::entityTypeIsAtomic public function Checks whether an entity type does not provide bundles.
EntityHelper::getBundleEntityTypeId public function Gets the entity type id for a bundle.
EntityHelper::getEntityFromUrlObject public function
EntityHelper::getEntityImageUrls public function
EntityHelper::getEntityInstanceBundleName public function Gets an entity's bundle name.
EntityHelper::getSupportedEntityTypes public function Returns objects of entity types that can be indexed.
EntityHelper::__construct public function EntityHelper constructor.