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']);
}
}