You are here

function _bat_calendar_reference_units_potential_references in Booking and Availability Management Tools for Drupal 7

Parameters

array $field:

array $options:

Return value

array

1 call to _bat_calendar_reference_units_potential_references()
bat_calendar_reference_units_potential_references in modules/bat_calendar_reference/bat_calendar_reference.module
Retrieves an array of candidate referenceable booking units.

File

modules/bat_calendar_reference/bat_calendar_reference.module, line 387
Defines a field type for referencing event information.

Code

function _bat_calendar_reference_units_potential_references($field, $options) {

  // Avoid useless work.
  if (!isset($field['settings']['referenceable_unit_types'])) {
    return array();
  }
  if (!count($field['settings']['referenceable_unit_types'])) {
    return array();
  }
  $query = db_select('bat_units', 'u');
  $unit_unit_id_alias = $query
    ->addField('u', 'unit_id');
  $unit_name_alias = $query
    ->addField('u', 'name', 'name');
  $unit_type_alias = $query
    ->addField('u', 'type', 'type');
  if (is_array($field['settings']['referenceable_unit_types'])) {
    $referenceable_unit_types = array_filter($field['settings']['referenceable_unit_types']);
    if (!empty($referenceable_unit_types)) {
      $query
        ->condition('u.type_id', array_filter($field['settings']['referenceable_unit_types']), 'IN');
    }
  }
  if ($options['string'] !== '') {
    switch ($options['match']) {
      case 'contains':
        $query
          ->condition('u.name', '%' . $options['string'] . '%', 'LIKE');
        break;
      case 'starts_with':
        $query
          ->condition('u.name', $options['string'] . '%', 'LIKE');
        break;
      case 'equals':
      default:

        // No match type or incorrect match type: use "=".
        $query
          ->condition('u.name', $options['string']);
        break;
    }
  }
  if ($options['ids']) {
    $query
      ->condition('u.unit_id', $options['ids'], 'IN');
  }
  if ($options['limit']) {
    $query
      ->range(0, $options['limit']);
  }
  $query
    ->orderBy($unit_name_alias)
    ->orderBy($unit_type_alias);
  $result = $query
    ->execute()
    ->fetchAll();
  $references = array();
  foreach ($result as $unit) {
    $references[$unit->unit_id] = array(
      'title' => $unit->name,
      'rendered' => check_plain($unit->name),
    );
  }
  return $references;
}