You are here

public function AvailabilityAgentSizeFilter::applyFilter in Rooms - Drupal Booking for Hotels, B&Bs and Vacation Rentals 7

Applies the filter operation to the units in the filter.

Return value

array|int Rooms remaining after the filter, error code otherwise.

Overrides AvailabilityAgentFilterInterface::applyFilter

File

modules/rooms_booking/includes/rooms_booking.availability_agent_filter.inc, line 165
Rooms Booking agent filter interfaces and base implementations.

Class

AvailabilityAgentSizeFilter
Filter by group_size and group_size_children.

Code

public function applyFilter() {

  // Check parameters.
  $group_size = isset($this->parameters['group_size']) ? $this->parameters['group_size'] : 0;
  $group_size_children = isset($this->parameters['group_size_children']) ? $this->parameters['group_size_children'] : 0;
  $unit_types = isset($this->parameters['unit_types']) ? $this->parameters['unit_types'] : NULL;
  $query = new EntityFieldQuery();
  $query
    ->entityCondition('entity_type', 'rooms_unit')
    ->propertyOrderBy('max_sleeps', 'ASC')
    ->propertyCondition('max_sleeps', $group_size, '>=')
    ->propertyCondition('max_children', $group_size_children, '>=')
    ->propertyCondition('bookable', 1);

  // Add a unit type condition if this has been defined.
  if ($unit_types != NULL) {
    $query
      ->propertyCondition('type', $unit_types);
  }

  // Execute the query and collect the results.
  $results = $query
    ->execute();
  if (count($results) == 0) {
    return ROOMS_SIZE_FAILURE;
  }
  if (empty($this->units)) {
    return $results['rooms_unit'];
  }
  else {

    // Computes the intersection of units and results.
    return $this
      ->intersectUnits($results['rooms_unit']);
  }
}