You are here

class AvailabilityCalendarAlterFieldFilter in Availability Calendars 7.5

Search API data alteration callback that filters out items based on the fields that refer to them.

Only availability calendar fields and availability calendar entities are supported.

Hierarchy

Expanded class hierarchy of AvailabilityCalendarAlterFieldFilter

1 string reference to 'AvailabilityCalendarAlterFieldFilter'
availability_calendar_search_api_alter_callback_info in ./availability_calendar.entity.inc
Implements hook_search_api_alter_callback_info().

File

./availability_calendar_alter_field_filter.inc, line 10

View source
class AvailabilityCalendarAlterFieldFilter extends SearchApiAbstractAlterCallback {
  public function supportsIndex(SearchApiIndex $index) {
    return $index->item_type === 'availability_calendar_calendar';
  }
  public function alterItems(array &$items) {
    if ($this->index->item_type === 'availability_calendar_calendar') {
      $fields = $this->options['fields'];
      foreach ($items as $id => $item) {
        $referring_field = availability_calendar_get_referring_field($id, $fields);
        if ($this->options['default'] === 'exclude' && !empty($referring_field) || $this->options['default'] === 'include' && !$referring_field) {
          unset($items[$id]);
        }
      }
    }
  }
  public function configurationForm() {
    if ($this->index->item_type === 'availability_calendar_calendar') {
      $options = drupal_map_assoc($this
        ->get_fields_by_type('availability_calendar'));
      $form = array(
        'default' => array(
          '#type' => 'radios',
          '#title' => t('Which items should be indexed?'),
          '#default_value' => isset($this->options['default']) ? $this->options['default'] : 'exclude',
          '#options' => array(
            'exclude' => t('All but those from one of the selected fields'),
            'include' => t('Only those from the selected fields'),
          ),
        ),
        'fields' => array(
          '#type' => 'select',
          '#title' => t('Fields'),
          '#default_value' => isset($this->options['fields']) ? $this->options['fields'] : array(),
          '#options' => $options,
          '#size' => min(3, count($options)),
          '#multiple' => TRUE,
        ),
      );
    }
    else {
      $form = array(
        'forbidden' => array(
          '#markup' => '<p>' . t("This index doesn't index availability calendars and therefore cannot be filtered on referring availability calendar fields here.") . '</p>',
        ),
      );
    }
    return $form;
  }

  /**
   * Returns all fields of the given type.
   *
   * @param string $type
   *
   * @return array
   *   An array with field (machine) names.
   */
  protected function get_fields_by_type($type) {
    $result = array();
    $fields = field_info_fields();
    foreach ($fields as $field_name => $field) {
      if ($field['type'] === $type && $field['deleted'] == 0) {
        $result[] = $field_name;
      }
    }
    return $result;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
AvailabilityCalendarAlterFieldFilter::alterItems public function Alter items before indexing. Overrides SearchApiAlterCallbackInterface::alterItems
AvailabilityCalendarAlterFieldFilter::configurationForm public function Implements SearchApiAlterCallbackInterface::configurationForm(). Overrides SearchApiAbstractAlterCallback::configurationForm
AvailabilityCalendarAlterFieldFilter::get_fields_by_type protected function Returns all fields of the given type.
AvailabilityCalendarAlterFieldFilter::supportsIndex public function Implements SearchApiAlterCallbackInterface::supportsIndex(). Overrides SearchApiAbstractAlterCallback::supportsIndex
SearchApiAbstractAlterCallback::$index protected property The index whose items will be altered.
SearchApiAbstractAlterCallback::$options protected property The configuration options for this callback, if it has any.
SearchApiAbstractAlterCallback::configurationFormSubmit public function Implements SearchApiAlterCallbackInterface::configurationFormSubmit(). Overrides SearchApiAlterCallbackInterface::configurationFormSubmit 4
SearchApiAbstractAlterCallback::configurationFormValidate public function Implements SearchApiAlterCallbackInterface::configurationFormValidate(). Overrides SearchApiAlterCallbackInterface::configurationFormValidate 1
SearchApiAbstractAlterCallback::isMultiEntityIndex protected function Determines whether the given index contains multiple types of entities.
SearchApiAbstractAlterCallback::propertyInfo public function Implements SearchApiAlterCallbackInterface::propertyInfo(). Overrides SearchApiAlterCallbackInterface::propertyInfo 6
SearchApiAbstractAlterCallback::__construct public function Implements SearchApiAlterCallbackInterface::__construct(). Overrides SearchApiAlterCallbackInterface::__construct 1