Add accessibility_specification

This commit is contained in:
Daniel Siepmann 2021-08-23 14:20:36 +02:00
parent cc216429a5
commit 8315d42934
19 changed files with 1221 additions and 26 deletions

View file

@ -0,0 +1,185 @@
<?php
declare(strict_types=1);
/*
* Copyright (C) 2021 Daniel Siepmann <coding@daniel-siepmann.de>
*
* 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.
*/
namespace WerkraumMedia\ThueCat\Domain\Import\Entity;
use WerkraumMedia\ThueCat\Domain\Import\EntityMapper\PropertyValues;
class AccessibilityCertification implements MapsToType
{
/**
* @var string
*/
protected $accessibilityCertificationStatus = '';
/**
* @var string
*/
protected $certificationAccessibilityDeaf = '';
/**
* @var string
*/
protected $certificationAccessibilityMental = '';
/**
* @var string
*/
protected $certificationAccessibilityPartiallyDeaf = '';
/**
* @var string
*/
protected $certificationAccessibilityPartiallyVisual = '';
/**
* @var string
*/
protected $certificationAccessibilityVisual = '';
/**
* @var string
*/
protected $certificationAccessibilityWalking = '';
/**
* @var string
*/
protected $certificationAccessibilityWheelchair = '';
public function getAccessibilityCertificationStatus(): string
{
return $this->accessibilityCertificationStatus;
}
public function getCertificationAccessibilityDeaf(): string
{
return $this->certificationAccessibilityDeaf;
}
public function getCertificationAccessibilityMental(): string
{
return $this->certificationAccessibilityMental;
}
public function getCertificationAccessibilityPartiallyDeaf(): string
{
return $this->certificationAccessibilityPartiallyDeaf;
}
public function getCertificationAccessibilityPartiallyVisual(): string
{
return $this->certificationAccessibilityPartiallyVisual;
}
public function getCertificationAccessibilityVisual(): string
{
return $this->certificationAccessibilityVisual;
}
public function getCertificationAccessibilityWalking(): string
{
return $this->certificationAccessibilityWalking;
}
public function getCertificationAccessibilityWheelchair(): string
{
return $this->certificationAccessibilityWheelchair;
}
/**
* @internal for mapping via Symfony component.
*/
public function setAccessibilityCertificationStatus(string $accessibilityCertificationStatus): void
{
$this->accessibilityCertificationStatus = PropertyValues::removePrefixFromEntry($accessibilityCertificationStatus);
}
/**
* @internal for mapping via Symfony component.
*/
public function setCertificationAccessibilityDeaf(string $certificationAccessibilityDeaf): void
{
$this->certificationAccessibilityDeaf = PropertyValues::removePrefixFromEntry($certificationAccessibilityDeaf);
}
/**
* @internal for mapping via Symfony component.
*/
public function setCertificationAccessibilityMental(string $certificationAccessibilityMental): void
{
$this->certificationAccessibilityMental = PropertyValues::removePrefixFromEntry($certificationAccessibilityMental);
}
/**
* @internal for mapping via Symfony component.
*/
public function setCertificationAccessibilityPartiallyDeaf(string $certificationAccessibilityPartiallyDeaf): void
{
$this->certificationAccessibilityPartiallyDeaf = PropertyValues::removePrefixFromEntry($certificationAccessibilityPartiallyDeaf);
}
/**
* @internal for mapping via Symfony component.
*/
public function setCertificationAccessibilityPartiallyVisual(string $certificationAccessibilityPartiallyVisual): void
{
$this->certificationAccessibilityPartiallyVisual = PropertyValues::removePrefixFromEntry($certificationAccessibilityPartiallyVisual);
}
/**
* @internal for mapping via Symfony component.
*/
public function setCertificationAccessibilityVisual(string $certificationAccessibilityVisual): void
{
$this->certificationAccessibilityVisual = PropertyValues::removePrefixFromEntry($certificationAccessibilityVisual);
}
/**
* @internal for mapping via Symfony component.
*/
public function setCertificationAccessibilityWalking(string $certificationAccessibilityWalking): void
{
$this->certificationAccessibilityWalking = PropertyValues::removePrefixFromEntry($certificationAccessibilityWalking);
}
/**
* @internal for mapping via Symfony component.
*/
public function setCertificationAccessibilityWheelchair(string $certificationAccessibilityWheelchair): void
{
$this->certificationAccessibilityWheelchair = PropertyValues::removePrefixFromEntry($certificationAccessibilityWheelchair);
}
public static function getSupportedTypes(): array
{
return [
'thuecat:AccessibilityCertification',
];
}
public static function getPriority(): int
{
return 10;
}
}

View file

@ -0,0 +1,188 @@
<?php
declare(strict_types=1);
/*
* Copyright (C) 2021 Daniel Siepmann <coding@daniel-siepmann.de>
*
* 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.
*/
namespace WerkraumMedia\ThueCat\Domain\Import\Entity;
use WerkraumMedia\ThueCat\Domain\Import\EntityMapper\PropertyValues;
class AccessibilitySpecification implements MapsToType
{
/**
* @var AccessibilityCertification
*/
protected $accessibilityCertification;
/**
* @var array
*/
protected $accessibilitySearchCriteria = [];
/**
* @var string
*/
protected $shortDescriptionAccessibilityAllGenerations = '';
/**
* @var string
*/
protected $shortDescriptionAccessibilityAllergic = '';
/**
* @var string
*/
protected $shortDescriptionAccessibilityDeaf = '';
/**
* @var string
*/
protected $shortDescriptionAccessibilityMental = '';
/**
* @var string
*/
protected $shortDescriptionAccessibilityVisual = '';
/**
* @var string
*/
protected $shortDescriptionAccessibilityWalking = '';
public function getAccessibilityCertification(): ?AccessibilityCertification
{
return $this->accessibilityCertification;
}
public function getAccessibilitySearchCriteria(): array
{
return $this->accessibilitySearchCriteria;
}
public function getShortDescriptionAccessibilityAllGenerations(): string
{
return $this->shortDescriptionAccessibilityAllGenerations;
}
public function getShortDescriptionAccessibilityAllergic(): string
{
return $this->shortDescriptionAccessibilityAllergic;
}
public function getShortDescriptionAccessibilityDeaf(): string
{
return $this->shortDescriptionAccessibilityDeaf;
}
public function getShortDescriptionAccessibilityMental(): string
{
return $this->shortDescriptionAccessibilityMental;
}
public function getShortDescriptionAccessibilityVisual(): string
{
return $this->shortDescriptionAccessibilityVisual;
}
public function getShortDescriptionAccessibilityWalking(): string
{
return $this->shortDescriptionAccessibilityWalking;
}
/**
* @internal for mapping via Symfony component.
*/
public function setAccessibilitySearchCriteria(array $accessibilitySearchCriteria): void
{
foreach ($accessibilitySearchCriteria as $criteria) {
$criteria = PropertyValues::removePrefixFromEntries($criteria);
$this->accessibilitySearchCriteria[$criteria['type']][] = $criteria['value'];
}
}
/**
* @internal for mapping via Symfony component.
*/
public function setAccessibilityCertification(AccessibilityCertification $accessibilityCertification): void
{
$this->accessibilityCertification = $accessibilityCertification;
}
/**
* @internal for mapping via Symfony component.
*/
public function setShortDescriptionAccessibilityAllGenerations(string $shortDescriptionAccessibilityAllGenerations): void
{
$this->shortDescriptionAccessibilityAllGenerations = $shortDescriptionAccessibilityAllGenerations;
}
/**
* @internal for mapping via Symfony component.
*/
public function setShortDescriptionAccessibilityAllergic(string $shortDescriptionAccessibilityAllergic): void
{
$this->shortDescriptionAccessibilityAllergic = $shortDescriptionAccessibilityAllergic;
}
/**
* @internal for mapping via Symfony component.
*/
public function setShortDescriptionAccessibilityDeaf(string $shortDescriptionAccessibilityDeaf): void
{
$this->shortDescriptionAccessibilityDeaf = $shortDescriptionAccessibilityDeaf;
}
/**
* @internal for mapping via Symfony component.
*/
public function setShortDescriptionAccessibilityMental(string $shortDescriptionAccessibilityMental): void
{
$this->shortDescriptionAccessibilityMental = $shortDescriptionAccessibilityMental;
}
/**
* @internal for mapping via Symfony component.
*/
public function setShortDescriptionAccessibilityVisual(string $shortDescriptionAccessibilityVisual): void
{
$this->shortDescriptionAccessibilityVisual = $shortDescriptionAccessibilityVisual;
}
/**
* @internal for mapping via Symfony component.
*/
public function setShortDescriptionAccessibilityWalking(string $shortDescriptionAccessibilityWalking): void
{
$this->shortDescriptionAccessibilityWalking = $shortDescriptionAccessibilityWalking;
}
public static function getSupportedTypes(): array
{
return [
'thuecat:AccessibilitySpecification',
];
}
public static function getPriority(): int
{
return 10;
}
}

