You are here

function _rooms_availability_reference_potential_references in Rooms - Drupal Booking for Hotels, B&Bs and Vacation Rentals 7

Helper function for node_reference_potential_references().

List of referenceable nodes defined by content types.

1 call to _rooms_availability_reference_potential_references()
rooms_availability_reference_potential_references in modules/rooms_availability_reference/rooms_availability_reference.module
Retrieves an array of candidate referenceable booking units.

File

modules/rooms_availability_reference/rooms_availability_reference.module, line 275
Defines a field type for referencing availability information

Code

function _rooms_availability_reference_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('rooms_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'])) {
    $query
      ->condition('u.type', $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;
}