Exemplo n.º 1
0
 static function createFilterValues($filter, $view_join, $view_where, $filters_where, $indexed_elements, $search_prop)
 {
     $faceted_filter = $filter->parameters->get('faceted_filter', 2);
     $display_filter_as = $filter->parameters->get('display_filter_as', 0);
     // Filter Type of Display
     $filter_as_range = in_array($display_filter_as, array(2, 3));
     $lang_filter_values = $filter->parameters->get('lang_filter_values', 1);
     $show_matching_items = $filter->parameters->get('show_matching_items', 1);
     $show_matches = $filter_as_range || !$faceted_filter ? 0 : $show_matching_items;
     //echo "<b>FILTER NAME</b>: ". $filter->label ."<br/>\n";
     //echo "<b> &nbsp; view_join</b>: <br/>". $view_join ."<br/>\n";
     //echo "<b> &nbsp;view_where</b>: <br/>". $view_where ."<br/>\n";
     //echo "<b> &nbsp;filters_where</b>: <br/>". print_r($filters_where, true) ."<br/><br/>\n";
     //exit;
     if ($faceted_filter || !$indexed_elements) {
         $_results = FlexicontentFields::getFilterValues($filter, $view_join, $view_where, $filters_where);
     }
     // Support of value-indexed fields
     if (!$faceted_filter && $indexed_elements) {
         $results =& $indexed_elements;
     } else {
         if ($indexed_elements) {
             // Limit indexed element according to DB results found
             $results = array_intersect_key($indexed_elements, $_results);
             if ($faceted_filter == 2 && $show_matches) {
                 foreach ($results as $i => $result) {
                     $result->found = $_results[$i]->found;
                 }
             }
             // Support for multi-property fields
         } else {
             if ($search_prop) {
                 // Check and unserialize values
                 foreach ($_results as $i => $result) {
                     $v = @unserialize($result->value);
                     if ($v || $result->value === 'b:0;') {
                         $_results[$i] =& $v;
                     }
                 }
                 // Index values via the search property
                 $results = array();
                 foreach ($_results as $i => $result) {
                     if (is_array($_results[$i])) {
                         $_results[$i] = (object) $_results[$i];
                     } else {
                         $_results[$i] = (object) array($search_prop => $_results[$i]);
                     }
                     if (isset($_results[$i]->{$search_prop})) {
                         $results[$_results[$i]->{$search_prop}] = $_results[$i];
                     }
                 }
                 // non-indexable or single property field
             } else {
                 $results =& $_results;
             }
         }
     }
     // Language filter labels
     if ($lang_filter_values) {
         foreach ($results as $i => $result) {
             $results[$i]->text = JText::_($result->text);
         }
     }
     // Skip sorting for indexed elements, DB query or element entry is responsible
     // for ordering indexable fields, also skip if ordering is done by the filter
     if (!$indexed_elements && empty($filter->filter_orderby)) {
         uksort($results, 'strnatcasecmp');
     }
     return $results;
 }