View file

@ -81,6 +81,11 @@ class Place extends Base
*/
protected $distanceToPublicTransport = '';
/**
* @var ForeignReference
*/
protected $accessibilitySpecification;
public function getAddress(): ?Address
{
return $this->address;
@ -136,6 +141,11 @@ class Place extends Base
return $this->distanceToPublicTransport;
}
public function getAccessibilitySpecification(): ?ForeignReference
{
return $this->accessibilitySpecification;
}
/**
* @internal for mapping via Symfony component.
*/
@ -263,4 +273,12 @@ class Place extends Base
$this->distanceToPublicTransport = $value . ':' . PropertyValues::removePrefixFromEntry($unit);
}
}
/**
* @internal for mapping via Symfony component.
*/
public function setAccessibilitySpecification(ForeignReference $accessibilitySpecification): void
{
$this->accessibilitySpecification = $accessibilitySpecification;
}
}

View file

@ -36,6 +36,16 @@ class JsonDecode extends SymfonyJsonDecode
{
public const ACTIVE_LANGUAGE = 'active_language';
/**
* @var array[]
*/
private $rulesToKeepTypeInfo = [
[
'type' => 'beginsWith',
'comparisonValue' => 'thuecat:facilityAccessibility',
],
];
public function decode(
string $data,
string $format,
@ -155,9 +165,21 @@ class JsonDecode extends SymfonyJsonDecode
return $value;
}
if (array_key_exists('@language', $value)) {
return $value;
}
$type = $value['@type'] ?? null;
if (is_string($type)) {
foreach ($this->rulesToKeepTypeInfo as $rule) {
if ($this->doesRuleMatch($rule, $type)) {
return $value;
}
}
}
$newValue = $value['@value'] ?? null;
$language = $value['@language'] ?? null;
if (is_string($newValue) && $language === null) {
if (is_string($newValue)) {
return $newValue;
}
@ -212,4 +234,13 @@ class JsonDecode extends SymfonyJsonDecode
return $key;
}
private function doesRuleMatch(array $rule, string $type): bool
{
if ($rule['type'] === 'beginsWith') {
return StringUtility::beginsWith($type, $rule['comparisonValue']);
}
return false;
}
}

