chore: remote obsolete contingents-related plumbing
This commit is contained in:
1 parent
8c99fba6fa
commit
b2fccae431
19 files changed
+1
-1711
No files matched your search
@@ -1,127 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\BusProNet\XmlLoader;
|
||||
|
||||
use App\BusProNet\XmlParser\ContingentParser;
|
||||
use League\Flysystem\FilesystemException;
|
||||
use League\Flysystem\FilesystemOperator;
|
||||
use League\Flysystem\StorageAttributes;
|
||||
use Psr\Cache\InvalidArgumentException;
|
||||
use Symfony\Contracts\Cache\ItemInterface;
|
||||
use Symfony\Contracts\Cache\TagAwareCacheInterface;
|
||||
|
||||
class ContingentLoader extends AbstractLoader
|
||||
{
|
||||
public function __construct(
|
||||
private readonly ContingentParser $parser,
|
||||
TagAwareCacheInterface $cache,
|
||||
FilesystemOperator $xmlExportContingents,
|
||||
) {
|
||||
parent::__construct($cache, $xmlExportContingents);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<int, string>
|
||||
*/
|
||||
public function generateFilesMap(): array
|
||||
{
|
||||
try {
|
||||
return $this->cache->get('bpn_contingent_files', function (ItemInterface $item) {
|
||||
$item->expiresAfter(3 * 60 * 60);
|
||||
$item->tag(['xml-sync']);
|
||||
|
||||
$xmlFiles = $this->xmlExport
|
||||
->listContents('.')
|
||||
->filter(fn (StorageAttributes $attributes) => $attributes->isFile() && str_starts_with($attributes->path(), 'HotelZimmer_'));
|
||||
|
||||
$mapping = [];
|
||||
|
||||
foreach ($xmlFiles as $file) {
|
||||
if (1 !== preg_match('/HotelZimmer_(\d+)\.xml$/', $file->path(), $matches)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$mapping[(int) $matches[1]] = $file->path();
|
||||
}
|
||||
|
||||
return $mapping;
|
||||
});
|
||||
} catch (InvalidArgumentException) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{roomTypes: array<int, array<string, mixed>>, rows: array<int, array<string, mixed>>}
|
||||
*/
|
||||
public function loadByHotelId(int $hotelId): array
|
||||
{
|
||||
$cacheKey = sprintf('contingent_hotel_%d', $hotelId);
|
||||
|
||||
try {
|
||||
return $this->cache->get($cacheKey, function (ItemInterface $item) use ($hotelId) {
|
||||
$item->expiresAfter(3600);
|
||||
$item->tag(['xml-sync']);
|
||||
|
||||
return $this->loadByHotelIdUncached($hotelId);
|
||||
});
|
||||
} catch (InvalidArgumentException) {
|
||||
return $this->loadByHotelIdUncached($hotelId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{roomTypes: array<int, array<string, mixed>>, rows: array<int, array<string, mixed>>}
|
||||
*/
|
||||
private function loadByHotelIdUncached(int $hotelId): array
|
||||
{
|
||||
$mapping = $this->generateFilesMap();
|
||||
|
||||
if (false === isset($mapping[$hotelId])) {
|
||||
return ['roomTypes' => [], 'rows' => []];
|
||||
}
|
||||
|
||||
$filename = $mapping[$hotelId];
|
||||
|
||||
try {
|
||||
$xml = $this->xmlExport->read($filename);
|
||||
} catch (FilesystemException) {
|
||||
return ['roomTypes' => [], 'rows' => []];
|
||||
}
|
||||
|
||||
$linkedHotelId = $this->getRootLinkedHotelId($xml);
|
||||
if (null !== $linkedHotelId) {
|
||||
if (false === isset($mapping[$linkedHotelId])) {
|
||||
return ['roomTypes' => [], 'rows' => []];
|
||||
}
|
||||
|
||||
try {
|
||||
$xml = $this->xmlExport->read($mapping[$linkedHotelId]);
|
||||
} catch (FilesystemException) {
|
||||
return ['roomTypes' => [], 'rows' => []];
|
||||
}
|
||||
}
|
||||
|
||||
return $this->parser->parse($xml);
|
||||
}
|
||||
|
||||
private function getRootLinkedHotelId(string $xml): ?int
|
||||
{
|
||||
$document = new \DOMDocument();
|
||||
if (false === @$document->loadXML($xml)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$root = $document->documentElement;
|
||||
if (null === $root) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$link = $root->getAttribute('idbuspro_kontingent_aus');
|
||||
if ('' === $link) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (int) $link;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user