business_rules-8.x-1.0-beta1/src/Plugin/EntityReferenceSelection/BusinessRulesItemSelection.php

src/Plugin/EntityReferenceSelection/BusinessRulesItemSelection.php
<?php

namespace Drupal\business_rules\Plugin\EntityReferenceSelection;

use Drupal\Component\Utility\Html;
use Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection;

/**
 * Provides specific access control for the Business Rules item entity type.
 *
 * This plugin is used to allow entity_autocomplete implements filters on
 * Business Rules items.
 *
 * @EntityReferenceSelection(
 *   id = "default:business_rules_item_by_field",
 *   label = @Translation("Business Rules item by field selection"),
 *   entity_types = {"business_rules_item"},
 *   group = "default",
 *   weight = 3
 * )
 */
class BusinessRulesItemSelection extends DefaultSelection {

  /**
   * {@inheritdoc}
   */
  public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) {
    $target_type = $this->getConfiguration()['target_type'];

    $query = parent::buildEntityQuery($match, $match_operator);

    // Here is the magic.
    $handler_settings = $this->configuration['handler_settings'];
    if (isset($handler_settings['filter'])) {
      $filter_settings = $handler_settings['filter'];
      foreach ($filter_settings as $field_name => $value) {
        $query->condition($field_name, $value, '=');
      }
    }

    if ($limit > 0) {
      $query->range(0, $limit);
    }

    $result = $query->execute();

    if (empty($result)) {
      return [];
    }

    $options = [];
    $entities = $this->entityManager->getStorage($target_type)
      ->loadMultiple($result);
    foreach ($entities as $entity_id => $entity) {
      $bundle                       = $entity->bundle();
      $options[$bundle][$entity_id] = Html::escape($this->entityManager->getTranslationFromContext($entity)
        ->label());
    }

    return $options;
  }

}

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

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