View file

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace WerkraumMedia\ThueCat\Domain\Import\Typo3Converter;
use TYPO3\CMS\Extbase\Persistence\QueryResultInterface;
use WerkraumMedia\ThueCat\Domain\Import\Entity\AccessibilitySpecification;
use WerkraumMedia\ThueCat\Domain\Import\Entity\Base;
use WerkraumMedia\ThueCat\Domain\Import\Entity\MapsToType;
use WerkraumMedia\ThueCat\Domain\Import\Entity\MediaObject;
@ -177,6 +178,8 @@ class GeneralConverter implements Converter
'is_accessible_for_free' => method_exists($entity, 'getIsAccessibleForFree') ? $entity->getIsAccessibleForFree() : '',
'public_access' => method_exists($entity, 'getPublicAccess') ? $entity->getPublicAccess() : '',
'available_languages' => method_exists($entity, 'getAvailableLanguages') ? implode(',', $entity->getAvailableLanguages()) : '',
'accessibility_specification' => $this->getAccessibilitySpecification($entity, $language),
];
}
@ -240,6 +243,50 @@ class GeneralConverter implements Converter
);
}
private function getAccessibilitySpecification(
object $entity,
string $language
): string {
if (
method_exists($entity, 'getAccessibilitySpecification') === false
|| $entity->getAccessibilitySpecification() === null
) {
return '{}';
}
$access = $this->resolveForeignReference->resolve(
$entity->getAccessibilitySpecification(),
$language
);
if (!$access instanceof AccessibilitySpecification) {
return '{}';
}
$cert = $access->getAccessibilityCertification();
$result = json_encode(array_filter([
'accessibilityCertificationStatus' => $cert ? $cert->getAccessibilityCertificationStatus() : '',
'certificationAccessibilityDeaf' => $cert ? $cert->getCertificationAccessibilityDeaf() : '',
'certificationAccessibilityMental' => $cert ? $cert->getCertificationAccessibilityMental() : '',
'certificationAccessibilityPartiallyDeaf' => $cert ? $cert->getCertificationAccessibilityPartiallyDeaf() : '',
'certificationAccessibilityPartiallyVisual' => $cert ? $cert->getCertificationAccessibilityPartiallyVisual() : '',
'certificationAccessibilityVisual' => $cert ? $cert->getCertificationAccessibilityVisual() : '',
'certificationAccessibilityWalking' => $cert ? $cert->getCertificationAccessibilityWalking() : '',
'certificationAccessibilityWheelchair' => $cert ? $cert->getCertificationAccessibilityWheelchair() : '',
'accessibilitySearchCriteria' => $access->getAccessibilitySearchCriteria(),
'shortDescriptionAccessibilityAllGenerations' => $access->getShortDescriptionAccessibilityAllGenerations(),
'shortDescriptionAccessibilityAllergic' => $access->getShortDescriptionAccessibilityAllergic(),
'shortDescriptionAccessibilityDeaf' => $access->getShortDescriptionAccessibilityDeaf(),
'shortDescriptionAccessibilityMental' => $access->getShortDescriptionAccessibilityMental(),
'shortDescriptionAccessibilityVisual' => $access->getShortDescriptionAccessibilityVisual(),
'shortDescriptionAccessibilityWalking' => $access->getShortDescriptionAccessibilityWalking(),
]));
if ($result === false || $result === '[]') {
return '{}';
}
return $result;
}
private function getMedia(
Base $entity,
string $language

View file

@ -0,0 +1,125 @@
<?php
declare(strict_types=1);
/*
* Copyright (C) 2021 Daniel Siepmann <coding@daniel-siepmann.de>
*
* 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.
*/
namespace WerkraumMedia\ThueCat\Domain\Model\Frontend;
use TYPO3\CMS\Core\Type\TypeInterface;
class AccessiblitySpecification implements TypeInterface
{
/**
* @var string
*/
private $serialized;
/**
* @var mixed[]
*/
private $data;
public function __construct(string $serialized)
{
$this->serialized = $serialized;
$this->data = json_decode($serialized, true);
}
public function getCertificationStatus(): string
{
return $this->data['accessibilityCertificationStatus'] ?? '';
}
public function getSearchCriteria(): array
{
return $this->data['accessibilitySearchCriteria'] ?? [];
}
public function getCertificationDeaf(): string
{
return $this->data['certificationAccessibilityDeaf'] ?? '';
}
public function getCertificationMental(): string
{
return $this->data['certificationAccessibilityMental'] ?? '';
}
public function getCertificationPartiallyDeaf(): string
{
return $this->data['certificationAccessibilityPartiallyDeaf'] ?? '';
}
public function getCertificationPartiallyVisual(): string
{
return $this->data['certificationAccessibilityPartiallyVisual'] ?? '';
}
public function getCertificationVisual(): string
{
return $this->data['certificationAccessibilityVisual'] ?? '';
}
public function getCertificationWalking(): string
{
return $this->data['certificationAccessibilityWalking'] ?? '';
}
public function getCertificationWheelchair(): string
{
return $this->data['certificationAccessibilityWheelchair'] ?? '';
}
public function getShortDescriptionAllGenerations(): string
{
return $this->data['shortDescriptionAccessibilityAllGenerations'] ?? '';
}
public function getShortDescriptionAllergic(): string
{
return $this->data['shortDescriptionAccessibilityAllergic'] ?? '';
}
public function getShortDescriptionDeaf(): string
{
return $this->data['shortDescriptionAccessibilityDeaf'] ?? '';
}
public function getShortDescriptionMental(): string
{
return $this->data['shortDescriptionAccessibilityMental'] ?? '';
}
public function getShortDescriptionVisual(): string
{
return $this->data['shortDescriptionAccessibilityVisual'] ?? '';
}
public function getShortDescriptionWalking(): string
{
return $this->data['shortDescriptionAccessibilityWalking'] ?? '';
}
public function __toString(): string
{
return $this->serialized;
}
}

View file

@ -68,6 +68,11 @@ abstract class Place extends Base
*/
protected $distanceToPublicTransport = '';
/**
* @var AccessiblitySpecification|null
*/
protected $accessibilitySpecification = null;
public function initializeObject(): void
{
$this->parkingFacilityNearBy = new ObjectStorage();
@ -119,4 +124,9 @@ abstract class Place extends Base
'unit' => $values[1] ?? '',
];
}
public function getAccessibilitySpecification(): ?AccessiblitySpecification
{
return $this->accessibilitySpecification;
}
}

View file

