diff --git a/vendor/magento/module-catalog/Ui/Component/Listing/Columns.php b/vendor/magento/module-catalog/Ui/Component/Listing/Columns.php
index 88edfc7b36cb6..5f56cf8d6e377 100644
--- a/vendor/magento/module-catalog/Ui/Component/Listing/Columns.php
+++ b/vendor/magento/module-catalog/Ui/Component/Listing/Columns.php
@@ -16,7 +16,7 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
/**
* Default columns max order value
*/
- const DEFAULT_COLUMNS_MAX_ORDER = 100;
+ public const DEFAULT_COLUMNS_MAX_ORDER = 100;
/**
* @var \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface
@@ -71,6 +71,7 @@ public function prepare()
$config['sortOrder'] = ++$columnSortOrder;
if ($attribute->getIsFilterableInGrid()) {
$config['filter'] = $this->getFilterType($attribute->getFrontendInput());
+ $config['userDefined'] = $attribute->getIsUserDefined();
}
$column = $this->columnFactory->create($attribute, $this->getContext(), $config);
$column->prepare();
diff --git a/vendor/magento/module-cms/Model/ResourceModel/Block/Grid/Collection.php b/vendor/magento/module-cms/Model/ResourceModel/Block/Grid/Collection.php
index 2389289adc7f4..1ff4224f3bf2f 100644
--- a/vendor/magento/module-cms/Model/ResourceModel/Block/Grid/Collection.php
+++ b/vendor/magento/module-cms/Model/ResourceModel/Block/Grid/Collection.php
@@ -8,14 +8,12 @@
use Magento\Framework\Api\Search\SearchResultInterface;
use Magento\Framework\Api\Search\AggregationInterface;
use Magento\Cms\Model\ResourceModel\Block\Collection as BlockCollection;
-use Magento\Framework\App\ObjectManager;
use Magento\Framework\Data\Collection\Db\FetchStrategyInterface;
use Magento\Framework\Data\Collection\EntityFactoryInterface;
use Magento\Framework\DB\Adapter\AdapterInterface;
use Magento\Framework\EntityManager\MetadataPool;
use Magento\Framework\Event\ManagerInterface;
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
-use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
use Magento\Store\Model\StoreManagerInterface;
use Psr\Log\LoggerInterface;
@@ -24,11 +22,6 @@
*/
class Collection extends BlockCollection implements SearchResultInterface
{
- /**
- * @var TimezoneInterface
- */
- private $timeZone;
-
/**
* @var AggregationInterface
*/
@@ -54,7 +47,6 @@ class Collection extends BlockCollection implements SearchResultInterface
* @param string $model
* @param AdapterInterface|string|null $connection
* @param AbstractDb $resource
- * @param TimezoneInterface|null $timeZone
*
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
@@ -71,8 +63,7 @@ public function __construct(
$resourceModel,
$model = \Magento\Framework\View\Element\UiComponent\DataProvider\Document::class,
$connection = null,
- AbstractDb $resource = null,
- TimezoneInterface $timeZone = null
+ AbstractDb $resource = null
) {
$this->resourceModel = $resourceModel;
$this->model = $model;
@@ -90,7 +81,6 @@ public function __construct(
$this->_eventObject = $eventObject;
$this->_init($this->model, $this->resourceModel);
$this->setMainTable($mainTable);
- $this->timeZone = $timeZone ?: ObjectManager::getInstance()->get(TimezoneInterface::class);
}
/**
@@ -102,22 +92,6 @@ public function _resetState(): void
$this->_init($this->model, $this->resourceModel);
}
- /**
- * @inheritDoc
- */
- public function addFieldToFilter($field, $condition = null)
- {
- if ($field === 'creation_time' || $field === 'update_time') {
- if (is_array($condition)) {
- foreach ($condition as $key => $value) {
- $condition[$key] = $this->timeZone->convertConfigTimeToUtc($value);
- }
- }
- }
-
- return parent::addFieldToFilter($field, $condition);
- }
-
/**
* Get aggregation interface instance
*
diff --git a/vendor/magento/module-cms/Model/ResourceModel/Page/Grid/Collection.php b/vendor/magento/module-cms/Model/ResourceModel/Page/Grid/Collection.php
index 6d055b3a3a01d..45fcdc861c3e3 100644
--- a/vendor/magento/module-cms/Model/ResourceModel/Page/Grid/Collection.php
+++ b/vendor/magento/module-cms/Model/ResourceModel/Page/Grid/Collection.php
@@ -8,13 +8,11 @@
use Magento\Framework\Api\Search\SearchResultInterface;
use Magento\Framework\Api\Search\AggregationInterface;
use Magento\Cms\Model\ResourceModel\Page\Collection as PageCollection;
-use Magento\Framework\App\ObjectManager;
use Magento\Framework\Data\Collection\Db\FetchStrategyInterface;
use Magento\Framework\Data\Collection\EntityFactoryInterface;
use Magento\Framework\EntityManager\MetadataPool;
use Magento\Framework\Event\ManagerInterface;
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
-use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
use Magento\Store\Model\StoreManagerInterface;
use Psr\Log\LoggerInterface;
@@ -24,11 +22,6 @@
*/
class Collection extends PageCollection implements SearchResultInterface
{
- /**
- * @var TimezoneInterface
- */
- private $timeZone;
-
/**
* @var AggregationInterface
*/
@@ -54,7 +47,6 @@ class Collection extends PageCollection implements SearchResultInterface
* @param string $model
* @param mixed|null $connection
* @param AbstractDb|null $resource
- * @param TimezoneInterface|null $timeZone
*
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
@@ -71,8 +63,7 @@ public function __construct(
$resourceModel,
$model = \Magento\Framework\View\Element\UiComponent\DataProvider\Document::class,
$connection = null,
- AbstractDb $resource = null,
- TimezoneInterface $timeZone = null
+ AbstractDb $resource = null
) {
$this->resourceModel = $resourceModel;
$this->model = $model;
@@ -90,7 +81,6 @@ public function __construct(
$this->_eventObject = $eventObject;
$this->_init($this->model, $this->resourceModel);
$this->setMainTable($mainTable);
- $this->timeZone = $timeZone ?: ObjectManager::getInstance()->get(TimezoneInterface::class);
}
/**
@@ -102,22 +92,6 @@ public function _resetState(): void
$this->_init($this->model, $this->resourceModel);
}
- /**
- * @inheritDoc
- */
- public function addFieldToFilter($field, $condition = null)
- {
- if ($field === 'creation_time' || $field === 'update_time') {
- if (is_array($condition)) {
- foreach ($condition as $key => $value) {
- $condition[$key] = $this->timeZone->convertConfigTimeToUtc($value);
- }
- }
- }
-
- return parent::addFieldToFilter($field, $condition);
- }
-
/**
* Get aggregation interface instance
*
diff --git a/vendor/magento/module-customer/Model/ResourceModel/Grid/Collection.php b/vendor/magento/module-customer/Model/ResourceModel/Grid/Collection.php
index e14594daf8011..af92c02fac48e 100644
--- a/vendor/magento/module-customer/Model/ResourceModel/Grid/Collection.php
+++ b/vendor/magento/module-customer/Model/ResourceModel/Grid/Collection.php
@@ -7,12 +7,11 @@
use Magento\Customer\Model\ResourceModel\Customer;
use Magento\Customer\Ui\Component\DataProvider\Document;
-use Magento\Framework\App\ObjectManager;
use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy;
use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory;
use Magento\Framework\Event\ManagerInterface as EventManager;
+use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Locale\ResolverInterface;
-use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
use Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult;
use Psr\Log\LoggerInterface as Logger;
@@ -27,12 +26,7 @@ class Collection extends SearchResult
private $localeResolver;
/**
- * @var TimezoneInterface
- */
- private $timeZone;
-
- /**
- * @inheritdoc
+ * @var string
*/
protected $document = Document::class;
@@ -49,7 +43,7 @@ class Collection extends SearchResult
* @param ResolverInterface $localeResolver
* @param string $mainTable
* @param string $resourceModel
- * @param TimezoneInterface|null $timeZone
+ * @throws LocalizedException
*/
public function __construct(
EntityFactory $entityFactory,
@@ -58,13 +52,10 @@ public function __construct(
EventManager $eventManager,
ResolverInterface $localeResolver,
$mainTable = 'customer_grid_flat',
- $resourceModel = Customer::class,
- TimezoneInterface $timeZone = null
+ $resourceModel = Customer::class
) {
$this->localeResolver = $localeResolver;
parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $mainTable, $resourceModel);
- $this->timeZone = $timeZone ?: ObjectManager::getInstance()
- ->get(TimezoneInterface::class);
}
/**
@@ -92,14 +83,6 @@ public function addFieldToFilter($field, $condition = null)
return $this;
}
- if ($field === 'created_at') {
- if (is_array($condition)) {
- foreach ($condition as $key => $value) {
- $condition[$key] = $this->timeZone->convertConfigTimeToUtc($value);
- }
- }
- }
-
if (is_string($field) && count(explode('.', $field)) === 1) {
$field = 'main_table.' . $field;
}
diff --git a/vendor/magento/module-sales/Model/ResourceModel/Order/Grid/Collection.php b/vendor/magento/module-sales/Model/ResourceModel/Order/Grid/Collection.php
index 094fac313d398..c8796fd780964 100644
--- a/vendor/magento/module-sales/Model/ResourceModel/Order/Grid/Collection.php
+++ b/vendor/magento/module-sales/Model/ResourceModel/Order/Grid/Collection.php
@@ -5,11 +5,10 @@
*/
namespace Magento\Sales\Model\ResourceModel\Order\Grid;
-use Magento\Framework\App\ObjectManager;
use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy;
use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory;
use Magento\Framework\Event\ManagerInterface as EventManager;
-use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
+use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult;
use Magento\Sales\Model\ResourceModel\Order;
use Psr\Log\LoggerInterface as Logger;
@@ -19,11 +18,6 @@
*/
class Collection extends SearchResult
{
- /**
- * @var TimezoneInterface
- */
- private $timeZone;
-
/**
* Initialize dependencies.
*
@@ -34,6 +28,7 @@ class Collection extends SearchResult
* @param string $mainTable
* @param string $resourceModel
* @param TimezoneInterface|null $timeZone
+ * @throws LocalizedException
*/
public function __construct(
EntityFactory $entityFactory,
@@ -41,12 +36,9 @@ public function __construct(
FetchStrategy $fetchStrategy,
EventManager $eventManager,
$mainTable = 'sales_order_grid',
- $resourceModel = Order::class,
- TimezoneInterface $timeZone = null
+ $resourceModel = Order::class
) {
parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $mainTable, $resourceModel);
- $this->timeZone = $timeZone ?: ObjectManager::getInstance()
- ->get(TimezoneInterface::class);
}
/**
@@ -63,20 +55,4 @@ protected function _initSelect()
return $this;
}
-
- /**
- * @inheritDoc
- */
- public function addFieldToFilter($field, $condition = null)
- {
- if ($field === 'created_at') {
- if (is_array($condition)) {
- foreach ($condition as $key => $value) {
- $condition[$key] = $this->timeZone->convertConfigTimeToUtc($value);
- }
- }
- }
-
- return parent::addFieldToFilter($field, $condition);
- }
}
diff --git a/vendor/magento/module-sales/Plugin/Model/ResourceModel/Order/OrderGridCollectionFilter.php b/vendor/magento/module-sales/Plugin/Model/ResourceModel/Order/OrderGridCollectionFilter.php
deleted file mode 100644
index 743bc83588296..0000000000000
--- a/vendor/magento/module-sales/Plugin/Model/ResourceModel/Order/OrderGridCollectionFilter.php
+++ /dev/null
@@ -1,84 +0,0 @@
-timeZone = $timeZone;
- }
-
- /**
- * Conditional column filters with timezone convertor interface
- *
- * @param SearchResult $subject
- * @param \Closure $proceed
- * @param string $field
- * @param string|null $condition
- * @return SearchResult|mixed
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function aroundAddFieldToFilter(
- SearchResult $subject,
- \Closure $proceed,
- $field,
- $condition = null
- ) {
- if ($field === 'created_at' || $field === 'order_created_at') {
- if (is_array($condition)) {
- foreach ($condition as $key => $value) {
- if ($value = $this->isValidDate($value)) {
- $condition[$key] = $value->setTimezone(new \DateTimeZone('UTC'))->format('Y-m-d H:i:s');
- }
- }
- }
-
- $fieldName = $subject->getConnection()->quoteIdentifier($field);
- $condition = $subject->getConnection()->prepareSqlCondition($fieldName, $condition);
- $subject->getSelect()->where($condition, null, Select::TYPE_CONDITION);
-
- return $subject;
- }
-
- return $proceed($field, $condition);
- }
-
- /**
- * Validate date string
- *
- * @param mixed $datetime
- * @return mixed
- */
- private function isValidDate(mixed $datetime): mixed
- {
- try {
- return $datetime instanceof DateTimeInterface
- ? $datetime : (is_string($datetime)
- ? new DateTime($datetime, new \DateTimeZone($this->timeZone->getConfigTimezone())) : false);
- } catch (\Exception $e) {
- return false;
- }
- }
-}
diff --git a/vendor/magento/module-sales/etc/adminhtml/di.xml b/vendor/magento/module-sales/etc/adminhtml/di.xml
index 7ea46d60caeec..5beced956c5ef 100644
--- a/vendor/magento/module-sales/etc/adminhtml/di.xml
+++ b/vendor/magento/module-sales/etc/adminhtml/di.xml
@@ -49,9 +49,6 @@
-
-
-
\Magento\Catalog\Ui\DataProvider\Product\ProductCollectionFactory
diff --git a/vendor/magento/module-ui/Component/Filters.php b/vendor/magento/module-ui/Component/Filters.php
index aa418a4522044..9518a022c2170 100644
--- a/vendor/magento/module-ui/Component/Filters.php
+++ b/vendor/magento/module-ui/Component/Filters.php
@@ -21,7 +21,7 @@
*/
class Filters extends AbstractComponent implements ObserverInterface
{
- const NAME = 'filters';
+ public const NAME = 'filters';
/**
* Filters created from columns
@@ -114,10 +114,16 @@ public function update(UiComponentInterface $component)
}
if (isset($this->filterMap[$filterType]) && !isset($this->columnFilters[$component->getName()])) {
+ $config = (array) $component->getData('config');
+ $userDefined = (bool) ($config['userDefined'] ?? false);
+
$filterComponent = $this->uiComponentFactory->create(
$component->getName(),
$this->filterMap[$filterType],
- ['context' => $this->getContext()]
+ [
+ 'context' => $this->getContext(),
+ 'userDefined' => $userDefined,
+ ]
);
$filterComponent->setData('config', $component->getConfiguration());
$filterComponent->prepare();
diff --git a/vendor/magento/module-ui/Component/Filters/Type/Date.php b/vendor/magento/module-ui/Component/Filters/Type/Date.php
index 28ad8568ebe31..9d858e3615c94 100644
--- a/vendor/magento/module-ui/Component/Filters/Type/Date.php
+++ b/vendor/magento/module-ui/Component/Filters/Type/Date.php
@@ -6,6 +6,10 @@
namespace Magento\Ui\Component\Filters\Type;
+use Magento\Framework\Api\FilterBuilder;
+use Magento\Framework\View\Element\UiComponent\ContextInterface;
+use Magento\Framework\View\Element\UiComponentFactory;
+use Magento\Ui\Component\Filters\FilterModifier;
use Magento\Ui\Component\Form\Element\DataType\Date as DataTypeDate;
/**
@@ -16,9 +20,9 @@
*/
class Date extends AbstractFilter
{
- const NAME = 'filter_date';
+ public const NAME = 'filter_date';
- const COMPONENT = 'date';
+ public const COMPONENT = 'date';
/**
* Wrapped component
@@ -35,6 +39,33 @@ class Date extends AbstractFilter
*/
protected static $dateFormat = 'Y-m-d H:i:s';
+ /**
+ * @var bool
+ */
+ private bool $userDefined;
+
+ /**
+ * @param ContextInterface $context
+ * @param UiComponentFactory $uiComponentFactory
+ * @param FilterBuilder $filterBuilder
+ * @param FilterModifier $filterModifier
+ * @param array $components
+ * @param array $data
+ * @param bool $userDefined
+ */
+ public function __construct(
+ ContextInterface $context,
+ UiComponentFactory $uiComponentFactory,
+ FilterBuilder $filterBuilder,
+ FilterModifier $filterModifier,
+ array $components = [],
+ array $data = [],
+ bool $userDefined = false
+ ) {
+ $this->userDefined = $userDefined;
+ parent::__construct($context, $uiComponentFactory, $filterBuilder, $filterModifier, $components, $data);
+ }
+
/**
* Prepare component configuration
*
@@ -128,7 +159,7 @@ protected function applyFilterByType($type, $value)
* @param int $hour
* @param int $minute
* @param int $second
- * @return \DateTime
+ * @return \DateTime|null
*/
private function convertDatetime(string $value, int $hour = 0, int $minute = 0, int $second = 0): ?\DateTime
{
@@ -137,12 +168,13 @@ private function convertDatetime(string $value, int $hour = 0, int $minute = 0,
$value,
!$this->getData('config/skipTimeZoneConversion')
)
- : $this->wrappedComponent->convertDate(
+ : $this->wrappedComponent->convertDateWithTimezone(
$value,
$hour,
$minute,
$second,
- !$this->getData('config/skipTimeZoneConversion')
+ !$this->getData('config/skipTimeZoneConversion'),
+ !$this->userDefined
);
return $value;
diff --git a/vendor/magento/module-ui/Component/Form/Element/DataType/Date.php b/vendor/magento/module-ui/Component/Form/Element/DataType/Date.php
index ca5e295492fe9..9569ff8f13d32 100644
--- a/vendor/magento/module-ui/Component/Form/Element/DataType/Date.php
+++ b/vendor/magento/module-ui/Component/Form/Element/DataType/Date.php
@@ -110,9 +110,47 @@ public function getComponentName()
return static::NAME;
}
+ /**
+ * Convert given date to default (UTC) timezone, considering configured store timezone
+ *
+ * @param string $date
+ * @param int $hour
+ * @param int $minute
+ * @param int $second
+ * @param bool $setUtcTimeZone
+ * @param bool $useStoreTimeZone
+ * @return \DateTime|null
+ */
+ public function convertDateWithTimezone(
+ string $date,
+ int $hour = 0,
+ int $minute = 0,
+ int $second = 0,
+ bool $setUtcTimeZone = true,
+ bool $useStoreTimeZone = true
+ ): ?\DateTime {
+ if (!$useStoreTimeZone) {
+ return $this->convertDate($date, $hour, $minute, $second, $setUtcTimeZone);
+ }
+ try {
+ $date = $this->convertDateFormat($date);
+ $dateObj = $this->localeDate->date($date, $this->getLocale(), $useStoreTimeZone, false);
+ $dateObj->setTime($hour, $minute, $second);
+ //convert store date to default date in UTC timezone without DST
+ if ($setUtcTimeZone) {
+ $dateObj->setTimezone(new \DateTimeZone('UTC'));
+ }
+ return $dateObj;
+ } catch (Exception $e) {
+ return null;
+ }
+ }
+
/**
* Convert given date to default (UTC) timezone
*
+ * @deprecated
+ * @see convertDateWithTimezone
* @param int $date
* @param int $hour
* @param int $minute