67 lines
2.1 KiB
PHP
Executable File
67 lines
2.1 KiB
PHP
Executable File
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* @author Amasty Team
|
|
* @copyright Copyright (c) Amasty (https://www.amasty.com)
|
|
* @package Admin Actions Log for Magento 2
|
|
*/
|
|
|
|
namespace Amasty\AdminActionsLog\Model;
|
|
|
|
use Magento\Framework\Api\Search\FilterGroup;
|
|
use Magento\Framework\Api\SearchCriteriaInterface;
|
|
use Magento\Framework\Api\SortOrder;
|
|
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
|
|
|
|
trait CriteriaApplierTrait
|
|
{
|
|
public function applyCriteria(SearchCriteriaInterface $searchCriteria, AbstractCollection $collection)
|
|
{
|
|
// Add filters from root filter group to the collection
|
|
foreach ($searchCriteria->getFilterGroups() as $group) {
|
|
$this->addFilterGroupToCollection($group, $collection);
|
|
}
|
|
|
|
if ($sortOrders = $searchCriteria->getSortOrders()) {
|
|
$this->addOrderToCollection($sortOrders, $collection);
|
|
}
|
|
|
|
$collection->setCurPage($searchCriteria->getCurrentPage());
|
|
$collection->setPageSize($searchCriteria->getPageSize());
|
|
}
|
|
|
|
/**
|
|
* Helper function that adds a FilterGroup to the collection.
|
|
*
|
|
* @param FilterGroup $filterGroup
|
|
* @param AbstractCollection $collection
|
|
*/
|
|
public function addFilterGroupToCollection(FilterGroup $filterGroup, AbstractCollection $collection): void
|
|
{
|
|
foreach ($filterGroup->getFilters() as $filter) {
|
|
$condition = $filter->getConditionType() ?: 'eq';
|
|
$collection->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper function that adds a SortOrder to the collection.
|
|
*
|
|
* @param SortOrder[] $sortOrders
|
|
* @param AbstractCollection $collection
|
|
*/
|
|
public function addOrderToCollection($sortOrders, AbstractCollection $collection): void
|
|
{
|
|
/** @var SortOrder $sortOrder */
|
|
foreach ($sortOrders as $sortOrder) {
|
|
$field = $sortOrder->getField();
|
|
$collection->addOrder(
|
|
$field,
|
|
($sortOrder->getDirection() == SortOrder::SORT_DESC) ? 'DESC' : 'ASC'
|
|
);
|
|
}
|
|
}
|
|
}
|