@ -229,6 +229,13 @@ return (static function (string $extensionKey, string $tableName) {
'readOnly' => true,
],
],
'accessibility_specification' => [
'label' => $languagePath . '.accessibility_specification',
'config' => [
'type' => 'text',
'readOnly' => true,
],
],
'remote_id' => [
'label' => $languagePath . '.remote_id',
'l10n_mode' => 'exclude',
@ -296,7 +303,7 @@ return (static function (string $extensionKey, string $tableName) {
],
'types' => [
'0' => [
'showitem' => '--palette--;;language, title, description, slogan, start_of_construction, sanitation, other_service, museum_service, architectural_style, traffic_infrastructure, payment_accepted, digital_offer, photography, pets_allowed, is_accessible_for_free, public_access, available_languages, distance_to_public_transport, opening_hours, offers, address, media, remote_id, --div--;' . $languagePath . '.tab.relations, town, managed_by, parking_facility_near_by',
'showitem' => '--palette--;;language, title, description, slogan, start_of_construction, sanitation, other_service, museum_service, architectural_style, traffic_infrastructure, payment_accepted, digital_offer, photography, pets_allowed, is_accessible_for_free, public_access, available_languages, distance_to_public_transport, opening_hours, offers, accessibility_specification, address, media, remote_id, --div--;' . $languagePath . '.tab.relations, town, managed_by, parking_facility_near_by',
],
],
];

View file

@ -455,6 +455,219 @@
<source>Seconds</source>
<target>Sekunden</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certificationStatus.AccessibilityChecked">
<source>Accessibility Checked</source>
<target>barrierefrei</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certificationStatus.CertificationAccessibilityNoCertification">
<source>Certification Accessibility No Certification</source>
<target>nicht zertifiziert</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certificationStatus.CertificationInformationAboutAccessibility">
<source>Certification Information About Accessibility</source>
<target>teilweise barrierefrei</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.deaf">
<source>for deaf</source>
<target>für taube Menschen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.mental">
<source>for mental</source>
<target>für Menschen mit kognitiven Beeinträchtigungen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.partiallyDeaf">
<source>for partially deaf</source>
<target>für Menschen mit Hörbehinderung</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.partiallyVisual">
<source>for partially visual</source>
<target>für Menschen mit Sehbehinderung</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.visual">
<source>for visual</source>
<target>für blinde Menschen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.walking">
<source>for walking</source>
<target>für Menschen mit Gehbehinderung</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.wheelchair">
<source>for wheelchair</source>
<target>für Rollstuhlfahrer</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.None">
<source>not certified</source>
<target>nicht zertifiziert</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.Full">
<source>accessible</source>
<target>barrierefrei</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.Info">
<source>partially accessible</source>
<target>teilweise barrierefrei</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionAllGenerations">
<source>Short Description all Generations</source>
<target>Kurzbeschreibung Alle Generationen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionAllergic">
<source>Short Description all allergic</source>
<target>Kurzbeschreibung Allergiker</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionDeaf">
<source>Short Description all deaf</source>
<target>Kurzbeschreibung Hörbehinderte / Gehörlos</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionMental">
<source>Short Description all mental</source>
<target>Kurzbeschreibung Kognitive Beeinträchtigungen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionVisual">
<source>Short Description all visual</source>
<target>Kurzbeschreibung Sehbehinderung / Blinde</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionWalking">
<source>Short Description all walking</source>
<target>Kurzbeschreibung Gehbehindert/Rollstuhl</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.AudioInductionLoop">
<source>Audio Induction Loop</source>
<target>Induktive Höranlage/ -schleife</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.FlashingSignalCallWaitingDoor">
<source>Flashing Signal Call Waiting Door</source>
<target>Blinksignal bei Anklopfen an die Zimmertür</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersDeafPeople">
<source>Special Offers Deaf People</source>
<target>Spezielle Angebote für gehörlose Menschen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersHearingImpairment">
<source>Special Offers Hearing Impairment</source>
<target>Spezielle Angbote für Menschen mit Hörbehinderung</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.VisualConfirmationDistressCallElevator">
<source>Visual Confirmation Distress Call Elevator</source>
<target>Optische Bestätigung des Notrufs im Aufzug</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.ColoredOrPictorialGuidanceSystem">
<source>Colored Or Pictorial Guidance System</source>
<target>Farbliches oder bildhaftes Leitsystem</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.InformationInEasyLanguage">
<source>Information In Easy Language</source>
<target>Informationen in leichter Sprache (Führung, Begleitheft o.ä.)</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.InformationWithPictogramsOrPictures">
<source>Information With Pictograms Or Pictures</source>
<target>Informationen mit Piktogrammen oder Bildern</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.AssistanceDogsWelcome">
<source>Assistance Dogs Welcome</source>
<target>Assistenzhunde willkommen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.GuidanceSystemWithFloorIndicators">
<source>Guidance System With Floor Indicators</source>
<target>Durchgehendes Leitsystem mit Bodenindikatoren</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.InformationBrailleOrPrismaticFont">
<source>Information Braille Or Prismatic Font</source>
<target>Informationen in Braille- oder Prismenschrift</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.OffersInPictoralLanguage">
<source>Offers In Pictoral Language</source>
<target>Angebote in bildhafter Sprache (Führung, Audioguide o.ä.)</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersBlindPeople">
<source>Special Offers Blind People</source>
<target>Spezielle Angebote für blinde Menschen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersVisualImpairment">
<source>Special Offers Visual Impairment</source>
<target>Spezielle Angbote für Menschen mit Sehbehinderung</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.TactileOffers">
<source>Tactile Offers</source>
<target>Taktile Angebote (Tastmodell, Lageplan o.ä.)</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.VisuallyContrastingStepEdges">
<source>Visually ContrastingStep Edges</source>
<target>Visuell kontrastierende Stufenkanten</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.AllRoomsStepFreeAccess">
<source>All Rooms Step Free Access</source>
<target>Alle nutzbaren Räume und Einrichtungen stufenlos bzw. über Aufzug erreichbar</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.EightyCMWidthPassageWays">
<source>Eighty CM Width Passage Ways</source>
<target>80 cm Mindestbreite aller Durchgänge / Türen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.EntryAidSwimmingPool">
<source>Entry Aid Swimming Pool</source>
<target>Einstiegshilfe Schwimmbecken</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.GrabRailInShower">
<source>Grab Rail In Shower</source>
<target>Haltegriff in der Dusche</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.HandrailsOnBothSidesOfAllStaircases">
<source>Handrails On Both Sides Of All Staircases</source>
<target>Beidseitige Handläufe an allen Treppen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.HingedGrabRailToilet">
<source>Hinged Grab Rail Toilet</source>
<target>Klappbarer Haltegriff am WC</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.LateralAccessibleToilet">
<source>Lateral Accessible Toilet</source>
<target>WC seitlich anfahrbar</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.MinumumManoeuvringSpaceShower">
<source>Minumum Manoeuvring Space Shower</source>
<target>Bewegungsfläche der Dusche min. 1m x 1m</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.NinetyCMWidthPassageWays">
<source>Ninety CM Width Passage Ways</source>
<target>90 cm Mindestbreite aller Durchgänge / Türen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.NursingBed">
<source>Nursing Bed</source>
<target>Pflegebett</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.ParkingPeopleWithDisabilities">
<source>Parking People With Disabilities</source>
<target>Parkplatz für Menschen mit Behinderung</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SeventyCMWidthPassageWays">
<source>Seventy CM Width Passage Ways</source>
<target>70 cm Mindestbreite aller Durchgänge / Türen</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.ShowerSeat">
<source>Shower Seat</source>
<target>Duschstuhl oder sitz</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersWalkingImpairment">
<source>Special Offers Walking Impairment</source>
<target>Spezielle Angbote für Menschen mit Gehbehinderung</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersWheelchairUsers">
<source>Special Offers Wheelchair Users</source>
<target>Spezielle Angebote für Rollstuhlfahrer</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.StepFreeAccess">
<source>Step Free Access</source>
<target>Stufenloser Zugang zum Gebäude/ Objekt/ Gelände</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.StepFreeShower">
<source>Step Free Shower</source>
<target>Stufenlose Dusche</target>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.ToiletsPeopleWithDisabilities">
<source>Toilets People With Disabilities</source>
<target>WC für Menschen mit Behinderung</target>
</trans-unit>
</body>
</file>
</xliff>

View file

@ -431,6 +431,166 @@
<trans-unit id="content.unit.SEC">
<source>Seconds</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certificationStatus.AccessibilityChecked">
<source>Accessibility Checked</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certificationStatus.CertificationAccessibilityNoCertification">
<source>Certification Accessibility No Certification</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certificationStatus.CertificationInformationAboutAccessibility">
<source>Certification Information About Accessibility</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.deaf">
<source>for deaf</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.mental">
<source>for mental</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.partiallyDeaf">
<source>for partially deaf</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.partiallyVisual">
<source>for partially visual</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.visual">
<source>for visual</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.walking">
<source>for walking</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.wheelchair">
<source>for wheelchair</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.None">
<source>not certified</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.Full">
<source>accessible</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.certification.Info">
<source>partially accessible</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionAllGenerations">
<source>Short Description all Generations</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionAllergic">
<source>Short Description all allergic</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionDeaf">
<source>Short Description all deaf</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionMental">
<source>Short Description all mental</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionVisual">
<source>Short Description all visual</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.shortDescriptionWalking">
<source>Short Description all walking</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.AudioInductionLoop">
<source>Audio Induction Loop</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.FlashingSignalCallWaitingDoor">
<source>Flashing Signal Call Waiting Door</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersDeafPeople">
<source>Special Offers Deaf People</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersHearingImpairment">
<source>Special Offers Hearing Impairment</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.VisualConfirmationDistressCallElevator">
<source>Visual Confirmation Distress Call Elevator</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.ColoredOrPictorialGuidanceSystem">
<source>Colored Or Pictorial Guidance System</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.InformationInEasyLanguage">
<source>Information In Easy Language</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.InformationWithPictogramsOrPictures">
<source>Information With Pictograms Or Pictures</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.AssistanceDogsWelcome">
<source>Assistance Dogs Welcome</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.GuidanceSystemWithFloorIndicators">
<source>Guidance System With Floor Indicators</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.InformationBrailleOrPrismaticFont">
<source>Information Braille Or Prismatic Font</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.OffersInPictoralLanguage">
<source>Offers In Pictoral Language</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersBlindPeople">
<source>Special Offers Blind People</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersVisualImpairment">
<source>Special Offers Visual Impairment</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.TactileOffers">
<source>Tactile Offers</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.VisuallyContrastingStepEdges">
<source>Visually ContrastingStep Edges</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.AllRoomsStepFreeAccess">
<source>All Rooms Step Free Access</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.EightyCMWidthPassageWays">
<source>Eighty CM Width Passage Ways</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.EntryAidSwimmingPool">
<source>Entry Aid Swimming Pool</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.GrabRailInShower">
<source>Grab Rail In Shower</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.HandrailsOnBothSidesOfAllStaircases">
<source>Handrails On Both Sides Of All Staircases</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.HingedGrabRailToilet">
<source>Hinged Grab Rail Toilet</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.LateralAccessibleToilet">
<source>Lateral Accessible Toilet</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.MinumumManoeuvringSpaceShower">
<source>Minumum Manoeuvring Space Shower</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.NinetyCMWidthPassageWays">
<source>Ninety CM Width Passage Ways</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.NursingBed">
<source>Nursing Bed</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.ParkingPeopleWithDisabilities">
<source>Parking People With Disabilities</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SeventyCMWidthPassageWays">
<source>Seventy CM Width Passage Ways</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.ShowerSeat">
<source>Shower Seat</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersWalkingImpairment">
<source>Special Offers Walking Impairment</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.SpecialOffersWheelchairUsers">
<source>Special Offers Wheelchair Users</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.StepFreeAccess">
<source>Step Free Access</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.StepFreeShower">
<source>Step Free Shower</source>
</trans-unit>
<trans-unit id="content.accessibilitySpecification.searchCriteria.criteria.ToiletsPeopleWithDisabilities">
<source>Toilets People With Disabilities</source>
</trans-unit>
</body>
</file>
</xliff>

View file

@ -150,6 +150,9 @@
<trans-unit id="tx_thuecat_tourist_attraction.offers" xml:space="preserve">
<source>Offers</source>
</trans-unit>
<trans-unit id="tx_thuecat_tourist_attraction.accessibility_specification" xml:space="preserve">
<source>Accessibility Specification</source>
</trans-unit>
<trans-unit id="tx_thuecat_tourist_attraction.town" xml:space="preserve">
<source>Town</source>
</trans-unit>

View file

@ -93,6 +93,10 @@
{f:render(section: 'Address', arguments: {address: parkingFacility.address})}
</f:for>
</f:if>
<f:if condition="{entity.accessibilitySpecification}">
{f:render(section: 'AccessiblitySpecification', arguments: {specification: entity.accessibilitySpecification})}
</f:if>
</f:for>
<f:section name="Address">
@ -104,4 +108,65 @@
{address.fax}
</p>
</f:section>
<f:section name="AccessiblitySpecification">
{f:translate(id: 'content.accessibilitySpecification.certificationStatus.{specification.certificationStatus}', default: specification.certificationStatus, extensionName: 'Thuecat')}
<f:if condition="{specification.certificationDeaf}">
{f:translate(id: 'content.accessibilitySpecification.certification.{specification.certificationDeaf}', default: specification.certificationDeaf, extensionName: 'Thuecat')} {f:translate(id: 'content.accessibilitySpecification.certification.deaf', extensionName: 'Thuecat')}
</f:if>
<f:if condition="{specification.certificationMental}">
{f:translate(id: 'content.accessibilitySpecification.certification.{specification.certificationMental}', default: specification.certificationMental, extensionName: 'Thuecat')} {f:translate(id: 'content.accessibilitySpecification.certification.mental', extensionName: 'Thuecat')}
</f:if>
<f:if condition="{specification.certificationPartiallyDeaf}">
{f:translate(id: 'content.accessibilitySpecification.certification.{specification.certificationPartiallyDeaf}', default: specification.certificationPartiallyDeaf, extensionName: 'Thuecat')} {f:translate(id: 'content.accessibilitySpecification.certification.partiallyDeaf', extensionName: 'Thuecat')}
</f:if>
<f:if condition="{specification.certificationPartiallyVisual}">
{f:translate(id: 'content.accessibilitySpecification.certification.{specification.certificationPartiallyVisual}', default: specification.certificationPartiallyVisual, extensionName: 'Thuecat')} {f:translate(id: 'content.accessibilitySpecification.certification.partiallyVisual', extensionName: 'Thuecat')}
</f:if>
<f:if condition="{specification.certificationVisual}">
{f:translate(id: 'content.accessibilitySpecification.certification.{specification.certificationVisual}', default: specification.certificationVisual, extensionName: 'Thuecat')} {f:translate(id: 'content.accessibilitySpecification.certification.visual', extensionName: 'Thuecat')}
</f:if>
<f:if condition="{specification.certificationWalking}">
{f:translate(id: 'content.accessibilitySpecification.certification.{specification.certificationWalking}', default: specification.certificationWalking, extensionName: 'Thuecat')} {f:translate(id: 'content.accessibilitySpecification.certification.walking', extensionName: 'Thuecat')}
</f:if>
<f:if condition="{specification.certificationWheelchair}">
{f:translate(id: 'content.accessibilitySpecification.certification.{specification.certificationWheelchair}', default: specification.certificationWheelchair, extensionName: 'Thuecat')} {f:translate(id: 'content.accessibilitySpecification.certification.wheelchair', extensionName: 'Thuecat')}
</f:if>
<f:if condition="{specification.shortDescriptionAllGenerations}">
{f:translate(id: 'content.accessibilitySpecification.shortDescriptionAllGenerations', extensionName: 'Thuecat')}
<p>{specification.shortDescriptionAllGenerations -> f:format.nl2br()}</p>
</f:if>
<f:if condition="{specification.shortDescriptionAllergic}">
{f:translate(id: 'content.accessibilitySpecification.shortDescriptionAllergic', extensionName: 'Thuecat')}
<p>{specification.shortDescriptionAllergic -> f:format.nl2br()}</p>
</f:if>
<f:if condition="{specification.shortDescriptionDeaf}">
{f:translate(id: 'content.accessibilitySpecification.shortDescriptionDeaf', extensionName: 'Thuecat')}
<p>{specification.shortDescriptionDeaf -> f:format.nl2br()}</p>
</f:if>
<f:if condition="{specification.shortDescriptionMental}">
{f:translate(id: 'content.accessibilitySpecification.shortDescriptionMental', extensionName: 'Thuecat')}
<p>{specification.shortDescriptionMental -> f:format.nl2br()}</p>
</f:if>
<f:if condition="{specification.shortDescriptionVisual}">
{f:translate(id: 'content.accessibilitySpecification.shortDescriptionVisual', extensionName: 'Thuecat')}
<p>{specification.shortDescriptionVisual -> f:format.nl2br()}</p>
</f:if>
<f:if condition="{specification.shortDescriptionWalking}">
{f:translate(id: 'content.accessibilitySpecification.shortDescriptionWalking', extensionName: 'Thuecat')}
<p>{specification.shortDescriptionWalking -> f:format.nl2br()}</p>
</f:if>
<f:if condition="{specification.searchCriteria}">
<ul>
<f:for each="{specification.searchCriteria}" key="id" as="criterias">
<f:for each="{criterias}" as="criteria">
<li>{f:translate(id: 'content.accessibilitySpecification.searchCriteria.criteria.{criteria}', default: criteria, extensionName: 'Thuecat')}</li>
</f:for>
</f:for>
</ul>
</f:if>
</f:section>
</html>

View file

@ -24,6 +24,7 @@
<available_languages>German,English,French</available_languages>
<distance_to_public_transport>250:MTR</distance_to_public_transport>
<parking_facility_near_by>1,2</parking_facility_near_by>
<accessibility_specification>{"accessibilityCertificationStatus":"AccessibilityChecked","accessibilitySearchCriteria":{"facilityAccessibilityDeaf":["AudioInductionLoop","FlashingSignalCallWaitingDoor","SpecialOffersDeafPeople","SpecialOffersHearingImpairment","VisualConfirmationDistressCallElevator"],"facilityAccessibilityMental":["ColoredOrPictorialGuidanceSystem","InformationInEasyLanguage","InformationWithPictogramsOrPictures"],"facilityAccessibilityVisual":["AssistanceDogsWelcome","GuidanceSystemWithFloorIndicators","InformationBrailleOrPrismaticFont","OffersInPictoralLanguage","SpecialOffersBlindPeople","SpecialOffersVisualImpairment","TactileOffers","VisuallyContrastingStepEdges"],"facilityAccessibilityWalking":["AllRoomsStepFreeAccess","EightyCMWidthPassageWays","EntryAidSwimmingPool","GrabRailInShower","HandrailsOnBothSidesOfAllStaircases","HingedGrabRailToilet","LateralAccessibleToilet","MinumumManoeuvringSpaceShower","NinetyCMWidthPassageWays","NursingBed","ParkingPeopleWithDisabilities","SeventyCMWidthPassageWays","ShowerSeat","SpecialOffersWalkingImpairment","SpecialOffersWheelchairUsers","StepFreeAccess","StepFreeShower","ToiletsPeopleWithDisabilities"]},"certificationAccessibilityDeaf":"Full","certificationAccessibilityMental":"None","certificationAccessibilityPartiallyDeaf":"None","certificationAccessibilityPartiallyVisual":"Info","certificationAccessibilityVisual":"None","certificationAccessibilityWalking":"Info","certificationAccessibilityWheelchair":"Info","shortDescriptionAccessibilityAllGenerations":"Deutsche Beschreibung von shortDescriptionAccessibilityAllGenerations","shortDescriptionAccessibilityAllergic":"Deutsche Beschreibung von shortDescriptionAccessibilityAllergic","shortDescriptionAccessibilityDeaf":"Deutsche Beschreibung von shortDescriptionAccessibilityDeaf","shortDescriptionAccessibilityMental":"Deutsche Beschreibung von shortDescriptionAccessibilityMental","shortDescriptionAccessibilityVisual":"Deutsche Beschreibung von shortDescriptionAccessibilityVisual","shortDescriptionAccessibilityWalking":"Deutsche Beschreibung von shortDescriptionAccessibilityWalking"}</accessibility_specification>
</tx_thuecat_tourist_attraction>
<tx_thuecat_town>
<uid>1</uid>

View file

@ -0,0 +1,19 @@
HTTP/1.1 200 OK
Date: Wed, 17 Feb 2021 08:03:50 GMT
Content-Type: application/ld+json; charset=utf-8
Content-Length: 7756
Connection: keep-alive
Set-Cookie: ahSession=3df5d27f7b64e4de290f4f81b2a6b540621a3c83;path=/;expires=Sat, 20 Mar 2021 08:03:50 GMT;httpOnly=true;
Access-Control-Allow-Methods: HEAD, GET, POST, DELETE, OPTIONS
Access-Control-Allow-Headers: Authorization, Content-Type
Strict-Transport-Security: max-age=15724800; includeSubDomains
Access-Control-Allow-Credentials: true
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Feature-Policy: microphone 'none'; camera 'none'; payment 'none'
Content-Security-Policy: default-src 'self'; script-src 'self' 'sha256-xfTbtWk8kVI65iLJs8LB3lWf2g0g10DS71pDdoutFHc='; style-src 'self' 'unsafe-inline' https://stackpath.bootstrapcdn.com; img-src 'self' data: blob: *
Access-Control-Allow-Origin: https://cdb.thuecat.org
{"@context":{"schema":"http://schema.org/","dbo":"http://dbpedia.org/ontology/","dsv":"http://ontologies.sti-innsbruck.at/dsv/","foaf":"http://xmlns.com/foaf/0.1/","owl":"http://www.w3.org/2002/07/owl#","rdf":"http://www.w3.org/1999/02/22-rdf-syntax-ns#","rdfs":"http://www.w3.org/2000/01/rdf-schema#","sh":"http://www.w3.org/ns/shacl#","xsd":"http://www.w3.org/2001/XMLSchema#","ttgds":"https://thuecat.org/ontology/ttgds/1.0/","cdb":"https://thuecat.org/ontology/cdb/1.0/","dachkg":"https://thuecat.org/ontology/dachkg/1.0/","thuecat":"https://thuecat.org/ontology/thuecat/1.0/","epapp":"https://thuecat.org/ontology/epapp/1.0/"},"@graph":[{"@id":"https://thuecat.org/resources/e_23bec7f80c864c358da033dd75328f27-rfa","@type":["schema:Intangible","schema:Thing","thuecat:AccessibilitySpecification","ttgds:AccessibilitySpecification"],"schema:name":[{"@language":"de","@value":"Alte Synagoge Erfurt"},{"@language":"en","@value":"Old synagogue Erfurt"}],"thuecat:accessibilityCertification":{"@id":"genid-5215e8f6feb440cda65b5b5735240c68-b0","@type":["schema:Intangible","schema:Thing","thuecat:AccessibilityCertification"],"schema:validFrom":{"@type":"xsd:string","@value":"2019-04-01"},"schema:validThrough":{"@type":"xsd:string","@value":"2022-03-31"},"thuecat:accessibilityCertificationStatus":{"@type":"thuecat:AccessibilityCertificationStatus","@value":"thuecat:AccessibilityChecked"},"thuecat:certificationAccessibilityDeaf":{"@type":"thuecat:CertificationLevel","@value":"thuecat:None"},"thuecat:certificationAccessibilityMental":{"@type":"thuecat:CertificationLevel","@value":"thuecat:None"},"thuecat:certificationAccessibilityPartiallyDeaf":{"@type":"thuecat:CertificationLevel","@value":"thuecat:None"},"thuecat:certificationAccessibilityPartiallyVisual":{"@type":"thuecat:CertificationLevel","@value":"thuecat:Info"},"thuecat:certificationAccessibilityVisual":{"@type":"thuecat:CertificationLevel","@value":"thuecat:None"},"thuecat:certificationAccessibilityWalking":{"@type":"thuecat:CertificationLevel","@value":"thuecat:Info"},"thuecat:certificationAccessibilityWheelchair":{"@type":"thuecat:CertificationLevel","@value":"thuecat:Info"}},"thuecat:accessibilitySearchCriteria":[{"@type":"thuecat:facilityAccessibilityWalking","@value":"thuecat:AllRoomsStepFreeAccess"},{"@type":"thuecat:facilityAccessibilityVisual","@value":"thuecat:AssistanceDogsWelcome"},{"@type":"thuecat:facilityAccessibilityWalking","@value":"thuecat:HingedGrabRailToilet"},{"@type":"thuecat:facilityAccessibilityWalking","@value":"thuecat:LateralAccessibleToilet"},{"@type":"thuecat:facilityAccessibilityWalking","@value":"thuecat:StepFreeAccess"},{"@type":"thuecat:facilityAccessibilityWalking","@value":"thuecat:ToiletsPeopleWithDisabilities"},{"@type":"thuecat:facilityAccessibilityVisual","@value":"thuecat:VisuallyContrastingStepEdges"},{"@type":"thuecat:facilityAccessibilityDeaf","@value":"thuecat:AudioInductionLoop"},{"@type":"thuecat:facilityAccessibilityMental","@value":"thuecat:InformationWithPictogramsOrPictures"},{"@type":"thuecat:facilityAccessibilityWalking","@value":"thuecat:NinetyCMWidthPassageWays"},{"@type":"thuecat:facilityAccessibilityVisual","@value":"thuecat:OffersInPictoralLanguage"},{"@type":"thuecat:facilityAccessibilityVisual","@value":"thuecat:SpecialOffersBlindPeople"},{"@type":"thuecat:facilityAccessibilityDeaf","@value":"thuecat:SpecialOffersHearingImpairment"},{"@type":"thuecat:facilityAccessibilityVisual","@value":"thuecat:SpecialOffersVisualImpairment"},{"@type":"thuecat:facilityAccessibilityWalking","@value":"thuecat:SpecialOffersWalkingImpairment"},{"@type":"thuecat:facilityAccessibilityWalking","@value":"thuecat:SpecialOffersWheelchairUsers"},{"@type":"thuecat:facilityAccessibilityVisual","@value":"thuecat:TactileOffers"}],"thuecat:shortDescriptionAccessibilityDeaf":[{"@language":"de","@value":"Deutsche Beschreibung von shortDescriptionAccessibilityDeaf"},{"@language":"en","@value":"English description of shortDescriptionAccessibilityDeaf"}],"thuecat:shortDescriptionAccessibilityMental":[{"@language":"de","@value":"Deutsche Beschreibung von shortDescriptionAccessibilityMental"},{"@language":"en","@value":"English description of shortDescriptionAccessibilityMental"}],"thuecat:shortDescriptionAccessibilityVisual":[{"@language":"en","@value":"English description of shortDescriptionAccessibilityVisual"},{"@language":"de","@value":"Deutsche Beschreibung von shortDescriptionAccessibilityVisual"}],"thuecat:shortDescriptionAccessibilityWalking":[{"@language":"en","@value":"English description of shortDescriptionAccessibilityWalking"},{"@language":"de","@value":"Deutsche Beschreibung von shortDescriptionAccessibilityWalking"}]}]}

File diff suppressed because one or more lines are too long

View file

@ -180,7 +180,6 @@ class FrontendTest extends FunctionalTestCase
self::assertStringNotContainsString('nicht öffentlich zugänglich', (string)$result->getBody());
self::assertStringNotContainsString('öffentlich zugänglich', (string)$result->getBody());
self::assertStringNotContainsString('Deutsch', (string)$result->getBody());
self::assertStringNotContainsString('Englisch', (string)$result->getBody());
self::assertStringNotContainsString('Französisch', (string)$result->getBody());
@ -195,6 +194,63 @@ class FrontendTest extends FunctionalTestCase
self::assertStringContainsString('99084 Erfurt', (string)$result->getBody());
self::assertStringContainsString('servicecenter@q-park.de', (string)$result->getBody());
self::assertStringContainsString('+49 218 18190290', (string)$result->getBody());
self::assertStringContainsString('barrierefrei', (string)$result->getBody());
self::assertStringContainsString('barrierefrei für taube Menschen', (string)$result->getBody());
self::assertStringContainsString('nicht zertifiziert für Menschen mit kognitiven Beeinträchtigungen', (string)$result->getBody());
self::assertStringContainsString('nicht zertifiziert für Menschen mit Hörbehinderung', (string)$result->getBody());
self::assertStringContainsString('teilweise barrierefrei für Menschen mit Sehbehinderung', (string)$result->getBody());
self::assertStringContainsString('nicht zertifiziert für blinde Menschen', (string)$result->getBody());
self::assertStringContainsString('teilweise barrierefrei für Menschen mit Gehbehinderung', (string)$result->getBody());
self::assertStringContainsString('teilweise barrierefrei für Rollstuhlfahrer', (string)$result->getBody());
self::assertStringContainsString('Kurzbeschreibung Alle Generationen', (string)$result->getBody());
self::assertStringContainsString('Deutsche Beschreibung von shortDescriptionAccessibilityAllGenerations', (string)$result->getBody());
self::assertStringContainsString('Kurzbeschreibung Allergiker', (string)$result->getBody());
self::assertStringContainsString('Deutsche Beschreibung von shortDescriptionAccessibilityAllergic', (string)$result->getBody());
self::assertStringContainsString('Kurzbeschreibung Hörbehinderte / Gehörlos', (string)$result->getBody());
self::assertStringContainsString('Deutsche Beschreibung von shortDescriptionAccessibilityDeaf', (string)$result->getBody());
self::assertStringContainsString('Kurzbeschreibung Kognitive Beeinträchtigungen', (string)$result->getBody());
self::assertStringContainsString('Deutsche Beschreibung von shortDescriptionAccessibilityMental', (string)$result->getBody());
self::assertStringContainsString('Kurzbeschreibung Sehbehinderung / Blinde', (string)$result->getBody());
self::assertStringContainsString('Deutsche Beschreibung von shortDescriptionAccessibilityVisual', (string)$result->getBody());
self::assertStringContainsString('Kurzbeschreibung Gehbehindert/Rollstuhl', (string)$result->getBody());
self::assertStringContainsString('Deutsche Beschreibung von shortDescriptionAccessibilityWalking', (string)$result->getBody());
self::assertStringContainsString('Induktive Höranlage/ -schleife', (string)$result->getBody());
self::assertStringContainsString('Blinksignal bei Anklopfen an die Zimmertür', (string)$result->getBody());
self::assertStringContainsString('Spezielle Angebote für gehörlose Menschen', (string)$result->getBody());
self::assertStringContainsString('Spezielle Angbote für Menschen mit Hörbehinderung', (string)$result->getBody());
self::assertStringContainsString('Optische Bestätigung des Notrufs im Aufzug', (string)$result->getBody());
self::assertStringContainsString('Farbliches oder bildhaftes Leitsystem', (string)$result->getBody());
self::assertStringContainsString('Informationen in leichter Sprache (Führung, Begleitheft o.ä.)', (string)$result->getBody());
self::assertStringContainsString('Informationen mit Piktogrammen oder Bildern', (string)$result->getBody());
self::assertStringContainsString('Assistenzhunde willkommen', (string)$result->getBody());
self::assertStringContainsString('Durchgehendes Leitsystem mit Bodenindikatoren', (string)$result->getBody());
self::assertStringContainsString('Informationen in Braille- oder Prismenschrift', (string)$result->getBody());
self::assertStringContainsString('Angebote in bildhafter Sprache (Führung, Audioguide o.ä.)', (string)$result->getBody());
self::assertStringContainsString('Spezielle Angebote für blinde Menschen', (string)$result->getBody());
self::assertStringContainsString('Spezielle Angbote für Menschen mit Sehbehinderung', (string)$result->getBody());
self::assertStringContainsString('Taktile Angebote (Tastmodell, Lageplan o.ä.)', (string)$result->getBody());
self::assertStringContainsString('Visuell kontrastierende Stufenkanten', (string)$result->getBody());
self::assertStringContainsString('Alle nutzbaren Räume und Einrichtungen stufenlos bzw. über Aufzug erreichbar', (string)$result->getBody());
self::assertStringContainsString('80 cm Mindestbreite aller Durchgänge / Türen', (string)$result->getBody());
self::assertStringContainsString('Einstiegshilfe Schwimmbecken', (string)$result->getBody());
self::assertStringContainsString('Haltegriff in der Dusche', (string)$result->getBody());
self::assertStringContainsString('Beidseitige Handläufe an allen Treppen', (string)$result->getBody());
self::assertStringContainsString('Klappbarer Haltegriff am WC', (string)$result->getBody());
self::assertStringContainsString('WC seitlich anfahrbar', (string)$result->getBody());
self::assertStringContainsString('Bewegungsfläche der Dusche min. 1m x 1m', (string)$result->getBody());
self::assertStringContainsString('90 cm Mindestbreite aller Durchgänge / Türen', (string)$result->getBody());
self::assertStringContainsString('Pflegebett', (string)$result->getBody());
self::assertStringContainsString('Parkplatz für Menschen mit Behinderung', (string)$result->getBody());
self::assertStringContainsString('70 cm Mindestbreite aller Durchgänge / Türen', (string)$result->getBody());
self::assertStringContainsString('Duschstuhl oder sitz', (string)$result->getBody());
self::assertStringContainsString('Spezielle Angbote für Menschen mit Gehbehinderung', (string)$result->getBody());
self::assertStringContainsString('Spezielle Angebote für Rollstuhlfahrer', (string)$result->getBody());
self::assertStringContainsString('Stufenloser Zugang zum Gebäude/ Objekt/ Gelände', (string)$result->getBody());
self::assertStringContainsString('Stufenlose Dusche', (string)$result->getBody());
self::assertStringContainsString('WC für Menschen mit Behinderung', (string)$result->getBody());
}
/**

View file

@ -156,6 +156,32 @@ class JsonDecodingTest extends TestCase
], $result);
}
/**
* @test
*/
public function decodesPropertyWithMultipleLanguagesNotMatchingRequestOne(): void
{
$subject = new JsonDecode();
$result = $subject->decode((string) json_encode([
'schema:description' => [
0 => [
'@language' => 'en',
'@value' => 'English plain',
],
1 => [
'@language' => 'de',
'@value' => 'Deutsch plain',
],
],
]), 'json', [
JsonDecode::ACTIVE_LANGUAGE => 'fr',
]);
self::assertSame([
'description' => '',
], $result);
}
/**
* @test
*/
@ -344,4 +370,44 @@ class JsonDecodingTest extends TestCase
],
], $result);
}
/**
* @test
*/
public function keepsArrayOfValueAndTypeIfConfigured(): void
{
$subject = new JsonDecode();
$result = $subject->decode((string) json_encode([
'thuecat:AccessibilitySearchCriteria' => [
0 => [
'@type' => 'thuecat:facilityAccessibilityWalking',
'@value' => 'thuecat:AllRoomsStepFreeAccess',
],
1 => [
'@type' => 'thuecat:facilityAccessibilityVisual',
'@value' => 'thuecat:AssistanceDogsWelcome',
],
2 => [
'@type' => 'something else',
'@value' => 'something else',
],
],
]), 'json', [
JsonDecode::ACTIVE_LANGUAGE => 'de',
]);
self::assertSame([
'AccessibilitySearchCriteria' => [
0 => [
'type' => 'thuecat:facilityAccessibilityWalking',
'value' => 'thuecat:AllRoomsStepFreeAccess',
],
1 => [
'type' => 'thuecat:facilityAccessibilityVisual',
'value' => 'thuecat:AssistanceDogsWelcome',
],
2 => 'something else',
],
], $result);
}
}

View file

@ -72,6 +72,7 @@ CREATE TABLE tx_thuecat_tourist_attraction (
public_access text DEFAULT '' NOT NULL,
available_languages text DEFAULT '' NOT NULL,
distance_to_public_transport text DEFAULT '' NOT NULL,
accessibility_specification text DEFAULT '' NOT NULL,
);
CREATE TABLE tx_thuecat_parking_facility (