* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ use WerkraumMedia\ThueCat\Domain\Import\JsonLD\Parser\Address; use WerkraumMedia\ThueCat\Domain\Import\JsonLD\Parser\GenericFields; use WerkraumMedia\ThueCat\Domain\Import\JsonLD\Parser\Media; use WerkraumMedia\ThueCat\Domain\Import\JsonLD\Parser\OpeningHours; class Parser { private GenericFields $genericFields; private OpeningHours $openingHours; private Address $address; private Media $media; public function __construct( GenericFields $genericFields, OpeningHours $openingHours, Address $address, Media $media ) { $this->genericFields = $genericFields; $this->openingHours = $openingHours; $this->address = $address; $this->media = $media; } public function getId(array $jsonLD): string { return $jsonLD['@id']; } public function getTitle(array $jsonLD, string $language = ''): string { return $this->genericFields->getTitle($jsonLD, $language); } public function getDescription(array $jsonLD, string $language = ''): string { return $this->genericFields->getDescription($jsonLD, $language); } public function getManagerId(array $jsonLD): string { return $jsonLD['thuecat:contentResponsible']['@id']; } /** * @return string[] */ public function getContainedInPlaceIds(array $jsonLD): array { return array_map(function (array $place) { return $place['@id']; }, $jsonLD['schema:containedInPlace']); } public function getOpeningHours(array $jsonLD): array { return $this->openingHours->get($jsonLD); } public function getAddress(array $jsonLD): array { return $this->address->get($jsonLD); } public function getMedia(array $jsonLD): array { return $this->media->get($jsonLD); } /** * @return string[] */ public function getLanguages(array $jsonLD): array { if (isset($jsonLD['schema:availableLanguage']) === false) { return []; } $languages = $jsonLD['schema:availableLanguage']; $languages = array_filter($languages, function (array $language) { return isset($language['@type']) && $language['@type'] === 'thuecat:Language' ; }); $languages = array_map(function (array $language) { $language = $language['@value']; // TODO: Make configurable / easier to extend if ($language === 'thuecat:German') { return 'de'; } if ($language === 'thuecat:English') { return 'en'; } if ($language === 'thuecat:French') { return 'fr'; } throw new \Exception('Unsupported language "' . $language . '".', 1612367481); }, $languages); return $languages; } }