public function SearchApiAlterBundleFilter::alterItems in Search API 7
Alter items before indexing.
Items which are removed from the array won't be indexed, but will be marked as clean for future indexing. This could for instance be used to implement some sort of access filter for security purposes (e.g., don't index unpublished nodes or comments).
Parameters
array $items: An array of items to be altered, keyed by item IDs.
Overrides SearchApiAlterCallbackInterface::alterItems
File
- includes/
callback_bundle_filter.inc, line 32 - Contains SearchApiAlterBundleFilter.
Class
- SearchApiAlterBundleFilter
- Represents a data alteration that restricts entity indexes to some bundles.
Code
public function alterItems(array &$items) {
if (!$this
->supportsIndex($this->index) || !isset($this->options['bundles'])) {
return;
}
$multi_entity = $this
->isMultiEntityIndex();
if ($multi_entity) {
$bundle_prop = 'item_bundle';
}
else {
$info = entity_get_info($this->index
->getEntityType());
$bundle_prop = $info['entity keys']['bundle'];
}
$bundles = array_flip($this->options['bundles']);
$default = (bool) $this->options['default'];
foreach ($items as $id => $item) {
// Ignore types that have no bundles.
if ($multi_entity && !self::hasBundles(entity_get_info($item->item_type))) {
continue;
}
if (isset($bundles[$item->{$bundle_prop}]) == $default) {
unset($items[$id]);
}
}
}