From e1afb02c466bc817dc2f911e3de0d67bcfb2056e Mon Sep 17 00:00:00 2001 From: Thomas Klein Date: Sun, 22 Aug 2021 13:40:31 +0200 Subject: [PATCH] fix #107 invalid sql builder --- .../SourceProvider/FilterModifier.php | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/Model/Customer/SourceProvider/FilterModifier.php b/Model/Customer/SourceProvider/FilterModifier.php index 6c54d2ec..eeccfd4a 100644 --- a/Model/Customer/SourceProvider/FilterModifier.php +++ b/Model/Customer/SourceProvider/FilterModifier.php @@ -9,44 +9,38 @@ use Magento\Framework\Api\Filter; use Magento\Framework\Data\Collection; -use Magento\Framework\Exception\LocalizedException; use Opengento\Gdpr\Model\Entity\SourceProvider\ModifierInterface; final class FilterModifier implements ModifierInterface { - /** - * @inheritdoc - * @throws LocalizedException - */ public function apply(Collection $collection, Filter $filter): void { if ($collection instanceof Collection\AbstractDb && $filter->getField() === 'created_at') { $connection = $collection->getConnection(); $visitorSelect = $connection->select() - ->from($connection->getTableName('customer_visitor')) - ->columns(['customer_id' => 'customer_id', 'last_visit_at' => 'MAX(last_visit_at)']) + ->from( + $connection->getTableName('customer_visitor'), + ['customer_id' => 'customer_id', 'last_visit_at' => 'MAX(last_visit_at)'] + ) ->group(['customer_id']); $collection->getSelect()->joinLeft( ['cv' => $visitorSelect], - 'main_table.entity_id=cl.customer_id', + 'e.entity_id=cv.customer_id', null ); $collection->getSelect()->joinLeft( ['cl' => $connection->getTableName('customer_log')], - 'main_table.entity_id=cl.customer_id', + 'e.entity_id=cl.customer_id', null ); - $collection->getSelect()->columns( - [ - 'last_visit_at' => 'IFNULL(' . - 'cv.last_visit_at,'. - 'GREATEST(IFNULL(cl.last_login_at, e.created_at), IFNULL(cl.last_logout_at, e.updated_at))' . - ')', - ] + $collection->getSelect()->where( + $connection->prepareSqlCondition('IFNULL(' . + 'cv.last_visit_at,'. + 'GREATEST(IFNULL(cl.last_login_at, e.created_at), IFNULL(cl.last_logout_at, e.updated_at))' . + ')', [$filter->getConditionType() => $filter->getValue()]) ); - $collection->addFieldToFilter('last_visit_at', [$filter->getConditionType() => $filter->getValue()]); } } }