chore: update code structure for better readability and maintainability

This commit is contained in:
2026-02-04 22:13:19 +01:00
parent 4276708e1c
commit 4ebf0766c6
6 changed files with 7006 additions and 20 deletions

View File

@@ -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": "-",

File diff suppressed because it is too large Load Diff

View 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');
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -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;

View File

@@ -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();