contacts_events-8.x-1.x-dev/modules/villages/src/Access/VillageGroupAccessChecker.php

modules/villages/src/Access/VillageGroupAccessChecker.php
<?php

namespace Drupal\contacts_events_villages\Access;

use Drupal\contacts_events\Entity\EventInterface;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Routing\Access\AccessInterface;

/**
 * Checks if village groups and accommodation are enabled for a given event.
 */
class VillageGroupAccessChecker implements AccessInterface {

  /**
   * Access callback.
   *
   * @param \Drupal\contacts_events\Entity\EventInterface $contacts_event
   *   The event we are checking village group access for.
   *
   * @return \Drupal\Core\Access\AccessResultInterface
   *   The access result.
   */
  public function access(EventInterface $contacts_event) {
    // Check that accommodation is configured.
    $result = AccessResult::allowedIf($contacts_event->hasField('accommodation_types') && $contacts_event->get('accommodation_types')->count());

    if ($result->isAllowed()) {
      $accommodation_types = array_map(function ($item) {
        return $item['target_id'];
      }, $contacts_event->get('accommodation_types')->getValue());

      // Check if 'camping' is in accommodation options.
      $result = $result->andIf(AccessResult::allowedIf(in_array('camping', $accommodation_types)));

      // Check if village groups are configured.
      $result = $result->andIf(AccessResult::allowedIf($contacts_event->hasField('village_group_types') && $contacts_event->get('village_group_types')->count()));
    }

    return $result->addCacheableDependency($contacts_event);
  }

}

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

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