Пример #1
0
 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;
     }
 }