chore: update code structure for better readability and maintainability
This commit is contained in:
21
.vscode/ftp-kr.sync.cache.json
vendored
21
.vscode/ftp-kr.sync.cache.json
vendored
@@ -41,6 +41,7 @@
|
||||
"modified": false
|
||||
},
|
||||
"_backup": {},
|
||||
"backup_before_patch": {},
|
||||
"bin": {},
|
||||
"bridge_7GGkddwn.php": {
|
||||
"type": "-",
|
||||
@@ -56,9 +57,9 @@
|
||||
},
|
||||
"buy-by-phone.php": {
|
||||
"type": "-",
|
||||
"size": 3655,
|
||||
"size": 4511,
|
||||
"lmtime": 0,
|
||||
"modified": false
|
||||
"modified": true
|
||||
},
|
||||
"cache": {},
|
||||
"calculate": {},
|
||||
@@ -165,9 +166,9 @@
|
||||
},
|
||||
".htaccess": {
|
||||
"type": "-",
|
||||
"size": 7508,
|
||||
"size": 18466,
|
||||
"lmtime": 0,
|
||||
"modified": false
|
||||
"modified": true
|
||||
},
|
||||
".htaccess.2025-01-27-1738009656": {
|
||||
"type": "-",
|
||||
@@ -409,6 +410,12 @@
|
||||
"modified": false
|
||||
},
|
||||
"pub": {},
|
||||
"Regulamin_Konkursu_Serta_Komfort_najwyzszych_lotow.pdf": {
|
||||
"type": "-",
|
||||
"size": 140707,
|
||||
"lmtime": 0,
|
||||
"modified": false
|
||||
},
|
||||
"robots.txt": {
|
||||
"type": "-",
|
||||
"size": 2723,
|
||||
@@ -435,6 +442,12 @@
|
||||
"modified": false
|
||||
},
|
||||
"src": {},
|
||||
"START_TUTAJ.md": {
|
||||
"type": "-",
|
||||
"size": 3171,
|
||||
"lmtime": 0,
|
||||
"modified": false
|
||||
},
|
||||
"stats": {},
|
||||
"stats.php": {
|
||||
"type": "-",
|
||||
|
||||
2442
backup_before_patch/As4SearchEngine.php.backup
Normal file
2442
backup_before_patch/As4SearchEngine.php.backup
Normal file
File diff suppressed because it is too large
Load Diff
99
backup_before_patch/As4SearchEngineDb.php.backup
Normal file
99
backup_before_patch/As4SearchEngineDb.php.backup
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @author Presta-Module.com <support@presta-module.com>
|
||||
* @copyright Presta-Module
|
||||
* @license Commercial
|
||||
*
|
||||
* ____ __ __
|
||||
* | _ \ | \/ |
|
||||
* | |_) | | |\/| |
|
||||
* | __/ | | | |
|
||||
* |_| |_| |_|
|
||||
*
|
||||
****/
|
||||
|
||||
if (!defined('_PS_VERSION_')) {
|
||||
exit;
|
||||
}
|
||||
abstract class As4SearchEngineDb
|
||||
{
|
||||
// Enable SQL log ?
|
||||
public static $as4SqlLog = false;
|
||||
// Only log if elasped time >= X ms
|
||||
public static $as4SqlQueryThresholdTime = 0;
|
||||
public static function query($query, $type = 1, $useArray = true, $useCache = true)
|
||||
{
|
||||
if (self::$as4SqlLog) {
|
||||
$time = microtime(true);
|
||||
$log = trim($query);
|
||||
$finalOrigin = array(
|
||||
'line' => 'UNKNWON',
|
||||
'class' => 'UNKNWON',
|
||||
'function' => 'UNKNWON',
|
||||
);
|
||||
$origin = debug_backtrace();
|
||||
foreach ($origin as $originRow) {
|
||||
if (!empty($originRow['class']) && $originRow['class'] != 'As4SearchEngineDb') {
|
||||
$finalOrigin = $originRow;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
$instanceMaster = _PS_USE_SQL_SLAVE_;
|
||||
if (!$useCache) {
|
||||
$instanceMaster = true;
|
||||
}
|
||||
if ($type == 1) {
|
||||
$result = Db::getInstance($instanceMaster)->ExecuteS($query, $useArray, $useCache);
|
||||
} elseif ($type == 2) {
|
||||
$result = Db::getInstance($instanceMaster)->getRow($query, $useCache);
|
||||
} elseif ($type == 3) {
|
||||
$result = Db::getInstance($instanceMaster)->getValue($query, $useCache);
|
||||
} elseif ($type == 4) {
|
||||
$result = Db::getInstance()->Execute($query);
|
||||
}
|
||||
if (self::$as4SqlLog) {
|
||||
$elaspedTime = round((microtime(true) - $time)*1000, 2);
|
||||
if ($elaspedTime >= self::$as4SqlQueryThresholdTime) {
|
||||
$log .= "\n\n";
|
||||
$log .= 'L' . $finalOrigin['line'] . ' - ' . $finalOrigin['class'] . '::' . $finalOrigin['function'] . ' => ';
|
||||
$log .= $elaspedTime . 'ms';
|
||||
$log .= "\n\n";
|
||||
file_put_contents(dirname(__FILE__) . '/sql_log.txt', $log, FILE_APPEND);
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
public static function queryNoCache($query, $type = 1, $useArray = true)
|
||||
{
|
||||
return self::query($query, $type, $useArray, false);
|
||||
}
|
||||
public static function row($query, $useCache = true)
|
||||
{
|
||||
return self::query($query, 2, true, $useCache);
|
||||
}
|
||||
public static function value($query, $useCache = true)
|
||||
{
|
||||
return self::query($query, 3, true, $useCache);
|
||||
}
|
||||
public static function valueList($query, $castFunction = false, $useCache = true)
|
||||
{
|
||||
$list = array();
|
||||
foreach (self::query($query, 1, true, $useCache) as $row) {
|
||||
$list[] = current($row);
|
||||
}
|
||||
if ($castFunction !== false) {
|
||||
$list = array_map($castFunction, $list);
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
public static function execute($query)
|
||||
{
|
||||
return self::query($query, 4);
|
||||
}
|
||||
public static function setGroupConcatMaxLength()
|
||||
{
|
||||
return self::execute('SET group_concat_max_len := @@max_allowed_packet');
|
||||
}
|
||||
}
|
||||
4405
backup_before_patch/pm_advancedsearch4.php.backup
Normal file
4405
backup_before_patch/pm_advancedsearch4.php.backup
Normal file
File diff suppressed because it is too large
Load Diff
@@ -681,11 +681,11 @@ abstract class As4SearchEngine
|
||||
}
|
||||
$subQueryForRange = '';
|
||||
if (AdvancedSearchCoreClass::_isFilledArray($where_translatable_value_range)) {
|
||||
// Optymalizacja: usunięto zbędny JOIN do aclink (nie jest używany w podzapytaniu)
|
||||
$subQueryForRange = '
|
||||
AND acpc'.(int)$id_criterion_group.'.`id_criterion` IN (
|
||||
SELECT ac'.(int)$id_criterion_group.'.`id_criterion`
|
||||
FROM `'._DB_PREFIX_.'pm_advancedsearch_criterion_'.(int)$search['id_search'].'` ac'.(int)$id_criterion_group.'
|
||||
JOIN `'._DB_PREFIX_.'pm_advancedsearch_criterion_'.(int)$search['id_search'].'_link` aclink'.(int)$id_criterion_group.' ON (ac'.(int)$id_criterion_group.'.`id_criterion` = aclink'.(int)$id_criterion_group.'.`id_criterion`)
|
||||
JOIN `'._DB_PREFIX_.'pm_advancedsearch_criterion_'.(int)$search['id_search'].'_lang` acl'.(int)$id_criterion_group.' ON (ac'.(int)$id_criterion_group.'.`id_criterion` = acl'.(int)$id_criterion_group.'.`id_criterion` AND acl'.(int)$id_criterion_group.'.`id_lang` = '.(int)$id_lang.' AND ('.implode(' OR ', $where_translatable_value_range).'))
|
||||
WHERE ac'.(int)$id_criterion_group.'.`id_criterion_group` = '.(int)$id_criterion_group.'
|
||||
)
|
||||
@@ -710,19 +710,46 @@ abstract class As4SearchEngine
|
||||
}
|
||||
$current_where = '`id_criterion` IN ('.implode(', ', array_map('intval', $id_criterion)).')';
|
||||
$where_join[] = 'acpc'.(int)$id_criterion_group.'.'.$current_where;
|
||||
$join_criterion[] = 'JOIN `'._DB_PREFIX_.'pm_advancedsearch_cache_product_criterion_'.(int) $search['id_search'].'` acpc'.(int)$id_criterion_group.' ON ( acp.`id_cache_product` = acpc'.(int)$id_criterion_group.'.`id_cache_product`'.(AdvancedSearchCoreClass::_isFilledArray($where_join) ?' AND '.implode(' OR ', $where_join) : '').')';
|
||||
$join_criterion_tables[] = 'acpc'.(int)$id_criterion_group;
|
||||
// Optymalizacja: EXISTS TYLKO dla zapytań COUNT (getQueryCountResults)
|
||||
// Dla innych metod (wyświetlanie filtrów, lista produktów) muszą być JOIN'y
|
||||
$useExistsOptimization = ($fromMethod == 'getQueryCountResults' && isset($selected_criteria_groups_type[$id_criterion_group]) && $selected_criteria_groups_type[$id_criterion_group]['criterion_group_type'] != 'attribute');
|
||||
|
||||
if ($useExistsOptimization) {
|
||||
// EXISTS jest szybszy dla zapytań COUNT (nie-atrybutowych)
|
||||
$where_criterion[] = 'EXISTS (SELECT 1 FROM `'._DB_PREFIX_.'pm_advancedsearch_cache_product_criterion_'.(int) $search['id_search'].'` acpc'.(int)$id_criterion_group.' WHERE acp.`id_cache_product` = acpc'.(int)$id_criterion_group.'.`id_cache_product`'.(AdvancedSearchCoreClass::_isFilledArray($where_join) ?' AND ('.implode(' OR ', $where_join).')' : '').' LIMIT 1)';
|
||||
} else {
|
||||
// Standardowy JOIN dla wszystkich innych przypadków
|
||||
$join_criterion[] = 'JOIN `'._DB_PREFIX_.'pm_advancedsearch_cache_product_criterion_'.(int) $search['id_search'].'` acpc'.(int)$id_criterion_group.' ON ( acp.`id_cache_product` = acpc'.(int)$id_criterion_group.'.`id_cache_product`'.(AdvancedSearchCoreClass::_isFilledArray($where_join) ?' AND '.implode(' OR ', $where_join) : '').')';
|
||||
$join_criterion_tables[] = 'acpc'.(int)$id_criterion_group;
|
||||
}
|
||||
if (is_array($originalCriterions) && sizeof($originalCriterions) > 1 && $selected_criteria_groups_type[$id_criterion_group]['is_combined']) {
|
||||
foreach ($originalCriterions as $idCriterionOriginal) {
|
||||
if (isset($customCriterionsWithParent[$idCriterionOriginal])) {
|
||||
$criterionsListForMerge = $customCriterionsWithParent[$idCriterionOriginal];
|
||||
} else {
|
||||
$criterionsListForMerge = array($idCriterionOriginal);
|
||||
// Dla kryteriów połączonych (is_combined)
|
||||
// Optymalizacja EXISTS tylko dla zapytań COUNT
|
||||
$useCombinedExistsOptimization = ($fromMethod == 'getQueryCountResults' && isset($selected_criteria_groups_type[$id_criterion_group]) && $selected_criteria_groups_type[$id_criterion_group]['criterion_group_type'] != 'attribute');
|
||||
|
||||
if ($useCombinedExistsOptimization) {
|
||||
// EXISTS dla zapytań COUNT (szybsze)
|
||||
foreach ($originalCriterions as $idCriterionOriginal) {
|
||||
if (isset($customCriterionsWithParent[$idCriterionOriginal])) {
|
||||
$criterionsListForMerge = $customCriterionsWithParent[$idCriterionOriginal];
|
||||
} else {
|
||||
$criterionsListForMerge = array($idCriterionOriginal);
|
||||
}
|
||||
$where_criterion[] = 'EXISTS (SELECT 1 FROM `'._DB_PREFIX_.'pm_advancedsearch_cache_product_criterion_'.(int) $search['id_search'].'` acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal.' WHERE acp.`id_cache_product` = acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal.'.`id_cache_product` AND acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal.'.`id_criterion` IN ('. implode(',', array_map('intval', $criterionsListForMerge)) . ') LIMIT 1)';
|
||||
}
|
||||
} else {
|
||||
// Standardowy JOIN dla wszystkich innych przypadków
|
||||
foreach ($originalCriterions as $idCriterionOriginal) {
|
||||
if (isset($customCriterionsWithParent[$idCriterionOriginal])) {
|
||||
$criterionsListForMerge = $customCriterionsWithParent[$idCriterionOriginal];
|
||||
} else {
|
||||
$criterionsListForMerge = array($idCriterionOriginal);
|
||||
}
|
||||
$join_criterion[] = 'JOIN `'._DB_PREFIX_.'pm_advancedsearch_cache_product_criterion_'.(int) $search['id_search'].'` acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal.' ON (
|
||||
acpc'.(int)$id_criterion_group.'.`id_cache_product` = acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal.'.`id_cache_product`
|
||||
AND acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal.'.`id_criterion` IN ('. implode(',', array_map('intval', $criterionsListForMerge)) . '))';
|
||||
$join_criterion_tables[] = 'acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal;
|
||||
}
|
||||
$join_criterion[] = 'JOIN `'._DB_PREFIX_.'pm_advancedsearch_cache_product_criterion_'.(int) $search['id_search'].'` acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal.' ON (
|
||||
acpc'.(int)$id_criterion_group.'.`id_cache_product` = acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal.'.`id_cache_product`
|
||||
AND acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal.'.`id_criterion` IN ('. implode(',', array_map('intval', $criterionsListForMerge)) . '))';
|
||||
$join_criterion_tables[] = 'acpc'.(int)$id_criterion_group.'_'.(int)$idCriterionOriginal;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -734,11 +761,11 @@ abstract class As4SearchEngine
|
||||
if (isset($selected_criteria_groups_type[$id_criterion_group]) && $selected_criteria_groups_type[$id_criterion_group]['criterion_group_type'] == 'attribute') {
|
||||
if ($fromMethod != 'getCriterionsRange' || $fromMethod == 'getCriterionsRange' && $id_criterion_group == $current_id_criterion_group) {
|
||||
$attribute_selected = true;
|
||||
$join_criterion['criterion_'.(int)$search['id_search'].'_'.(int)$id_criterion_group] = 'JOIN `'._DB_PREFIX_.'pm_advancedsearch_criterion_'.(int) $search['id_search'].'` ac'.(int)$id_criterion_group.' ON (acpc'.(int)$id_criterion_group.'.`id_criterion` = ac'.(int)$id_criterion_group.'.`id_criterion`)';
|
||||
$join_criterion['criterion_link_'.(int)$search['id_search'].'_'.(int)$id_criterion_group] = 'JOIN `'._DB_PREFIX_.'pm_advancedsearch_criterion_'.(int) $search['id_search'].'_link` aclink'.(int)$id_criterion_group.' ON (ac'.(int)$id_criterion_group.'.`id_criterion` = aclink'.(int)$id_criterion_group.'.`id_criterion`)';
|
||||
// Optymalizacja: łączymy acpc bezpośrednio z aclink (pomijamy pośrednika ac)
|
||||
// Eliminuje to jeden JOIN dla każdej grupy atrybutów
|
||||
$join_criterion['criterion_link_'.(int)$search['id_search'].'_'.(int)$id_criterion_group] = 'JOIN `'._DB_PREFIX_.'pm_advancedsearch_criterion_'.(int) $search['id_search'].'_link` aclink'.(int)$id_criterion_group.' ON (acpc'.(int)$id_criterion_group.'.`id_criterion` = aclink'.(int)$id_criterion_group.'.`id_criterion`)';
|
||||
$join_criterion['pa'.(int)$id_criterion_group] = 'JOIN `'._DB_PREFIX_.'product_attribute` pa'.(int)$id_criterion_group.' ON (pa'.(int)$id_criterion_group.'.`id_product` = acp.`id_product`)';
|
||||
$join_criterion[] = 'JOIN `'._DB_PREFIX_.'product_attribute_combination` pac'.(int)$id_criterion_group.' ON (pa'.(int)$id_criterion_group.'.`id_product_attribute` = pac'.(int)$id_criterion_group.'.`id_product_attribute` AND pac'.(int)$id_criterion_group.'.`id_attribute` = aclink'.(int)$id_criterion_group.'.`id_criterion_linked`'.($previousIdCriterionGroupSelected != null ? ' AND pa'.(int)$previousIdCriterionGroupSelected.'.`id_product_attribute` = pa'.(int)$id_criterion_group.'.`id_product_attribute` ' : '').')';
|
||||
$join_criterion_tables[] = 'ac'.(int)$id_criterion_group;
|
||||
$join_criterion_tables[] = 'pa'.(int)$id_criterion_group;
|
||||
$join_criterion_tables[] = 'pac'.(int)$id_criterion_group;
|
||||
$lastAttributeCombinationTableId = 'pac' . (int)$id_criterion_group;
|
||||
|
||||
@@ -170,7 +170,7 @@ class PM_AdvancedSearch4 extends AdvancedSearchWidgetProxy
|
||||
}
|
||||
$this->_support_link = array(
|
||||
array('link' => $forum_url, 'target' => '_blank', 'label' => $this->l('Forum topic')),
|
||||
|
||||
|
||||
array('link' => 'http://addons.prestashop.com/contact-community.php?id_product=2778', 'target' => '_blank', 'label' => $this->l('Support contact')),
|
||||
);
|
||||
$this->display_vertical_search_block = array();
|
||||
|
||||
Reference in New Issue
Block a user