示例#1
0
    public static function getSearchsFromHook($hookName, $id_lang, $active = true, $ignore_include = false)
    {
        global $cookie;
        $include_categories = false;
        $include_cms = false;
        $include_supplier = false;
        $include_manufacturer = false;
        $include_product = false;
        $include_seo = false;
        $include_special_page = false;
        $curIdCategory = false;
        $curIdSearch = (int) Tools::getValue('id_search', false);
        if (!Tools::getValue('id_seo') && in_array($hookName, self::$_valid_hooks_cms)) {
            $include_cms = true;
            $curIdCms = (int) Tools::getValue('id_cms', false);
        }
        if (!Tools::getValue('id_seo') && in_array($hookName, self::$_valid_hooks_supplier)) {
            $include_supplier = true;
            $curIdSupplier = (int) Tools::getValue('id_supplier', false);
        }
        if (!Tools::getValue('id_seo') && in_array($hookName, self::$_valid_hooks_manufacturer)) {
            $include_manufacturer = true;
            $curIdManufacturer = (int) Tools::getValue('id_manufacturer', false);
        }
        if (!Tools::getValue('id_seo') && in_array($hookName, self::$_valid_hooks_product)) {
            $include_product = true;
            $curIdProduct = (int) Tools::getValue('id_product', false);
        }
        if (!Tools::getValue('id_seo') && in_array($hookName, self::$_valid_hooks_special_page)) {
            $include_special_page = true;
            $curSpecialPage = AdvancedSearchCoreClass::_getSmartyVarValue('page_name');
        }
        if (!Tools::getValue('id_seo') && in_array($hookName, self::$_valid_hooks_category)) {
            $include_categories = true;
            if ($_SERVER['SCRIPT_NAME'] == __PS_BASE_URI__ . 'index.php' && (!Tools::getIsset('controller') || !Tools::getValue('controller') || Tools::getValue('controller') == 'index')) {
                $curIdCategory = version_compare(_PS_VERSION_, '1.5.0.0', '>=') ? Category::getRootCategory()->id : 1;
            } elseif (Tools::getIsset('id_category') && Tools::getValue('id_category')) {
                $curIdCategory = (int) Tools::getValue('id_category');
            }
        }
        if (Tools::getValue('id_seo')) {
            $include_seo = true;
        }
        if ($hookName == -1) {
            $id_hook = -1;
        } else {
            $id_hook = AdvancedSearchCoreClass::_getHookIdByName($hookName);
        }
        $result = Db::getInstance()->ExecuteS('SELECT DISTINCT advs.*, advsl.*, advs.`id_search`
		FROM `' . _DB_PREFIX_ . 'pm_advancedsearch` advs
		' . (version_compare(_PS_VERSION_, '1.5.0.0', '>=') ? AdvancedSearchCoreClass::addSqlAssociation('pm_advancedsearch', 'advs', 'id_search') : '') . '
		LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_lang` advsl ON (advs.`id_search` = advsl.`id_search` AND advsl.`id_lang` = ' . (int) $id_lang . ' )
		' . ($curIdSearch ? '' : 'LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_cms` advsc ON (advs.`id_search` = advsc.`id_search`)
		LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_category` advsca ON (advs.`id_search` = advsca.`id_search`)
		LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_manufacturers` advsm ON (advs.`id_search` = advsm.`id_search`)
		LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_suppliers` advssu ON (advs.`id_search` = advssu.`id_search`)
		LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_products` advsp ON (advs.`id_search` = advsp.`id_search`)
		LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_special_pages` advssp ON (advs.`id_search` = advssp.`id_search`)') . '
		' . ($include_seo ? 'LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_seo` advss ON (advss.`id_search` = advs.`id_search`)' : '') . '
		WHERE IF((
			SELECT COUNT(advs.id_search)
			FROM `' . _DB_PREFIX_ . 'pm_advancedsearch` advs
			' . ($curIdSearch ? '' : 'LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_cms` advsc ON (advs.`id_search` = advsc.`id_search`)
			LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_category` advsca ON (advs.`id_search` = advsca.`id_search`)
			LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_manufacturers` advsm ON (advs.`id_search` = advsm.`id_search`)
			LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_suppliers` advssu ON (advs.`id_search` = advssu.`id_search`)
			LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_products` advsp ON (advs.`id_search` = advsp.`id_search`)
			LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_special_pages` advssp ON (advs.`id_search` = advssp.`id_search`)') . '
			' . ($include_seo ? 'LEFT JOIN `' . _DB_PREFIX_ . 'pm_advancedsearch_seo` advss ON (advss.`id_search` = advs.`id_search`)' : '') . '
			WHERE advs.`unique_search` = 1
			' . ($include_seo ? ' AND advss.`id_seo` = ' . (int) Tools::getValue('id_seo') : '') . '
			' . ($active ? 'AND advs.`active` = 1' : '') . '
			' . ($curIdSearch ? ' AND advs.`id_search` = ' . (int) $curIdSearch . '' : ($ignore_include ? '' : '
			 AND (
			 (' . ($include_categories && isset($curIdCategory) && $curIdCategory ? 'advsca.`id_category` = ' . intval($curIdCategory) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
			 OR (' . ($include_cms && isset($curIdCms) && $curIdCms ? 'advsc.`id_cms` = ' . intval($curIdCms) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
			 OR (' . ($include_supplier && isset($curIdSupplier) && $curIdSupplier ? 'advssu.`id_supplier` = ' . intval($curIdSupplier) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
		 	 OR (' . ($include_manufacturer && isset($curIdManufacturer) && $curIdManufacturer ? 'advsm.`id_manufacturer` = ' . intval($curIdManufacturer) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
		 	 OR (' . ($include_product && isset($curIdProduct) && $curIdProduct ? 'advsp.`id_product` = ' . intval($curIdProduct) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
		 	 OR (' . ($include_special_page && isset($curSpecialPage) && $curSpecialPage ? 'advssp.`page` = "' . pSQL($curSpecialPage) . '" OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
			 )')) . '
			 LIMIT 1
		) >= 1, advs.`unique_search`, 1) = 1
		AND advs.`id_hook` = ' . intval($id_hook) . '
		' . ($include_seo ? ' AND advss.`id_seo` = ' . (int) Tools::getValue('id_seo') : '') . '
		' . ($active ? 'AND advs.`active` = 1' : '') . '
		' . ($curIdSearch ? ' AND advs.`id_search` = ' . (int) $curIdSearch . '
		' : ($ignore_include ? '' : ' AND (
		 (' . ($include_categories && $curIdCategory ? 'advsca.`id_category` = ' . intval($curIdCategory) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
			 OR (' . ($include_cms && $curIdCms ? 'advsc.`id_cms` = ' . intval($curIdCms) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
			 OR (' . ($include_supplier && $curIdSupplier ? 'advssu.`id_supplier` = ' . intval($curIdSupplier) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
		 	 OR (' . ($include_manufacturer && $curIdManufacturer ? 'advsm.`id_manufacturer` = ' . intval($curIdManufacturer) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
		 	 OR (' . ($include_product && $curIdProduct ? 'advsp.`id_product` = ' . intval($curIdProduct) . ' OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
		 	 OR (' . ($include_special_page && $curSpecialPage ? 'advssp.`page` = "' . pSQL($curSpecialPage) . '" OR ' : '') . (!Tools::getValue('id_seo') ? '(ISNULL(advsca.`id_category`) AND ISNULL(advsc.`id_cms`) AND ISNULL(advssu.`id_supplier`) AND ISNULL(advsm.`id_manufacturer`) AND ISNULL(advsp.`id_product`) AND ISNULL(advssp.`page`))' : '1') . ')
		)') . ''));
        return $result;
    }