From 61666483d6bf122a79f48b852afa24af230dbe81 Mon Sep 17 00:00:00 2001 From: Mohamed ELIDRISSI <67818913+elidrissidev@users.noreply.github.com> Date: Thu, 4 May 2023 14:40:22 +0100 Subject: [PATCH 1/5] Fixed price expression SQL in layered navigation (#3227) --- .../core/Mage/Catalog/Model/Resource/Layer/Filter/Price.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/core/Mage/Catalog/Model/Resource/Layer/Filter/Price.php b/app/code/core/Mage/Catalog/Model/Resource/Layer/Filter/Price.php index a71e588497d..6390996e95a 100644 --- a/app/code/core/Mage/Catalog/Model/Resource/Layer/Filter/Price.php +++ b/app/code/core/Mage/Catalog/Model/Resource/Layer/Filter/Price.php @@ -309,7 +309,7 @@ public function loadPrices($filter, $limit, $offset = null, $lowerPrice = null, if (!is_null($upperPrice)) { $select->where("$priceExpression < " . $this->_getComparingValue($upperPrice, $filter)); } - $select->order("$priceExpression ASC")->limit($limit, $offset); + $select->order(new Zend_Db_Expr("$priceExpression ASC"))->limit($limit, $offset); return $this->_getReadAdapter()->fetchCol($select); } @@ -372,7 +372,7 @@ public function loadNextPrices($filter, $price, $rightIndex, $upperPrice = null) if (!is_null($upperPrice)) { $pricesSelect->where("$priceExpression < " . $this->_getComparingValue($upperPrice, $filter)); } - $pricesSelect->order("$priceExpression DESC")->limit($rightIndex - $offset + 1, $offset - 1); + $pricesSelect->order(new Zend_Db_Expr("$priceExpression DESC"))->limit($rightIndex - $offset + 1, $offset - 1); return array_reverse($this->_getReadAdapter()->fetchCol($pricesSelect)); } From e56ab9012310ac7a18c3422d44b846bc4ec00377 Mon Sep 17 00:00:00 2001 From: Mohamed ELIDRISSI <67818913+elidrissidev@users.noreply.github.com> Date: Sun, 7 May 2023 21:33:59 +0100 Subject: [PATCH 2/5] Fixed stock status update from SOAP API V2 (#1635) --- .../Mage/CatalogInventory/Model/Stock/Item/Api/V2.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/code/core/Mage/CatalogInventory/Model/Stock/Item/Api/V2.php b/app/code/core/Mage/CatalogInventory/Model/Stock/Item/Api/V2.php index c2361371878..d2d14d0ea59 100644 --- a/app/code/core/Mage/CatalogInventory/Model/Stock/Item/Api/V2.php +++ b/app/code/core/Mage/CatalogInventory/Model/Stock/Item/Api/V2.php @@ -35,14 +35,15 @@ public function update($productId, $data) $idBySku = $product->getIdBySku($productId); $productId = $idBySku ? $idBySku : $productId; - $product->setStoreId($this->_getStoreId()) - ->load($productId); + /** @var Mage_CatalogInventory_Model_Stock_Item $stockItem */ + $stockItem = Mage::getModel('cataloginventory/stock_item') + ->setStoreId($this->_getStoreId()) + ->loadByProduct($productId); - if (!$product->getId()) { + if (!$stockItem->getId()) { $this->_fault('not_exists'); } - $stockItem = $product->getStockItem(); $stockData = array_replace($stockItem->getData(), (array)$data); $stockItem->setData($stockData); From 73d4f483410486c96c5db1ad39f5eed84927423d Mon Sep 17 00:00:00 2001 From: Mohamed ELIDRISSI <67818913+elidrissidev@users.noreply.github.com> Date: Tue, 9 May 2023 15:48:13 +0100 Subject: [PATCH 3/5] Load all child blocks in Adminhtml Head block (#3222) --- app/design/adminhtml/default/default/template/page/head.phtml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/design/adminhtml/default/default/template/page/head.phtml b/app/design/adminhtml/default/default/template/page/head.phtml index 1a00c95d647..84106be7256 100644 --- a/app/design/adminhtml/default/default/template/page/head.phtml +++ b/app/design/adminhtml/default/default/template/page/head.phtml @@ -50,5 +50,4 @@ helper('core/js')->getTranslatorScript() ?> -getChildHtml('calendar'); ?> -getChildHtml('optional_zip_countries'); ?> +getChildHtml(); ?> From d42170ea9b859e348c4497a3c0993539052dccc9 Mon Sep 17 00:00:00 2001 From: Colin Mollenhour Date: Tue, 9 May 2023 13:06:16 -0400 Subject: [PATCH 4/5] Moved isCurrentlySecure() method to Mage_Core_Model_App (#3225) Co-authored-by: Fabrizio Balliano --- .../Mage/Core/Controller/Request/Http.php | 2 +- app/code/core/Mage/Core/Model/App.php | 31 +++++++++++++++++++ app/code/core/Mage/Core/Model/Store.php | 26 ++-------------- app/code/core/Mage/Core/etc/system.xml | 4 +++ 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/app/code/core/Mage/Core/Controller/Request/Http.php b/app/code/core/Mage/Core/Controller/Request/Http.php index f03695690e0..fc44d53ed81 100644 --- a/app/code/core/Mage/Core/Controller/Request/Http.php +++ b/app/code/core/Mage/Core/Controller/Request/Http.php @@ -307,7 +307,7 @@ public function getScheme() { return $this->getServer('HTTPS') == 'on' || $this->getServer('HTTP_X_FORWARDED_PROTO') == 'https' - || (Mage::isInstalled() && Mage::app()->getStore()->isCurrentlySecure()) ? + || (Mage::isInstalled() && Mage::app()->isCurrentlySecure()) ? self::SCHEME_HTTPS : self::SCHEME_HTTP; } diff --git a/app/code/core/Mage/Core/Model/App.php b/app/code/core/Mage/Core/Model/App.php index c3237aab0c4..63fcd034ea8 100644 --- a/app/code/core/Mage/Core/Model/App.php +++ b/app/code/core/Mage/Core/Model/App.php @@ -1295,6 +1295,37 @@ public function setRequest(Mage_Core_Controller_Request_Http $request) return $this; } + /** + * @return bool + */ + public function isCurrentlySecure() + { + if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { + return true; + } + + if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { + return true; + } + + if (isset($_SERVER['SERVER_PORT']) && ($_SERVER['SERVER_PORT'] == 443)) { + return true; + } + + if (Mage::isInstalled()) { + $offloaderHeader = strtoupper(trim((string) Mage::getConfig()->getNode(Mage_Core_Model_Store::XML_PATH_OFFLOADER_HEADER, 'default'))); + if ($offloaderHeader) { + $offloaderHeader = preg_replace('/[^A-Z]+/', '_', $offloaderHeader); + $offloaderHeader = strpos($offloaderHeader, 'HTTP_') === 0 ? $offloaderHeader : 'HTTP_' . $offloaderHeader; + if (!empty($_SERVER[$offloaderHeader]) && $_SERVER[$offloaderHeader] !== 'http') { + return true; + } + } + } + + return false; + } + /** * Retrieve response object * diff --git a/app/code/core/Mage/Core/Model/Store.php b/app/code/core/Mage/Core/Model/Store.php index 042a315bc07..09df7eae0c9 100644 --- a/app/code/core/Mage/Core/Model/Store.php +++ b/app/code/core/Mage/Core/Model/Store.php @@ -749,34 +749,12 @@ public function isFrontUrlSecure() /** * Check if request was secure * + * @deprecated * @return bool */ public function isCurrentlySecure() { - if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { - return true; - } - - if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { - return true; - } - - if (isset($_SERVER['SERVER_PORT']) && ($_SERVER['SERVER_PORT'] == 443)) { - return true; - } - - if (Mage::isInstalled()) { - $offloaderHeader = strtoupper(trim((string) Mage::getStoreConfig(self::XML_PATH_OFFLOADER_HEADER))); - if ($offloaderHeader) { - $offloaderHeader = preg_replace('/[^A-Z]+/', '_', $offloaderHeader); - $offloaderHeader = strpos($offloaderHeader, 'HTTP_') === 0 ? $offloaderHeader : 'HTTP_' . $offloaderHeader; - if (!empty($_SERVER[$offloaderHeader]) && $_SERVER[$offloaderHeader] !== 'http') { - return true; - } - } - } - - return false; + return Mage::app()->isCurrentlySecure(); } /************************************************************************************* diff --git a/app/code/core/Mage/Core/etc/system.xml b/app/code/core/Mage/Core/etc/system.xml index f4207991947..a3bec9e5da4 100644 --- a/app/code/core/Mage/Core/etc/system.xml +++ b/app/code/core/Mage/Core/etc/system.xml @@ -1499,6 +1499,10 @@ 1 0 0 + X-Forwarded-Proto: https is already checked by default regardless of this configuration option. + ]]> From 460ce6547893c364aefebbeacf064d252330be76 Mon Sep 17 00:00:00 2001 From: Tobias Hille Date: Tue, 9 May 2023 20:35:22 +0200 Subject: [PATCH 5/5] Added cron to remove old index events for manual indexers (#2474) Co-authored-by: Fabrizio Balliano --- app/code/core/Mage/Index/Model/Indexer.php | 4 +- app/code/core/Mage/Index/Model/Observer.php | 63 +++++++++++++++++++++ app/code/core/Mage/Index/etc/config.xml | 12 ++++ 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/app/code/core/Mage/Index/Model/Indexer.php b/app/code/core/Mage/Index/Model/Indexer.php index 781dd480680..49478cf2bc1 100644 --- a/app/code/core/Mage/Index/Model/Indexer.php +++ b/app/code/core/Mage/Index/Model/Indexer.php @@ -282,10 +282,10 @@ public function logEvent(Varien_Object $entity, $entityType, $eventType, $doSave * @param Varien_Object $entity * @param string $entityType * @param string $eventType - * @throws Exception * @return Mage_Index_Model_Indexer + * @throws Exception|Throwable */ - public function processEntityAction(Varien_Object $entity, $entityType, $eventType) + public function processEntityAction(Varien_Object $entity, $entityType, $eventType): Mage_Index_Model_Indexer { $event = $this->logEvent($entity, $entityType, $eventType, false); /** diff --git a/app/code/core/Mage/Index/Model/Observer.php b/app/code/core/Mage/Index/Model/Observer.php index 93a15966456..84560f54fc3 100644 --- a/app/code/core/Mage/Index/Model/Observer.php +++ b/app/code/core/Mage/Index/Model/Observer.php @@ -19,6 +19,9 @@ */ class Mage_Index_Model_Observer { + public const OLD_INDEX_EVENT_THRESHOLD_SECONDS = 24 * 60 * 60; + public const OLD_INDEX_EVENT_DELETE_COUNT = 1000; + /** * Indexer model * @@ -35,6 +38,7 @@ public function __construct() * Store after commit observer. Process store related indexes * * @param Varien_Event_Observer $observer + * @throws Throwable */ public function processStoreSave(Varien_Event_Observer $observer) { @@ -50,6 +54,7 @@ public function processStoreSave(Varien_Event_Observer $observer) * Store group after commit observer. Process store group related indexes * * @param Varien_Event_Observer $observer + * @throws Throwable */ public function processStoreGroupSave(Varien_Event_Observer $observer) { @@ -65,6 +70,7 @@ public function processStoreGroupSave(Varien_Event_Observer $observer) * Website save after commit observer. Process website related indexes * * @param Varien_Event_Observer $observer + * @throws Throwable */ public function processWebsiteSave(Varien_Event_Observer $observer) { @@ -80,6 +86,7 @@ public function processWebsiteSave(Varien_Event_Observer $observer) * Store after commit observer. Process store related indexes * * @param Varien_Event_Observer $observer + * @throws Throwable */ public function processStoreDelete(Varien_Event_Observer $observer) { @@ -95,6 +102,7 @@ public function processStoreDelete(Varien_Event_Observer $observer) * Store group after commit observer. Process store group related indexes * * @param Varien_Event_Observer $observer + * @throws Throwable */ public function processStoreGroupDelete(Varien_Event_Observer $observer) { @@ -110,6 +118,7 @@ public function processStoreGroupDelete(Varien_Event_Observer $observer) * Website save after commit observer. Process website related indexes * * @param Varien_Event_Observer $observer + * @throws Throwable */ public function processWebsiteDelete(Varien_Event_Observer $observer) { @@ -125,6 +134,7 @@ public function processWebsiteDelete(Varien_Event_Observer $observer) * Config data after commit observer. * * @param Varien_Event_Observer $observer + * @throws Throwable */ public function processConfigDataSave(Varien_Event_Observer $observer) { @@ -135,4 +145,57 @@ public function processConfigDataSave(Varien_Event_Observer $observer) Mage_Index_Model_Event::TYPE_SAVE ); } + + /** + * Clean old index events for indexers in manual mode + * + * @return void + * @throws Exception + */ + public function cleanOutdatedEvents() + { + $manualIndexProcessCollection = Mage::getSingleton('index/indexer') + ->getProcessesCollection() + ->addFieldToFilter('mode', Mage_Index_Model_Process::MODE_MANUAL); + + $now = new DateTime(); + /** @noinspection PhpUnhandledExceptionInspection */ + $dateInterval = new DateInterval('PT' . self::OLD_INDEX_EVENT_THRESHOLD_SECONDS . 'S'); + $oldEventsThreshold = $now + ->sub($dateInterval) + ->format(Varien_Db_Adapter_Pdo_Mysql::TIMESTAMP_FORMAT); + + $coreResource = Mage::getSingleton('core/resource'); + $writeConnection = $coreResource->getConnection('core_write'); + $indexEventTableName = $coreResource->getTableName('index/event'); + + /** @var Mage_Index_Model_Process $process */ + foreach ($manualIndexProcessCollection as $process) { + $unprocessedEventsCollection = $process + ->getUnprocessedEventsCollection() + ->addFieldToFilter('created_at', ['lt' => $oldEventsThreshold]) + ->load(); + + $i = 0; + $eventList = []; + /** @var Mage_Index_Model_Event $unprocessedEvent */ + foreach ($unprocessedEventsCollection as $unprocessedEvent) { + $i++; + $eventList[] = $unprocessedEvent->getId(); + if ($i === self::OLD_INDEX_EVENT_DELETE_COUNT) { + break; + } + } + + if (!empty($eventList)) { + $where = new Zend_Db_Expr( + sprintf( + 'event_id in (%s)', + implode(',', $eventList) + ) + ); + $writeConnection->delete($indexEventTableName, $where); + } + } + } } diff --git a/app/code/core/Mage/Index/etc/config.xml b/app/code/core/Mage/Index/etc/config.xml index 9a46c2920b0..94e1aa18f54 100644 --- a/app/code/core/Mage/Index/etc/config.xml +++ b/app/code/core/Mage/Index/etc/config.xml @@ -20,6 +20,18 @@ 1.6.0.0 + + + + + 30 */4 * * * + + + index/observer::cleanOutdatedEvents + + + +