refactor: code quality via Rector, strict types where safe

rector.php gets the codeQuality set: declare(strict_types=1) in the 85
files where Rector finds no call relying on scalar type juggling (mostly
TCA and configuration, models, the content feed API and the import
command), "or die" as "|| die", instanceof instead of null checks for
object types, early returns and self:: in final classes.

Hotel::setRooms() goes instead of getting the property Rector wanted to
declare: nothing calls it, and there is no rooms column any more.

Checked locally: cache warmup, the ep:* commands load, frontend crawl
(~1,900 URLs) and the backchannel APIs render the same as before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
frommeandClaude Opus 5.5 committed 2026-10-26 11:15:38 +01:00
1 parent f4556ee75c
commit 4fe06267c9
114 files changed
+278 -98

No files matched your search

@@ -1,7 +1,10 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Command;
use EP\EpProducts\Service\ProductImport;
use EP\EpProducts\Service\DateImportService;
use EP\EpProducts\Service\ProductImportSource;
use Symfony\Component\Console\Attribute\AsCommand;
@@ -28,7 +31,7 @@ class DateCommandController extends Command
public function execute(InputInterface $input, OutputInterface $output): int
{
$import = $this->importSource->acquire();
if ($import === null) {
if (!$import instanceof ProductImport) {
$output->writeln('No new import available.');
return 0;
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\ContentFeed;
use EP\EpProducts\Http\ApiKeyAuthenticator;
@@ -83,7 +83,7 @@ class UrlResolver
{
$site = $this->getIncludedSite($pageUid);
if (null === $site) {
if (!$site instanceof Site) {
return null;
}
@@ -152,7 +152,7 @@ class UrlResolver
$pageUid = $this->parsePageReference($detailPage);
$target = null === $pageUid ? null : $this->resolveLinkTarget($pageUid);
$site = null === $target ? null : $this->getIncludedSite($target);
$url = null === $site ? null : $this->getPageUrl($target);
$url = $site instanceof Site ? $this->getPageUrl($target) : null;
return [
'url' => $url,
@@ -170,7 +170,7 @@ class UrlResolver
{
$site = $this->getIncludedSite($storagePid);
if (null === $site) {
if (!$site instanceof Site) {
return null;
}
@@ -22,7 +22,7 @@ class CityController extends ActionController
*/
public function detailAction(?City $city = null): ResponseInterface
{
if (null === $city) {
if (!$city instanceof City) {
$cityUid = ($this->settings['cityUid'] ?? '');
$city = $this->cityRepository->findByIdentifier($cityUid);
}
@@ -25,7 +25,7 @@ class ConceptController extends ActionController
*/
public function detailAction(?Concept $concept = null): ResponseInterface
{
if ($concept === null) {
if (!$concept instanceof Concept) {
$conceptUid = ($this->settings['conceptUid'] ?? '');
$concept = $this->conceptRepository->findByIdentifier($conceptUid);
}
@@ -23,7 +23,7 @@ class CountryController extends ActionController
*/
public function detailAction(?Country $country = null): ResponseInterface
{
if ($country === null) {
if (!$country instanceof Country) {
$countryUid = ($this->settings['countryUid'] ?? '');
$country = $this->countryRepository->findByIdentifier($countryUid);
}
@@ -28,7 +28,7 @@ class HotelController extends ActionController
*/
public function detailAction(?Hotel $hotel = null): ResponseInterface
{
if ($hotel !== null) {
if ($hotel instanceof Hotel) {
$hotelUid = $hotel->getUid();
} else {
$hotelUid = ($this->settings['hotelUid'] ?? '');
@@ -47,7 +47,7 @@ class ProductController extends ActionController
$dateTo = null
): ResponseInterface {
// Get product to display from flexform settings if not provided via url
if ($product === null) {
if (!$product instanceof Product) {
$productUid = ($this->settings['productUid'] ?? null);
$product = $productUid ? $this->productRepository->findByIdentifier($productUid) : null;
}
@@ -23,7 +23,7 @@ class RegionController extends ActionController
*/
public function detailAction(?Region $region = null): ResponseInterface
{
if ($region === null) {
if (!$region instanceof Region) {
$regionUid = ($this->settings['regionUid'] ?? '');
$region = $this->regionRepository->findByIdentifier($regionUid);
}
@@ -33,7 +33,7 @@ class TeamController extends ActionController
*/
public function showAction(?Teammember $member = null): ResponseInterface
{
if ($member === null) {
if (!$member instanceof Teammember) {
return $this->redirect('list', null, null, null, null, 0, 302);
}
@@ -45,7 +45,7 @@ class TravelinfoController extends ActionController
public function travelInfoAction(?Travelinfo $travelInfo = null): ResponseInterface
{
// the page itself (/reiseinformationen/) without a travel info or code
if (null === $travelInfo) {
if (!$travelInfo instanceof Travelinfo) {
$this->notFound();
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -71,4 +73,3 @@ class Badge extends AbstractEntity
}
}
@@ -103,7 +103,7 @@ class City extends AbstractDestination implements TeaserInterface
$headerImages = $this->headerImages;
if ($headerImages->count() === 0 && null !== $this->getRegion()) {
$headerImages = $this->getRegion()->getHeaderImages();
return $this->getRegion()->getHeaderImages();
}
return $headerImages;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -49,4 +51,4 @@ class Faq extends AbstractEntity
$this->answer = $answer;
}
}
}
@@ -721,7 +721,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
$headerImages = $this->headerImages;
if ($headerImages->count() === 0 && null !== $this->getCity()) {
$headerImages = $this->getCity()->getHeaderImages();
return $this->getCity()->getHeaderImages();
}
return $headerImages;
@@ -920,13 +920,6 @@ class Hotel extends AbstractEntity implements TeaserInterface
$this->products = $products;
}
/**
* @param ObjectStorage $rooms
*/
public function setRooms($rooms) {
$this->rooms = $rooms;
}
public function addFact(Fact $fact)
{
$this->facts->attach($fact);
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -70,4 +72,3 @@ class Infobox extends AbstractEntity
$this->defaultText = $defaultText;
}
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -28,4 +30,4 @@ class MatchCode extends AbstractEntity
$this->code = $code;
}
}
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -836,7 +836,7 @@ class Product extends AbstractEntity implements TeaserInterface
$headerImages = $this->headerImages;
if ($headerImages->count() === 0 && null !== $this->getRegion()) {
$headerImages = $this->getRegion()->getHeaderImages();
return $this->getRegion()->getHeaderImages();
}
return $headerImages;
@@ -265,7 +265,7 @@ class Region extends AbstractDestination implements TeaserInterface
$headerImages = $this->headerImages;
if ($headerImages->count() === 0 && null !== $this->getCountry()) {
$headerImages = $this->getCountry()->getHeaderImages();
return $this->getCountry()->getHeaderImages();
}
return $headerImages;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
class Room
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -57,4 +59,3 @@ class TravelinfoLink extends AbstractEntity
$this->icon = $icon;
}
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
@@ -73,4 +75,3 @@ class TravelinfoTeaser extends AbstractEntity
$this->image = $image;
}
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -112,4 +114,3 @@ class Webcam extends AbstractEntity
$this->available = $available;
}
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Repository;
class ConceptRepository extends AbstractRepository
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Repository;
class CountryRepository extends AbstractRepository
@@ -152,7 +152,7 @@ class HotelRepository extends AbstractRepository
$qb->getConcreteQueryBuilder()->orderBy('FIELD(hotel.type, ' . Hotel::TYPE_SPORTS_CLUB . ') DESC');
$qb->addOrderBy('hotel.name', 'ASC');
if ($excludedHotelUids) {
if ($excludedHotelUids !== []) {
$qb
->andWhere('hotel.uid NOT IN (:excludedHotelUids)')
->setParameter('excludedHotelUids', $excludedHotelUids, Connection::PARAM_INT_ARRAY)
@@ -244,7 +244,7 @@ class ProductRepository extends AbstractRepository
);
}
if ($date !== null) {
if ($date instanceof Date) {
$qb->andWhere($qb->expr()->eq(
'date.uid',
$qb->createNamedParameter($date->getUid(), Connection::PARAM_INT))
@@ -31,7 +31,7 @@ class SnowreportRepository extends AbstractRepository
->orderBy('region.name')
;
if ($regionUids) {
if ($regionUids !== []) {
$qb->andWhere($qb->expr()->in(
'region.uid',
$qb->createNamedParameter($regionUids, Connection::PARAM_INT_ARRAY)
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Repository;
class TravelinfoRepository extends AbstractRepository
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Domain\Serialization;
class Services
@@ -2,6 +2,7 @@
namespace EP\EpProducts\EpTeam;
use Psr\Log\LoggerInterface;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerAwareTrait;
use Symfony\Component\HttpClient\HttpClient;
@@ -135,7 +136,7 @@ class ApiClient implements LoggerAwareInterface
}
if (mb_strlen($body) > self::ERROR_BODY_EXCERPT_LENGTH) {
$body = mb_substr($body, 0, self::ERROR_BODY_EXCERPT_LENGTH) . '…';
return mb_substr($body, 0, self::ERROR_BODY_EXCERPT_LENGTH) . '…';
}
return $body;
@@ -157,7 +158,7 @@ class ApiClient implements LoggerAwareInterface
return;
}
if (null !== $this->logger) {
if ($this->logger instanceof LoggerInterface) {
$this->logger->info('Application form submission accepted by the EP Team API.', [
'form' => $payload['form'] ?? null,
'pageUid' => $payload['pageUid'] ?? null,
@@ -171,8 +172,8 @@ class ApiClient implements LoggerAwareInterface
*/
private function getHttpClient(): HttpClientInterface
{
if (null !== static::$httpClient) {
return static::$httpClient;
if (self::$httpClient instanceof HttpClientInterface) {
return self::$httpClient;
}
$config = $this->getConfiguration();
@@ -215,7 +216,7 @@ class ApiClient implements LoggerAwareInterface
$options['max_duration'] = $maxDuration;
}
return static::$httpClient = HttpClient::createForBaseUri(rtrim($baseUrl, '/') . '/', $options);
return self::$httpClient = HttpClient::createForBaseUri(rtrim($baseUrl, '/') . '/', $options);
}
private function getConfiguration(): array
@@ -228,14 +229,14 @@ class ApiClient implements LoggerAwareInterface
private function logError(string $message, array $context = []): void
{
if (null !== $this->logger) {
if ($this->logger instanceof LoggerInterface) {
$this->logger->error($message, $context);
}
}
private function logWarning(string $message, array $context = []): void
{
if (null !== $this->logger) {
if ($this->logger instanceof LoggerInterface) {
$this->logger->warning($message, $context);
}
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\EpTeam;
class ApiException extends \RuntimeException
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Http;
use Psr\Http\Message\ServerRequestInterface;
+15 -14
View File
@@ -2,6 +2,7 @@
namespace EP\EpProducts\MyEP;
use Psr\Log\LoggerInterface;
use EP\EpProducts\Domain\Model\Dto\NewsletterSubscriptionRequest;
use GuzzleHttp\Exception\GuzzleException;
use League\OAuth2\Client\Provider\AbstractProvider;
@@ -349,8 +350,8 @@ class ApiClient implements LoggerAwareInterface
private function getHttpClient(): HttpClientInterface
{
if (null !== static::$httpClient) {
return static::$httpClient;
if (self::$httpClient instanceof HttpClientInterface) {
return self::$httpClient;
}
$config = $this->getConfiguration();
@@ -373,7 +374,7 @@ class ApiClient implements LoggerAwareInterface
$options['max_duration'] = $maxDuration;
}
return static::$httpClient = HttpClient::createForBaseUri($config['myEpApiBaseUrl'], $options);
return self::$httpClient = HttpClient::createForBaseUri($config['myEpApiBaseUrl'], $options);
}
/**
@@ -404,8 +405,8 @@ class ApiClient implements LoggerAwareInterface
*/
private function getAccessToken(array $config): AccessToken
{
if ($this->isTokenUsable(static::$accessToken)) {
return static::$accessToken;
if ($this->isTokenUsable(self::$accessToken)) {
return self::$accessToken;
}
// The static above only lives for one PHP request, so without this second level every
@@ -414,15 +415,15 @@ class ApiClient implements LoggerAwareInterface
if (is_array($cachedToken) && isset($cachedToken['access_token'])) {
$token = new AccessToken($cachedToken);
if ($this->isTokenUsable($token)) {
static::$accessToken = $token;
self::$accessToken = $token;
return static::$accessToken;
return self::$accessToken;
}
}
try {
static::$accessToken = $this->normalizeToken($this->getProvider($config)->getAccessToken('client_credentials'));
$this->cacheAccessToken(static::$accessToken);
self::$accessToken = $this->normalizeToken($this->getProvider($config)->getAccessToken('client_credentials'));
$this->cacheAccessToken(self::$accessToken);
} catch (IdentityProviderException $e) {
$message = sprintf('MyEP OAuth token request failed: %s', $e->getMessage());
$this->logError($message, ['exception' => $e]);
@@ -437,7 +438,7 @@ class ApiClient implements LoggerAwareInterface
throw new ApiException($message, 0, $e);
}
return static::$accessToken;
return self::$accessToken;
}
/**
@@ -448,7 +449,7 @@ class ApiClient implements LoggerAwareInterface
*/
private function isTokenUsable(?AccessToken $token): bool
{
if (null === $token) {
if (!$token instanceof AccessToken) {
return false;
}
@@ -477,7 +478,7 @@ class ApiClient implements LoggerAwareInterface
private function discardAccessToken(): void
{
static::$accessToken = null;
self::$accessToken = null;
$this->getCache()->remove(self::ACCESS_TOKEN_CACHE_IDENTIFIER);
}
@@ -515,14 +516,14 @@ class ApiClient implements LoggerAwareInterface
private function logError(string $message, array $context = []): void
{
if (null !== $this->logger) {
if ($this->logger instanceof LoggerInterface) {
$this->logger->error($message, $context);
}
}
private function logWarning(string $message, array $context = []): void
{
if (null !== $this->logger) {
if ($this->logger instanceof LoggerInterface) {
$this->logger->warning($message, $context);
}
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\MyEP;
class ApiException extends \Exception
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Routing\Aspect;
use TYPO3\CMS\Core\Routing\Aspect\StaticMappableAspectInterface;
@@ -22,4 +24,4 @@ class PassthroughMapper implements StaticMappableAspectInterface
{
return $value;
}
}
}
@@ -2,6 +2,7 @@
namespace EP\EpProducts\Service;
use Psr\Log\LoggerInterface;
use EP\EpProducts\MyEP\ApiClient;
use EP\EpProducts\MyEP\ApiException;
use Psr\Log\LoggerAwareInterface;
@@ -65,7 +66,7 @@ final class ApiImportSource implements ProductImportSource, SingletonInterface,
[$rows, $sourceGeneratedAt] = $export;
$baseline = $this->getImportedTimestamp();
if ($baseline !== null && $sourceGeneratedAt <= $baseline) {
if ($baseline instanceof \DateTimeImmutable && $sourceGeneratedAt <= $baseline) {
return null;
}
@@ -81,7 +82,7 @@ final class ApiImportSource implements ProductImportSource, SingletonInterface,
public function markImported(ProductImport $import): void
{
$sourceGeneratedAt = $import->getSourceGeneratedAt();
if ($sourceGeneratedAt !== null) {
if ($sourceGeneratedAt instanceof \DateTimeImmutable) {
$file = $this->baselinePath();
GeneralUtility::mkdir_deep(dirname($file));
GeneralUtility::writeFile($file, $sourceGeneratedAt->format(\DateTimeInterface::ATOM), false);
@@ -98,13 +99,13 @@ final class ApiImportSource implements ProductImportSource, SingletonInterface,
public function isNewImportAvailable(): bool
{
$lastUpdateAt = $this->getApiClient()->getLastUpdateAt();
if ($lastUpdateAt === null) {
if (!$lastUpdateAt instanceof \DateTimeImmutable) {
return false;
}
$baseline = $this->getImportedTimestamp();
return $baseline === null || $lastUpdateAt > $baseline;
return !$baseline instanceof \DateTimeImmutable || $lastUpdateAt > $baseline;
}
/**
@@ -141,12 +142,12 @@ final class ApiImportSource implements ProductImportSource, SingletonInterface,
$pageGeneratedAt = $this->parseTimestamp($meta['sourceGeneratedAt'] ?? null);
if ($page === 1) {
if ($pageGeneratedAt === null) {
if (!$pageGeneratedAt instanceof \DateTimeImmutable) {
$this->logWarning('MyE&P product export has no source timestamp; skipping product import');
return null;
}
$sourceGeneratedAt = $pageGeneratedAt;
} elseif ($pageGeneratedAt === null || $pageGeneratedAt != $sourceGeneratedAt) {
} elseif (!$pageGeneratedAt instanceof \DateTimeImmutable || $pageGeneratedAt != $sourceGeneratedAt) {
$this->logWarning('MyE&P product export changed during the page walk; restarting', [
'page' => $page,
'expected' => $sourceGeneratedAt->format(\DateTimeInterface::ATOM),
@@ -215,7 +216,7 @@ final class ApiImportSource implements ProductImportSource, SingletonInterface,
private function logWarning(string $message, array $context = []): void
{
if ($this->logger !== null) {
if ($this->logger instanceof LoggerInterface) {
$this->logger->warning($message, $context);
}
}
@@ -241,7 +241,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
// Import daytrip dates only once per hotel as room information is taken
// from contingents
if ($product['daytrip'] && \in_array($key, static::$cache['datesAdded'], true)) {
if ($product['daytrip'] && \in_array($key, self::$cache['datesAdded'], true)) {
continue;
}
@@ -259,7 +259,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
$dateCount++;
}
static::$cache['datesAdded'][] = $key;
self::$cache['datesAdded'][] = $key;
}
$this->db->update(
'tx_epproducts_domain_model_product',
@@ -344,7 +344,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
$date['services_included'] = serialize($includedServices);
$date['courses_included'] = serialize($includedCourses);
if ($includedBoard) {
if ($includedBoard !== []) {
$date['board'] = implode(', ', $includedBoard);
$date['board_bus_pro_id'] = key($includedBoard);
}
@@ -297,7 +297,7 @@ class FilterService implements SingletonInterface
$filterSettings['hotelUid'] = $settings['hotelUid'];
}
$conceptUids = GeneralUtility::intExplode(',', $settings['conceptUid'], true);
if ($conceptUids) {
if ($conceptUids !== []) {
$filterSettings['conceptUids'] = $conceptUids;
}
if (isset($settings['dateFrom']) && (int) $settings['dateFrom'] > 0) {
@@ -107,7 +107,7 @@ class GroupsSwissService implements LoggerAwareInterface
$current = null;
$lastDate = null;
foreach ($rows as $row) {
$isGap = null !== $lastDate && $row['date'] > $lastDate->modify('+1 day');
$isGap = $lastDate instanceof \DateTimeImmutable && $row['date'] > $lastDate->modify('+1 day');
if (null !== $current && ($isGap || 'OK' === $row['status'] || $current['status'] !== $row['status'])) {
$ranges[] = $current;
$current = null;
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Service;
class HotelImageService extends AbstractImageService
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Service;
use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
@@ -30,8 +33,12 @@ class MyEpImageService extends AbstractImageService
]
];
public function __construct(FileRepository $fileRepository, ImageService $imageService, FrontendInterface $cache, string $table = 'tx_epproducts_domain_model_hotel')
{
public function __construct(
FileRepository $fileRepository,
ImageService $imageService,
FrontendInterface $cache,
string $table = 'tx_epproducts_domain_model_hotel',
) {
parent::__construct($fileRepository, $imageService, $cache);
$this->table = $table;
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Service;
use EP\EpProducts\Domain\Model\Hotel;
@@ -29,7 +31,7 @@ class PickupOverviewService
public function getOverview(Product $product, ?Hotel $hotel): array
{
$overview = ['pickups' => []];
if ($hotel === null || $product->isDaytrip()) {
if (!$hotel instanceof Hotel || $product->isDaytrip()) {
return $overview;
}
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Service;
class ProductImageService extends AbstractImageService
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Service;
/**
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Service;
use EP\EpProducts\MyEP\ApiException;
@@ -50,7 +50,7 @@ class SerializationUtility
if (!\is_array($processingInstructions)) {
$imageUrl = $image->getOriginalFile()->getPublicUrl();
} else {
$imageService = static::getImageService();
$imageService = self::getImageService();
$cropString = $image->getProperty('crop');
$cropVariantCollection = CropVariantCollection::create($cropString);
$cropVariant = $processingInstructions['cropVariant'] ?: 'default';
@@ -70,11 +70,11 @@ class SerializationUtility
*/
private static function getImageService()
{
if (static::$imageService === null) {
static::$imageService = GeneralUtility::makeInstance(ImageService::class);
if (self::$imageService === null) {
self::$imageService = GeneralUtility::makeInstance(ImageService::class);
}
return static::$imageService;
return self::$imageService;
}
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpProducts\Utility;
class TypeConversionUtility
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider;
return [
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use EP\EpProducts\Middleware\StaticSearchParamsMiddleware;
use EP\EpProducts\Middleware\ApiMiddleware;
use EP\EpProducts\Middleware\ContentPageTypeGuardMiddleware;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3')|| die('Access denied.');
@@ -1,9 +1,11 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Extbase\Utility\ExtensionUtility;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3') or die();
defined('TYPO3') || die();
call_user_func(function () {
@@ -1,8 +1,10 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3') or die();
defined('TYPO3') || die();
call_user_func(function () {
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_badge',
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
use EP\EpProducts\Domain\Model\AbstractDestination;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
return [
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
use EP\EpProducts\Domain\Model\AbstractDestination;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use EP\EpProducts\Service\LabelService;
return [
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_fact',
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_faq',
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'Verpflegungsleistung',
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use EP\EpProducts\Service\LabelService;
return [
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use EP\EpProducts\Domain\Model\GroupsPriceOption;
return [
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
use EP\EpProducts\Service\LabelService;
use EP\EpProducts\Domain\Model\Hotel;
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'Hotelmapping',
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_infobox',
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
return [
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_matchcode',
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use EP\EpProducts\Service\LabelService;
return [
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
use EP\EpProducts\Service\LabelService;
use EP\EpProducts\UserFunc\TcaProcFunc;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
use EP\EpProducts\Domain\Model\AbstractDestination;
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_reseller',
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use EP\EpProducts\Domain\Model\Hotel;
return [
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
return [
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
return [
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'Reiseinfo Link',
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Resource\FileType;
return [
@@ -1,4 +1,7 @@
<?php
declare(strict_types=1);
return [
'ctrl' => [
'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_webcam',
+2
View File
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
$EM_CONF[$_EXTKEY] = [
'title' => 'E&P Products',
'description' => 'Implementation of all product related logic and models',
+1 -1
View File
@@ -27,7 +27,7 @@ use EP\EpProducts\Routing\Aspect\PassthroughMapper;
use TYPO3\CMS\Core\Log\LogLevel;
use EP\EpProducts\Log\Writer;
defined('TYPO3') or die('Access denied.');
defined('TYPO3') || die('Access denied.');
$boot = function () {
if (!is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['ep_products_cache'] ?? null)) {
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpTheme\Domain\Model;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpTheme\Form;
use EP\EpProducts\MyEP\ApiClient;
@@ -47,7 +47,7 @@ final readonly class CdnImageMiddleware implements MiddlewareInterface
$cdnBaseUrl = rtrim((string)($this->extensionConfiguration->get('ep_theme', 'cdnBaseUrl') ?? ''), '/');
$contentType = $response->getHeaderLine('Content-Type');
if ($cdnBaseUrl === ''
|| !(str_starts_with($contentType, 'text/html') || str_starts_with($contentType, 'application/json'))
|| !str_starts_with($contentType, 'text/html') && !str_starts_with($contentType, 'application/json')
) {
return $response;
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace EP\EpTheme\Middleware;
use Psr\Http\Message\ResponseInterface;
@@ -48,18 +48,18 @@ class ContainerViewHelper extends AbstractViewHelper
$content = $this->renderChildren();
$content ??= $this->arguments['content'];
$classes = [];
if (\in_array($this->arguments['data']['colPos'] ?? null, static::$columnsWithoutContainers, false)) {
if (\in_array($this->arguments['data']['colPos'] ?? null, self::$columnsWithoutContainers, false)) {
$classes[] = 'container';
}
if ($this->arguments['cssClasses'] !== null) {
$classes[] = $this->arguments['cssClasses'];
}
if (!empty($this->arguments['data']['space_before_class'])) {
$scaleTop = static::$scale[$this->arguments['data']['space_before_class']];
$scaleTop = self::$scale[$this->arguments['data']['space_before_class']];
$classes[] = sprintf('pt-%d', $scaleTop);
}
if (!empty($this->arguments['data']['space_after_class'])) {
$scaleBottom = static::$scale[$this->arguments['data']['space_after_class']];
$scaleBottom = self::$scale[$this->arguments['data']['space_after_class']];
$classes[] = sprintf('pb-%d', $scaleBottom);
}
if ('default' !== ($this->arguments['data']['frame_class'] ?? null)) {
@@ -22,7 +22,7 @@ class IconViewHelper extends AbstractTagBasedViewHelper
public function render(): string
{
$imageService = self::getImageService();
$imageService = $this->getImageService();
$sprite = $imageService->getImage('EXT:ep_theme/Resources/Public/images/icons_sprite.svg', null, false);
$imageUrl = $sprite->getPublicUrl();
@@ -33,7 +33,7 @@ class IconViewHelper extends AbstractTagBasedViewHelper
return $this->tag->render();
}
private static function getImageService()
private function getImageService()
{
return GeneralUtility::makeInstance(ImageService::class);
}
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Directive;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Mutation;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\MutationCollection;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider;
use TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider;
@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
use EP\EpTheme\Middleware\CdnImageMiddleware;
use EP\EpTheme\Middleware\ReferrerMiddleware;
use EP\EpTheme\Middleware\HtmxRedirectMiddleware;
@@ -1,8 +1,10 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3') or die();
defined('TYPO3') || die();
call_user_func(function() {
@@ -1,8 +1,10 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3') or die();
defined('TYPO3') || die();
call_user_func(function () {
@@ -1,8 +1,10 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3') or die();
defined('TYPO3') || die();
call_user_func(function () {
@@ -1,8 +1,10 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3') or die();
defined('TYPO3') || die();
call_user_func(function() {
$frontendLanguageFilePrefix = 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:';
@@ -1,8 +1,10 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3') or die();
defined('TYPO3') || die();
call_user_func(function() {
$frontendLanguageFilePrefix = 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:';
@@ -1,8 +1,10 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3') or die();
defined('TYPO3') || die();
call_user_func(function() {
$frontendLanguageFilePrefix = 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:';
@@ -1,8 +1,10 @@
<?php
declare(strict_types=1);
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
defined('TYPO3') or die();
defined('TYPO3') || die();
call_user_func(function () {
$frontendLanguageFilePrefix = 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:';
Loaded 100 of 114 files, more files were not shown because too many files have changed in this diff. Show more