Files
2026-09-15 10:35:56 +08:00

54 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
namespace Esun\Catalog\Model\MixStepPricing;
use Magento\Backend\Model\Session;
class ValidationState
{
private const PREFIX = 'esun_mix_step_pricing_';
private const STATE_VERSION = 2;
public function __construct(private readonly Session $session)
{
}
public function save(string $type, string $path, array $result): void
{
$validRows = (array)($result['valid_rows'] ?? []);
$invalidRows = (array)($result['invalid_rows'] ?? []);
$preview = array_slice($validRows, 0, 100);
$invalidPreview = array_slice($invalidRows, 0, 100);
$this->session->setData(self::PREFIX . $type, [
'version' => self::STATE_VERSION,
'path' => $path,
'valid' => (bool)$result['valid'],
'stats' => $result['stats'],
'errors' => $result['errors'],
'warnings' => $result['warnings'],
'preview' => $preview,
'preview_truncated' => count($validRows) > 100,
'invalid_preview' => $invalidPreview,
'invalid_preview_truncated' => count($invalidRows) > 100,
]);
}
public function get(string $type): array
{
$state = (array)$this->session->getData(self::PREFIX . $type);
if ($state !== [] && (int)($state['version'] ?? 0) !== self::STATE_VERSION) {
$this->clear($type);
return [];
}
return $state;
}
public function clear(string $type): void
{
$this->session->unsetData(self::PREFIX . $type);
}
}