/**
  * Implements FacetapiWidget::execute().
  *
  * We have to hack our way around things to ensure that only one item is
  * active at a time. The downside of this hack is that it might not work with
  * alternate URL processors such as Facet API Pretty Paths. Of course, there
  * is a feature request which I have ignored for some time, so shame on me.
  *
  * @see http://drupal.org/node/1393928
  */
 public function execute()
 {
     $element =& $this->build[$this->facet['field alias']];
     // Get all variables we will need to hack the query string in order to
     // ensure that only one item is active at a time.
     $filter_key = $this->facet->getAdapter()->getUrlProcessor()->getFilterKey();
     $facet = $this->facet->getFacet();
     $field_alias = rawurlencode($facet['field alias']);
     $value_start_pos = strlen($field_alias) + 1;
     // Re-build query string for all date range facets.
     foreach ($element as &$item) {
         // Filters out all other values from the query string excluding the value
         // of the current item.
         if (!$item['#active']) {
             foreach ($item['#query'][$filter_key] as $pos => $filter) {
                 if (0 === strpos($filter, $field_alias . ':')) {
                     $value = substr($filter, $value_start_pos);
                     if ($value !== $item['#indexed_value']) {
                         unset($item['#query'][$filter_key][$pos]);
                     }
                 }
             }
         }
     }
     // Render the links.
     parent::execute();
 }
 /**
  * Implements FacetapiWidget::execute().
  *
  * We have to hack our way around things to ensure that only one item is
  * active at a time. The downside of this hack is that it might not work with
  * alternate URL processors such as Facet API Pretty Paths. Of course, there
  * is a feature request which I have ignored for some time, so shame on me.
  *
  * @see http://drupal.org/node/1393928
  */
 public function execute()
 {
     $element =& $this->build[$this->facet['field alias']];
     // Get all variables we will need to hack the query string in order to
     // ensure that only one item is active at a time.
     $filter_key = $this->facet->getAdapter()->getUrlProcessor()->getFilterKey();
     $facet = $this->facet->getFacet();
     $field_alias = rawurlencode($facet['field alias']);
     $value_start_pos = strlen($field_alias) + 1;
     $processor = $this->facet->getAdapter()->getUrlProcessor();
     $query_params = $processor->getParams();
     // Re-build query string for all date range facets.
     foreach ($element as &$item) {
         // Filters out all other values from the query string excluding the value
         // of the current item.
         if (!$item['#active']) {
             foreach ($query_params[$filter_key] as $filter) {
                 if (0 === strpos($filter, $field_alias . ':')) {
                     $value = substr($filter, $value_start_pos);
                     if ($value !== $item['#indexed_value']) {
                         // FacetApi Pretty Paths url processor.
                         if (get_class($processor) == 'FacetapiUrlProcessorPrettyPaths') {
                             $facet_path_item = str_replace(':', '/', $filter);
                             $item['#path'] = str_replace("/{$facet_path_item}", '', $item['#path']);
                         } else {
                             $num = array_search($filter, $item['#query'][$filter_key]);
                             unset($item['#query'][$filter_key][$num]);
                             // Reset keys.
                             $item['#query'][$filter_key] = array_values($item['#query'][$filter_key]);
                         }
                     }
                 }
             }
         }
         // Always display label for avoid problem from issue #2016601.
         if (!empty($item['label'])) {
             $item['#markup'] = $item['label'];
         }
     }
     // Render the links.
     parent::execute();
 }