44 lines
1.2 KiB
PHP
44 lines
1.2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Esun\FreeGift\Model\Config\Backend;
|
|
|
|
use Magento\Config\Model\Config\Backend\Serialized\ArraySerialized;
|
|
use Magento\Config\Model\ResourceModel\Config\Data as ConfigResource;
|
|
use Magento\Config\Model\ResourceModel\Config\Data\Collection as ConfigCollection;
|
|
|
|
class TierItems extends ArraySerialized
|
|
{
|
|
protected function _construct(): void
|
|
{
|
|
$this->_setResourceModel(ConfigResource::class, ConfigCollection::class);
|
|
}
|
|
|
|
public function beforeSave()
|
|
{
|
|
$items = [];
|
|
$value = $this->getValue();
|
|
if (is_array($value)) {
|
|
unset($value['__empty']);
|
|
foreach ($value as $row) {
|
|
if (!is_array($row)) {
|
|
continue;
|
|
}
|
|
|
|
$amount = max(0.0, (float)($row['amount'] ?? 0));
|
|
$quantity = max(0, (int)($row['qty'] ?? 0));
|
|
if ($quantity <= 0) {
|
|
continue;
|
|
}
|
|
|
|
$items[] = ['amount' => $amount, 'qty' => $quantity];
|
|
}
|
|
}
|
|
|
|
usort($items, static fn (array $left, array $right): int => $left['amount'] <=> $right['amount']);
|
|
$this->setValue($items);
|
|
|
|
return parent::beforeSave();
|
|
}
|
|
}
|