54 lines
1.6 KiB
PHP
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);
|
|
}
|
|
}
|