Files
myep/src/BusProNet/XmlParser/ServicesParser.php
T

47 lines
1.9 KiB
PHP

<?php
namespace App\BusProNet\XmlParser;
use App\BusProNet\Constants;
use App\BusProNet\Model\Service;
use Symfony\Component\DomCrawler\Crawler;
class ServicesParser extends AbstractParser
{
public function parse(Crawler $result, string $category, string $source): array
{
$services = [];
$result->each(function (Crawler $node) use (&$services, $category, $source) {
$service = new Service();
$service->id = (int) $node->attr('idleistung');
$service->category = $category;
$service->source = $source;
$service->label = $node->attr('leistung');
$service->dateFrom = $this->stringToDate($node->attr('termin'));
$service->dateTo = $this->stringToDate($node->attr('terminbis'));
$service->subType = $node->attr('unterart');
$service->totalCount = $node->attr('anzahl') ? (int) $node->attr('anzahl') : null;
$mapping = $this->stringToArray($node->attr('zuordnung'));
$service->mapping = array_map(function ($index) { return (int) $index - 1; }, $mapping);
$service->totalPrice = $this->stringToFloat($node->attr('gesamtpreis'));
$individualPrices = array_map(
function ($price) {
return $this->stringToFloat($price);
}, $this->stringToArray($node->attr('einzelpreis', ''), '/')
);
$service->individualPrice = array_combine($service->mapping, $individualPrices);
if (Constants::CATEGORY_TRANSPORTATION === $category) {
$service->direction = $node->attr('richtung');
}
$service->ageFrom = $this->getIntOrNullValue($node->filterXPath('//altervon'));
$service->ageTo = $this->getIntOrNullValue($node->filterXPath('//alterbis'));
$services[$service->id] = $service;
});
return $services;
}
}