You are here

public function MerciDefaultController::__construct in MERCI (Manage Equipment Reservations, Checkout and Inventory) 7.3

File

merci_core/reservation.handler.inc, line 38
Abstraction of the selection logic of an entity reference field.

Class

MerciDefaultController
A null implementation of EntityReference_SelectionHandler.

Code

public function __construct($entity, $item_type, $context) {
  $this->context = $context;
  $this->item_type = $item_type;
  $this->entity = $entity;
  $this->items = array();

  // Determine if dealing with multiple values.
  if (substr($entity->{$context['item_field']}
    ->type(), 0, 5) == 'list<') {
    foreach ($entity->{$context['item_field']}
      ->getIterator() as $delta => $item) {
      if ($item
        ->getIdentifier()) {
        $this->items[$delta] = $item;
      }
    }
    $this->items_is_list = TRUE;
  }
  else {
    $this->items[0] = $entity->{$context['item_field']};
  }
  if (substr($entity->{$context['date_field']}
    ->type(), 0, 5) == 'list<') {
    foreach ($entity->{$context['date_field']}
      ->getIterator() as $delta => $item) {
      $this->dates[$delta] = $item
        ->value();
    }
  }
  else {
    $this->dates[0] = $entity->{$context['date_field']}
      ->value();
  }

  // Storage location for date field.
  $date_field_info = field_info_field($context['date_field']);
  $date_storage = $date_field_info['storage']['details']['sql']['FIELD_LOAD_CURRENT'];
  $keys = array_keys($date_storage);
  $this->date_table = reset($keys);
  $this->date_column = $date_storage[$this->date_table]['value'];
  $this->date_column2 = $date_storage[$this->date_table]['value2'];

  // Storage location for item field.
  $item_field_info = field_info_field($context['item_field']);
  $item_storage = $item_field_info['storage']['details']['sql']['FIELD_LOAD_CURRENT'];
  $keys = array_keys($item_storage);
  $this->item_table = reset($keys);
  $keys = array_keys($item_field_info['indexes']);
  $item_key = reset($keys);
  $this->item_column = $item_storage[$this->item_table][$item_key];
  $entity_info = $entity
    ->entityInfo();
  $this->parent_index = $entity
    ->entityKey('id');
  $this->parent_table = $entity_info['base table'];
  $this->parent_has_quantity = in_array('quantity', $entity_info['schema_fields_sql']['base table']);
  $this->parent_has_status = in_array('status', $entity_info['schema_fields_sql']['base table']);
  try {
    $this->entity_quantity = $entity->quantity
      ->value();
  } catch (EntityMetadataWrapperException $e) {
    $this->entity_quantity = 1;
  }
}