public function process() { $seo_url = Tools::getValue('seo_url', false); if ($seo_url == 'products-comparison') { ob_end_clean(); header("Status: 301 Moved Permanently", false, 301); Tools::redirect('products-comparison.php?ajax=' . (int) Tools::getValue('ajax') . '&action=' . Tools::getValue('action') . '&id_product=' . (int) Tools::getValue('id_product')); die; } if ($seo_url && $this->id_seo && !Tools::getValue('getShareBlock')) { $resultSeoUrl = AdvancedSearchSeoClass::getSeoSearchByIdSeo((int) $this->id_seo, (int) $this->context->cookie->id_lang); if (!$resultSeoUrl) { Tools::redirect('404.php'); die; } if ($resultSeoUrl[0]['deleted']) { header("Status: 301 Moved Permanently", false, 301); Tools::redirect('index.php'); die; } $currentUri = explode('?', $_SERVER['REQUEST_URI']); $currentUri = $currentUri[0]; $this->realURI = __PS_BASE_URI__ . (Language::countActiveLanguages() > 1 ? Language::getIsoById($this->context->cookie->id_lang) . '/' : '') . 's/' . $resultSeoUrl[0]['id_seo'] . '/' . $resultSeoUrl[0]['seo_url']; if (!preg_match('#([a-z]{2})?/?s/([0-9]+)/([a-zA-Z0-9/_-]*)#', $_SERVER['REQUEST_URI'])) { header("Status: 301 Moved Permanently", false, 301); header("Location: " . $this->realURI . ((int) Tools::getValue('p') > 1 ? '?p=' . (int) Tools::getValue('p') : '')); die; } if (!Tools::getValue('id_seo_id_search') && ($resultSeoUrl[0]['seo_url'] != $seo_url || $currentUri != $this->realURI)) { header("Status: 301 Moved Permanently", false, 301); header("Location: " . $this->realURI); die; } $this->id_search = $resultSeoUrl[0]['id_search']; $AdvancedSearchClass = new AdvancedSearchClass((int) $this->id_search, (int) $this->context->cookie->id_lang); if (!$AdvancedSearchClass->active) { header("Status: 302 Moved Temporarily", false, 302); Tools::redirect('index.php'); die; } $criteria = unserialize($resultSeoUrl[0]['criteria']); if (is_array($criteria) && sizeof($criteria)) { $this->criterions = PM_AdvancedSearch4::getArrayCriteriaFromSeoArrayCriteria($criteria); } $_GET['id_seo_id_search'] = (int) $this->id_search; $_GET['as4c'] = $this->criterions; $this->hookName = AdvancedSearchClass::getHookName($AdvancedSearchClass->id_hook); $hasPriceCriterionGroup = false; if (is_array($this->criterions) && sizeof($this->criterions)) { $selected_criteria_groups_type = AdvancedSearchClass::getCriterionGroupsTypeAndDisplay((int) $this->id_search, array_keys($this->criterions)); if (is_array($selected_criteria_groups_type) && sizeof($selected_criteria_groups_type)) { foreach ($selected_criteria_groups_type as $criterionGroup) { if ($criterionGroup['criterion_group_type'] == 'price') { $hasPriceCriterionGroup = true; break; } } } } if ($hasPriceCriterionGroup && $resultSeoUrl[0]['id_currency'] && $this->context->cookie->id_currency != (int) $resultSeoUrl[0]['id_currency']) { $this->context->cookie->id_currency = $resultSeoUrl[0]['id_currency']; header('Refresh: 1; URL=' . $_SERVER['REQUEST_URI']); die; } $this->context->smarty->assign('as_cross_links', AdvancedSearchSeoClass::getCrossLinksSeo($this->context->cookie->id_lang, $resultSeoUrl[0]['id_seo'])); } else { if (Tools::getValue('setCollapseGroup')) { ob_end_clean(); $this->id_search = (int) Tools::getValue('id_search'); $id_criterion_group = (int) Tools::getValue('id_criterion_group'); $state = (int) Tools::getValue('state'); $id_criterion_group = $this->id_search . '_' . $id_criterion_group; $criterion_state = array($id_criterion_group => $state); $previous_criterion = array(); if (isset($this->context->cookie->criterion_group_state)) { $previous_criterion = unserialize($this->context->cookie->criterion_group_state); if (is_array($previous_criterion) && sizeof($previous_criterion)) { foreach ($previous_criterion as $k => $v) { if ($k == $id_criterion_group) { $criterion_state[$k] = (int) $state; } else { $criterion_state[$k] = (int) $v; } } $this->context->cookie->criterion_group_state = serialize($criterion_state); die; } else { $this->context->cookie->criterion_group_state = serialize($criterion_state); } die; } else { $this->context->cookie->criterion_group_state = serialize($criterion_state); } die; } elseif (Tools::getValue('setHideCriterionStatus')) { ob_end_clean(); $this->id_search = (int) Tools::getValue('id_search'); $state = (int) Tools::getValue('state'); if (isset($this->context->cookie->hidden_criteria_state)) { $hidden_criteria_state = unserialize($this->context->cookie->hidden_criteria_state); if (is_array($hidden_criteria_state)) { $hidden_criteria_state[$this->id_search] = $state; } else { $hidden_criteria_state = array(); } $this->context->cookie->hidden_criteria_state = serialize($hidden_criteria_state); } else { $this->context->cookie->hidden_criteria_state = serialize(array($this->id_search => $state)); } die; } elseif (Tools::getValue('getShareBlock')) { ob_end_clean(); echo Module::getInstanceByName('pm_advancedsearch4')->getShareBlock(Tools::safeOutput(Tools::getValue('ASSearchTitle')), Tools::safeOutput(Tools::getValue('ASSearchUrl'))); die; } else { if (Tools::getValue('resetSearchSelection')) { ob_end_clean(); $this->id_search = (int) Tools::getValue('id_search'); Module::getInstanceByName('pm_advancedsearch4')->resetSearchSelection($this->id_search); die('1'); } } $this->criterions = Tools::getValue('as4c', array()); if (is_array($this->criterions)) { $this->criterions = AdvancedSearchClass::cleanArrayCriterion($this->criterions); } else { $this->criterions = array(); } $this->criterions_hidden = Tools::getValue('as4c_hidden', array()); if (is_array($this->criterions_hidden)) { $this->criterions_hidden = AdvancedSearchClass::cleanArrayCriterion($this->criterions_hidden); } else { $this->criterions_hidden = array(); } $this->next_id_criterion_group = (int) Tools::getValue('next_id_criterion_group', false); $this->reset = (int) Tools::getValue('reset', false); $this->reset_group = (int) Tools::getValue('reset_group', false); if ($this->reset) { $this->criterions = array(); } if ($this->reset_group && isset($this->criterions[$this->reset_group])) { unset($this->criterions[$this->reset_group]); } $this->hookName = Tools::getValue('hookName'); if (!Validate::isHookName($this->hookName)) { die('Invalid hook name'); } $this->id_search = (int) Tools::getValue('id_search'); $this->context->cookie->{'next_id_criterion_group_' . (int) $this->id_search} = $this->next_id_criterion_group; } }
private function getCriterionsGroupsAndCriterionsForSearch($result, $id_lang, $selected_criterion = array(), $selected_criterion_hidden = array(), $with_products = false, $id_criterion_group = 0, $on_search = false) { if (version_compare(_PS_VERSION_, '1.5.0.0', '>=')) { $currency = Context::getContext()->currency; } else { global $currency; } $criterion_group_state = isset($this->_cookie->criterion_group_state) ? @unserialize($this->_cookie->criterion_group_state) : array(); $hidden_criteria_state = isset($this->_cookie->hidden_criteria_state) ? @unserialize($this->_cookie->hidden_criteria_state) : array(); $set_base_selection = false; $selected_criteria_groups_type = array(); if (!$selected_criterion || is_array($selected_criterion) && !sizeof($selected_criterion)) { $reinit_selected_criterion = true; } if (AdvancedSearchCoreClass::_isFilledArray($result)) { foreach ($result as $key => $row) { if ($row['filter_by_emplacement'] && Tools::getValue('id_seo') !== false && is_numeric(Tools::getValue('id_seo')) && Tools::getValue('id_seo') > 0) { if (!isset($result[$key]['seo_criterion_groups'])) { $result[$key]['seo_criterion_groups'] = array(); } if ($row['filter_by_emplacement'] && Tools::getValue('id_seo') !== false && is_numeric(Tools::getValue('id_seo')) && Tools::getValue('id_seo') > 0) { $seo_search = new AdvancedSearchSeoClass((int) Tools::getValue('id_seo')); if (Validate::isLoadedObject($seo_search) && isset($seo_search->criteria) && !empty($seo_search->criteria)) { $criteres_seo = @unserialize($seo_search->criteria); if (AdvancedSearchCoreClass::_isFilledArray($criteres_seo)) { foreach ($criteres_seo as $critere_seo) { $critere_seo = explode('_', $critere_seo); $id_criterion_group_seo = (int) $critere_seo[0]; $result[$key]['seo_criterion_groups'][] = $id_criterion_group_seo; } } } } $result[$key]['seo_criterion_groups'] = array_unique($result[$key]['seo_criterion_groups']); } else { $result[$key]['seo_criterion_groups'] = array(); } if (isset($reinit_selected_criterion)) { $selected_criterion = array(); } if (Tools::getValue('seo_url') && Tools::getValue('id_seo_id_search') == $row['id_search']) { $selected_criterion = Tools::getValue('as4c', array()); } if (Tools::getValue('seo_url')) { $result[$key]['keep_category_information'] = 0; $row['keep_category_information'] = 0; } if ($row['save_selection']) { if ($on_search && (!$selected_criterion || is_array($selected_criterion) && !sizeof($selected_criterion))) { $this->resetSearchSelection($row['id_search']); } $this->saveSearchSelection($row, $selected_criterion); } if ($row['filter_by_emplacement'] && (!$selected_criterion || is_array($selected_criterion) && !sizeof($selected_criterion))) { $selected_criterion = $this->_getCriteriaFromEmplacement($row['id_search'], $row['id_category_root']); $set_base_selection = true; } if ($row['filter_by_emplacement'] && Tools::getValue('id_seo') !== false && is_numeric(Tools::getValue('id_seo')) && Tools::getValue('id_seo') > 0) { $this->_addToFBLog('SEO page, looking for pre-selected criterions'); $seo_search = new AdvancedSearchSeoClass((int) Tools::getValue('id_seo')); if (Validate::isLoadedObject($seo_search) && isset($seo_search->criteria) && !empty($seo_search->criteria)) { $criteres_seo = @unserialize($seo_search->criteria); if (self::_isFilledArray($criteres_seo)) { foreach ($criteres_seo as $critere_seo) { $critere_seo = explode('_', $critere_seo); $id_criterion_group_seo = (int) $critere_seo[0]; if (strpos($critere_seo[1], '-') === false) { $id_criterion_value = (int) $critere_seo[1]; } else { $id_criterion_value = $critere_seo[1]; } if (isset($selected_criterion[$id_criterion_group_seo])) { if (!in_array($id_criterion_value, $selected_criterion[$id_criterion_group_seo])) { $selected_criterion[$id_criterion_group_seo][] = $id_criterion_value; } } else { $selected_criterion[$id_criterion_group_seo] = array(); $selected_criterion[$id_criterion_group_seo][] = $id_criterion_value; } } } $row['id_seo'] = (int) Tools::getValue('id_seo'); $row['id_seo_id_search'] = (int) $row['id_search']; $row['seo_url'] = (string) trim(Tools::getValue('seo_url')); } } if (is_array($selected_criterion) && sizeof($selected_criterion)) { $selected_criterion = AdvancedSearchClass::cleanArrayCriterion($selected_criterion); $selected_criteria_groups_type = AdvancedSearchClass::getCriterionGroupsTypeAndDisplay($row['id_search'], array_keys($selected_criterion)); } if ($set_base_selection || ($result[$key]['base_selection'] = Tools::getValue('as4_base_selection', false))) { if (!isset($result[$key]['base_selection'])) { if (isset($selected_criterion[key($selected_criterion)])) { $result[$key]['base_selection'] = $selected_criterion[key($selected_criterion)]; } } else { $result[$key]['base_selection'] = unserialize(base64_decode($result[$key]['base_selection'])); } } if ($row['step_search'] && is_array($selected_criterion) && sizeof($selected_criterion)) { $selected_criterion_groups = array_keys($selected_criterion); } if ($row['dynamic_criterion'] && $row['search_method'] && Tools::getIsset('with_product') && Tools::getIsset('old_selected_criterion')) { $current_selected_criterion = unserialize(base64_decode(Tools::getValue('old_selected_criterion'))); } else { $current_selected_criterion = $selected_criterion; } $selectedCriterionsForSeo = array(); if (self::_isFilledArray($current_selected_criterion)) { foreach ($current_selected_criterion as $idCriterionGroupSeo => $idCriterionsForSeo) { foreach (array_values($idCriterionsForSeo) as $idCriterionForSeo) { $selectedCriterionsForSeo[] = (int) $idCriterionGroupSeo . '_' . (int) $idCriterionForSeo; } } $selectedCriterionsForSeo = array_unique($selectedCriterionsForSeo); } if ($this->productLinksNCIsInstalled && (Tools::getValue('id_search') || Tools::getValue('id_seo'))) { $this->saveSearchSelection4ProductLinkNC($row['id_search'], $selected_criterion, $row['search_on_stock'], $row['products_order_by'], $row['products_order_way']); } elseif ($this->productLinksNCIsInstalled && !Tools::getValue('id_product', false)) { $this->clearSearchSelection4ProductLinkNC(); } if (!$id_criterion_group) { $result[$key]['criterions_groups'] = AdvancedSearchCriterionGroupClass::getCriterionsGroupsFromIdSearch($row['id_search'], $id_lang, false); } else { $result[$key]['criterions_groups'] = AdvancedSearchCriterionGroupClass::getCriterionsGroup($row['id_search'], $id_criterion_group, $id_lang); } if ($row['remind_selection'] && is_array($current_selected_criterion) && sizeof($current_selected_criterion)) { $result[$key]['criterions_groups_selected'] = AdvancedSearchCriterionGroupClass::getCriterionsGroup($row['id_search'], array_keys($current_selected_criterion), $id_lang); foreach ($current_selected_criterion as $id_criterion_group_selected => $selected_criteria) { foreach ($selected_criteria as $criterion_value) { if (!isset($result[$key]['criterions_selected'][$id_criterion_group_selected])) { $result[$key]['criterions_selected'][$id_criterion_group_selected] = array(); } if (preg_match('#-#', $criterion_value)) { $range = explode('-', $criterion_value); $groupInfo = AdvancedSearchCriterionGroupClass::getCriterionGroupTypeAndRangeSign($row['id_search'], $id_criterion_group_selected, $id_lang); if (self::_isFilledArray($groupInfo) && isset($groupInfo['criterion_group_type']) && $groupInfo['criterion_group_type'] == 'price') { $rangeSignLeft = $currency->getSign('left'); $rangeSignRight = $currency->getSign('right'); } else { $rangeSignLeft = ''; if (self::_isFilledArray($groupInfo) && isset($groupInfo['criterion_group_type'])) { $rangeSignRight = ' ' . $groupInfo['range_sign']; } else { $rangeSignRight = ''; } } $result[$key]['criterions_selected'][$id_criterion_group_selected][] = array('value' => $this->l('from') . ' ' . $rangeSignLeft . $range[0] . $rangeSignRight . ' ' . $this->l('to') . ' ' . $rangeSignLeft . $range[1] . $rangeSignRight, 'id_criterion' => $criterion_value); } else { $result[$key]['criterions_selected'][$id_criterion_group_selected][] = AdvancedSearchCriterionClass::getCriterionValueById($row['id_search'], $id_lang, $criterion_value); } } } } if (!Tools::getValue('only_products')) { if (isset($hidden_criteria_state[$row['id_search']])) { $result[$key]['advanced_search_open'] = $hidden_criteria_state[$row['id_search']]; } else { $result[$key]['advanced_search_open'] = 0; } $this->_addToFBLog("Retrieve criterions groups"); if (sizeof($result[$key]['criterions_groups'])) { $prev_id_criterion_group = false; foreach ($result[$key]['criterions_groups'] as $key2 => $row2) { if ($row2['visible'] == 0) { continue; } if ($row['collapsable_criterias'] && isset($criterion_group_state[$row['id_search'] . '_' . $row2['id_criterion_group']]) && (int) $criterion_group_state[$row['id_search'] . '_' . $row2['id_criterion_group']] == 0) { $result[$key]['criterions_groups'][$key2]['is_collapsed'] = true; } elseif (isset($criterion_group_state[$row['id_search'] . '_' . $row2['id_criterion_group']]) && $criterion_group_state[$row['id_search'] . '_' . $row2['id_criterion_group']]) { $result[$key]['criterions_groups'][$key2]['is_collapsed'] = false; } if (!$row2['visible'] && !isset($selected_criterion[$row2['id_criterion_group']]) && ($row2['criterion_group_type'] == 'manufacturer' && !Tools::getValue('id_manufacturer') || $row2['criterion_group_type'] == 'supplier' && !Tools::getValue('id_supplier') || $row2['criterion_group_type'] == 'category' && !Tools::getValue('id_category'))) { continue; } if (!$row['step_search'] || $row['step_search'] && ($key2 == 0 || isset($selected_criterion_groups) && (in_array($row2['id_criterion_group'], $selected_criterion_groups) || $prev_id_criterion_group && in_array($prev_id_criterion_group, $selected_criterion_groups) || !sizeof($result[$key]['criterions'][$prev_id_criterion_group])))) { if ($row2['range'] == 1) { if ($row2['criterion_group_type'] == 'price') { $rangeSignLeft = $currency->getSign('left'); $rangeSignRight = $currency->getSign('right'); } else { $rangeSignLeft = ''; $rangeSignRight = ' ' . $row2['range_sign']; } $ranges = explode(',', $row2['range_interval']); $criteria_formated = array(); foreach ($ranges as $krange => $range) { $rangeUp = isset($ranges[$krange + 1]) ? $ranges[$krange + 1] : ''; $range1 = $range . '-' . $rangeUp; $range2 = ($rangeUp ? $this->l('from') : $this->l('more than')) . ' ' . $rangeSignLeft . $range . $rangeSignRight . ($rangeUp ? ' ' . $this->l('to') . ' ' . $rangeSignLeft . $rangeUp . $rangeSignRight : ''); if (is_array($selected_criterion)) { $citeria4count = $selected_criterion; } else { $citeria4count = array(); } $citeria4count[$row2['id_criterion_group']] = array($range1); $selected_criteria_groups_type2 = AdvancedSearchClass::getCriterionGroupsTypeAndDisplay($row['id_search'], array_keys($citeria4count)); $nb_products = AdvancedSearchClass::getProductsSearched($row, $id_lang, false, $citeria4count, $selected_criteria_groups_type2, NULL, NULL, NULL, NULL, true, false, false, false, false, true, false, $row['search_on_stock']); if (!$row['display_empty_criteria'] && !$nb_products) { continue; } $criteria_formated[$range1] = array('id_criterion' => $range1, 'value' => $range2, 'nb_product' => $nb_products); } $result[$key]['criterions'][$row2['id_criterion_group']] = $criteria_formated; } elseif ($row2['criterion_group_type'] == 'price') { $range_selected_criterion = $selected_criterion; unset($range_selected_criterion[$row2['id_criterion_group']]); $result[$key]['criterions'][$row2['id_criterion_group']] = AdvancedSearchClass::getPriceRangeForSearchBloc($row, $row2['id_criterion_group'], $this->_cookie->id_currency, isset($this->_cookie->id_country) ? $this->_cookie->id_country : 0, $this->getCurrentCustomerGroupId(), false, $row['step_search'] && !$id_criterion_group && $key2 == 0 ? array() : $range_selected_criterion, $row['step_search'] && !$id_criterion_group && $key2 == 0 ? array() : $selected_criteria_groups_type); $this->_addToFBLog("Retrieve price range group " . $row2['id_criterion_group']); $min_price_id_currency = (int) $result[$key]['criterions'][$row2['id_criterion_group']][0]['min_price_id_currency']; $max_price_id_currency = (int) $result[$key]['criterions'][$row2['id_criterion_group']][0]['max_price_id_currency']; $result[$key]['criterions'][$row2['id_criterion_group']][0]['min'] = $result[$key]['criterions'][$row2['id_criterion_group']][0]['min_price']; $result[$key]['criterions'][$row2['id_criterion_group']][0]['max'] = $result[$key]['criterions'][$row2['id_criterion_group']][0]['max_price']; if ($min_price_id_currency == 0 && $min_price_id_currency != $this->_cookie->id_currency || $min_price_id_currency != 0 && $min_price_id_currency != $this->_cookie->id_currency) { $result[$key]['criterions'][$row2['id_criterion_group']][0]['min'] = floor(Tools::convertPrice($result[$key]['criterions'][$row2['id_criterion_group']][0]['min_price'], NULL, $this->_cookie->id_currency)); } if ($max_price_id_currency == 0 && $max_price_id_currency != $this->_cookie->id_currency || $max_price_id_currency != 0 && $max_price_id_currency != $this->_cookie->id_currency) { $result[$key]['criterions'][$row2['id_criterion_group']][0]['max'] = ceil(Tools::convertPrice($result[$key]['criterions'][$row2['id_criterion_group']][0]['max_price'], NULL, $this->_cookie->id_currency)); } if ($row['step_search'] && $result[$key]['criterions'][$row2['id_criterion_group']][0]['min'] == 0 && $result[$key]['criterions'][$row2['id_criterion_group']][0]['max'] == 0) { unset($result[$key]['criterions_groups'][$key2]); continue; } $result[$key]['criterions_groups'][$key2]['left_range_sign'] = $currency->getSign('left'); $result[$key]['criterions_groups'][$key2]['right_range_sign'] = $currency->getSign('right'); if (AdvancedSearchCoreClass::_isFilledArray($selected_criterion) && isset($selected_criterion[$row2['id_criterion_group']]) && sizeof($selected_criterion[$row2['id_criterion_group']])) { $range = explode('-', $selected_criterion[$row2['id_criterion_group']][0]); $result[$key]['criterions'][$row2['id_criterion_group']][0]['cur_min'] = $range[0]; if (isset($range[1])) { $result[$key]['criterions'][$row2['id_criterion_group']][0]['cur_max'] = $range[1]; } } $result[$key]['criterions'][$row2['id_criterion_group']][0]['step'] = (double) $row2['range_nb'] <= 0 ? 1 : $row2['range_nb']; } elseif ($row2['display_type'] == 5) { $range_selected_criterion = $selected_criterion; unset($range_selected_criterion[$row2['id_criterion_group']]); $result[$key]['criterions'][$row2['id_criterion_group']] = AdvancedSearchClass::getCriterionsRange($row, $row2['id_criterion_group'], $id_lang, false, $range_selected_criterion, $selected_criteria_groups_type, $this->_cookie->id_currency, isset($this->_cookie->id_country) ? $this->_cookie->id_country : 0, $this->getCurrentCustomerGroupId(), $row2); if ($row['step_search'] && $result[$key]['criterions'][$row2['id_criterion_group']][0]['min'] == 0 && $result[$key]['criterions'][$row2['id_criterion_group']][0]['max'] == 0) { unset($result[$key]['criterions_groups'][$key2]); continue; } if (AdvancedSearchCoreClass::_isFilledArray($selected_criterion) && isset($selected_criterion[$row2['id_criterion_group']]) && sizeof($selected_criterion[$row2['id_criterion_group']])) { $range = explode('-', $selected_criterion[$row2['id_criterion_group']][0]); $result[$key]['criterions'][$row2['id_criterion_group']][0]['cur_min'] = $range[0]; if (isset($range[1])) { $result[$key]['criterions'][$row2['id_criterion_group']][0]['cur_max'] = $range[1]; } } $result[$key]['criterions'][$row2['id_criterion_group']][0]['step'] = (double) $row2['range_nb'] <= 0 ? 1 : $row2['range_nb']; $result[$key]['criterions_groups'][$key2]['left_range_sign'] = ''; $result[$key]['criterions_groups'][$key2]['right_range_sign'] = isset($row2['range_sign']) && strlen($row2['range_sign']) > 0 ? ' ' . $row2['range_sign'] : ''; } else { $criteria = AdvancedSearchClass::getCriterionsForSearchBloc($row, $row2['id_criterion_group'], $id_lang, $row['display_nb_result_criterion'], $selected_criterion, $selected_criteria_groups_type, $this->_cookie->id_currency, isset($this->_cookie->id_country) ? $this->_cookie->id_country : 0, $this->getCurrentCustomerGroupId(), true, $row2, isset($result[$key]['base_selection']) && $result[$key]['base_selection'] && self::_isFilledArray($result[$key]['base_selection']) ? $result[$key]['base_selection'] : false, $result[$key]['criterions_groups']); if ($row2['display_type'] == 3 || $row2['display_type'] == 4 || $row2['display_type'] == 7) { $this->addSeoPageUrlToCriterions($row['id_search'], $id_lang, $criteria, $selectedCriterionsForSeo); } $criteria_formated = array(); if ($criteria && sizeof($criteria)) { foreach ($criteria as $rowCriteria) { $criteria_formated[$rowCriteria['id_criterion']] = $rowCriteria; } } $result[$key]['criterions'][$row2['id_criterion_group']] = $criteria_formated; if ($row['filter_by_emplacement'] && Tools::getValue('id_seo') == false && (Tools::getValue('id_manufacturer', Tools::getValue('id_manufacturer_search')) || Tools::getValue('id_supplier', Tools::getValue('id_supplier')))) { $preSelectedCriterionEmplacement = $this->_getCriteriaFromEmplacement($row['id_search']); if (is_array($preSelectedCriterionEmplacement) && isset($preSelectedCriterionEmplacement[$row2['id_criterion_group']]) && AdvancedSearchCoreClass::_isFilledArray($preSelectedCriterionEmplacement[$row2['id_criterion_group']])) { $result[$key]['criterions_groups'][$key2]['is_preselected_by_emplacement'] = true; } } $this->_addToFBLog("Retrieve criterions for group " . $row2['id_criterion_group']); } $prev_id_criterion_group = $row2['id_criterion_group']; } } } } if ($with_products) { $orderBy = Tools::strtolower(Tools::getValue('orderby', $this->orderByValues[$row['products_order_by']])); $orderWay = Tools::strtolower(Tools::getValue('orderway', $this->orderWayValues[$row['products_order_way']])); if (!in_array($orderBy, $this->orderByValues)) { $orderBy = $this->orderByValues[$row['products_order_by']]; } if (!in_array($orderWay, $this->orderWayValues)) { $orderWay = $this->orderWayValues[$row['products_order_way']]; } $result[$key]['products'] = AdvancedSearchClass::getProductsSearched($row, $id_lang, false, $selected_criterion, $selected_criteria_groups_type, (int) Tools::getValue('p', 1), abs((int) Tools::getValue('n', isset($this->_cookie->nb_item_per_page) && is_numeric($this->_cookie->nb_item_per_page) ? $this->_cookie->nb_item_per_page : (int) $row['products_per_page'])), $orderBy, $orderWay, false, $this->_cookie->id_currency, isset($this->_cookie->id_country) ? $this->_cookie->id_country : 0, $this->getCurrentCustomerGroupId(), true); $this->_addToFBLog("Retrieve results"); } if ($with_products || $row['display_nb_result_on_blc']) { $result[$key]['total_products'] = AdvancedSearchClass::getProductsSearched($row, $id_lang, false, $selected_criterion, $selected_criteria_groups_type, 1, 10, NULL, NULL, true, $this->_cookie->id_currency, isset($this->_cookie->id_country) ? $this->_cookie->id_country : 0, $this->getCurrentCustomerGroupId(), true); $this->_addToFBLog("Retrieve results count"); } $result[$key]['selected_criterion'] = $selected_criterion; if ($row['dynamic_criterion'] && $row['search_method'] && Tools::getIsset('with_product') && Tools::getIsset('old_selected_criterion')) { $result[$key]['old_selected_criterion'] = unserialize(base64_decode(Tools::getValue('old_selected_criterion'))); } $result[$key]['save_selection_active'] = isset($row['save_selection_active']); } } return $result; }