You are here

protected function AvailabilityAgent::applyAvailabilityFilter in Rooms - Drupal Booking for Hotels, B&Bs and Vacation Rentals 7

Applies the availability filter against a set of bookable units.

Parameters

array $units: Set of bookable units to filter.

int $adults: Number of adults.

int $children: Number of children.

bool $confirmed: Whether include confirmed states or not.

Return value

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

1 call to AvailabilityAgent::applyAvailabilityFilter()
AvailabilityAgent::checkAvailability in modules/rooms_booking/includes/rooms_booking.availability_agent.inc
Checks the availability.

File

modules/rooms_booking/includes/rooms_booking.availability_agent.inc, line 301
Contains the AvailabilityAgent.

Class

AvailabilityAgent
An AvailabilityAgent provides access to the availability functionality of Rooms and lets you query for availability, get pricing information and create products that can be bought.

Code

protected function applyAvailabilityFilter($units = array(), $adults = 0, $children = 0, $confirmed = FALSE) {

  // Apply AvailabilityAgentSizeFilter.
  $av_sizefilter = new AvailabilityAgentSizeFilter($units, array(
    'group_size' => $adults,
    'group_size_children' => $children,
    'unit_types' => $this->unit_types,
  ));
  $units = $av_sizefilter
    ->applyFilter();
  if ($units == ROOMS_SIZE_FAILURE) {
    return array();
  }

  // Apply AvailabilityAgentSingleUnitFilter.
  $av_singleunitfilter = new AvailabilityAgentSingleUnitFilter($units, array(
    'start_date' => $this->start_date,
    'end_date' => $this->end_date,
  ));
  $units = $av_singleunitfilter
    ->applyFilter();

  // Apply AvailabilityAgentDateFilter.
  $av_datefilter = new AvailabilityAgentDateFilter($units, array(
    'start_date' => $this->start_date,
    'end_date' => $this->end_date,
    'valid_states' => $this->valid_states,
    'confirmed' => $confirmed,
    'revert_valid_states' => $this->revert_valid_states,
  ));
  $units = $av_datefilter
    ->applyFilter();
  if (empty($units)) {
    return array();
  }

  // Apply AvailabilityAgentCommerceFilter.
  if (variable_get('rooms_use_commerce_filter', '1')) {
    $av_commercefilter = new AvailabilityAgentCommerceFilter($units, array(
      'start_date' => $this->start_date,
      'end_date' => $this->end_date,
    ));
    $units = $av_commercefilter
      ->applyFilter();
  }
  ctools_include('plugins');
  $filters = ctools_get_plugins('rooms_booking', 'availabilityagent_filter');
  foreach ($filters as $filter) {
    $class = ctools_plugin_get_class($filter, 'handler');
    $object_filter = new $class($units, array(
      'start_date' => $this->start_date,
      'end_date' => $this->end_date,
      'group_size' => $adults,
      'group_size_children' => $children,
      'unit_types' => $this->unit_types,
      'valid_states' => $this->valid_states,
      'confirmed' => $confirmed,
    ));
    $units = $object_filter
      ->applyFilter();
  }
  return $units;
}