You are here

public function FacetapiDependencyFacet::execute in Facet API Bonus 7

Executes the dependency check.

File

plugins/facetapi/dependency_facet.inc, line 25
Performs a dependency check against other specified facets/facet values

Class

FacetapiDependencyFacet
Adds a dependency on another facet being active.

Code

public function execute() {

  // Show this facet, if it is active itself and forced deactivation isn't on.
  if (!$this->settings['force_deactivation'] && $this->activeItems[$this->facet['name']]) {
    return;
  }
  else {

    // Show this facet if no facet dependencies are configured.
    $facets = array_filter($this->settings['facets']);
    if (empty($facets)) {
      return;
    }
    else {

      // Check if any configured facet dependency is met.
      foreach ($facets as $facet_name) {
        if ($this->activeItems[$facet_name]) {

          // Show/hide if dependency is met without specific dependency items.
          if (empty($this->settings['facet_items_' . $facet_name])) {
            return !$this->settings['reverse_dependency'];
          }
          else {
            $items_string = trim($this->settings['facet_items_' . $facet_name]);
            $facet_items = drupal_explode_tags($items_string);

            // Show/hide if dependency is met without specific dependency items.
            if (empty($items_string) || empty($facet_items)) {
              return !$this->settings['reverse_dependency'];
            }
            else {
              foreach ($facet_items as $facet_item) {
                foreach ($this->activeItems[$facet_name] as $active_facet_item_key => $active_facet_item_data) {
                  if (!empty($facet_item)) {
                    if (!$this->settings['regex']) {
                      if ($facet_item == $active_facet_item_key) {
                        return !$this->settings['reverse_dependency'];
                      }
                    }
                    else {
                      $facet_item = '/' . trim(str_replace('/', '\\/', $facet_item)) . '/';
                      if (preg_match($facet_item, $active_facet_item_key)) {
                        return !$this->settings['reverse_dependency'];
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Otherwise show/hide this facet.
      return $this->settings['reverse_dependency'];
    }
  }
}