contacts_events-8.x-1.x-dev/modules/villages/src/Entity/AllocatedVillagesItemList.php

modules/villages/src/Entity/AllocatedVillagesItemList.php
<?php

namespace Drupal\contacts_events_villages\Entity;

use Drupal\Core\Field\FieldItemList;
use Drupal\Core\TypedData\ComputedItemListTrait;

/**
 * Calculates which village IDs the group is allocated to.
 *
 * @package Drupal\contacts_events_villages\Entity
 */
class AllocatedVillagesItemList extends FieldItemList {

  use ComputedItemListTrait;

  /**
   * {@inheritdoc}
   */
  protected function computeValue() {
    /** @var \Drupal\contacts_events_villages\Entity\VillageGroup $entity */
    $entity = $this->getEntity();

    $query = \Drupal::database()->select('commerce_order', 'o');
    $query->leftJoin('commerce_order__village', 'v', 'v.entity_id = o.order_id');
    $query->join('commerce_order__village_group', 'vg', 'vg.entity_id = o.order_id');
    $query->condition('o.state', 'draft', '<>');
    $query->condition('vg.village_group_target_id', $entity->id());
    $query->addField('v', 'village_target_id', 'village_id');
    $query->distinct();

    $results = $query->execute()->fetchCol();

    $i = 0;
    foreach ($results as $village_id) {
      if ($village_id == NULL) {
        // If we have an unallocated booking, add a fake village ID of 0
        // which represents "has unallocated bookings".
        $village_id = 0;
      }

      $this->list[$i] = $this->createItem($i, $village_id);
      $i++;
    }
  }

  /**
   * Reset the computed value.
   */
  public function resetValue() {
    $this->valueComputed = FALSE;
  }

}

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

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