dependency_bundle.inc in Facet API 6.3
Same filename and directory in other branches
Performs a dependency check against the passed bundle.
File
plugins/facetapi/dependency_bundle.incView source
<?php
/**
* @file
* Performs a dependency check against the passed bundle.
*/
/**
* Adds a dependency on bundle.
*/
class FacetapiDependencyBundle extends FacetapiDependency {
/**
* Executes the dependency check.
*/
public function execute() {
switch ($this->settings['bundle']) {
case 'referenced':
// Check match between the field's bundles and active bundle items.
foreach ($this
->getEnabledBundleFacets() as $facet) {
foreach ($this->activeItems[$facet['name']] as $entity => $facet) {
$field_info = content_fields($this->facet['field api name'], $entity);
if ($field_info) {
return NULL;
}
}
}
// There was no match.
return FALSE;
case 'selected':
// Check match between selected bundles and active bundle items.
$selected = array_filter($this->settings['bundle_selected']);
foreach ($this
->getEnabledBundleFacets() as $facet) {
if (array_intersect_key($this->activeItems[$facet['name']], $selected)) {
return NULL;
}
}
// There was no match.
return FALSE;
}
}
/**
* Returns an array of enabled facets that filter by bundle.
*
* @return array
* An array of enabled bundle facets.
*/
public function getEnabledBundleFacets() {
$enabled = array_filter($this->adapter
->getEnabledFacets(), array(
$this,
'filterBundleFacets',
));
$active = array_filter($this->activeItems);
return array_intersect_key($enabled, $active);
}
/**
* Returns TRUE if the facet contains bundle information.
*
* @param array $facet
* The facet definition beinf filtered.
*
* @return
* A boolean flagging whether the item should remain in the array.
*/
public function filterBundleFacets($facet) {
return !empty($facet['field api bundles']);
}
/**
* Adds dependency settings to the form.
*/
public function settingsForm(&$form, &$form_state) {
// Builds array of options.
$options = array();
$options['none'] = t('No dependencies.');
if ($this->facet['field api name']) {
$options['referenced'] = t('A bundle this field is attached to must be active.');
}
$options['selected'] = t('At least one of the selected bundles must be active.');
$form[$this->id]['bundle'] = array(
'#title' => t('Dependency settings'),
'#type' => 'radios',
'#options' => $options,
'#default_value' => $this->settings['bundle'],
);
$form[$this->id]['bundle_selected'] = array(
'#title' => t('Required bundles'),
'#type' => 'checkboxes',
'#options' => $this
->getBundleOptions($form['#facetapi']['adapter']
->getTypes()),
'#default_value' => $this->settings['bundle_selected'],
'#states' => array(
'visible' => array(
'input[name="bundle"]' => array(
'value' => 'selected',
),
),
),
'#description' => t('At least one of the selected bundles must be active for this facet to be rendered.'),
);
}
/**
* Gets bundles.
*
* @param array $entity_types
* An array containing the machine readable name of the entities.
*
* @return
* An array of bundles associates with the entities.
*/
public function getBundleOptions(array $entity_types) {
$options = array();
// No entities in D6 - Only nodes
$bundle_types = node_get_types();
foreach ($bundle_types as $bundle => $bundle_info) {
$options[$bundle] = check_plain($bundle_info->name);
}
return $options;
}
/**
* Returns defaults for settings.
*/
public function getDefaultSettings() {
return array(
'bundle' => 'none',
'bundle_selected' => array(),
);
}
}
Classes
Name | Description |
---|---|
FacetapiDependencyBundle | Adds a dependency on bundle. |