Your IP : 216.73.216.220


Current Path : /home/rtorresani/www/app/code/Amasty/ExportCore/Export/Filter/Utils/
Upload File :
Current File : //home/rtorresani/www/app/code/Amasty/ExportCore/Export/Filter/Utils/AfterFilterApplier.php

<?php

declare(strict_types=1);

/**
 * @author Amasty Team
 * @copyright Copyright (c) Amasty (https://www.amasty.com)
 * @package Export Core for Magento 2 (System)
 */

namespace Amasty\ExportCore\Export\Filter\Utils;

class AfterFilterApplier
{
    /**
     * @param array|string|int $condition
     * @param mixed $value
     * @param null|mixed $filterValue can be null if value is a part of array condition
     *
     * @return bool
     */
    public function apply($condition, $value, $filterValue): bool
    {
        if (is_array($condition)) {
            $result = true;
            foreach ($condition as $conditionName => $conditionValue) {
                if (is_int($conditionName) && is_array($conditionValue)) {
                    $result = false;
                    if ($this->apply($conditionValue, $value, null)) { // Logical OR
                        return true;
                    }
                } elseif (!$this->apply($conditionName, $value, $conditionValue)) { // Logical AND
                    return false;
                }
            }
        } else {
            switch ($condition) {
                case 'eq':
                    $result = $value == $filterValue;
                    break;
                case 'neq':
                    $result = $value != $filterValue;
                    break;
                case 'like':
                    $result = mb_stripos((string)$value, (string)$filterValue) !== false;
                    break;
                case 'nlike':
                    $result = mb_stripos((string)$value, (string)$filterValue) === false;
                    break;
                case 'in':
                    $result = in_array($value, (array)$filterValue);
                    break;
                case 'nin':
                    $result = !in_array($value, (array)$filterValue);
                    break;
                case 'notnull':
                    $result = $value !== null;
                    break;
                case 'null':
                    $result = $value === null;
                    break;
                case 'gt':
                    $result = $value > $filterValue;
                    break;
                case 'lt':
                    $result = $value < $filterValue;
                    break;
                case 'gteq':
                    $result = $value >= $filterValue;
                    break;
                case 'lteq':
                    $result = $value <= $filterValue;
                    break;
                case 'finset':
                    $result = in_array($filterValue, explode(',', (string)$value));
                    break;
                case 'nfinset':
                    $result = !in_array($filterValue, explode(',', (string)$value));
                    break;
                default:
                    $result = false;
            }
        }

        return $result;
    }
}