og_sm-8.x-1.0/src/SiteTypeManager.php

src/SiteTypeManager.php
<?php

namespace Drupal\og_sm;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\node\NodeTypeInterface;
use Drupal\og\GroupTypeManager;

/**
 * A manager to keep track of which content types are og_sm Site enabled.
 */
class SiteTypeManager implements SiteTypeManagerInterface {

  /**
   * The entity storage for node entities.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface
   */
  protected $nodeTypeStorage;

  /**
   * The group type manager.
   *
   * @var \Drupal\og\GroupTypeManager
   */
  protected $groupTypeManager;

  /**
   * Constructs a SiteTypeManager object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityManager
   *   The entity type manager.
   * @param \Drupal\og\GroupTypeManager $groupTypeManager
   *   The group type manager.
   */
  public function __construct(
    EntityTypeManagerInterface $entityManager,
    GroupTypeManager $groupTypeManager
  ) {
    $this->nodeTypeStorage = $entityManager->getStorage('node_type');
    $this->groupTypeManager = $groupTypeManager;
  }

  /**
   * {@inheritdoc}
   */
  public function isSiteTypeId($type_id) {
    $type = $this->nodeTypeStorage->load($type_id);
    if ($type instanceof NodeTypeInterface) {
      return $this->isSiteType($type);
    }
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function isSiteType(NodeTypeInterface $type) {
    return $type->getThirdPartySetting('og_sm', static::SITE_TYPE_SETTING_KEY, FALSE);
  }

  /**
   * {@inheritdoc}
   */
  public function setIsSiteType(NodeTypeInterface $type, $isSiteType) {
    $type->setThirdPartySetting('og_sm', static::SITE_TYPE_SETTING_KEY, $isSiteType);
  }

  /**
   * {@inheritdoc}
   */
  public function getSiteTypes() {
    /** @var \Drupal\node\NodeTypeInterface[] $types */
    $types = $this->nodeTypeStorage->loadMultiple();
    $types = array_filter($types, [$this, 'isSiteType']);

    return $types;
  }

  /**
   * {@inheritdoc}
   */
  public function getContentTypes() {
    $types = &drupal_static(__FUNCTION__, []);

    if (!empty($types)) {
      return $types;
    }

    try {
      $typeIds = $this->groupTypeManager->getAllGroupContentBundlesByEntityType('node');
    }
    catch (\InvalidArgumentException $exception) {
      return [];
    }

    $sort = $items = [];
    foreach ($typeIds as $typeId) {
      $type = $this->nodeTypeStorage->load($typeId);
      if (!$type) {
        continue;
      }

      $sort[$type->label()] = $type->id();
      $items[$type->id()] = $type;
    }

    // Sort the items.
    ksort($sort);
    foreach ($sort as $key) {
      $types[$key] = $items[$key];
    }

    return $types;
  }

  /**
   * {@inheritdoc}
   */
  public function isSiteContentType(NodeTypeInterface $type) {
    return $this->groupTypeManager->isGroupContent('node', $type->id());
  }

}

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

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