diff --git a/.build/phpcs.xml b/.build/phpcs.xml deleted file mode 100644 index 9a21299..0000000 --- a/.build/phpcs.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - error - - - error - - - warning - - - error - - - error - - - error - - - warning - - - error - - - error - - - error - - - error - - - error - - - - - - error - - \ No newline at end of file diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 264c4e9..3a51f4a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: remindgmbh/commitlint-action@v1.0.0 - phpcs: + static-analysis: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -18,4 +18,4 @@ jobs: extensions: intl tools: composer:v2 - run: composer install - - run: composer run-script phpcs + - run: composer run-script static-analysis diff --git a/.gitignore b/.gitignore index 886cc03..8f49cf2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,2 @@ -### IDE ### -nbproject/ -.idea/ - -### Composer ### -composer.phar - -### General ### -*.log -cache.properties - -### CI ### -.build/bin/ -.build/logs/ -.build/var/ -.build/vendor/ -.build/web/ -coverage.xml +/vendor +/public diff --git a/.vscode/settings.json b/.vscode/settings.json index 2326d1c..6c03ad3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,6 @@ { - "phpCodeSniffer.exec.linux": "./.build/bin/phpcs", + "phpCodeSniffer.exec.linux": "./vendor/bin/phpcs", "phpCodeSniffer.standard": "Custom", - "phpCodeSniffer.standardCustom": "./.build/phpcs.xml", - "phpCodeSniffer.exclude": [ - "**/.build/vendor/**" - ] + "phpCodeSniffer.standardCustom": "./phpcs.xml", + "phpCodeSniffer.exclude": [] } diff --git a/Classes/BreadcrumbTitle/AbstractBreadcrumbTitleProvider.php b/Classes/BreadcrumbTitle/AbstractBreadcrumbTitleProvider.php new file mode 100644 index 0000000..4cbb58c --- /dev/null +++ b/Classes/BreadcrumbTitle/AbstractBreadcrumbTitleProvider.php @@ -0,0 +1,17 @@ +title; + } +} diff --git a/Classes/BreadcrumbTitle/BreadcrumbTitleProviderInterface.php b/Classes/BreadcrumbTitle/BreadcrumbTitleProviderInterface.php new file mode 100644 index 0000000..546fe7e --- /dev/null +++ b/Classes/BreadcrumbTitle/BreadcrumbTitleProviderInterface.php @@ -0,0 +1,10 @@ +getBreadcrumbTitleProviderConfiguration(); + $titleProviders = $this->setProviderOrder($titleProviders); + + $orderedTitleProviders = GeneralUtility::makeInstance(DependencyOrderingService::class) + ->orderByDependencies($titleProviders); + + $this->logger?->debug('Breadcrumb title providers ordered', [ + 'orderedTitleProviders' => $orderedTitleProviders, + ]); + + foreach ($orderedTitleProviders as $provider => $configuration) { + if ( + class_exists($configuration['provider']) && + is_subclass_of($configuration['provider'], BreadcrumbTitleProviderInterface::class) + ) { + /** @var BreadcrumbTitleProviderInterface $titleProviderObject */ + $titleProviderObject = GeneralUtility::makeInstance($configuration['provider']); + if ( + ($breadcrumbTitle = $titleProviderObject->getTitle()) + || ($breadcrumbTitle = $this->breadcrumbTitleCache[$configuration['provider']] ?? '') !== '' + ) { + $this->logger?->debug('Breadcrumb title provider {provider} used on page {title}', [ + 'provider' => $configuration['provider'], + 'title' => $breadcrumbTitle, + ]); + $this->breadcrumbTitleCache[$configuration['provider']] = $breadcrumbTitle; + break; + } + $this->logger?->debug('Breadcrumb title provider {provider} skipped on page {title}', [ + 'provider' => $configuration['provider'], + 'providerUsed' => $configuration['provider'], + 'title' => $breadcrumbTitle, + ]); + } + } + + return $breadcrumbTitle; + } + + /** + * @param mixed[] $orderInformation + * @return mixed[] + */ + protected function setProviderOrder(array $orderInformation): array + { + foreach ($orderInformation as $provider => &$configuration) { + if (isset($configuration['before'])) { + if (is_string($configuration['before'])) { + $configuration['before'] = GeneralUtility::trimExplode(',', $configuration['before'], true); + } elseif (!is_array($configuration['before'])) { + throw new UnexpectedValueException( + 'The specified "before" order configuration for provider "' . $provider . '" is invalid.', + 1535803185 + ); + } + } + if (isset($configuration['after'])) { + if (is_string($configuration['after'])) { + $configuration['after'] = GeneralUtility::trimExplode(',', $configuration['after'], true); + } elseif (!is_array($configuration['after'])) { + throw new UnexpectedValueException( + 'The specified "after" order configuration for provider "' . $provider . '" is invalid.', + 1535803186 + ); + } + } + } + return $orderInformation; + } + + /** + * @return mixed[] + */ + private function getBreadcrumbTitleProviderConfiguration(): array + { + $typoscriptService = GeneralUtility::makeInstance(TypoScriptService::class); + $config = $typoscriptService->convertTypoScriptArrayToPlainArray( + $GLOBALS['TSFE']->config['config'] ?? [] + ); + + return $config['breadcrumbTitleProviders'] ?? []; + } +} diff --git a/Classes/DataProcessing/FilesCategoryProcessor.php b/Classes/DataProcessing/FilesCategoryProcessor.php new file mode 100644 index 0000000..31110a0 --- /dev/null +++ b/Classes/DataProcessing/FilesCategoryProcessor.php @@ -0,0 +1,203 @@ +processorConf = $processorConf; + $this->connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); + + $filesProcessorIndex = array_search(FilesProcessor::class, $contentObjectConf['dataProcessing.']); + if ($filesProcessorIndex !== false) { + $filesProcessorConf = $contentObjectConf['dataProcessing.'][$filesProcessorIndex . '.']; + $filesAs = $filesProcessorConf['as']; + + if (isset($processedData[$filesAs])) { + $categoriesAs = $processorConf['as'] ?? 'categories'; + $this->legacyReturn = (bool) ($filesProcessorConf['processingConfiguration.']['legacyReturn'] ?? true); + $fileUids = []; + foreach ($processedData[$filesAs] as &$file) { + $uid = $this->getFileUid($file); + if ($uid) { + $fileUids[] = (int) $uid; + } + } + $fileCategoryMap = $this->getFileCategoryMap($fileUids); + + $this->categories = array_fill_keys(array_unique(array_merge(...$fileCategoryMap)), []); + + $this->fetchCategoryProperties(); + + if (!($processorConf['images.']['disabled'] ?? false)) { + $this->fetchCategoryImages(); + } + + foreach ($processedData[$filesAs] as &$file) { + $uid = $this->getFileUid($file); + $file = ArrayUtility::setValueByPath( + $file, + $this->legacyReturn ? ['properties', $categoriesAs] : $categoriesAs, + array_map(function (int $categoryUid) { + return $this->categories[$categoryUid]; + }, $fileCategoryMap[$uid] ?? []) + ); + } + } + } + return $processedData; + } + + /** + * @param mixed[] $file + */ + private function getFileUid(array $file): int + { + // uidLocal may be null while fileReferenceUid contains the actual file uid + // see: https://github.com/TYPO3-Headless/headless/pull/761 + return $this->legacyReturn + ? $file['properties']['uidLocal'] ?? $file['properties']['fileReferenceUid'] + : $file['uidLocal'] ?? $file['fileReferenceUid']; + } + + /** + * @param int[] $fileUids + * @return mixed[] + */ + private function getFileCategoryMap(array $fileUids): array + { + $queryBuilder = $this->connectionPool->getQueryBuilderForTable(self::SYS_CATEGORY); + + $queryBuilder = $queryBuilder + ->select( + self::SYS_CATEGORY_RECORD_MM . '.uid_local', + self::SYS_FILE_METADATA . '.file', + ) + ->distinct() + ->from(self::SYS_CATEGORY_RECORD_MM) + ->join( + self::SYS_CATEGORY_RECORD_MM, + self::SYS_FILE_METADATA, + self::SYS_FILE_METADATA, + (string) $queryBuilder->expr()->and( + $queryBuilder->expr()->eq( + self::SYS_CATEGORY_RECORD_MM . '.uid_foreign', + $queryBuilder->quoteIdentifier(self::SYS_FILE_METADATA . '.uid') + ), + $queryBuilder->expr()->eq( + self::SYS_CATEGORY_RECORD_MM . '.fieldname', + $queryBuilder->createNamedParameter('categories') + ), + $queryBuilder->expr()->eq( + self::SYS_CATEGORY_RECORD_MM . '.tablenames', + $queryBuilder->createNamedParameter(self::SYS_FILE_METADATA) + ), + ) + ) + ->where( + $queryBuilder->expr()->and( + $queryBuilder->expr()->in( + self::SYS_FILE_METADATA . '.file', + $queryBuilder->createNamedParameter($fileUids, Connection::PARAM_INT_ARRAY), + ) + ) + ); + + $queryResult = $queryBuilder->executeQuery(); + + $result = []; + + while ($row = $queryResult->fetchAssociative()) { + if (!isset($result[$row['file']])) { + $result[$row['file']] = []; + } + $result[$row['file']][] = $row['uid_local']; + } + + return $result; + } + + private function fetchCategoryProperties(): void + { + $fields = isset($this->processorConf['fields']) + ? GeneralUtility::trimExplode(',', $this->processorConf['fields']) + : ['title']; + + $queryBuilder = $this->connectionPool->getQueryBuilderForTable(self::SYS_CATEGORY); + + $queryBuilder = $queryBuilder + ->select( + 'uid', + ...$fields, + ) + ->distinct() + ->from(self::SYS_CATEGORY) + ->where( + $queryBuilder->expr()->in( + 'uid', + $queryBuilder->createNamedParameter(array_keys($this->categories), Connection::PARAM_INT_ARRAY), + ) + ); + + $queryResult = $queryBuilder->executeQuery(); + + + while ($row = $queryResult->fetchAssociative()) { + $this->categories[$row['uid']] = $row; + } + } + + private function fetchCategoryImages(): void + { + $filesService = GeneralUtility::makeInstance(FilesService::class); + $imageField = $this->processorConf['images.']['field'] ?? 'image'; + + $processingConfiguration = $this->processorConf['images.']['processingConfiguration.'] ?? []; + + foreach (array_keys($this->categories) as $categoryUid) { + $this->categories[$categoryUid][$imageField] = $filesService->processImages( + self::SYS_CATEGORY, + 'images', + $categoryUid, + $processingConfiguration, + ); + } + } +} diff --git a/Classes/DataProcessing/FilesProcessor.php b/Classes/DataProcessing/FilesProcessor.php deleted file mode 100644 index df60f74..0000000 --- a/Classes/DataProcessing/FilesProcessor.php +++ /dev/null @@ -1,27 +0,0 @@ -contentDataProcessor = GeneralUtility::makeInstance(ContentDataProcessor::class); + } + + /** + * @phpcsSuppress SlevomatCodingStandard.Functions.UnusedParameter + * @param mixed[] $contentObjectConf + * @param mixed[] $processorConf + * @param mixed[] $processedData + * @return mixed[] */ public function process( ContentObjectRenderer $cObj, @@ -30,12 +44,13 @@ public function process( array $processedData ): array { $this->cObj = $cObj; + $this->processorConf = $processorConf; $flexFormTools = GeneralUtility::makeInstance(FlexFormTools::class); $flexFormTools->reNumberIndexesOfSectionData = true; $flexFormService = GeneralUtility::makeInstance(FlexFormService::class); - $fieldName = $cObj->stdWrapValue('fieldName', $processorConf); + $fieldName = (string) $cObj->stdWrapValue('fieldName', $processorConf); // default flexform field name if (empty($fieldName)) { @@ -65,7 +80,10 @@ public function process( 0, 'T3FlexForms', 0, - $flexFormTools->flexArray2Xml_options + [ + ...$flexFormTools->flexArray2Xml_options, + 'disableTypeAttrib' => 0, + ] ) ); @@ -83,26 +101,32 @@ public function process( $flexformData = ArrayUtility::removeByPath($flexformData, $ignoredField, '.'); } + $overrideData = []; + $overrideData = $this->contentDataProcessor?->process($cObj, $processorConf, $overrideData) ?? []; + foreach ($overrideData as $key => &$value) { + $flexformData = empty($key) ? $value : ArrayUtility::setValueByPath($flexformData, $key, $value, '.'); + } + // save result in "data" (default) or given variable name $targetVariableName = $cObj->stdWrapValue('as', $processorConf); if (!empty($targetVariableName)) { $processedData[$targetVariableName] = $flexformData; } else { - if ($processedData['data'][$fieldName]) { - $processedData['data'][$fieldName] = $flexformData; - } else { - $processedData[$fieldName] = $flexformData; - } + $processedData['data'][$fieldName] = $flexformData; } return $processedData; } + /** + * @phpcsSuppress SlevomatCodingStandard.Functions.UnusedParameter + * @param mixed[] $element + */ public function parseElement( array $element, string $value, - $additionalParameters, + mixed $additionalParameters, string $path, FlexFormTools $flexFormTools ): void { @@ -123,35 +147,33 @@ public function parseElement( } if ($type === 'text') { - $newValue = $this->cObj->parseFunc($value, [], '< lib.parseFunc_links'); + $newValue = $this->cObj->parseFunc($value, null, '< lib.parseFunc_links'); } if ($type === 'file') { $fieldName = $element['config']['foreign_match_fields']['fieldname']; - $filesProcessor = GeneralUtility::makeInstance(FilesProcessor::class); - $as = 'file'; - $processorConfiguration = [ - 'as' => $as, - 'references.' => [ - 'fieldName' => $fieldName, - ], - ]; - $processedData = [ - 'data' => $this->cObj->data, - 'current' => null, - ]; - $processedData = $filesProcessor->process( - $this->cObj, - [ - 'dataProcessing.' => [ - '10' => FilesProcessor::class, - '10.' => $processorConfiguration, - ], - ], - $processorConfiguration, - $processedData, + + $overrule = []; + + try { + $overrule = ArrayUtility::getValueByPath( + $this->processorConf, + ['filesConfiguration.', ...array_map(function ($value) { + return $value . '.'; + }, + explode('.', $fieldName))] + ); + } catch (MissingArrayPathException $e) { + } + + $filesService = GeneralUtility::makeInstance(FilesService::class); + + $newValue = $filesService->processImages( + $this->cObj->getCurrentTable(), + $fieldName, + $this->cObj->data['uid'], + $overrule ); - $newValue = $processedData[$as]; } $flexFormTools->cleanFlexFormXML = ArrayUtility::setValueByPath( diff --git a/Classes/Event/Listener/AfterCacheableContentIsGeneratedEventListener.php b/Classes/Event/Listener/AfterCacheableContentIsGeneratedEventListener.php new file mode 100644 index 0000000..a4d1b3c --- /dev/null +++ b/Classes/Event/Listener/AfterCacheableContentIsGeneratedEventListener.php @@ -0,0 +1,36 @@ +getController()->content, true, 512, JSON_THROW_ON_ERROR); + + $breadcrumbTitle = $this->breadcrumbTitleProviderManager->getTitle(); + + if ($breadcrumbTitle) { + $content['breadcrumbs'][array_key_last($content['breadcrumbs'])]['title'] = $breadcrumbTitle; + } + + $event->getController()->content = $this->encoder->encode($content); + } catch (Throwable) { + return; + } + } +} diff --git a/Classes/Event/Listener/AfterFlexFormDataStructureIdentifierInitializedEventListener.php b/Classes/Event/Listener/AfterFlexFormDataStructureIdentifierInitializedEventListener.php index 8e1d020..b06929e 100644 --- a/Classes/Event/Listener/AfterFlexFormDataStructureIdentifierInitializedEventListener.php +++ b/Classes/Event/Listener/AfterFlexFormDataStructureIdentifierInitializedEventListener.php @@ -1,5 +1,7 @@ getParsedBody(); + $body = (array) $request->getParsedBody(); $context = json_decode($body['ajax']['context'] ?? null, true); $config = json_decode($context['config'] ?? null, true); $queryParams = parse_url($config['originalReturnUrl'], PHP_URL_QUERY); - parse_str($queryParams, $queryParams); + parse_str($queryParams ?: '', $queryParams); $type = $queryParams['defVals'][$foreignTable][$foreignField] ?? null; } else { $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); @@ -54,7 +56,7 @@ public function __invoke(AfterFlexFormDataStructureIdentifierInitializedEvent $e $type = $queryBuilder->executeQuery()->fetchOne(); } } else { - $body = $request->getParsedBody(); + $body = (array) $request->getParsedBody(); $foreignRow = current($body['data'][$foreignTable]); $type = $foreignRow[$foreignField]; } diff --git a/Classes/Event/Listener/AfterTcaCompilationEventListener.php b/Classes/Event/Listener/AfterTcaCompilationEventListener.php new file mode 100644 index 0000000..9c54941 --- /dev/null +++ b/Classes/Event/Listener/AfterTcaCompilationEventListener.php @@ -0,0 +1,26 @@ +setTca($GLOBALS['TCA']); + } +} diff --git a/Classes/Event/Listener/EnrichFileDataEventListener.php b/Classes/Event/Listener/EnrichFileDataEventListener.php index 593d68b..61817ec 100644 --- a/Classes/Event/Listener/EnrichFileDataEventListener.php +++ b/Classes/Event/Listener/EnrichFileDataEventListener.php @@ -5,6 +5,8 @@ namespace Remind\Headless\Event\Listener; use FriendsOfTYPO3\Headless\Event\EnrichFileDataEvent; +use TYPO3\CMS\Core\Imaging\ImageManipulation\CropVariantCollection; +use TYPO3\CMS\Core\Utility\GeneralUtility; class EnrichFileDataEventListener { @@ -12,7 +14,49 @@ public function __invoke(EnrichFileDataEvent $event): void { $originalFile = $event->getOriginal(); $properties = $event->getProperties(); - $properties['lazyLoading'] = (bool) $originalFile->getProperty('tx_headless_lazy_loading') ?? true; + $processingConfiguration = $event->getProcessingConfiguration(); + + $defaultFields = $processingConfiguration->defaultFieldsByType ?? []; + $imageFields = array_merge($defaultFields, $processingConfiguration->defaultImageFields ?? []); + $videoFields = array_merge($defaultFields, $processingConfiguration->defaultVideoFields ?? []); + + $fields = match ($properties['type']) { + 'image' => $imageFields, + 'video' => $videoFields, + default => $defaultFields, + }; + + foreach ($fields as $field) { + $as = $field; + if (str_contains($field, ' as ')) { + [$field, $as] = GeneralUtility::trimExplode(' as ', $field, true); + } + if ( + $originalFile->hasProperty($field) && + !array_key_exists($as, $properties) + ) { + $properties[$as] = $originalFile->getProperty($field); + } + } + + /** + * Crop Variants with non-empty crop areas of SVG Images are converted to SVG + * so these images have to be treated different than pure SVGs in frontend + */ + + if ($originalFile->getExtension() === 'svg') { + $crop = $originalFile->getProperty('crop'); + $cropVariantCollection = CropVariantCollection::create($crop); + $cropVariants = empty($crop) ? [] : array_keys(json_decode($crop, true)); + foreach ($cropVariants as $cropVariant) { + $cropArea = $cropVariantCollection->getCropArea((string) $cropVariant); + if (!$cropArea->isEmpty()) { + $properties['extension'] = 'mixed'; + break; + } + } + } + $event->setProperties($properties); } } diff --git a/Classes/Form/AbstractModelDecorator.php b/Classes/Form/AbstractModelDecorator.php index 72a63ad..8492f79 100644 --- a/Classes/Form/AbstractModelDecorator.php +++ b/Classes/Form/AbstractModelDecorator.php @@ -4,17 +4,25 @@ namespace Remind\Headless\Form; -use FriendsOfTYPO3\Headless\Form\Decorator\AbstractFormDefinitionDecorator; use Psr\Http\Message\ServerRequestInterface; -abstract class AbstractModelDecorator extends AbstractFormDefinitionDecorator +abstract class AbstractModelDecorator extends FormDefinitionDecorator { protected string $actionName = ''; + protected string $controllerName = ''; + protected string $valueName = ''; + /** + * @param mixed[] $decorated + * @param mixed[] $definition + * @return mixed[] + */ protected function overrideDefinition(array $decorated, array $definition, int $currentPage): array { + $decorated = parent::overrideDefinition($decorated, $definition, $currentPage); + $request = $this->getRequest(); /** @var \TYPO3\CMS\Core\Routing\PageArguments $pageArguments */ @@ -24,15 +32,18 @@ protected function overrideDefinition(array $decorated, array $definition, int $ $controllerArguments = $arguments[$this->controllerName] ?? null; - if ($controllerArguments) { - $uid = (int) $controllerArguments[$this->valueName] ?? null; + if (is_array($controllerArguments)) { + $uid = (int) $controllerArguments[$this->valueName]; $action = $controllerArguments['action'] ?? null; - if ($action === $this->actionName && $uid) { + if ( + $action === $this->actionName && + $uid + ) { $decorated['elements'][] = [ - 'type' => 'Hidden', 'defaultValue' => $uid, 'name' => $this->controllerName . '[' . $this->valueName . ']', + 'type' => 'Hidden', ]; } } diff --git a/Classes/Form/FormDefinitionDecorator.php b/Classes/Form/FormDefinitionDecorator.php new file mode 100644 index 0000000..8cd747b --- /dev/null +++ b/Classes/Form/FormDefinitionDecorator.php @@ -0,0 +1,127 @@ +cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class); + } + + /** + * @phpcsSuppress SlevomatCodingStandard.Functions.UnusedParameter + * @param mixed[] $decorated + * @param mixed[] $definition + * @return mixed[] + */ + protected function overrideDefinition(array $decorated, array $definition, int $currentPage): array + { + foreach ($decorated['elements'] as &$element) { + $this->setNotEmptyValidationErrorMessages($element); + $this->setCheckboxLinks($element); + $this->setFileSizeValidatorBytes($element); + $this->setMimeTypeValidator($element); + } + return $decorated; + } + + /** + * @param mixed[] $element + */ + private function setNotEmptyValidationErrorMessages(array &$element): void + { + $notEmptyValidators = array_filter($element['validators'] ?? [], function (array $validator) { + return $validator['identifier'] === 'NotEmpty'; + }); + if ($notEmptyValidators) { + foreach ($element['properties']['validationErrorMessages'] ?? [] as $validationErrorMessageKey => $validationErrorMessage) { + if (in_array($validationErrorMessage['code'], self::NOT_EMPTY_ERROR_CODES)) { + foreach (array_keys($notEmptyValidators) as $validatorKey) { + $element['validators'][$validatorKey]['customErrorMessage'] = $validationErrorMessage['customMessage']; + } + unset($element['properties']['validationErrorMessages'][$validationErrorMessageKey]); + } + } + if (empty($element['properties']['validationErrorMessages'])) { + unset($element['properties']['validationErrorMessages']); + } + } + unset($element['properties']['fluidAdditionalAttributes']); + } + + /** + * @param mixed[] $element + */ + private function setCheckboxLinks(array &$element): void + { + if ( + $element['type'] === 'Checkbox' && + isset($element['properties']['links']) + ) { + $links = array_map(function ($pageUid, $label) { + $link = $this->cObj->createLink($label, ['parameter' => $pageUid]); + return $link instanceof LinkResult ? $link->getHtml() : null; + }, array_keys($element['properties']['links']), $element['properties']['links']); + + $element['label'] = sprintf($element['label'], ...$links); + if (isset($element['properties']['elementDescription'])) { + $element['properties']['elementDescription'] = sprintf($element['properties']['elementDescription'], ...$links); + } + + unset($element['properties']['links']); + } + } + + /** + * @param mixed[] $element + */ + private function setFileSizeValidatorBytes(array &$element): void + { + foreach ($element['validators'] ?? [] as $key => $value) { + if ($value['identifier'] === 'FileSize') { + $element['validators'][$key]['options']['minimum'] = GeneralUtility::getBytesFromSizeMeasurement($value['options']['minimum']); + $element['validators'][$key]['options']['maximum'] = GeneralUtility::getBytesFromSizeMeasurement($value['options']['maximum']); + } + } + } + + /** + * @param mixed[] $element + */ + private function setMimeTypeValidator(array &$element): void + { + if ($element['type'] === 'FileUpload') { + $mimeTypes = $element['properties']['allowedMimeTypes'] ?? []; + + if (!empty($mimeTypes)) { + $element['validators'][] = [ + 'identifier' => 'MimeType', + 'options' => [ + 'allowed' => $mimeTypes, + ], + ]; + } + } + } +} diff --git a/Classes/Middleware/AssetMiddleware.php b/Classes/Middleware/AssetMiddleware.php new file mode 100644 index 0000000..a29b450 --- /dev/null +++ b/Classes/Middleware/AssetMiddleware.php @@ -0,0 +1,159 @@ +imageService = $imageService; + } + + public function injectResponseFactory(ResponseFactoryInterface $responseFactory): void + { + $this->responseFactory = $responseFactory; + } + + public function injectResourceFactory(ResourceFactory $resourceFactory): void + { + $this->resourceFactory = $resourceFactory; + } + + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + /** @var \TYPO3\CMS\Core\Routing\SiteRouteResult $routing */ + $routing = $request->getAttribute('routing'); + $path = $routing->getUri()->getPath(); + $queryParams = $request->getQueryParams(); + $uid = $queryParams['uid'] ?? null; + $uidLocal = $queryParams['uidLocal'] ?? null; + if ( + $path === '/asset' && + ( + $uid || + $uidLocal + ) + ) { + $resource = $uid + ? $this->resourceFactory->getFileReferenceObject($uid) + : $this->resourceFactory->getFileObject($uidLocal); + + $tstamp = intval($resource->getProperty('tstamp')); + $lastModified = gmdate('D, d M Y H:i:s', $tstamp) . ' GMT'; + $ifModifiedSince = $request->getHeader('if-modified-since')[0] ?? null; + + if ($lastModified === $ifModifiedSince) { + return $this->responseFactory->createResponse(304); + } + + $type = (int) $resource->getProperty('type'); + + $processedResource = $resource; + + if ($type === AbstractFile::FILETYPE_IMAGE) { + $targetFileExtension = $queryParams['fileExtension'] ?? null; + + $cropName = $queryParams['crop'] ?? null; + $breakpoint = $queryParams['breakpoint'] ?? null; + + $cropVariants = array_filter([ + implode('-', array_filter([$cropName, $breakpoint])), + $cropName, + $breakpoint, + ]); + + $crop = $resource->getProperty('crop') ?? ''; + $cropVariantCollection = CropVariantCollection::create($crop); + + $cropArea = Area::createEmpty(); + + foreach ($cropVariants as $cropVariant) { + $cropArea = $cropVariantCollection->getCropArea($cropVariant); + if (!$cropArea->isEmpty()) { + break; + } + } + + $skipProcessing = false; + + // Use default cropVariant if breakpoint cropVariant does not exist + if ($cropArea->isEmpty()) { + $cropArea = $cropVariantCollection->getCropArea(); + + /** + * Skip processing if cropArea is empty and + * - targetFileExtension is SVG because TYPO3 cannot process SVGs + * - source is SVG and targetFileExtension is not set + * (normally TYPO3 would convert SVGs to PNGs with targetFileExtension not set, + * but there is no need with an empty cropArea) + */ + if ( + $targetFileExtension === 'svg' || + $resource->getExtension() === 'svg' && + !$targetFileExtension + ) { + $skipProcessing = true; + } + } elseif ( + $resource->getExtension() === 'svg' && + $targetFileExtension === 'svg' + ) { + // TYPO3 converts SVGs to PNGs if targetFileExtension is not set + $targetFileExtension = null; + } + + if (!$skipProcessing) { + $processingInstructions = [ + 'crop' => $cropArea->makeAbsoluteBasedOnFile($resource), + 'fileExtension' => $targetFileExtension ?? null, + 'height' => $queryParams['height'] ?? null, + 'maxHeight' => $queryParams['maxHeight'] ?? null, + 'maxWidth' => $queryParams['maxWidth'] ?? null, + 'width' => $queryParams['width'] ?? null, + ]; + + $processedResource = $this->imageService->applyProcessingInstructions( + $resource, + $processingInstructions + ); + } + } + + $mimeType = $processedResource->getMimeType(); + $contents = $processedResource->getContents(); + + $title = $resource->getProperty('title') ?? $resource->getNameWithoutExtension(); + $filename = str_replace(' ', '-', strtolower($title)) . '.' . $processedResource->getExtension(); + + $response = $this->responseFactory + ->createResponse() + ->withHeader('Content-Type', $mimeType) + ->withHeader('Content-Disposition', 'inline;filename="' . $filename . '"') + ->withHeader('Cache-Control', 'no-cache') + ->withHeader('Last-Modified', $lastModified); + + $response->getBody()->write($contents); + return $response; + } + return $handler->handle($request); + } +} diff --git a/Classes/Middleware/ImageProcessingMiddleware.php b/Classes/Middleware/ImageProcessingMiddleware.php deleted file mode 100644 index fb58869..0000000 --- a/Classes/Middleware/ImageProcessingMiddleware.php +++ /dev/null @@ -1,98 +0,0 @@ -imageService = GeneralUtility::makeInstance(ImageService::class); - } - - public function injectResponseFactory(ResponseFactoryInterface $responseFactory) - { - $this->responseFactory = $responseFactory; - } - - public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface - { - /** @var \TYPO3\CMS\Core\Routing\SiteRouteResult $routing */ - $routing = $request->getAttribute('routing'); - $path = $routing->getUri()->getPath(); - $queryParams = $request->getQueryParams(); - $uid = $queryParams['uid'] ?? null; - if ($path === '/image' && $uid) { - $image = $this->imageService->getImage($uid, null, true); - - $tstamp = intval($image->getProperty('tstamp')); - $lastModified = gmdate('D, d M Y H:i:s', $tstamp) . ' GMT'; - $ifModifiedSince = $request->getHeader('if-modified-since')[0] ?? null; - - if ($lastModified === $ifModifiedSince) { - return $this->responseFactory->createResponse(304); - } - - $targetFileExtension = $queryParams['fileExtension'] ?? null; - - // Skip processing for SVGs without changing image type - if ($image->getExtension() === 'svg' && (!$targetFileExtension || $targetFileExtension === 'svg')) { - $processedImage = $image; - } else { - $cropVariant = $queryParams['breakpoint'] ?? 'default'; - - $crop = $image->getProperty('crop'); - $cropVariantCollection = CropVariantCollection::create($crop); - $cropArea = $cropVariantCollection->getCropArea($cropVariant); - - // Use default cropVariant if breakpoint cropVariant does not exist - if ($cropArea == Area::createEmpty()) { - $cropArea = $cropVariantCollection->getCropArea(); - } - - $processingInstructions = [ - 'width' => $queryParams['width'] ?? null, - 'height' => $queryParams['height'] ?? null, - 'maxWidth' => $queryParams['maxWidth'] ?? null, - 'maxHeight' => $queryParams['maxHeight'] ?? null, - 'fileExtension' => $queryParams['fileExtension'] ?? null, - 'crop' => $cropArea->makeAbsoluteBasedOnFile($image), - ]; - - $processedImage = $this->imageService->applyProcessingInstructions($image, $processingInstructions); - } - - $mimeType = $processedImage->getMimeType(); - $contents = $processedImage->getContents(); - - $title = $image->getProperty('title') ?? $image->getNameWithoutExtension(); - $filename = str_replace(' ', '-', strtolower($title)) . '.' . $targetFileExtension; - - $response = $this->responseFactory - ->createResponse() - ->withHeader('Content-Type', $mimeType) - ->withHeader('Content-Disposition', 'inline;filename="' . $filename . '"') - ->withHeader('Cache-Control', 'no-cache') - ->withHeader('Last-Modified', $lastModified); - - $response->getBody()->write($contents); - return $response; - } - return $handler->handle($request); - } -} diff --git a/Classes/Preview/ContentWithItemsPreviewRenderer.php b/Classes/Preview/ContentWithItemsPreviewRenderer.php index fac2cb6..94d45b3 100644 --- a/Classes/Preview/ContentWithItemsPreviewRenderer.php +++ b/Classes/Preview/ContentWithItemsPreviewRenderer.php @@ -58,6 +58,9 @@ public function renderPageModulePreviewContent(GridColumnItem $item): string return $out; } + /** + * @param mixed[] $item + */ private function renderItemHeader(array $item): string { $outHeader = ''; @@ -67,7 +70,7 @@ private function renderItemHeader(array $item): string $hiddenHeaderNote = ''; // If header layout is set to 'hidden', display an accordant note: - if ($item['header_layout'] == 100) { + if (((int) $item['header_layout']) === 100) { $hiddenHeaderNote = ' [' . htmlspecialchars($this->getLanguageService()->sL( 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.hidden' )) . ']'; diff --git a/Classes/Service/FilesService.php b/Classes/Service/FilesService.php new file mode 100644 index 0000000..30fbc80 --- /dev/null +++ b/Classes/Service/FilesService.php @@ -0,0 +1,85 @@ +getRequest(); + $frontendTypoScript = $request->getAttribute('frontend.typoscript'); + $fullTypoScript = $frontendTypoScript?->getSetupArray(); + + $this->defaultConfiguration = $fullTypoScript ? $fullTypoScript['lib.']['assetProcessingConfiguration.'] : []; + $this->fileUtility = GeneralUtility::makeInstance(FileUtility::class); + $this->fileRepository = GeneralUtility::makeInstance(FileRepository::class); + $this->imageService = GeneralUtility::makeInstance(ImageService::class); + } + + /** + * @param mixed[] $configuration + * @return mixed[] + */ + public function processImage(int $uid, array $configuration = []): array + { + $processingConfiguration = $this->getProcessingConfiguration($configuration); + $imageObj = $this->imageService->getImage(strval($uid), null, true); + return $this->fileUtility->process($imageObj, $processingConfiguration); + } + + /** + * @param mixed[] $configuration + * @return ?mixed[] + */ + public function processImages(string $tableName, string $fieldName, int $uid, array $configuration = []): ?array + { + $processingConfiguration = $this->getProcessingConfiguration($configuration); + + /** @var \TYPO3\CMS\Core\Resource\FileInterface[] $fileObjects */ + $fileObjects = $this->fileRepository->findByRelation($tableName, $fieldName, $uid); + + $processedFiles = []; + + foreach ($fileObjects as $fileObject) { + $processedFiles[] = $this->fileUtility->process($fileObject, $processingConfiguration); + } + + return $processingConfiguration->flattenObject ? $processedFiles[0] ?? null : $processedFiles; + } + + /** + * @param mixed[] $overrule + */ + private function getProcessingConfiguration(array $overrule = []): ProcessingConfiguration + { + $configuration = $this->defaultConfiguration; + + ArrayUtility::mergeRecursiveWithOverrule($configuration, $overrule); + + return ProcessingConfiguration::fromOptions($configuration); + } + + private function getRequest(): ServerRequestInterface + { + return $GLOBALS['TYPO3_REQUEST']; + } +} diff --git a/Classes/Service/JsonService.php b/Classes/Service/JsonService.php index 515f038..57681fc 100644 --- a/Classes/Service/JsonService.php +++ b/Classes/Service/JsonService.php @@ -4,34 +4,24 @@ namespace Remind\Headless\Service; -use FriendsOfTYPO3\Headless\Utility\FileUtility; use Psr\Http\Message\ServerRequestInterface; -use Psr\Log\LoggerInterface; use TYPO3\CMS\Core\Pagination\PaginationInterface; -use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; use TYPO3\CMS\Extbase\Mvc\Web\RequestBuilder; use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder; -use TYPO3\CMS\Extbase\Service\ImageService; class JsonService { - private array $settings = []; - public function __construct( private readonly UriBuilder $uriBuilder, - private readonly LoggerInterface $logger, - private readonly ImageService $imageService, - private readonly FileUtility $fileUtility, RequestBuilder $requestBuilder, - ConfigurationManagerInterface $configurationManager ) { $extbaseRequest = $requestBuilder->build($this->getRequest()); $this->uriBuilder->setRequest($extbaseRequest); - $this->settings = $configurationManager->getConfiguration( - ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS - ); } + /** + * @return mixed[] + */ public function serializePagination(PaginationInterface $pagination, string $queryParam, int $currentPage): array { $firstPageNumber = $pagination->getFirstPageNumber(); @@ -49,14 +39,20 @@ public function serializePagination(PaginationInterface $pagination, string $que ->setAddQueryString('untrusted') ->uriFor(null, [$queryParam => $lastPageNumber]); - if ($previousPageNumber && $previousPageNumber >= $firstPageNumber) { + if ( + $previousPageNumber && + $previousPageNumber >= $firstPageNumber + ) { $prev = $this->uriBuilder ->reset() ->setAddQueryString('untrusted') ->uriFor(null, [$queryParam => $previousPageNumber]); } - if ($nextPageNumber && $nextPageNumber <= $lastPageNumber) { + if ( + $nextPageNumber && + $nextPageNumber <= $lastPageNumber + ) { $next = $this->uriBuilder ->reset() ->setAddQueryString('untrusted') @@ -72,31 +68,25 @@ public function serializePagination(PaginationInterface $pagination, string $que ->uriFor(null, [$queryParam => $page]); $pages[] = [ - 'pageNumber' => $page, - 'link' => $link, 'active' => $page === $currentPage, + 'link' => $link, + 'pageNumber' => $page, ]; } $result = [ - 'startRecordNumber' => $pagination->getStartRecordNumber(), 'endRecordNumber' => $pagination->getEndRecordNumber(), 'first' => $first, 'last' => $last, - 'prev' => $prev ?? null, 'next' => $next ?? null, 'pages' => $pages, + 'prev' => $prev ?? null, + 'startRecordNumber' => $pagination->getStartRecordNumber(), ]; return $result; } - public function processImage(int $uid): ?array - { - $imageObj = $this->imageService->getImage(strval($uid), null, true); - return $this->fileUtility->processFile($imageObj); - } - private function getRequest(): ServerRequestInterface { return $GLOBALS['TYPO3_REQUEST']; diff --git a/Classes/TCA/DisplayCond.php b/Classes/TCA/DisplayCond.php index 25c6108..d9ec961 100644 --- a/Classes/TCA/DisplayCond.php +++ b/Classes/TCA/DisplayCond.php @@ -10,6 +10,9 @@ class DisplayCond { + /** + * @param mixed[] $args + */ public function parentIsRoot(array $args): bool { ['record' => $record] = $args; diff --git a/Classes/Utility/ConfigUtility.php b/Classes/Utility/ConfigUtility.php index fc5f7e1..bf25ff3 100644 --- a/Classes/Utility/ConfigUtility.php +++ b/Classes/Utility/ConfigUtility.php @@ -12,6 +12,9 @@ class ConfigUtility { + /** + * @return mixed[] + */ public static function getRootPageConfig(): array { $request = self::getRequest(); diff --git a/Classes/Utility/TcaUtility.php b/Classes/Utility/TcaUtility.php index dafa24e..0816667 100644 --- a/Classes/Utility/TcaUtility.php +++ b/Classes/Utility/TcaUtility.php @@ -12,7 +12,7 @@ class TcaUtility { /** - * @param array $variants array with breakpoint names as key and aspect-ratios as value + * @param mixed[] $variants array with breakpoint names as key and aspect-ratios as value * the value can contain multple aspect ratios consisting of value and title * e.g. [ * 'lg' => [ @@ -23,16 +23,16 @@ class TcaUtility * ['value' => 16 / 9, 'title' => '16:9'] * ] * ] + * @return mixed[] */ public static function getCropVariants(array $variants): array { return array_reduce(array_keys($variants), function (array $result, string $breakpoint) use ($variants) { $aspectRatios = $variants[$breakpoint]; $result[$breakpoint] = [ - 'title' => $breakpoint, 'allowedAspectRatios' => array_reduce(array_keys($aspectRatios), function ( array $result, - string $key + string|int $key ) use ( $aspectRatios, $breakpoint, @@ -41,11 +41,16 @@ public static function getCropVariants(array $variants): array $result[$breakpoint . '_' . $aspectRatio['value']] = $aspectRatio; return $result; }, []), + 'title' => $breakpoint, ]; return $result; }, []); } + /** + * @param mixed[] $breakpoints + * @return mixed[] + */ public static function getCropVariantsFree(array $breakpoints): array { return self::getCropVariants( @@ -54,8 +59,8 @@ public static function getCropVariantsFree(array $breakpoints): array function (array $result, string $breakpoint) { $result[$breakpoint] = [ [ - 'value' => 0.0, 'title' => 'LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.ratio.free', + 'value' => 0.0, ], ]; return $result; @@ -65,8 +70,8 @@ function (array $result, string $breakpoint) { ); } - /** - * @param array|string $dataStructure either a xml flexform file path, a xml flexform string or a flexform array + /** + * @param mixed[]|string $dataStructure either a xml flexform file path, a xml flexform string or a flexform array */ public static function addPageConfigFlexForm(array|string $dataStructure): void { @@ -86,6 +91,22 @@ public static function addPageConfigFlexForm(array|string $dataStructure): void $GLOBALS['TCA']['pages']['columns']['tx_headless_config']['config']['ds']['default'] = $newFlexFormString; } + /** + * @param mixed[]|string $dataStructure either a xml flexform file path, a xml flexform string or a flexform array + */ + public static function setFooterFlexForm(array|string $dataStructure): void + { + $newFlexFormArray = self::getFlexFormArray($dataStructure); + $flexFormTools = GeneralUtility::makeInstance(FlexFormTools::class); + $newFlexFormString = $flexFormTools->flexArray2Xml($newFlexFormArray, true); + + $GLOBALS['TCA']['pages']['columns']['tx_headless_footer']['config']['ds']['default'] = $newFlexFormString; + } + + /** + * @param mixed[]|string $dataStructure either a xml flexform file path, a xml flexform string or a flexform array + * @return mixed[] + */ private static function getFlexFormArray(array|string $dataStructure): array { if (is_array($dataStructure)) { @@ -94,7 +115,10 @@ private static function getFlexFormArray(array|string $dataStructure): array // Taken from TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools if (strpos(trim($dataStructure), 'FILE:') === 0) { $file = GeneralUtility::getFileAbsFileName(substr(trim($dataStructure), 5)); - if (empty($file) || !@is_file($file)) { + if ( + empty($file) || + !@is_file($file) + ) { throw new RuntimeException( 'Data structure file ' . $file . ' could not be resolved to an existing file', 1478105826 diff --git a/Configuration/Form/BaseSetup.yaml b/Configuration/Form/BaseSetup.yaml index 775213f..10c0b23 100644 --- a/Configuration/Form/BaseSetup.yaml +++ b/Configuration/Form/BaseSetup.yaml @@ -1,42 +1,65 @@ -TYPO3: - CMS: - Form: - prototypes: - standard: - formEditor: - translationFiles: - 20: "EXT:rmnd_headless/Resources/Private/Language/locallang_form.xlf" - formEngine: - translationFiles: - 20: "EXT:rmnd_headless/Resources/Private/Language/locallang_form.xlf" - formElementsDefinition: - DatePicker: null - Form: - formEditor: - predefinedDefaults: - i18n: - identifier: i18n - editors: - # Overwrite submitButtonLabel propertyPath to be included in json output - 300: - propertyPath: i18n.properties.submit - 400: - identifier: successText - templateName: Inspector-TextEditor - label: formEditor.elements.Form.editor.successText.label - propertyPath: i18n.properties.success - 401: - identifier: loadingText - templateName: Inspector-TextEditor - label: formEditor.elements.Form.editor.loadingText.label - propertyPath: i18n.properties.loading - 402: - identifier: requiredHint - templateName: Inspector-TextEditor - label: formEditor.elements.Form.editor.requiredHint.label - propertyPath: i18n.properties.required - 900: - selectOptions: - # Remove redirect (non JSON) and confirmation finisher - 40: null - 60: null +imports: + - { resource: './FormElements/AdvancedPassword.yaml' } + - { resource: './FormElements/Checkbox.yaml' } + - { resource: './FormElements/Date.yaml' } + - { resource: './FormElements/Email.yaml' } + - { resource: './FormElements/FileUpload.yaml' } + - { resource: './FormElements/GridRow.yaml' } + - { resource: './FormElements/Fieldset.yaml' } + - { resource: './FormElements/MultiCheckbox.yaml' } + - { resource: './FormElements/MultiSelect.yaml' } + - { resource: './FormElements/Number.yaml' } + - { resource: './FormElements/Password.yaml' } + - { resource: './FormElements/RadioButton.yaml' } + - { resource: './FormElements/SingleSelect.yaml' } + - { resource: './FormElements/StaticText.yaml' } + - { resource: './FormElements/Telephone.yaml' } + - { resource: './FormElements/Text.yaml' } + - { resource: './FormElements/Textarea.yaml' } + - { resource: './FormElements/Url.yaml' } + + - { resource: './Finishers/JsonRedirectFinisher.yaml' } + +prototypes: + standard: + formEditor: + translationFiles: + 20: "EXT:rmnd_headless/Resources/Private/Language/locallang_form.xlf" + formEngine: + translationFiles: + 20: "EXT:rmnd_headless/Resources/Private/Language/locallang_form.xlf" + formElementsDefinition: + DatePicker: + formEditor: + group: null + Form: + formEditor: + predefinedDefaults: + i18n: + identifier: i18n + renderingOptions: + formDecorator: Remind\Headless\Form\FormDefinitionDecorator + editors: + # Overwrite submitButtonLabel propertyPath to be included in json output + 300: + propertyPath: i18n.properties.submit + 400: + identifier: successText + templateName: Inspector-TextEditor + label: formEditor.elements.Form.editor.successText.label + propertyPath: i18n.properties.success + 401: + identifier: loadingText + templateName: Inspector-TextEditor + label: formEditor.elements.Form.editor.loadingText.label + propertyPath: i18n.properties.loading + 402: + identifier: requiredHint + templateName: Inspector-TextEditor + label: formEditor.elements.Form.editor.requiredHint.label + propertyPath: i18n.properties.required + 900: + selectOptions: + # Remove redirect (non JSON) and confirmation finisher + 40: null + 60: null diff --git a/Configuration/Form/Finishers/JsonRedirectFinisher.yaml b/Configuration/Form/Finishers/JsonRedirectFinisher.yaml new file mode 100644 index 0000000..34001fe --- /dev/null +++ b/Configuration/Form/Finishers/JsonRedirectFinisher.yaml @@ -0,0 +1,57 @@ +prototypes: + standard: + formElementsDefinition: + Form: + formEditor: + editors: + 900: + selectOptions: + 70: + value: JsonRedirect + label: formEditor.elements.Form.editor.finishers.Redirect.label + propertyCollections: + finishers: + 70: + identifier: JsonRedirect + editors: + 100: + identifier: header + templateName: Inspector-CollectionElementHeaderEditor + label: formEditor.elements.Form.finisher.Redirect.editor.header.label + 200: + identifier: pageUid + templateName: Inspector-Typo3WinBrowserEditor + label: formEditor.elements.Form.finisher.Redirect.editor.pageUid.label + buttonLabel: formEditor.elements.Form.finisher.Redirect.editor.pageUid.buttonLabel + browsableType: pages + iconIdentifier: apps-pagetree-page-default + propertyPath: options.pageUid + propertyValidatorsMode: OR + propertyValidators: + 10: Integer + 20: FormElementIdentifierWithinCurlyBracesExclusive + finishersDefinition: + JsonRedirect: + implementationClassName: 'FriendsOfTYPO3\Headless\Form\Finisher\JsonRedirectFinisher' + formEditor: + iconIdentifier: form-finisher + label: formEditor.elements.Form.finisher.Redirect.editor.header.label + predefinedDefaults: + options: + pageUid: "" + additionalParameters: "" + FormEngine: + label: tt_content.finishersDefinition.Redirect.label + elements: + pageUid: + label: tt_content.finishersDefinition.Redirect.pageUid.label + config: + type: group + internal_type: db + allowed: pages + size: 1 + minitems: 1 + maxitems: 1 + fieldWizard: + recordsOverview: + disabled: 1 diff --git a/Configuration/Form/FormElementSize.yaml b/Configuration/Form/FormElementSize.yaml deleted file mode 100644 index dc4df14..0000000 --- a/Configuration/Form/FormElementSize.yaml +++ /dev/null @@ -1,75 +0,0 @@ -TYPO3: - CMS: - Form: - prototypes: - standard: - formElementsDefinition: - AdvancedPassword: &size - formEditor: - editors: - # Remove default Grid viewport configuration - 700: null - 701: - identifier: size - templateName: Inspector-SingleSelectEditor - label: formEditor.elements.FormElement.editor.size.label - propertyPath: properties.size - selectOptions: - 10: - value: "" - label: formEditor.elements.FormElement.editor.size.default.label - 20: - value: 25 - label: 1/4 - 30: - value: 33 - label: 1/3 - 40: - value: 50 - label: 1/2 - 50: - value: 66 - label: 2/3 - 60: - value: 75 - label: 3/4 - Checkbox: - <<: *size - ContentElement: - <<: *size - Date: - <<: *size - Email: - <<: *size - Fieldset: - <<: *size - FileUpload: - <<: *size - GridRow: - <<: *size - Hidden: - <<: *size - ImageUpload: - <<: *size - MultiCheckbox: - <<: *size - MultiSelect: - <<: *size - Number: - <<: *size - Password: - <<: *size - RadioButton: - <<: *size - SingleSelect: - <<: *size - StaticText: - <<: *size - Telephone: - <<: *size - Url: - <<: *size - Text: - <<: *size - Textarea: - <<: *size diff --git a/Configuration/Form/FormElements/AdvancedPassword.yaml b/Configuration/Form/FormElements/AdvancedPassword.yaml new file mode 100644 index 0000000..1d6561d --- /dev/null +++ b/Configuration/Form/FormElements/AdvancedPassword.yaml @@ -0,0 +1,92 @@ +prototypes: + standard: + formElementsDefinition: + AdvancedPassword: + formEditor: + editors: + 400: + propertyPath: properties.placeholder + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 20: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 30: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 40: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 50: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 60: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 70: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 80: + editors: + 300: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/Checkbox.yaml b/Configuration/Form/FormElements/Checkbox.yaml new file mode 100644 index 0000000..88a44f1 --- /dev/null +++ b/Configuration/Form/FormElements/Checkbox.yaml @@ -0,0 +1,46 @@ +prototypes: + standard: + formElementsDefinition: + Checkbox: + formEditor: + editors: + 300: + identifier: links + templateName: Inspector-PropertyGridEditor + label: formEditor.elements.FormElement.editor.links.label + propertyPath: properties.links + isSortable: true + enableAddRow: true + enableDeleteRow: true + useLabelAsFallbackValue: false + gridColumns: + - name: label + title: formEditor.elements.FormElement.editor.links.linkText + - name: value + title: formEditor.elements.FormElement.editor.links.pageUid + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label diff --git a/Configuration/Form/FormElements/Date.yaml b/Configuration/Form/FormElements/Date.yaml new file mode 100644 index 0000000..b4b7725 --- /dev/null +++ b/Configuration/Form/FormElements/Date.yaml @@ -0,0 +1,94 @@ +prototypes: + standard: + formElementsDefinition: + Date: + formEditor: + editors: + 550: + propertyPath: properties.step + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + predefinedDefaults: + properties: null + propertyCollections: + validators: + 10: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 250: + additionalElementPropertyPaths: null + 20: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 30: + editors: + 250: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 40: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 50: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 60: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 70: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 80: + editors: + 300: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/Email.yaml b/Configuration/Form/FormElements/Email.yaml new file mode 100644 index 0000000..3a3807d --- /dev/null +++ b/Configuration/Form/FormElements/Email.yaml @@ -0,0 +1,92 @@ +prototypes: + standard: + formElementsDefinition: + Email: + formEditor: + editors: + 400: + propertyPath: properties.placeholder + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 20: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 30: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 40: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 50: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 60: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 70: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 80: + editors: + 300: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/Fieldset.yaml b/Configuration/Form/FormElements/Fieldset.yaml new file mode 100644 index 0000000..72c4ec3 --- /dev/null +++ b/Configuration/Form/FormElements/Fieldset.yaml @@ -0,0 +1,32 @@ +prototypes: + standard: + formElementsDefinition: + Fieldset: + formEditor: + editors: + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label diff --git a/Configuration/Form/FormElements/FileUpload.yaml b/Configuration/Form/FormElements/FileUpload.yaml new file mode 100644 index 0000000..804bd13 --- /dev/null +++ b/Configuration/Form/FormElements/FileUpload.yaml @@ -0,0 +1,40 @@ +prototypes: + standard: + formElementsDefinition: + FileUpload: + formEditor: + editors: + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/GridRow.yaml b/Configuration/Form/FormElements/GridRow.yaml new file mode 100644 index 0000000..f47f397 --- /dev/null +++ b/Configuration/Form/FormElements/GridRow.yaml @@ -0,0 +1,32 @@ +prototypes: + standard: + formElementsDefinition: + GridRow: + formEditor: + editors: + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label diff --git a/Configuration/Form/FormElements/MultiCheckbox.yaml b/Configuration/Form/FormElements/MultiCheckbox.yaml new file mode 100644 index 0000000..3b4ded3 --- /dev/null +++ b/Configuration/Form/FormElements/MultiCheckbox.yaml @@ -0,0 +1,40 @@ +prototypes: + standard: + formElementsDefinition: + MultiCheckbox: + formEditor: + editors: + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/MultiSelect.yaml b/Configuration/Form/FormElements/MultiSelect.yaml new file mode 100644 index 0000000..49b4b67 --- /dev/null +++ b/Configuration/Form/FormElements/MultiSelect.yaml @@ -0,0 +1,40 @@ +prototypes: + standard: + formElementsDefinition: + MultiSelect: + formEditor: + editors: + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/Number.yaml b/Configuration/Form/FormElements/Number.yaml new file mode 100644 index 0000000..7d20f93 --- /dev/null +++ b/Configuration/Form/FormElements/Number.yaml @@ -0,0 +1,96 @@ +prototypes: + standard: + formElementsDefinition: + Number: + formEditor: + editors: + 400: + propertyPath: properties.placeholder + 550: + propertyPath: properties.step + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + predefinedDefaults: + properties: null + propertyCollections: + validators: + 10: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 20: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 30: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 40: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 50: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 60: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 70: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 80: + editors: + 300: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true \ No newline at end of file diff --git a/Configuration/Form/FormElements/Password.yaml b/Configuration/Form/FormElements/Password.yaml new file mode 100644 index 0000000..117bd02 --- /dev/null +++ b/Configuration/Form/FormElements/Password.yaml @@ -0,0 +1,92 @@ +prototypes: + standard: + formElementsDefinition: + Password: + formEditor: + editors: + 400: + propertyPath: properties.placeholder + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 20: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 30: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 40: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 50: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 60: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 70: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 80: + editors: + 300: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/RadioButton.yaml b/Configuration/Form/FormElements/RadioButton.yaml new file mode 100644 index 0000000..2072920 --- /dev/null +++ b/Configuration/Form/FormElements/RadioButton.yaml @@ -0,0 +1,32 @@ +prototypes: + standard: + formElementsDefinition: + RadioButton: + formEditor: + editors: + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label diff --git a/Configuration/Form/FormElements/SingleSelect.yaml b/Configuration/Form/FormElements/SingleSelect.yaml new file mode 100644 index 0000000..eae787e --- /dev/null +++ b/Configuration/Form/FormElements/SingleSelect.yaml @@ -0,0 +1,32 @@ +prototypes: + standard: + formElementsDefinition: + SingleSelect: + formEditor: + editors: + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label diff --git a/Configuration/Form/FormElements/StaticText.yaml b/Configuration/Form/FormElements/StaticText.yaml new file mode 100644 index 0000000..d7d848f --- /dev/null +++ b/Configuration/Form/FormElements/StaticText.yaml @@ -0,0 +1,32 @@ +prototypes: + standard: + formElementsDefinition: + StaticText: + formEditor: + editors: + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label diff --git a/Configuration/Form/FormElements/Telephone.yaml b/Configuration/Form/FormElements/Telephone.yaml new file mode 100644 index 0000000..951f6c8 --- /dev/null +++ b/Configuration/Form/FormElements/Telephone.yaml @@ -0,0 +1,92 @@ +prototypes: + standard: + formElementsDefinition: + Telephone: + formEditor: + editors: + 400: + propertyPath: properties.placeholder + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 20: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 30: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 40: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 50: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 60: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 70: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 80: + editors: + 300: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/Text.yaml b/Configuration/Form/FormElements/Text.yaml new file mode 100644 index 0000000..4039cba --- /dev/null +++ b/Configuration/Form/FormElements/Text.yaml @@ -0,0 +1,92 @@ +prototypes: + standard: + formElementsDefinition: + Text: + formEditor: + editors: + 400: + propertyPath: properties.placeholder + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 20: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 30: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 40: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 50: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 60: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 70: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 80: + editors: + 300: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/Textarea.yaml b/Configuration/Form/FormElements/Textarea.yaml new file mode 100644 index 0000000..a51411f --- /dev/null +++ b/Configuration/Form/FormElements/Textarea.yaml @@ -0,0 +1,92 @@ +prototypes: + standard: + formElementsDefinition: + Textarea: + formEditor: + editors: + 400: + propertyPath: properties.placeholder + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 20: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 30: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 40: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 50: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 60: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 70: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 80: + editors: + 300: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/FormElements/Url.yaml b/Configuration/Form/FormElements/Url.yaml new file mode 100644 index 0000000..e19b607 --- /dev/null +++ b/Configuration/Form/FormElements/Url.yaml @@ -0,0 +1,92 @@ +prototypes: + standard: + formElementsDefinition: + Url: + formEditor: + editors: + 400: + propertyPath: properties.placeholder + # Remove default Grid viewport configuration + 700: null + 701: + identifier: size + templateName: Inspector-SingleSelectEditor + label: formEditor.elements.FormElement.editor.size.label + propertyPath: properties.size + selectOptions: + 10: + value: "" + label: formEditor.elements.FormElement.editor.size.default.label + 20: + value: xs + label: formEditor.elements.FormElement.editor.size.xs.label + 30: + value: sm + label: formEditor.elements.FormElement.editor.size.sm.label + 40: + value: md + label: formEditor.elements.FormElement.editor.size.md.label + 50: + value: lg + label: formEditor.elements.FormElement.editor.size.lg.label + 60: + value: xl + label: formEditor.elements.FormElement.editor.size.xl.label + propertyCollections: + validators: + 10: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 20: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 30: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 40: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 50: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 60: + editors: + 200: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 70: + editors: + 200: + additionalElementPropertyPaths: null + 300: + additionalElementPropertyPaths: null + 400: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true + 80: + editors: + 300: + templateName: Inspector-TextEditor + propertyPath: customErrorMessage + doNotSetIfPropertyValueIsEmpty: true diff --git a/Configuration/Form/JsonRedirectFinisher.yaml b/Configuration/Form/JsonRedirectFinisher.yaml deleted file mode 100644 index 5134061..0000000 --- a/Configuration/Form/JsonRedirectFinisher.yaml +++ /dev/null @@ -1,60 +0,0 @@ -TYPO3: - CMS: - Form: - prototypes: - standard: - formElementsDefinition: - Form: - formEditor: - editors: - 900: - selectOptions: - 70: - value: JsonRedirect - label: formEditor.elements.Form.editor.finishers.Redirect.label - propertyCollections: - finishers: - 70: - identifier: JsonRedirect - editors: - 100: - identifier: header - templateName: Inspector-CollectionElementHeaderEditor - label: formEditor.elements.Form.finisher.Redirect.editor.header.label - 200: - identifier: pageUid - templateName: Inspector-Typo3WinBrowserEditor - label: formEditor.elements.Form.finisher.Redirect.editor.pageUid.label - buttonLabel: formEditor.elements.Form.finisher.Redirect.editor.pageUid.buttonLabel - browsableType: pages - iconIdentifier: apps-pagetree-page-default - propertyPath: options.pageUid - propertyValidatorsMode: OR - propertyValidators: - 10: Integer - 20: FormElementIdentifierWithinCurlyBracesExclusive - finishersDefinition: - JsonRedirect: - implementationClassName: 'FriendsOfTYPO3\Headless\Form\Finisher\JsonRedirectFinisher' - formEditor: - iconIdentifier: form-finisher - label: formEditor.elements.Form.finisher.Redirect.editor.header.label - predefinedDefaults: - options: - pageUid: "" - additionalParameters: "" - FormEngine: - label: tt_content.finishersDefinition.Redirect.label - elements: - pageUid: - label: tt_content.finishersDefinition.Redirect.pageUid.label - config: - type: group - internal_type: db - allowed: pages - size: 1 - minitems: 1 - maxitems: 1 - fieldWizard: - recordsOverview: - disabled: 1 diff --git a/Configuration/RequestMiddlewares.php b/Configuration/RequestMiddlewares.php index b245b48..dcd398e 100644 --- a/Configuration/RequestMiddlewares.php +++ b/Configuration/RequestMiddlewares.php @@ -1,17 +1,19 @@ [ - 'rmnd_headless/imageprocessing' => [ - 'target' => ImageProcessingMiddleware::class, + 'rmnd_headless/asset' => [ 'after' => [ 'typo3/cms-frontend/site', ], 'before' => [ 'typo3/cms-frontend/backend-user-authentication', ], + 'target' => AssetMiddleware::class, ], ], ]; diff --git a/Configuration/Services.yaml b/Configuration/Services.yaml index 8bea0d7..148249d 100644 --- a/Configuration/Services.yaml +++ b/Configuration/Services.yaml @@ -15,3 +15,11 @@ services: tags: - name: event.listener + Remind\Headless\Event\Listener\AfterCacheableContentIsGeneratedEventListener: + tags: + - + name: event.listener + Remind\Headless\Event\Listener\AfterTcaCompilationEventListener: + tags: + - + name: event.listener \ No newline at end of file diff --git a/Configuration/TCA/Overrides/pages.php b/Configuration/TCA/Overrides/pages.php index 302a220..4f168d2 100644 --- a/Configuration/TCA/Overrides/pages.php +++ b/Configuration/TCA/Overrides/pages.php @@ -1,5 +1,7 @@ [ - 'exclude' => 0, - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:breadcrumbs_background_color', 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', + 'default' => null, 'items' => [ [ 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:breadcrumbs_background_color.none', 'value' => null, ], ], - 'default' => null, + 'renderType' => 'selectSingle', + 'type' => 'select', ], + 'exclude' => 0, + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:breadcrumbs_background_color', ], 'tx_headless_config' => [ - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:page_config', 'config' => [ + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + 'ds' => [ + 'default' => 'FILE:EXT:rmnd_headless/Configuration/FlexForms/Empty.xml', + ], 'type' => 'flex', + ], + 'displayCond' => 'FIELD:is_siteroot:REQ:true', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:page_config', + ], + 'tx_headless_footer' => [ + 'config' => [ 'behaviour' => [ 'allowLanguageSynchronization' => true, ], 'ds' => [ 'default' => 'FILE:EXT:rmnd_headless/Configuration/FlexForms/Empty.xml', ], + 'type' => 'flex', ], 'displayCond' => 'FIELD:is_siteroot:REQ:true', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:footer', ], 'tx_headless_overview_label' => [ - 'exclude' => 0, - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:overview_label', 'config' => [ 'type' => 'input', ], + 'exclude' => 0, + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:overview_label', ], ] ); @@ -59,5 +74,14 @@ ExtensionManagementUtility::addToAllTCAtypes( 'pages', - 'tx_headless_config', + '--div--;LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:page_config,tx_headless_config', + '', + 'after:rowDescription' +); + +ExtensionManagementUtility::addToAllTCAtypes( + 'pages', + '--div--;LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_pages.xlf:footer,tx_headless_footer', + '', + 'after:rowDescription' ); diff --git a/Configuration/TCA/Overrides/sys_file_reference.php b/Configuration/TCA/Overrides/sys_file_reference.php index 687c355..a992ab9 100644 --- a/Configuration/TCA/Overrides/sys_file_reference.php +++ b/Configuration/TCA/Overrides/sys_file_reference.php @@ -1,5 +1,7 @@ [ - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_file.xlf:lazy_loading', - 'description' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_file.xlf:lazy_loading.description', 'config' => [ - 'type' => 'check', - 'renderType' => 'checkboxToggle', 'default' => 0, + 'renderType' => 'checkboxToggle', + 'type' => 'check', ], + 'description' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_file.xlf:lazy_loading.description', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_file.xlf:lazy_loading', ], ]); -$GLOBALS - ['TCA'] - ['sys_file_reference'] - ['types'] - [AbstractFile::FILETYPE_IMAGE] - ['columnsOverrides'] - ['tx_headless_lazy_loading'] - ['config'] - ['default'] = 1; +$GLOBALS['TCA']['sys_file_reference']['types'][AbstractFile::FILETYPE_IMAGE]['columnsOverrides']['tx_headless_lazy_loading']['config']['default'] = 1; ExtensionManagementUtility::addFieldsToPalette( 'sys_file_reference', diff --git a/Configuration/TCA/Overrides/sys_template.php b/Configuration/TCA/Overrides/sys_template.php index e2e554d..59014ac 100644 --- a/Configuration/TCA/Overrides/sys_template.php +++ b/Configuration/TCA/Overrides/sys_template.php @@ -1,5 +1,7 @@ [ - 'exclude' => 0, - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:background_color', 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', + 'default' => null, 'items' => [ [ 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:background_color.none', 'value' => null, ], ], - 'default' => null, + 'renderType' => 'selectSingle', + 'type' => 'select', ], + 'exclude' => 0, + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:background_color', 'onChange' => 'reload', ], 'tx_headless_background_full_width' => [ - 'exclude' => 0, - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:background_full_width', 'config' => [ - 'type' => 'check', - 'renderType' => 'checkboxToggle', 'items' => [ [ 'label' => '', 'value' => 0, ], ], + 'renderType' => 'checkboxToggle', + 'type' => 'check', ], 'displayCond' => 'FIELD:tx_headless_background_color:REQ:true', + 'exclude' => 0, + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:background_full_width', ], 'tx_headless_cookie_category' => [ - 'exclude' => 0, - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookie.category', 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', + 'default' => null, 'items' => [ [ - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookie.category.none', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookies.category.none', 'value' => null, ], [ - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookie.category.necessary', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookies.category.necessary', 'value' => 0, ], [ - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookie.category.preferences', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookies.category.preferences', 'value' => 1, ], [ - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookie.category.statistics', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookies.category.statistics', 'value' => 2, ], [ - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookie.category.marketing', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookies.category.marketing', 'value' => 3, ], ], - 'default' => null, + 'renderType' => 'selectSingle', + 'type' => 'select', ], + 'exclude' => 0, + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookies.category', ], 'tx_headless_cookie_message' => [ - 'l10n_mode' => 'prefixLangTitle', - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookie.message', 'config' => [ - 'type' => 'text', 'cols' => 80, + 'enableRichtext' => true, 'rows' => 10, 'softref' => 'typolink_tag,email[subst],url', - 'enableRichtext' => true, + 'type' => 'text', ], + 'l10n_mode' => 'prefixLangTitle', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:cookies.message', ], 'tx_headless_item' => [ - 'exclude' => 0, - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:tx_headless_item', 'config' => [ - 'type' => 'inline', - 'foreign_table' => 'tx_headless_item', 'foreign_field' => 'foreign_uid', + 'foreign_table' => 'tx_headless_item', 'foreign_table_field' => 'foreign_table', + 'type' => 'inline', ], - ], - 'tx_headless_space_before_inside' => [ 'exclude' => 0, - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:space_before_inside', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:tx_headless_item', + ], + 'tx_headless_space_after_inside' => [ 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', + 'default' => '', 'items' => [ [ 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:space_none', @@ -123,16 +122,16 @@ 'value' => 'extra-large', ], ], - 'default' => '', + 'renderType' => 'selectSingle', + 'type' => 'select', ], 'displayCond' => 'FIELD:tx_headless_background_color:REQ:true', - ], - 'tx_headless_space_after_inside' => [ 'exclude' => 0, 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:space_after_inside', + ], + 'tx_headless_space_before_inside' => [ 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', + 'default' => '', 'items' => [ [ 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:space_none', @@ -159,9 +158,12 @@ 'value' => 'extra-large', ], ], - 'default' => '', + 'renderType' => 'selectSingle', + 'type' => 'select', ], 'displayCond' => 'FIELD:tx_headless_background_color:REQ:true', + 'exclude' => 0, + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:space_before_inside', ], ] ); @@ -187,8 +189,15 @@ 'after:space_after_class' ); -ExtensionManagementUtility::addToAllTCAtypes('tt_content', 'tx_headless_cookie_category'); -ExtensionManagementUtility::addToAllTCAtypes('tt_content', 'tx_headless_cookie_message'); +/** + * Palette will be added in AfterTcaCompilationEventListener so Content Elements + * added in Extensions after this one will also have the palette + */ +ExtensionManagementUtility::addFieldsToPalette( + 'tt_content', + 'cookies', + 'tx_headless_cookie_category,--linebreak--,tx_headless_cookie_message', +); $GLOBALS['TCA']['tt_content']['ctrl']['previewRenderer'] = ContentWithItemsPreviewRenderer::class; @@ -228,21 +237,5 @@ ]; // Workaround for TCEFORM (https://forge.typo3.org/issues/100775) - $GLOBALS - ['TCA'] - ['tt_content'] - ['columns'] - ['space_after_class'] - ['config'] - ['items'] - [0] - ['label'] = 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:space_none'; - $GLOBALS - ['TCA'] - ['tt_content'] - ['columns'] - ['space_before_class'] - ['config'] - ['items'] - [0] - ['label'] = 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:space_none'; +$GLOBALS['TCA']['tt_content']['columns']['space_after_class']['config']['items'][0]['label'] = 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:space_none'; +$GLOBALS['TCA']['tt_content']['columns']['space_before_class']['config']['items'][0]['label'] = 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:space_none'; diff --git a/Configuration/TCA/Overrides/tt_content_accordion.php b/Configuration/TCA/Overrides/tt_content_accordion.php index 6d35cc5..17dcb32 100644 --- a/Configuration/TCA/Overrides/tt_content_accordion.php +++ b/Configuration/TCA/Overrides/tt_content_accordion.php @@ -1,5 +1,7 @@ 'default', + 'icon' => 'content-accordion', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ce.xlf:accordion.title', + 'value' => 'accordion', ], - 'header', - 'after' ); $GLOBALS['TCA']['tt_content']['types']['accordion'] = [ - 'showitem' => ' - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general, - --palette--;;general, - --palette--;;headers, - tx_headless_item, - --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance, - --palette--;;frames, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language, - --palette--;;language, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, - --palette--;;hidden, - --palette--;;access, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, - categories, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes, - rowDescription, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended, - ', 'columnsOverrides' => [ 'tx_headless_item' => [ 'config' => [ @@ -59,4 +42,22 @@ ], ], ], + 'showitem' => ' + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general, + --palette--;;general, + --palette--;;headers, + tx_headless_item, + --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance, + --palette--;;frames, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language, + --palette--;;language, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, + --palette--;;hidden, + --palette--;;access, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, + categories, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes, + rowDescription, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended, + ', ]; diff --git a/Configuration/TCA/Overrides/tt_content_footer_content.php b/Configuration/TCA/Overrides/tt_content_footer_content.php deleted file mode 100644 index ec6f5e3..0000000 --- a/Configuration/TCA/Overrides/tt_content_footer_content.php +++ /dev/null @@ -1,36 +0,0 @@ - ' - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general, - --palette--;;general, - header, - pi_flexform, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language, - --palette--;;language, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, - --palette--;;hidden, - --palette--;;access, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, - categories, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes, - rowDescription, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended, - ', -]; diff --git a/Configuration/TCA/Overrides/tt_content_form_formframework.php b/Configuration/TCA/Overrides/tt_content_form_formframework.php index 892aa98..ba5b603 100644 --- a/Configuration/TCA/Overrides/tt_content_form_formframework.php +++ b/Configuration/TCA/Overrides/tt_content_form_formframework.php @@ -1,5 +1,7 @@ 'default', + 'icon' => 'content-gallery', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ce.xlf:image_gallery.title', + 'value' => 'image_gallery', ], - 'header', - 'after' ); $GLOBALS['TCA']['tt_content']['types']['image_gallery'] = [ diff --git a/Configuration/TCA/Overrides/tt_content_tabs.php b/Configuration/TCA/Overrides/tt_content_tabs.php index b334c42..a254a5d 100644 --- a/Configuration/TCA/Overrides/tt_content_tabs.php +++ b/Configuration/TCA/Overrides/tt_content_tabs.php @@ -1,5 +1,7 @@ 'default', + 'icon' => 'content-tab', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ce.xlf:tabs.title', + 'value' => 'tabs', ], - 'header', - 'after' ); $GLOBALS['TCA']['tt_content']['types']['tabs'] = [ - 'showitem' => ' - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general, - --palette--;;general, - --palette--;;headers, - tx_headless_item, - --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance, - --palette--;;frames, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language, - --palette--;;language, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, - --palette--;;hidden, - --palette--;;access, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, - categories, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes, - rowDescription, - --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended, - ', 'columnsOverrides' => [ 'tx_headless_item' => [ 'config' => [ @@ -59,4 +42,22 @@ ], ], ], + 'showitem' => ' + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general, + --palette--;;general, + --palette--;;headers, + tx_headless_item, + --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance, + --palette--;;frames, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language, + --palette--;;language, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, + --palette--;;hidden, + --palette--;;access, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories, + categories, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes, + rowDescription, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended, + ', ]; diff --git a/Configuration/TCA/tx_headless_item.php b/Configuration/TCA/tx_headless_item.php index 19134dd..25b996c 100644 --- a/Configuration/TCA/tx_headless_item.php +++ b/Configuration/TCA/tx_headless_item.php @@ -1,40 +1,37 @@ [ - 'title' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_item.xlf:title', - 'label' => 'header', - 'label_alt' => 'subheader,bodytext', - 'tstamp' => 'tstamp', - 'crdate' => 'crdate', - 'hideTable' => true, - 'sortby' => 'sorting', - 'delete' => 'deleted', - 'versioningWS' => true, - 'languageField' => 'sys_language_uid', - 'transOrigPointerField' => 'l10n_parent', - 'transOrigDiffSourceField' => 'l10n_diffsource', - 'translationSource' => 'l10n_source', - 'enablecolumns' => [ - 'disabled' => 'hidden', - 'starttime' => 'starttime', - 'endtime' => 'endtime', + 'columns' => [ + 'bodytext' => [ + 'config' => [ + 'cols' => 80, + 'enableRichtext' => true, + 'rows' => 10, + 'softref' => 'typolink_tag,email[subst],url', + 'type' => 'text', + ], + 'l10n_mode' => 'prefixLangTitle', + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.text', ], - 'searchFields' => 'header,subheader,bodytext', - 'iconfile' => 'EXT:core/Resources/Public/Icons/T3Icons/svgs/actions/actions-folder.svg', - 'security' => [ - 'ignorePageTypeRestriction' => true, + 'endtime' => [ + 'config' => [ + 'default' => 0, + 'range' => [ + 'upper' => mktime(0, 0, 0, 1, 1, 2038), + ], + 'type' => 'datetime', + ], + 'exclude' => true, + 'l10n_display' => 'defaultAsReadonly', + 'l10n_mode' => 'exclude', + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', ], - ], - 'columns' => [ 'flexform' => [ - 'l10n_display' => 'hideDiff', - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_item.xlf:columns.flexform', 'config' => [ - // FlexForm according to tt_content:CType is selected in Remind\Headless\Event\Listener\AfterFlexFormDataStructureIdentifierInitializedEventListener - 'type' => 'flex', 'ds' => [ 'default' => ' @@ -54,117 +51,43 @@ ', ], + // FlexForm according to tt_content:CType is selected in Remind\Headless\Event\Listener\AfterFlexFormDataStructureIdentifierInitializedEventListener + 'type' => 'flex', ], + 'l10n_display' => 'hideDiff', + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_item.xlf:columns.flexform', ], - 'sys_language_uid' => [ - 'label' => 'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.language', - 'config' => [ - 'type' => 'language', - 'renderType' => 'selectSingle', - ], - ], - 'l10n_parent' => [ - 'displayCond' => 'FIELD:sys_language_uid:>:0', - 'label' => 'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent', - 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', - 'items' => [ - [ - 'label' => '', - 'value' => 0, - ], - ], - 'foreign_table' => 'tx_headless_item', - 'foreign_table_where' => 'AND tx_headless_item.uid=###REC_FIELD_l10n_parent### AND tx_headless_item.sys_language_uid IN (-1,0)', - 'default' => 0, - ], - ], - 'l10n_diffsource' => [ - 'config' => [ - 'type' => 'passthrough', - 'default' => '', - ], - ], - 'l10n_source' => [ - 'config' => [ - 'type' => 'passthrough', - ], - ], - 'hidden' => [ - 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', - 'config' => [ - 'type' => 'check', - 'default' => 0, - ], - ], - 'starttime' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', - 'config' => [ - 'type' => 'datetime', - 'default' => 0, - ], - 'l10n_mode' => 'exclude', - 'l10n_display' => 'defaultAsReadonly', - ], - 'endtime' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', + 'foreign_table' => [ 'config' => [ - 'type' => 'datetime', - 'default' => 0, - 'range' => [ - 'upper' => mktime(0, 0, 0, 1, 1, 2038), - ], + 'eval' => 'trim', + 'size' => 30, + 'type' => 'input', ], 'l10n_mode' => 'exclude', - 'l10n_display' => 'defaultAsReadonly', ], 'foreign_uid' => [ - 'exclude' => true, 'config' => [ 'allowed' => '', - 'type' => 'group', - 'size' => 1, 'maxitems' => 1, 'minitems' => 0, + 'size' => 1, + 'type' => 'group', ], + 'exclude' => true, ], - 'foreign_table' => [ - 'l10n_mode' => 'exclude', + 'header' => [ 'config' => [ + 'max' => 256, + 'size' => 50, 'type' => 'input', - 'size' => 30, - 'eval' => 'trim', - ], - ], - 'tx_headless_item' => [ - 'exclude' => 0, - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:tx_headless_item', - 'config' => [ - 'type' => 'inline', - 'foreign_table' => 'tx_headless_item', - 'foreign_field' => 'foreign_uid', - 'foreign_table_field' => 'foreign_table', ], - ], - 'header' => [ - 'l10n_mode' => 'prefixLangTitle', 'l10n_cat' => 'text', + 'l10n_mode' => 'prefixLangTitle', 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header', - 'config' => [ - 'type' => 'input', - 'size' => 50, - 'max' => 256, - ], ], 'header_layout' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.type', 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', + 'default' => 0, 'items' => [ [ 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_item.xlf:columns.header_layout.text', @@ -199,15 +122,23 @@ 'value' => '100', ], ], - 'default' => 0, + 'renderType' => 'selectSingle', + 'type' => 'select', ], + 'exclude' => true, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.type', ], - 'header_position' => [ - 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position', + 'header_link' => [ + 'config' => [ + 'size' => 50, + 'type' => 'link', + ], 'exclude' => true, + 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link', + ], + 'header_position' => [ 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', + 'default' => '', 'items' => [ [ 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.default_value', @@ -226,51 +157,57 @@ 'value' => 'left', ], ], - 'default' => '', + 'renderType' => 'selectSingle', + 'type' => 'select', ], - ], - 'header_link' => [ 'exclude' => true, - 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link', + 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position', + ], + 'hidden' => [ 'config' => [ - 'type' => 'link', - 'size' => 50, + 'default' => 0, + 'type' => 'check', ], + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', ], - 'subheader' => [ - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.subheader', + 'image' => [ 'config' => [ - 'type' => 'input', - 'size' => 50, - 'max' => 256, - 'softref' => 'email[subst]', + 'allowed' => 'common-image-types', + 'type' => 'file', ], + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.images', ], - 'title' => [ - 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_item.xlf:columns.title', + 'l10n_diffsource' => [ 'config' => [ - 'type' => 'input', - 'size' => 50, - 'max' => 256, + 'default' => '', + 'type' => 'passthrough', ], ], - 'bodytext' => [ - 'l10n_mode' => 'prefixLangTitle', - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.text', + 'l10n_parent' => [ 'config' => [ - 'type' => 'text', - 'cols' => 80, - 'rows' => 10, - 'softref' => 'typolink_tag,email[subst],url', - 'enableRichtext' => true, + 'default' => 0, + 'foreign_table' => 'tx_headless_item', + 'foreign_table_where' => 'AND tx_headless_item.uid=###REC_FIELD_l10n_parent### AND tx_headless_item.sys_language_uid IN (-1,0)', + 'items' => [ + [ + 'label' => '', + 'value' => 0, + ], + ], + 'renderType' => 'selectSingle', + 'type' => 'select', ], + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'label' => 'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent', ], - 'space_before_class' => [ - 'exclude' => true, - 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:space_before_class', + 'l10n_source' => [ 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', + 'type' => 'passthrough', + ], + ], + 'space_after_class' => [ + 'config' => [ + 'default' => '', 'items' => [ [ 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.default_value', @@ -297,15 +234,15 @@ 'value' => 'extra-large', ], ], - 'default' => '', + 'renderType' => 'selectSingle', + 'type' => 'select', ], - ], - 'space_after_class' => [ 'exclude' => true, 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:space_after_class', + ], + 'space_before_class' => [ 'config' => [ - 'type' => 'select', - 'renderType' => 'selectSingle', + 'default' => '', 'items' => [ [ 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.default_value', @@ -332,18 +269,98 @@ 'value' => 'extra-large', ], ], - 'default' => '', + 'renderType' => 'selectSingle', + 'type' => 'select', ], + 'exclude' => true, + 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:space_before_class', ], - 'image' => [ - 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.images', + 'starttime' => [ 'config' => [ - 'type' => 'file', - 'allowed' => 'common-image-types', + 'default' => 0, + 'type' => 'datetime', ], + 'exclude' => true, + 'l10n_display' => 'defaultAsReadonly', + 'l10n_mode' => 'exclude', + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', + ], + 'subheader' => [ + 'config' => [ + 'max' => 256, + 'size' => 50, + 'softref' => 'email[subst]', + 'type' => 'input', + ], + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.subheader', + ], + 'sys_language_uid' => [ + 'config' => [ + 'renderType' => 'selectSingle', + 'type' => 'language', + ], + 'label' => 'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.language', + ], + 'title' => [ + 'config' => [ + 'max' => 256, + 'size' => 50, + 'type' => 'input', + ], + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_item.xlf:columns.title', + ], + 'tx_headless_item' => [ + 'config' => [ + 'foreign_field' => 'foreign_uid', + 'foreign_table' => 'tx_headless_item', + 'foreign_table_field' => 'foreign_table', + 'type' => 'inline', + ], + 'exclude' => 0, + 'label' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:tx_headless_item', ], ], + 'ctrl' => [ + 'crdate' => 'crdate', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'endtime' => 'endtime', + 'starttime' => 'starttime', + ], + 'hideTable' => true, + 'iconfile' => 'EXT:core/Resources/Public/Icons/T3Icons/svgs/actions/actions-folder.svg', + 'label' => 'header', + 'label_alt' => 'subheader,bodytext', + 'languageField' => 'sys_language_uid', + 'searchFields' => 'header,subheader,bodytext', + 'security' => [ + 'ignorePageTypeRestriction' => true, + ], + 'sortby' => 'sorting', + 'title' => 'LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_item.xlf:title', + 'translationSource' => 'l10n_source', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'transOrigPointerField' => 'l10n_parent', + 'tstamp' => 'tstamp', + 'versioningWS' => true, + ], 'palettes' => [ + + 'access' => [ + 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access', + 'showitem' => ' + starttime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:starttime_formlabel, + endtime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:endtime_formlabel, + ', + ], + 'frames' => [ + 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames', + 'showitem' => ' + space_before_class;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:space_before_class_formlabel, + space_after_class;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:space_after_class_formlabel, + ', + ], 'header' => [ 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.headers', 'showitem' => ' @@ -376,25 +393,10 @@ ', ], - 'access' => [ - 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access', - 'showitem' => ' - starttime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:starttime_formlabel, - endtime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:endtime_formlabel, - ', - ], - 'frames' => [ - 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames', - 'showitem' => ' - space_before_class;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:space_before_class_formlabel, - space_after_class;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:space_after_class_formlabel, - ', - ], - // hidden but needs to be included all the time, so sys_language_uid is set correctly 'hiddenLanguagePalette' => [ - 'showitem' => 'sys_language_uid, l10n_parent', 'isHiddenPalette' => true, + 'showitem' => 'sys_language_uid, l10n_parent', ], ], 'types' => [ diff --git a/Configuration/TSConfig/Page/BackendLayouts/default.tsconfig b/Configuration/TSConfig/Page/BackendLayouts/default.tsconfig index 65c19a0..e0249f3 100644 --- a/Configuration/TSConfig/Page/BackendLayouts/default.tsconfig +++ b/Configuration/TSConfig/Page/BackendLayouts/default.tsconfig @@ -13,9 +13,6 @@ mod { 1 { name = LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_bl.xlf:column.above_breadcrumbs colPos = 1687238554 - disallowed { - CType = footer_content - } } } } @@ -24,9 +21,6 @@ mod { 1 { name = LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_bl.xlf:column.main colPos = 0 - disallowed { - CType = footer_content - } } } } diff --git a/Configuration/TSConfig/Page/BackendLayouts/root.tsconfig b/Configuration/TSConfig/Page/BackendLayouts/root.tsconfig index 8e2c726..b895df4 100644 --- a/Configuration/TSConfig/Page/BackendLayouts/root.tsconfig +++ b/Configuration/TSConfig/Page/BackendLayouts/root.tsconfig @@ -6,28 +6,13 @@ mod { config { backend_layout { colCount = 1 - rowCount = 2 + rowCount = 1 rows { 1 { columns { 1 { name = LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_bl.xlf:column.main colPos = 0 - disallowed { - CType = footer_content - } - } - } - } - 2 { - columns { - 1 { - name = LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_bl.xlf:column.footer - colPos = 1687238527 - allowed { - CType = footer_content - } - maxitems = 1 } } } diff --git a/Configuration/TSConfig/Page/TCEFORM.tsconfig b/Configuration/TSConfig/Page/TCEFORM.tsconfig index cb30e18..f1a4f87 100644 --- a/Configuration/TSConfig/Page/TCEFORM.tsconfig +++ b/Configuration/TSConfig/Page/TCEFORM.tsconfig @@ -7,21 +7,22 @@ TCEFORM { tt_content { assets.types { textmedia.config.maxitems = 1 + textmedia.config.minitems = 1 } bullets_type { keepItems = 0,1 } cols.disabled = 1 CType { + keepItems = "" altLabels.image = LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ce.xlf:image.title } frame_class.disabled = 1 - header.types { - footer_content.label = LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ttc.xlf:header.label.backendOnly - } image.types { image.config.maxitems = 1 + image.config.minitems = 1 textpic.config.maxitems = 1 + textpic.config.minitems = 1 } imagecols.types { textpic { @@ -65,7 +66,6 @@ TCEFORM { } } linkToTop.disabled = 1 - media.disabled = 1 sectionIndex.disabled = 1 // wait for this issue to be resolved: https://forge.typo3.org/issues/100775 // Workaround in tt_content.php diff --git a/Configuration/TSConfig/Page/WizardItems.tsconfig b/Configuration/TSConfig/Page/WizardItems.tsconfig index 0a620c0..f5daaf1 100644 --- a/Configuration/TSConfig/Page/WizardItems.tsconfig +++ b/Configuration/TSConfig/Page/WizardItems.tsconfig @@ -9,14 +9,6 @@ mod.wizards.newContentElement.wizardItems { CType = accordion } } - footer_content { - iconIdentifier = content-footer - title = LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ce.xlf:footer_content.title - description = LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ce.xlf:footer_content.description - tt_content_defValues { - CType = footer_content - } - }, // Element already exsists, only modify title and description image { title = LLL:EXT:rmnd_headless/Resources/Private/Language/locallang_ce.xlf:image.title @@ -40,7 +32,6 @@ mod.wizards.newContentElement.wizardItems { } } show := addToList(accordion) - show := addToList(footer_content) show := addToList(image_gallery) show := addToList(tabs) } diff --git a/Configuration/TypoScript/Configuration/InitialDataConfiguration.typoscript b/Configuration/TypoScript/Configuration/InitialDataConfiguration.typoscript index 9cca5c0..66e4a8c 100644 --- a/Configuration/TypoScript/Configuration/InitialDataConfiguration.typoscript +++ b/Configuration/TypoScript/Configuration/InitialDataConfiguration.typoscript @@ -16,15 +16,15 @@ initialData { } } } - footer = CONTENT + footer = JSON footer { - table = tt_content - select { - orderBy = sorting - where = {#colPos} = 1687238527 - max = 1 + dataProcessing { + 10 = Remind\Headless\DataProcessing\FlexFormProcessor + 10 { + fieldName = tx_headless_footer + as = flexform + } } - slide = -1 } } } diff --git a/Configuration/TypoScript/Configuration/PageConfiguration.typoscript b/Configuration/TypoScript/Configuration/PageConfiguration.typoscript new file mode 100644 index 0000000..4eb7bd2 --- /dev/null +++ b/Configuration/TypoScript/Configuration/PageConfiguration.typoscript @@ -0,0 +1,16 @@ +page { + 10 { + fields { + media { + dataProcessing { + 10 { + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 0 + } + } + } + } + } + } +} diff --git a/Configuration/TypoScript/ContentElement/FooterContent.typoscript b/Configuration/TypoScript/ContentElement/FooterContent.typoscript deleted file mode 100644 index ec99ef8..0000000 --- a/Configuration/TypoScript/ContentElement/FooterContent.typoscript +++ /dev/null @@ -1,10 +0,0 @@ -tt_content.footer_content = JSON -tt_content.footer_content { - dataProcessing { - 10 = Remind\Headless\DataProcessing\FlexFormProcessor - 10 { - fieldName = pi_flexform - as = flexform - } - } -} diff --git a/Configuration/TypoScript/ContentElement/Image.typoscript b/Configuration/TypoScript/ContentElement/Image.typoscript index 465ade9..71acfe6 100644 --- a/Configuration/TypoScript/ContentElement/Image.typoscript +++ b/Configuration/TypoScript/ContentElement/Image.typoscript @@ -3,13 +3,14 @@ tt_content.image { content { fields { gallery > - images = TEXT - images { + image = TEXT + image { dataProcessing { 10 = FriendsOfTYPO3\Headless\DataProcessing\FilesProcessor 10 { references.fieldName = image as = files + processingConfiguration < lib.assetProcessingConfiguration } } } diff --git a/Configuration/TypoScript/ContentElement/ImageGallery.typoscript b/Configuration/TypoScript/ContentElement/ImageGallery.typoscript index fa40a00..6518ed8 100644 --- a/Configuration/TypoScript/ContentElement/ImageGallery.typoscript +++ b/Configuration/TypoScript/ContentElement/ImageGallery.typoscript @@ -10,6 +10,10 @@ tt_content.image_gallery { 10 { references.fieldName = image as = files + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 0 + } } } } diff --git a/Configuration/TypoScript/ContentElement/ImageOrient.typoscript b/Configuration/TypoScript/ContentElement/ImageOrient.typoscript new file mode 100644 index 0000000..2114907 --- /dev/null +++ b/Configuration/TypoScript/ContentElement/ImageOrient.typoscript @@ -0,0 +1,19 @@ +lib.imageOrient = COA +lib.imageOrient { + 10 = TEXT + 10 { + if { + value = 25 + equals.field = imageorient + } + value = right + } + 20 = TEXT + 20 { + if { + value = 26 + equals.field = imageorient + } + value = left + } +} diff --git a/Configuration/TypoScript/ContentElement/Items.typoscript b/Configuration/TypoScript/ContentElement/Items.typoscript index ec26749..1ede775 100644 --- a/Configuration/TypoScript/ContentElement/Items.typoscript +++ b/Configuration/TypoScript/ContentElement/Items.typoscript @@ -59,13 +59,17 @@ lib.items { parseFunc =< lib.parseFunc_links } items =< lib.items - images = TEXT - images { + image = TEXT + image { dataProcessing { 10 = FriendsOfTYPO3\Headless\DataProcessing\FilesProcessor 10 { references.fieldName = image as = files + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 1 + } } } } diff --git a/Configuration/TypoScript/ContentElement/MenuAbstract.typoscript b/Configuration/TypoScript/ContentElement/MenuAbstract.typoscript new file mode 100644 index 0000000..f29b5ee --- /dev/null +++ b/Configuration/TypoScript/ContentElement/MenuAbstract.typoscript @@ -0,0 +1,22 @@ +tt_content.menu_abstract { + fields { + content { + fields { + menu { + dataProcessing { + 10 { + dataProcessing { + 10 { + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 0 + } + } + } + } + } + } + } + } + } +} diff --git a/Configuration/TypoScript/ContentElement/MenuCategorizedPages.typoscript b/Configuration/TypoScript/ContentElement/MenuCategorizedPages.typoscript new file mode 100644 index 0000000..80cae87 --- /dev/null +++ b/Configuration/TypoScript/ContentElement/MenuCategorizedPages.typoscript @@ -0,0 +1,22 @@ +tt_content.menu_categorized_pages { + fields { + content { + fields { + menu { + dataProcessing { + 10 { + dataProcessing { + 10 { + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 0 + } + } + } + } + } + } + } + } + } +} diff --git a/Configuration/TypoScript/ContentElement/MenuRecentlyUpdated.typoscript b/Configuration/TypoScript/ContentElement/MenuRecentlyUpdated.typoscript new file mode 100644 index 0000000..fadb9f0 --- /dev/null +++ b/Configuration/TypoScript/ContentElement/MenuRecentlyUpdated.typoscript @@ -0,0 +1,22 @@ +tt_content.menu_recently_updated { + fields { + content { + fields { + menu { + dataProcessing { + 10 { + dataProcessing { + 10 { + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 0 + } + } + } + } + } + } + } + } + } +} diff --git a/Configuration/TypoScript/ContentElement/MenuRelatedPages.typoscript b/Configuration/TypoScript/ContentElement/MenuRelatedPages.typoscript new file mode 100644 index 0000000..4a88455 --- /dev/null +++ b/Configuration/TypoScript/ContentElement/MenuRelatedPages.typoscript @@ -0,0 +1,22 @@ +tt_content.menu_related_pages { + fields { + content { + fields { + menu { + dataProcessing { + 10 { + dataProcessing { + 10 { + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 0 + } + } + } + } + } + } + } + } + } +} diff --git a/Configuration/TypoScript/ContentElement/MenuSitemap.typoscript b/Configuration/TypoScript/ContentElement/MenuSitemap.typoscript new file mode 100644 index 0000000..eb423ad --- /dev/null +++ b/Configuration/TypoScript/ContentElement/MenuSitemap.typoscript @@ -0,0 +1,22 @@ +tt_content.menu_sitemap { + fields { + content { + fields { + menu { + dataProcessing { + 10 { + dataProcessing { + 10 { + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 0 + } + } + } + } + } + } + } + } + } +} diff --git a/Configuration/TypoScript/ContentElement/MenuSitemapPages.typoscript b/Configuration/TypoScript/ContentElement/MenuSitemapPages.typoscript new file mode 100644 index 0000000..fc57add --- /dev/null +++ b/Configuration/TypoScript/ContentElement/MenuSitemapPages.typoscript @@ -0,0 +1,22 @@ +tt_content.menu_sitemap_pages { + fields { + content { + fields { + menu { + dataProcessing { + 10 { + dataProcessing { + 10 { + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 0 + } + } + } + } + } + } + } + } + } +} diff --git a/Configuration/TypoScript/ContentElement/Textmedia.typoscript b/Configuration/TypoScript/ContentElement/Textmedia.typoscript index 85a0a10..99c6e80 100644 --- a/Configuration/TypoScript/ContentElement/Textmedia.typoscript +++ b/Configuration/TypoScript/ContentElement/Textmedia.typoscript @@ -2,38 +2,21 @@ tt_content.textmedia { fields { content { fields { + gallery > ratio = TEXT ratio { field = imagecols intval = 1 } - assetPosition = COA - assetPosition { - 10 = TEXT - 10 { - if { - value = 25 - equals.field = imageorient - } - value = right - } - 20 = TEXT - 20 { - if { - value = 26 - equals.field = imageorient - } - value = left - } - } - gallery > - assets = TEXT - assets { + mediaPosition =< lib.imageOrient + media = TEXT + media { dataProcessing { 10 = FriendsOfTYPO3\Headless\DataProcessing\FilesProcessor 10 { references.fieldName = assets as = files + processingConfiguration < lib.assetProcessingConfiguration } } } diff --git a/Configuration/TypoScript/ContentElement/Textpic.typoscript b/Configuration/TypoScript/ContentElement/Textpic.typoscript index 2ef3147..b0efcc2 100644 --- a/Configuration/TypoScript/ContentElement/Textpic.typoscript +++ b/Configuration/TypoScript/ContentElement/Textpic.typoscript @@ -1,13 +1,22 @@ -tt_content.textpic =< tt_content.textmedia tt_content.textpic { fields { content { fields { gallery > - assets { + ratio = TEXT + ratio { + field = imagecols + intval = 1 + } + imagePosition =< lib.imageOrient + image = TEXT + image { dataProcessing { + 10 = FriendsOfTYPO3\Headless\DataProcessing\FilesProcessor 10 { references.fieldName = image + as = files + processingConfiguration < lib.assetProcessingConfiguration } } } diff --git a/Configuration/TypoScript/ContentElement/Uploads.typoscript b/Configuration/TypoScript/ContentElement/Uploads.typoscript new file mode 100644 index 0000000..ec64c9d --- /dev/null +++ b/Configuration/TypoScript/ContentElement/Uploads.typoscript @@ -0,0 +1,18 @@ +tt_content.uploads { + fields { + content { + fields { + media { + dataProcessing { + 10 { + processingConfiguration < lib.assetProcessingConfiguration + processingConfiguration { + returnFlattenObject = 0 + } + } + } + } + } + } + } +} diff --git a/Configuration/TypoScript/Extensions/tx_form.typoscript b/Configuration/TypoScript/Extensions/tx_form.typoscript index 5c4bd13..0e36eff 100644 --- a/Configuration/TypoScript/Extensions/tx_form.typoscript +++ b/Configuration/TypoScript/Extensions/tx_form.typoscript @@ -1,9 +1,7 @@ plugin.tx_form { settings { yamlConfigurations { - 100 = EXT:rmnd_headless/Configuration/Form/BaseSetup.yaml - 101 = EXT:rmnd_headless/Configuration/Form/FormElementSize.yaml - 102 = EXT:rmnd_headless/Configuration/Form/JsonRedirectFinisher.yaml + 1731482571 = EXT:rmnd_headless/Configuration/Form/BaseSetup.yaml } } } @@ -11,9 +9,7 @@ plugin.tx_form { module.tx_form { settings { yamlConfigurations { - 100 = EXT:rmnd_headless/Configuration/Form/BaseSetup.yaml - 101 = EXT:rmnd_headless/Configuration/Form/FormElementSize.yaml - 102 = EXT:rmnd_headless/Configuration/Form/JsonRedirectFinisher.yaml + 1731482571 = EXT:rmnd_headless/Configuration/Form/BaseSetup.yaml } } } \ No newline at end of file diff --git a/Configuration/TypoScript/Helpers/AssetProcessingConfiguration.typoscript b/Configuration/TypoScript/Helpers/AssetProcessingConfiguration.typoscript new file mode 100644 index 0000000..85a8202 --- /dev/null +++ b/Configuration/TypoScript/Helpers/AssetProcessingConfiguration.typoscript @@ -0,0 +1,12 @@ +lib.assetProcessingConfiguration { + returnFlattenObject = 1 + legacyReturn = 0 + linkResult = 1 + delayProcessing = 1 + properties { + byType = 1 + defaultFieldsByType = uidLocal,fileReferenceUid,type,extension,title,description,tx_headless_lazy_loading as lazyLoading + defaultImageFields = alternative,link,dimensions + defaultVideoFields = autoplay + } +} \ No newline at end of file diff --git a/Configuration/TypoScript/Page/Meta.typoscript b/Configuration/TypoScript/Page/Meta.typoscript index 191e386..19834c5 100644 --- a/Configuration/TypoScript/Page/Meta.typoscript +++ b/Configuration/TypoScript/Page/Meta.typoscript @@ -1,22 +1,27 @@ -lib.meta { - fields { - ogTitle { - stdWrap.ifEmpty.cObject { - field = seo_title +page { + // can be removed in future version of EXT:headless, see https://github.com/TYPO3-Headless/headless/releases/tag/v4.4.0 + 10 { + fields { + meta > + } + } + + meta { + og:title = TEXT + og:title { + field = seo_title stdWrap.ifEmpty.cObject = TEXT stdWrap.ifEmpty.cObject { field = title } - } } - twitterTitle { - stdWrap.ifEmpty.cObject { - field = seo_title + twitter:title = TEXT + twitter:title { + field = seo_title stdWrap.ifEmpty.cObject = TEXT stdWrap.ifEmpty.cObject { field = title } - } } } } diff --git a/Configuration/TypoScript/setup.typoscript b/Configuration/TypoScript/setup.typoscript index a2516fb..d729bd2 100644 --- a/Configuration/TypoScript/setup.typoscript +++ b/Configuration/TypoScript/setup.typoscript @@ -1,4 +1,5 @@ @import 'EXT:headless/Configuration/TypoScript/setup.typoscript' +@import 'EXT:rmnd_headless/Configuration/TypoScript/Helpers/*.typoscript' @import 'EXT:rmnd_headless/Configuration/TypoScript/Configuration/*.typoscript' @import 'EXT:rmnd_headless/Configuration/TypoScript/ContentElement/*.typoscript' @import 'EXT:rmnd_headless/Configuration/TypoScript/Extensions/*.typoscript' diff --git a/README.md b/README.md index 39495cd..0c1ec65 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Use comoser to install the extension using `composer install remind/headless`. I Add the following to your site config: ```yaml -headless: true +headless: 1 ``` ## Dependencies @@ -29,11 +29,7 @@ Required dependencies are [headless](https://github.com/TYPO3-Headless/headless) ### Default -The default layout consists of 1 column with 3 rows. Besides the main content (colPos = 0) there is also one column for content above the breadcrumbs (colPos = 1) and the footer (colPos = 10). - -The [content defender](https://extensions.typo3.org/extension/content_defender) extension is used to only allow exactly one footer_content content element in the footer column. The footer_content content element can not be used in the other columns. - - +The default layout consists of 1 column with 2 rows. Besides the main content (colPos = 0) there is also one column for content above the breadcrumbs (colPos = 1). ## TCA @@ -126,6 +122,14 @@ Similar to `space_before_inside`. ### pages +#### tx_headless_footer + +The `tx_headless_footer` flexform field contains the footer content. Use the following code to set a flexform: + +```php +\Remind\Headless\Utility::setFooterFlexForm('FILE:EXT:provider_extension/Configuration/FlexForms/Footer.xml'); +``` + #### tx_headless_overview_label An `tx_headless_overview_label` field is added to the page TCA. The field should be used to customize the label for the overview pages. @@ -177,18 +181,6 @@ $GLOBALS['TCA']['tt_content']['types']['accordion']['columnsOverrides']['tx_head Uses `tx_headless_item`, items consist of text (header, subheader, bodytext, title), a flexform field and images. -### footer_content - -Basic definition without any actual content fields. Add a flexform in your provider extension to use `footer_content`: - -```php -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue( - '*', - 'FILE:EXT:provider_extension/Configuration/FlexForms/FooterContent.xml', - 'footer_content' -); -``` - ### tabs Uses `tx_headless_item`, items consist of text (header, subheader, bodytext) only. diff --git a/Resources/Private/Language/de.locallang_bl.xlf b/Resources/Private/Language/de.locallang_bl.xlf index f902e64..bf17b80 100644 --- a/Resources/Private/Language/de.locallang_bl.xlf +++ b/Resources/Private/Language/de.locallang_bl.xlf @@ -9,9 +9,6 @@ Über Breadcrumbs - - Fußzeile - Standard diff --git a/Resources/Private/Language/de.locallang_ce.xlf b/Resources/Private/Language/de.locallang_ce.xlf index 00e1184..ca81028 100644 --- a/Resources/Private/Language/de.locallang_ce.xlf +++ b/Resources/Private/Language/de.locallang_ce.xlf @@ -12,12 +12,6 @@ Akkordion Titel - - Content Element zur Benutzung in Fußzeile - - - Fußzeile Inhalt - Einzelnes Bild diff --git a/Resources/Private/Language/de.locallang_form.xlf b/Resources/Private/Language/de.locallang_form.xlf index a8e1e5b..12b1262 100644 --- a/Resources/Private/Language/de.locallang_form.xlf +++ b/Resources/Private/Language/de.locallang_form.xlf @@ -12,12 +12,36 @@ Pflichtfeld Hinweis + + Links + + + Link Text + + + Seite + Größe Gesamte Breite + + Sehr klein + + + Klein + + + Mittel + + + Groß + + + Sehr groß + \ No newline at end of file diff --git a/Resources/Private/Language/de.locallang_pages.xlf b/Resources/Private/Language/de.locallang_pages.xlf index cdde7ef..de5f5e4 100644 --- a/Resources/Private/Language/de.locallang_pages.xlf +++ b/Resources/Private/Language/de.locallang_pages.xlf @@ -9,6 +9,9 @@ Keine + + Footer + Page Config diff --git a/Resources/Private/Language/de.locallang_ttc.xlf b/Resources/Private/Language/de.locallang_ttc.xlf index 3b9af48..c8c7fab 100644 --- a/Resources/Private/Language/de.locallang_ttc.xlf +++ b/Resources/Private/Language/de.locallang_ttc.xlf @@ -12,25 +12,28 @@ Hintergrund über gesamte Breite - + + Cookies + + Cookie Kategorie - + Keine - + Notwendig - + Präferenzen - + Statistiken - + Marketing - + Cookie Meldung diff --git a/Resources/Private/Language/locallang_bl.xlf b/Resources/Private/Language/locallang_bl.xlf index bd423da..b33805d 100644 --- a/Resources/Private/Language/locallang_bl.xlf +++ b/Resources/Private/Language/locallang_bl.xlf @@ -9,9 +9,6 @@ Above Breadcrumbs - - Footer - Default diff --git a/Resources/Private/Language/locallang_ce.xlf b/Resources/Private/Language/locallang_ce.xlf index 3e81207..6aea4f2 100644 --- a/Resources/Private/Language/locallang_ce.xlf +++ b/Resources/Private/Language/locallang_ce.xlf @@ -12,12 +12,6 @@ Accordion Title - - Content Element to be used in Footer - - - Footer Content - One Image only diff --git a/Resources/Private/Language/locallang_form.xlf b/Resources/Private/Language/locallang_form.xlf index 18eaea3..7f3b871 100644 --- a/Resources/Private/Language/locallang_form.xlf +++ b/Resources/Private/Language/locallang_form.xlf @@ -12,12 +12,36 @@ Required field hint + + Links + + + Link Text + + + Page + Size Full Width + + Extra small + + + Small + + + Medium + + + Large + + + Extra large + \ No newline at end of file diff --git a/Resources/Private/Language/locallang_pages.xlf b/Resources/Private/Language/locallang_pages.xlf index 98ada48..6e4baed 100644 --- a/Resources/Private/Language/locallang_pages.xlf +++ b/Resources/Private/Language/locallang_pages.xlf @@ -9,6 +9,9 @@ None + + Footer + Page Config diff --git a/Resources/Private/Language/locallang_ttc.xlf b/Resources/Private/Language/locallang_ttc.xlf index b1d6eb3..03d4f8e 100644 --- a/Resources/Private/Language/locallang_ttc.xlf +++ b/Resources/Private/Language/locallang_ttc.xlf @@ -12,25 +12,28 @@ Full Width Background - + + Cookies + + Cookie Category - + None - + Necessary - + Preferences - + Statistics - + Marketing - + Cookie Message diff --git a/Resources/Public/Icons/content-footer.svg b/Resources/Public/Icons/content-footer.svg deleted file mode 100644 index 4eab41e..0000000 --- a/Resources/Public/Icons/content-footer.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - diff --git a/Tests/Unit/.gitkeep b/Tests/Unit/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/Tests/Unit/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/composer.json b/composer.json index 977bf95..307279b 100644 --- a/composer.json +++ b/composer.json @@ -26,23 +26,26 @@ "config": { "optimize-autoloader": true, "apcu-autoloader": true, - "vendor-dir": ".build/vendor", - "bin-dir": ".build/bin", "sort-packages": true, "allow-plugins": { "typo3/cms-composer-installers": true, "typo3/class-alias-loader": true, - "dealerdirect/phpcodesniffer-composer-installer": true + "dealerdirect/phpcodesniffer-composer-installer": true, + "phpstan/extension-installer": true } }, "require": { - "ichhabrecht/content-defender":"^3.4", "php": "^8.2", "typo3/cms-core": "^12.4", - "friendsoftypo3/headless": "^4.2" + "friendsoftypo3/headless": "^4.4" }, "require-dev": { "apache-solr-for-typo3/solr": "^12.0", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^1.11", + "remind/coding-standard": "^1.0", + "saschaegerer/phpstan-typo3": "^1.10", "slevomat/coding-standard": "^8.14", "squizlabs/php_codesniffer": "^3.7" }, @@ -50,13 +53,16 @@ "prefer-stable": true, "extra": { "typo3/cms": { - "cms-package-dir": "{$vendor-dir}/typo3/cms", - "web-dir": ".build/web", "extension-key": "rmnd_headless" } }, "scripts": { - "phpcs": "@php ./.build/vendor/squizlabs/php_codesniffer/bin/phpcs --standard=.build/phpcs.xml --extensions=php --ignore=.build --report=full -n .", - "phpcbf": "@php ./.build/vendor/squizlabs/php_codesniffer/bin/phpcbf --standard=.build/phpcs.xml --extensions=php --ignore=.build ." + "phpcs": "@php ./vendor/bin/phpcs --standard=phpcs.xml --extensions=php --report=full -n .", + "phpcbf": "@php ./vendor/bin/phpcbf --standard=phpcs.xml --extensions=php .", + "phpstan": "@php ./vendor/bin/phpstan analyse -c phpstan.neon", + "static-analysis": [ + "@composer phpcs", + "@composer phpstan" + ] } } diff --git a/composer.lock b/composer.lock index ba866d9..b088926 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "af73ec62fb52a797c7ff72061700239b", + "content-hash": "fe4e24ca0ae307db7ae9ed4e8d5c4984", "packages": [ { "name": "bacon/bacon-qr-code", @@ -121,23 +121,23 @@ }, { "name": "dasprid/enum", - "version": "1.0.5", + "version": "1.0.6", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016" + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6faf451159fb8ba4126b925ed2d78acfce0dc016", - "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", "shasum": "" }, "require": { "php": ">=7.1 <9.0" }, "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", "squizlabs/php_codesniffer": "*" }, "type": "library", @@ -165,22 +165,22 @@ ], "support": { "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.5" + "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" }, - "time": "2023-08-25T16:18:39+00:00" + "time": "2024-08-09T14:30:48+00:00" }, { "name": "doctrine/annotations", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/901c2ee5d26eb64ff43c47976e114bf00843acf7", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7", "shasum": "" }, "require": { @@ -192,10 +192,10 @@ "require-dev": { "doctrine/cache": "^2.0", "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.0", + "phpstan/phpstan": "^1.10.28", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^5.4 || ^6", - "vimeo/psalm": "^4.10" + "symfony/cache": "^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" }, "suggest": { "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" @@ -241,9 +241,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.1" + "source": "https://github.com/doctrine/annotations/tree/2.0.2" }, - "time": "2023-02-02T22:02:53+00:00" + "time": "2024-09-05T10:17:24+00:00" }, { "name": "doctrine/cache", @@ -340,16 +340,16 @@ }, { "name": "doctrine/dbal", - "version": "3.7.2", + "version": "3.9.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" + "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", - "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", + "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", "shasum": "" }, "require": { @@ -365,14 +365,14 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.42", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.13", + "phpstan/phpstan": "1.12.0", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "9.6.20", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4|^6.0", - "symfony/console": "^4.4|^5.4|^6.0", + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0", "vimeo/psalm": "4.30.0" }, "suggest": { @@ -433,7 +433,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.2" + "source": "https://github.com/doctrine/dbal/tree/3.9.1" }, "funding": [ { @@ -449,20 +449,20 @@ "type": "tidelift" } ], - "time": "2023-11-19T08:06:58+00:00" + "time": "2024-09-01T13:49:23+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { @@ -494,22 +494,22 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.2" + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "time": "2023-09-27T20:04:15+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "doctrine/event-manager", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", "shasum": "" }, "require": { @@ -519,10 +519,10 @@ "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^12", "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.28" + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" }, "type": "library", "autoload": { @@ -571,7 +571,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.0" + "source": "https://github.com/doctrine/event-manager/tree/2.0.1" }, "funding": [ { @@ -587,7 +587,7 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:59:15+00:00" + "time": "2024-05-22T20:47:39+00:00" }, { "name": "doctrine/instantiator", @@ -661,27 +661,27 @@ }, { "name": "doctrine/lexer", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -718,7 +718,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -734,7 +734,7 @@ "type": "tidelift" } ], - "time": "2022-12-15T16:57:16+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "egulias/email-validator", @@ -805,25 +805,25 @@ }, { "name": "enshrined/svg-sanitize", - "version": "0.15.4", + "version": "0.18.0", "source": { "type": "git", "url": "https://github.com/darylldoyle/svg-sanitizer.git", - "reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4" + "reference": "6a2c069dab3843ca4d887ff09c972fc7033888d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/e50b83a2f1f296ca61394fe88fbfe3e896a84cf4", - "reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/6a2c069dab3843ca4d887ff09c972fc7033888d0", + "reference": "6a2c069dab3843ca4d887ff09c972fc7033888d0", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^7.0 || ^8.0" + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.5 || ^8.5" + "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5" }, "type": "library", "autoload": { @@ -844,32 +844,32 @@ "description": "An SVG sanitizer for PHP", "support": { "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", - "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.15.4" + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.18.0" }, - "time": "2022-02-21T09:13:59+00:00" + "time": "2024-02-22T17:51:05+00:00" }, { "name": "firebase/php-jwt", - "version": "v6.9.0", + "version": "v6.10.1", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "f03270e63eaccf3019ef0f32849c497385774e11" + "reference": "500501c2ce893c824c801da135d02661199f60c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/f03270e63eaccf3019ef0f32849c497385774e11", - "reference": "f03270e63eaccf3019ef0f32849c497385774e11", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", + "reference": "500501c2ce893c824c801da135d02661199f60c5", "shasum": "" }, "require": { - "php": "^7.4||^8.0" + "php": "^8.0" }, "require-dev": { - "guzzlehttp/guzzle": "^6.5||^7.4", + "guzzlehttp/guzzle": "^7.4", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "psr/cache": "^1.0||^2.0", + "psr/cache": "^2.0||^3.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0" }, @@ -907,22 +907,22 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.9.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" }, - "time": "2023-10-05T00:24:42+00:00" + "time": "2024-05-18T18:05:11+00:00" }, { "name": "friendsoftypo3/headless", - "version": "v4.2.2", + "version": "v4.4.0", "source": { "type": "git", "url": "https://github.com/TYPO3-Headless/headless.git", - "reference": "686dc4492d92b68e2a9dd20a181b7725f3d0ae6c" + "reference": "73c0eb956c424e1465cc9f59e4e50ef33228d661" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-Headless/headless/zipball/686dc4492d92b68e2a9dd20a181b7725f3d0ae6c", - "reference": "686dc4492d92b68e2a9dd20a181b7725f3d0ae6c", + "url": "https://api.github.com/repos/TYPO3-Headless/headless/zipball/73c0eb956c424e1465cc9f59e4e50ef33228d661", + "reference": "73c0eb956c424e1465cc9f59e4e50ef33228d661", "shasum": "" }, "require": { @@ -991,28 +991,34 @@ ], "support": { "issues": "https://github.com/TYPO3-Headless/headless/issues", - "source": "https://github.com/TYPO3-Headless/headless/tree/v4.2.2" + "source": "https://github.com/TYPO3-Headless/headless/tree/v4.4.0" }, - "time": "2023-10-31T09:24:48+00:00" + "funding": [ + { + "url": "https://buy.stripe.com/bIYcPX1wd9hrawUfZ0", + "type": "custom" + } + ], + "time": "2024-09-19T17:44:18+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.8.0", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1021,11 +1027,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1103,7 +1109,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.0" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -1119,28 +1125,28 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:20:53+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -1186,7 +1192,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.1" + "source": "https://github.com/guzzle/promises/tree/2.0.3" }, "funding": [ { @@ -1202,20 +1208,20 @@ "type": "tidelift" } ], - "time": "2023-08-03T15:11:55+00:00" + "time": "2024-07-18T10:29:17+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -1229,9 +1235,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1302,7 +1308,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.1" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -1318,103 +1324,33 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:13:57+00:00" - }, - { - "name": "ichhabrecht/content-defender", - "version": "3.4.1", - "source": { - "type": "git", - "url": "https://github.com/IchHabRecht/content_defender.git", - "reference": "e259e9ecda5d08dc5c4655456e5c96c01e8234dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/IchHabRecht/content_defender/zipball/e259e9ecda5d08dc5c4655456e5c96c01e8234dd", - "reference": "e259e9ecda5d08dc5c4655456e5c96c01e8234dd", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "typo3/cms-backend": "^10.4 || ^11.5 || ^12.4", - "typo3/cms-core": "^10.4 || ^11.5 || ^12.4" - }, - "replace": { - "typo3-ter/content-defender": "self.version" - }, - "require-dev": { - "phpspec/prophecy": "^1.12.1", - "phpspec/prophecy-phpunit": "^2.0", - "typo3/cms-fluid-styled-content": "^10.4 || ^11.5 || ^12.4", - "typo3/cms-indexed-search": "^10.4 || ^11.5 || ^12.4", - "typo3/cms-workspaces": "^10.4 || ^11.5 || ^12.4", - "typo3/minimal": "^10.4 || ^11.5 || ^12.0", - "typo3/testing-framework": "^6.16 || ^7.0.2" - }, - "type": "typo3-cms-extension", - "extra": { - "typo3/cms": { - "extension-key": "content_defender", - "cms-package-dir": "{$vendor-dir}/typo3/cms", - "app-dir": ".Build", - "web-dir": ".Build/public" - } - }, - "autoload": { - "psr-4": { - "IchHabRecht\\ContentDefender\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Nicole Cordes", - "email": "typo3@cordes.co", - "role": "Developer" - } - ], - "description": "Define allowed or denied content element types in your backend layouts", - "homepage": "https://github.com/IchHabRecht/content_defender", - "keywords": [ - "TYPO3 CMS", - "backend", - "content", - "restrict" - ], - "support": { - "issues": "https://github.com/IchHabRecht/content_defender/issues", - "source": "https://github.com/IchHabRecht/content_defender/tree/3.4.1" - }, - "time": "2023-09-08T09:18:49+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "lolli42/finediff", - "version": "1.0.2", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/lolli42/FineDiff.git", - "reference": "f72cd968b663fc09bc73ef0ab5a3288583d0d59d" + "reference": "015a2f50782d2639c0fb21325dcf747c4136ad2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lolli42/FineDiff/zipball/f72cd968b663fc09bc73ef0ab5a3288583d0d59d", - "reference": "f72cd968b663fc09bc73ef0ab5a3288583d0d59d", + "url": "https://api.github.com/repos/lolli42/FineDiff/zipball/015a2f50782d2639c0fb21325dcf747c4136ad2b", + "reference": "015a2f50782d2639c0fb21325dcf747c4136ad2b", "shasum": "" }, "require": { - "php": ">=7.2.0", - "symfony/polyfill-mbstring": "^1.23" + "ext-mbstring": "*", + "php": ">=8.2" }, "replace": { "cogpowered/finediff": "*" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.4", - "phpstan/phpstan": "^1.6", - "phpunit/phpunit": "^8 || ^9" + "friendsofphp/php-cs-fixer": "^3.50.0", + "phpstan/phpstan": "^1.10.57", + "phpunit/phpunit": "^11.2.6" }, "type": "library", "autoload": { @@ -1451,22 +1387,22 @@ ], "support": { "issues": "https://github.com/lolli42/FineDiff/issues", - "source": "https://github.com/lolli42/FineDiff/tree/1.0.2" + "source": "https://github.com/lolli42/FineDiff/tree/1.1.1" }, - "time": "2022-05-23T07:44:28+00:00" + "time": "2024-07-09T14:25:40+00:00" }, { "name": "masterminds/html5", - "version": "2.8.1", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", "shasum": "" }, "require": { @@ -1474,7 +1410,7 @@ "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" }, "type": "library", "extra": { @@ -1518,27 +1454,27 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" }, - "time": "2023-05-10T11:58:31+00:00" + "time": "2024-03-31T07:05:07+00:00" }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v4.19.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "0ed4c8949a32986043e977dbe14776c14d644c45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ed4c8949a32986043e977dbe14776c14d644c45", + "reference": "0ed4c8949a32986043e977dbe14776c14d644c45", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", @@ -1574,9 +1510,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.2" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2024-09-17T19:36:00+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -1633,28 +1569,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "version": "5.4.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.1", "ext-filter": "*", - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7", "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "mockery/mockery": "~1.3.5", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^5.13" }, "type": "library", "extra": { @@ -1678,33 +1621,33 @@ }, { "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "email": "opensource@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2024-05-21T05:55:05+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.3", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + "reference": "153ae662783729388a584b4361f2545e4d841e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", + "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", "phpstan/phpdoc-parser": "^1.13" }, @@ -1742,22 +1685,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" }, - "time": "2023-08-12T11:01:26+00:00" + "time": "2024-02-23T11:10:43+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.4", + "version": "1.31.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" + "reference": "249f15fb843bf240cf058372dad29e100cee6c17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", - "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/249f15fb843bf240cf058372dad29e100cee6c17", + "reference": "249f15fb843bf240cf058372dad29e100cee6c17", "shasum": "" }, "require": { @@ -1789,9 +1732,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.31.0" }, - "time": "2023-11-26T18:29:22+00:00" + "time": "2024-09-22T11:32:18+00:00" }, { "name": "psr/cache", @@ -2047,20 +1990,20 @@ }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -2084,7 +2027,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -2096,9 +2039,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -2268,16 +2211,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -2312,9 +2255,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "ralouphie/getallheaders", @@ -2362,31 +2305,32 @@ }, { "name": "symfony/cache", - "version": "v6.3.8", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "ba33517043c22c94c7ab04b056476f6f86816cf8" + "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/ba33517043c22c94c7ab04b056476f6f86816cf8", - "reference": "ba33517043c22c94c7ab04b056476f6f86816cf8", + "url": "https://api.github.com/repos/symfony/cache/zipball/86e5296b10e4dec8c8441056ca606aedb8a3be0a", + "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^2.5|^3", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.3.6" + "symfony/var-exporter": "^6.4|^7.0" }, "conflict": { - "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/var-dumper": "<5.4" + "doctrine/dbal": "<3.6", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" }, "provide": { "psr/cache-implementation": "2.0|3.0", @@ -2395,15 +2339,15 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/filesystem": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/messenger": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2438,7 +2382,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.3.8" + "source": "https://github.com/symfony/cache/tree/v7.1.5" }, "funding": [ { @@ -2454,20 +2398,20 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:17:15+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "1d74b127da04ffa87aa940abe15446fa89653778" + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/1d74b127da04ffa87aa940abe15446fa89653778", - "reference": "1d74b127da04ffa87aa940abe15446fa89653778", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", "shasum": "" }, "require": { @@ -2477,7 +2421,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -2514,7 +2458,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" }, "funding": [ { @@ -2530,25 +2474,26 @@ "type": "tidelift" } ], - "time": "2023-09-25T12:52:38+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/clock", - "version": "v6.3.4", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "a74086d3db70d0f06ffd84480daa556248706e98" + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/a74086d3db70d0f06ffd84480daa556248706e98", - "reference": "a74086d3db70d0f06ffd84480daa556248706e98", + "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/clock": "^1.0" + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" }, "provide": { "psr/clock-implementation": "1.0" @@ -2587,7 +2532,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v6.3.4" + "source": "https://github.com/symfony/clock/tree/v7.1.1" }, "funding": [ { @@ -2603,38 +2548,38 @@ "type": "tidelift" } ], - "time": "2023-07-31T11:35:03+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/config", - "version": "v6.3.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "b7a63887960359e5b59b15826fa9f9be10acbe88" + "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/b7a63887960359e5b59b15826fa9f9be10acbe88", - "reference": "b7a63887960359e5b59b15826fa9f9be10acbe88", + "url": "https://api.github.com/repos/symfony/config/zipball/2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", + "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0", + "symfony/filesystem": "^7.1", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4", + "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/messenger": "^5.4|^6.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2662,7 +2607,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.3.8" + "source": "https://github.com/symfony/config/tree/v7.1.1" }, "funding": [ { @@ -2678,47 +2623,50 @@ "type": "tidelift" } ], - "time": "2023-11-09T08:28:21+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/console", - "version": "v6.3.8", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92" + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0d14a9f6d04d4ac38a8cea1171f4554e325dae92", - "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92", + "url": "https://api.github.com/repos/symfony/console/zipball/0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2752,7 +2700,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.8" + "source": "https://github.com/symfony/console/tree/v7.1.5" }, "funding": [ { @@ -2768,44 +2716,43 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:09:35+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.3.8", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "1f30f545c4151f611148fc19e28d54d39e0a00bc" + "reference": "38465f925ec4e0707b090e9147c65869837d639d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/1f30f545c4151f611148fc19e28d54d39e0a00bc", - "reference": "1f30f545c4151f611148fc19e28d54d39e0a00bc", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/38465f925ec4e0707b090e9147c65869837d639d", + "reference": "38465f925ec4e0707b090e9147c65869837d639d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.2.10" + "symfony/service-contracts": "^3.5", + "symfony/var-exporter": "^6.4|^7.0" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<6.1", - "symfony/finder": "<5.4", - "symfony/proxy-manager-bridge": "<6.3", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "psr/container-implementation": "1.1|2.0", "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.1", - "symfony/expression-language": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2833,7 +2780,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.3.8" + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.5" }, "funding": [ { @@ -2849,20 +2796,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:07:48+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { @@ -2871,7 +2818,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -2900,7 +2847,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -2916,26 +2863,26 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v6.3.8", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "6fa8a21e013ea22dd490cc6060508b14f7ad4b51" + "reference": "29015027fb63461e035246e07d74eeab9cb03304" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/6fa8a21e013ea22dd490cc6060508b14f7ad4b51", - "reference": "6fa8a21e013ea22dd490cc6060508b14f7ad4b51", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/29015027fb63461e035246e07d74eeab9cb03304", + "reference": "29015027fb63461e035246e07d74eeab9cb03304", "shasum": "" }, "require": { - "doctrine/dbal": "^2.13|^3|^4", - "php": ">=8.1", - "symfony/messenger": "^5.4|^6.0", + "doctrine/dbal": "^3.6|^4", + "php": ">=8.2", + "symfony/messenger": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -2943,8 +2890,8 @@ }, "require-dev": { "doctrine/persistence": "^1.3|^2|^3", - "symfony/property-access": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "type": "symfony-messenger-bridge", "autoload": { @@ -2972,7 +2919,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v6.3.8" + "source": "https://github.com/symfony/doctrine-messenger/tree/v7.1.5" }, "funding": [ { @@ -2988,28 +2935,28 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:17:15+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -3018,13 +2965,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3052,7 +2999,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" }, "funding": [ { @@ -3068,20 +3015,20 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", "shasum": "" }, "require": { @@ -3091,7 +3038,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -3128,7 +3075,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" }, "funding": [ { @@ -3144,25 +3091,25 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/expression-language", - "version": "v6.3.0", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "6d560c4c80e7e328708efd923f93ad67e6a0c1c0" + "reference": "b9e4bc6685d513c10235145ed1042a6081635806" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/6d560c4c80e7e328708efd923f93ad67e6a0c1c0", - "reference": "6d560c4c80e7e328708efd923f93ad67e6a0c1c0", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/b9e4bc6685d513c10235145ed1042a6081635806", + "reference": "b9e4bc6685d513c10235145ed1042a6081635806", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/cache": "^5.4|^6.0", + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3" }, @@ -3192,7 +3139,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v6.3.0" + "source": "https://github.com/symfony/expression-language/tree/v7.1.4" }, "funding": [ { @@ -3208,27 +3155,30 @@ "type": "tidelift" } ], - "time": "2023-04-28T16:05:33+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "symfony/filesystem", - "version": "v6.3.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/61fe0566189bf32e8cfee78335d8776f64a66f5a", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -3255,7 +3205,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.3.1" + "source": "https://github.com/symfony/filesystem/tree/v7.1.5" }, "funding": [ { @@ -3271,27 +3221,27 @@ "type": "tidelift" } ], - "time": "2023-06-01T08:30:39+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/finder", - "version": "v6.3.5", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", + "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3319,7 +3269,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.5" + "source": "https://github.com/symfony/finder/tree/v7.1.4" }, "funding": [ { @@ -3335,40 +3285,40 @@ "type": "tidelift" } ], - "time": "2023-09-26T12:56:25+00:00" + "time": "2024-08-13T14:28:19+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.8", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ce332676de1912c4389222987193c3ef38033df6" + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce332676de1912c4389222987193c3ef38033df6", - "reference": "ce332676de1912c4389222987193c3ef38033df6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e30ef73b1e44eea7eb37ba69600a354e553f694b", + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3396,7 +3346,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.8" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.5" }, "funding": [ { @@ -3412,43 +3362,43 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:17:15+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/mailer", - "version": "v6.3.5", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06" + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/d89611a7830d51b5e118bca38e390dea92f9ea06", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06", + "url": "https://api.github.com/repos/symfony/mailer/zipball/bbf21460c56f29810da3df3e206e38dfbb01e80b", + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^6.2", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/messenger": "^6.2", - "symfony/twig-bridge": "^6.2" + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3476,7 +3426,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.3.5" + "source": "https://github.com/symfony/mailer/tree/v7.1.5" }, "funding": [ { @@ -3492,50 +3442,49 @@ "type": "tidelift" } ], - "time": "2023-09-06T09:47:15+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/messenger", - "version": "v6.3.7", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "a0a8860ca625116c474c9c1f5570bd7ec752c599" + "reference": "e1c0ced845e3dac12ab428c5ed42dbe7a58ca576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/a0a8860ca625116c474c9c1f5570bd7ec752c599", - "reference": "a0a8860ca625116c474c9c1f5570bd7ec752c599", + "url": "https://api.github.com/repos/symfony/messenger/zipball/e1c0ced845e3dac12ab428c5ed42dbe7a58ca576", + "reference": "e1c0ced845e3dac12ab428c5ed42dbe7a58ca576", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/clock": "^6.3", - "symfony/deprecation-contracts": "^2.5|^3" + "symfony/clock": "^6.4|^7.0" }, "conflict": { - "symfony/console": "<6.3", - "symfony/event-dispatcher": "<5.4", + "symfony/console": "<6.4", + "symfony/event-dispatcher": "<6.4", "symfony/event-dispatcher-contracts": "<2.5", - "symfony/framework-bundle": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/serializer": "<5.4" + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/console": "^6.3", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/rate-limiter": "^5.4|^6.0", - "symfony/routing": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/validator": "^5.4|^6.0" + "symfony/stopwatch": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3563,7 +3512,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v6.3.7" + "source": "https://github.com/symfony/messenger/tree/v7.1.5" }, "funding": [ { @@ -3579,25 +3528,24 @@ "type": "tidelift" } ], - "time": "2023-10-26T18:15:14+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/mime", - "version": "v6.3.5", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e" + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d5179eedf1cb2946dbd760475ebf05c251ef6a6e", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e", + "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -3605,17 +3553,18 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "~6.2.13|^6.3.2" + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -3647,7 +3596,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.5" + "source": "https://github.com/symfony/mime/tree/v7.1.5" }, "funding": [ { @@ -3663,24 +3612,24 @@ "type": "tidelift" } ], - "time": "2023-09-29T06:59:36+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.3.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -3714,7 +3663,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" }, "funding": [ { @@ -3730,24 +3679,24 @@ "type": "tidelift" } ], - "time": "2023-05-12T14:21:09+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -3757,9 +3706,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3796,7 +3742,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -3812,33 +3758,30 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3877,7 +3820,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -3893,35 +3836,31 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3964,7 +3903,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -3980,33 +3919,30 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4048,7 +3984,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -4064,24 +4000,24 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -4091,9 +4027,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4131,166 +4064,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-28T09:04:16+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -4306,31 +4080,27 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4370,7 +4140,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, "funding": [ { @@ -4386,24 +4156,24 @@ "type": "tidelift" } ], - "time": "2023-08-16T06:22:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.28.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-uuid": "*" @@ -4413,9 +4183,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4452,7 +4219,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" }, "funding": [ { @@ -4468,29 +4235,28 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/property-access", - "version": "v6.3.2", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "2dc4f9da444b8f8ff592e95d570caad67924f1d0" + "reference": "6c709f97103355016e5782d0622437ae381012ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/2dc4f9da444b8f8ff592e95d570caad67924f1d0", - "reference": "2dc4f9da444b8f8ff592e95d570caad67924f1d0", + "url": "https://api.github.com/repos/symfony/property-access/zipball/6c709f97103355016e5782d0622437ae381012ad", + "reference": "6c709f97103355016e5782d0622437ae381012ad", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/property-info": "^5.4|^6.0" + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0" }, "require-dev": { - "symfony/cache": "^5.4|^6.0" + "symfony/cache": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4529,7 +4295,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v6.3.2" + "source": "https://github.com/symfony/property-access/tree/v7.1.4" }, "funding": [ { @@ -4545,38 +4311,39 @@ "type": "tidelift" } ], - "time": "2023-07-13T15:26:11+00:00" + "time": "2024-08-30T16:12:47+00:00" }, { "name": "symfony/property-info", - "version": "v6.3.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd" + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/7f3a03716112269741fe2a809f8f791a371d1fcd", - "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd", + "url": "https://api.github.com/repos/symfony/property-info/zipball/88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/string": "^5.4|^6.0" + "php": ">=8.2", + "symfony/string": "^6.4|^7.0", + "symfony/type-info": "^7.1" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4|^2", "phpdocumentor/reflection-docblock": "^5.2", "phpstan/phpdoc-parser": "^1.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4612,7 +4379,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.3.0" + "source": "https://github.com/symfony/property-info/tree/v7.1.3" }, "funding": [ { @@ -4628,29 +4395,29 @@ "type": "tidelift" } ], - "time": "2023-05-19T08:06:44+00:00" + "time": "2024-07-26T07:36:36+00:00" }, { "name": "symfony/rate-limiter", - "version": "v6.3.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/rate-limiter.git", - "reference": "9e65b2ec0816a2fd3406f26d036c5a1b6feee101" + "reference": "f1fbc60e7fed63f1c77bbf8601170cc80fddd95a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/9e65b2ec0816a2fd3406f26d036c5a1b6feee101", - "reference": "9e65b2ec0816a2fd3406f26d036c5a1b6feee101", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/f1fbc60e7fed63f1c77bbf8601170cc80fddd95a", + "reference": "f1fbc60e7fed63f1c77bbf8601170cc80fddd95a", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/options-resolver": "^5.4|^6.0" + "php": ">=8.2", + "symfony/options-resolver": "^6.4|^7.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/lock": "^5.4|^6.0" + "symfony/lock": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4682,7 +4449,7 @@ "rate-limiter" ], "support": { - "source": "https://github.com/symfony/rate-limiter/tree/v6.3.8" + "source": "https://github.com/symfony/rate-limiter/tree/v7.1.1" }, "funding": [ { @@ -4698,40 +4465,38 @@ "type": "tidelift" } ], - "time": "2023-11-10T07:40:52+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/routing", - "version": "v6.3.5", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31" + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/82616e59acd3e3d9c916bba798326cb7796d7d31", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31", + "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4765,7 +4530,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.5" + "source": "https://github.com/symfony/routing/tree/v7.1.4" }, "funding": [ { @@ -4781,25 +4546,26 @@ "type": "tidelift" } ], - "time": "2023-09-20T16:05:51+00:00" + "time": "2024-08-29T08:16:25+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -4807,7 +4573,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4847,7 +4613,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -4863,24 +4629,24 @@ "type": "tidelift" } ], - "time": "2023-07-30T20:28:31+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/string", - "version": "v6.3.8", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13880a87790c76ef994c91e87efb96134522577a" + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13880a87790c76ef994c91e87efb96134522577a", - "reference": "13880a87790c76ef994c91e87efb96134522577a", + "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4890,11 +4656,12 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4933,7 +4700,89 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.8" + "source": "https://github.com/symfony/string/tree/v7.1.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-20T08:28:38+00:00" + }, + { + "name": "symfony/type-info", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/type-info.git", + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/type-info/zipball/9f6094aa900d2c06bd61576a6f279d4ac441515f", + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0" + }, + "conflict": { + "phpstan/phpdoc-parser": "<1.0", + "symfony/dependency-injection": "<6.4", + "symfony/property-info": "<6.4" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\TypeInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.1.5" }, "funding": [ { @@ -4949,28 +4798,28 @@ "type": "tidelift" } ], - "time": "2023-11-09T08:28:21+00:00" + "time": "2024-09-19T21:48:23+00:00" }, { "name": "symfony/uid", - "version": "v6.3.8", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "819fa5ac210fb7ddda4752b91a82f50be7493dd9" + "reference": "8c7bb8acb933964055215d89f9a9871df0239317" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/819fa5ac210fb7ddda4752b91a82f50be7493dd9", - "reference": "819fa5ac210fb7ddda4752b91a82f50be7493dd9", + "url": "https://api.github.com/repos/symfony/uid/zipball/8c7bb8acb933964055215d89f9a9871df0239317", + "reference": "8c7bb8acb933964055215d89f9a9871df0239317", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5007,7 +4856,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.3.8" + "source": "https://github.com/symfony/uid/tree/v7.1.5" }, "funding": [ { @@ -5023,27 +4872,29 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:07:48+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.3.6", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "374d289c13cb989027274c86206ddc63b16a2441" + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/374d289c13cb989027274c86206ddc63b16a2441", - "reference": "374d289c13cb989027274c86206ddc63b16a2441", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/var-dumper": "^5.4|^6.0" + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5081,7 +4932,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.3.6" + "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" }, "funding": [ { @@ -5097,32 +4948,31 @@ "type": "tidelift" } ], - "time": "2023-10-13T09:16:49+00:00" + "time": "2024-06-28T08:00:31+00:00" }, { "name": "symfony/yaml", - "version": "v6.3.8", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92" + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3493af8a8dad7fa91c77fa473ba23ecd95334a92", - "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4e561c316e135e053bd758bf3b3eb291d9919de4", + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -5153,7 +5003,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.3.8" + "source": "https://github.com/symfony/yaml/tree/v7.1.5" }, "funding": [ { @@ -5169,7 +5019,7 @@ "type": "tidelift" } ], - "time": "2023-11-06T10:58:05+00:00" + "time": "2024-09-17T12:49:58+00:00" }, { "name": "typo3/class-alias-loader", @@ -5233,85 +5083,6 @@ }, "time": "2022-08-07T14:48:42+00:00" }, - { - "name": "typo3/cms-backend", - "version": "v12.4.8", - "source": { - "type": "git", - "url": "https://github.com/TYPO3-CMS/backend.git", - "reference": "c806212a993893b0c0e8e38610f12b4d9a96a718" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/backend/zipball/c806212a993893b0c0e8e38610f12b4d9a96a718", - "reference": "c806212a993893b0c0e8e38610f12b4d9a96a718", - "shasum": "" - }, - "require": { - "psr/event-dispatcher": "^1.0", - "typo3/cms-core": "12.4.8" - }, - "conflict": { - "typo3/cms": "*" - }, - "replace": { - "typo3/cms-about": "*", - "typo3/cms-context-help": "*", - "typo3/cms-cshmanual": "*", - "typo3/cms-func-wizards": "*", - "typo3/cms-recordlist": "*", - "typo3/cms-wizard-crpages": "*", - "typo3/cms-wizard-sortpages": "*" - }, - "suggest": { - "typo3/cms-install": "To generate url to install tool in environment toolbar" - }, - "type": "typo3-cms-framework", - "extra": { - "branch-alias": { - "dev-main": "12.4.x-dev" - }, - "typo3/cms": { - "Package": { - "serviceProvider": "TYPO3\\CMS\\Backend\\ServiceProvider", - "protected": true, - "partOfFactoryDefault": true, - "partOfMinimalUsableSystem": true - }, - "extension-key": "backend" - }, - "typo3/class-alias-loader": { - "class-alias-maps": [ - "Migrations/Code/ClassAliasMap.php" - ] - } - }, - "autoload": { - "psr-4": { - "TYPO3\\CMS\\Backend\\": "Classes/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "TYPO3 Core Team", - "email": "typo3cms@typo3.org", - "role": "Developer" - } - ], - "description": "TYPO3 CMS backend", - "homepage": "https://typo3.org", - "support": { - "chat": "https://typo3.org/help", - "docs": "https://docs.typo3.org", - "issues": "https://forge.typo3.org", - "source": "https://github.com/typo3/typo3" - }, - "time": "2023-11-14T09:26:32+00:00" - }, { "name": "typo3/cms-cli", "version": "3.1.1", @@ -5347,16 +5118,16 @@ }, { "name": "typo3/cms-composer-installers", - "version": "v5.0.0", + "version": "v5.0.1", "source": { "type": "git", "url": "https://github.com/TYPO3/CmsComposerInstallers.git", - "reference": "71356484e6ccadf45acdde6489823c7af925b144" + "reference": "444a228d3ae4320d7ba0b769cfab008b0c09443c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/CmsComposerInstallers/zipball/71356484e6ccadf45acdde6489823c7af925b144", - "reference": "71356484e6ccadf45acdde6489823c7af925b144", + "url": "https://api.github.com/repos/TYPO3/CmsComposerInstallers/zipball/444a228d3ae4320d7ba0b769cfab008b0c09443c", + "reference": "444a228d3ae4320d7ba0b769cfab008b0c09443c", "shasum": "" }, "require": { @@ -5413,22 +5184,22 @@ "support": { "general": "https://typo3.org/support/", "issues": "https://github.com/TYPO3/CmsComposerInstallers/issues", - "source": "https://github.com/TYPO3/CmsComposerInstallers/tree/v5.0.0" + "source": "https://github.com/TYPO3/CmsComposerInstallers/tree/v5.0.1" }, - "time": "2022-09-30T14:36:05+00:00" + "time": "2024-08-13T14:58:06+00:00" }, { "name": "typo3/cms-core", - "version": "v12.4.8", + "version": "v12.4.20", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/core.git", - "reference": "391706e0067c8099d784ee2722fc4a407b9141ba" + "reference": "b15e032a77fc62c9ade53f6a147caea1fee554b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/391706e0067c8099d784ee2722fc4a407b9141ba", - "reference": "391706e0067c8099d784ee2722fc4a407b9141ba", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/b15e032a77fc62c9ade53f6a147caea1fee554b0", + "reference": "b15e032a77fc62c9ade53f6a147caea1fee554b0", "shasum": "" }, "require": { @@ -5436,11 +5207,11 @@ "christian-riesen/base32": "^1.6", "composer-runtime-api": "^2.1", "doctrine/annotations": "^1.13.3 || ^2.0", - "doctrine/dbal": "^3.7.1", + "doctrine/dbal": "^3.9", "doctrine/event-manager": "^2.0", "doctrine/lexer": "^2.0 || ^3.0", "egulias/email-validator": "^4.0", - "enshrined/svg-sanitize": "^0.15.4", + "enshrined/svg-sanitize": "^0.18.0", "ext-dom": "*", "ext-intl": "*", "ext-json": "*", @@ -5465,23 +5236,23 @@ "psr/http-server-handler": "^1.0", "psr/http-server-middleware": "^1.0", "psr/log": "^2.0 || ^3.0", - "symfony/config": "^6.3", - "symfony/console": "^6.3", - "symfony/dependency-injection": "^6.3", - "symfony/doctrine-messenger": "^6.3", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/doctrine-messenger": "^6.4 || ^7.0", "symfony/event-dispatcher-contracts": "^3.1", - "symfony/expression-language": "^6.3", - "symfony/filesystem": "^6.3", - "symfony/finder": "^6.3", - "symfony/http-foundation": "^6.3", - "symfony/mailer": "^6.3", - "symfony/messenger": "^6.3", - "symfony/mime": "^6.3", - "symfony/options-resolver": "^6.3", - "symfony/rate-limiter": "^6.3", - "symfony/routing": "^6.3", - "symfony/uid": "^6.3", - "symfony/yaml": "^6.3", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/filesystem": "^6.4 || ^7.0", + "symfony/finder": "^6.4 || ^7.0", + "symfony/http-foundation": "^6.4 || ^7.0", + "symfony/mailer": "^6.4 || ^7.0", + "symfony/messenger": "^6.4 || ^7.0", + "symfony/mime": "^6.4 || ^7.0", + "symfony/options-resolver": "^6.4 || ^7.0", + "symfony/rate-limiter": "^6.4 || ^7.0", + "symfony/routing": "^6.4 || ^7.0", + "symfony/uid": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", "typo3/class-alias-loader": "^1.1.4", "typo3/cms-cli": "^3.1", "typo3/cms-composer-installers": "^5.0", @@ -5497,9 +5268,9 @@ "psr/http-message-implementation": "1.0" }, "replace": { - "typo3/cms-lang": "*", - "typo3/cms-saltedpasswords": "*", - "typo3/cms-sv": "*" + "typo3/cms-lang": "self.version", + "typo3/cms-saltedpasswords": "self.version", + "typo3/cms-sv": "self.version" }, "suggest": { "ext-apcu": "Needed when non-default APCU based cache backends are used", @@ -5555,30 +5326,30 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2023-11-14T09:26:32+00:00" + "time": "2024-09-10T07:47:57+00:00" }, { "name": "typo3/cms-extbase", - "version": "v12.4.8", + "version": "v12.4.20", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/extbase.git", - "reference": "b7c27f6702e92ca47b780391c6251a5293df1d73" + "reference": "749e81e3afc7375ccb4613bf3f4a6ff3dc61e4d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/extbase/zipball/b7c27f6702e92ca47b780391c6251a5293df1d73", - "reference": "b7c27f6702e92ca47b780391c6251a5293df1d73", + "url": "https://api.github.com/repos/TYPO3-CMS/extbase/zipball/749e81e3afc7375ccb4613bf3f4a6ff3dc61e4d9", + "reference": "749e81e3afc7375ccb4613bf3f4a6ff3dc61e4d9", "shasum": "" }, "require": { "doctrine/instantiator": "^1.5 || ^2.0", "phpdocumentor/reflection-docblock": "^5.2", "phpdocumentor/type-resolver": "^1.7.1", - "symfony/dependency-injection": "^6.3", - "symfony/property-access": "^6.3", - "symfony/property-info": "^6.3", - "typo3/cms-core": "12.4.8" + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/property-access": "^6.4 || ^7.0", + "symfony/property-info": "^6.4 || ^7.0", + "typo3/cms-core": "12.4.20" }, "conflict": { "typo3/cms": "*" @@ -5625,26 +5396,26 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2023-11-14T09:26:32+00:00" + "time": "2024-09-10T07:47:57+00:00" }, { "name": "typo3/cms-fluid", - "version": "v12.4.8", + "version": "v12.4.20", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/fluid.git", - "reference": "f1f46d22e651dfd94f6482a8e0db8e95d5fccefa" + "reference": "9999805b18fe5df2f22a446207cb3bd5df600880" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/fluid/zipball/f1f46d22e651dfd94f6482a8e0db8e95d5fccefa", - "reference": "f1f46d22e651dfd94f6482a8e0db8e95d5fccefa", + "url": "https://api.github.com/repos/TYPO3-CMS/fluid/zipball/9999805b18fe5df2f22a446207cb3bd5df600880", + "reference": "9999805b18fe5df2f22a446207cb3bd5df600880", "shasum": "" }, "require": { - "symfony/dependency-injection": "^6.3", - "typo3/cms-core": "12.4.8", - "typo3/cms-extbase": "12.4.8", + "symfony/dependency-injection": "^6.4 || ^7.0", + "typo3/cms-core": "12.4.20", + "typo3/cms-extbase": "12.4.20", "typo3fluid/fluid": "^2.9.2" }, "conflict": { @@ -5689,31 +5460,31 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2023-11-14T09:26:32+00:00" + "time": "2024-09-10T07:47:57+00:00" }, { "name": "typo3/cms-install", - "version": "v12.4.8", + "version": "v12.4.20", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/install.git", - "reference": "2713bc164a4eaca0ae1791d00ab2e94861b51b9c" + "reference": "1d680750e65552bacb456a317ce01635ae2f7b19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/install/zipball/2713bc164a4eaca0ae1791d00ab2e94861b51b9c", - "reference": "2713bc164a4eaca0ae1791d00ab2e94861b51b9c", + "url": "https://api.github.com/repos/TYPO3-CMS/install/zipball/1d680750e65552bacb456a317ce01635ae2f7b19", + "reference": "1d680750e65552bacb456a317ce01635ae2f7b19", "shasum": "" }, "require": { - "doctrine/dbal": "^3.7.1", + "doctrine/dbal": "^3.9", "guzzlehttp/promises": "^1.5.2 || ^2.0", "nikic/php-parser": "^4.15.4", - "symfony/finder": "^6.3", - "symfony/http-foundation": "^6.3", - "typo3/cms-core": "12.4.8", - "typo3/cms-extbase": "12.4.8", - "typo3/cms-fluid": "12.4.8" + "symfony/finder": "^6.4 || ^7.0", + "symfony/http-foundation": "^6.4 || ^7.0", + "typo3/cms-core": "12.4.20", + "typo3/cms-extbase": "12.4.20", + "typo3/cms-fluid": "12.4.20" }, "conflict": { "typo3/cms": "*" @@ -5757,20 +5528,20 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2023-11-14T09:26:32+00:00" + "time": "2024-09-10T07:47:57+00:00" }, { "name": "typo3/html-sanitizer", - "version": "v2.1.4", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/TYPO3/html-sanitizer.git", - "reference": "b8f90717251d968c49dc77f8c1e5912e2fbe0dff" + "reference": "c672a2e02925de8eed0dcaeb3a3c90d3642049a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/html-sanitizer/zipball/b8f90717251d968c49dc77f8c1e5912e2fbe0dff", - "reference": "b8f90717251d968c49dc77f8c1e5912e2fbe0dff", + "url": "https://api.github.com/repos/TYPO3/html-sanitizer/zipball/c672a2e02925de8eed0dcaeb3a3c90d3642049a0", + "reference": "c672a2e02925de8eed0dcaeb3a3c90d3642049a0", "shasum": "" }, "require": { @@ -5806,22 +5577,22 @@ "description": "HTML sanitizer aiming to provide XSS-safe markup based on explicitly allowed tags, attributes and values.", "support": { "issues": "https://github.com/TYPO3/html-sanitizer/issues", - "source": "https://github.com/TYPO3/html-sanitizer/tree/v2.1.4" + "source": "https://github.com/TYPO3/html-sanitizer/tree/v2.2.0" }, - "time": "2023-11-14T07:41:08+00:00" + "time": "2024-07-12T15:52:25+00:00" }, { "name": "typo3fluid/fluid", - "version": "2.9.3", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/TYPO3/Fluid.git", - "reference": "7d0b08409ac5b9567819442e71ec2059a99003fd" + "reference": "0a8ebdb9bab1510380f18bef6395fbb4754c01b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3/Fluid/zipball/7d0b08409ac5b9567819442e71ec2059a99003fd", - "reference": "7d0b08409ac5b9567819442e71ec2059a99003fd", + "url": "https://api.github.com/repos/TYPO3/Fluid/zipball/0a8ebdb9bab1510380f18bef6395fbb4754c01b7", + "reference": "0a8ebdb9bab1510380f18bef6395fbb4754c01b7", "shasum": "" }, "require": { @@ -5830,13 +5601,15 @@ }, "require-dev": { "ext-json": "*", - "friendsofphp/php-cs-fixer": "^3.37.1", + "ext-simplexml": "*", + "friendsofphp/php-cs-fixer": "^3.59.3", "phpstan/phpstan": "^1.10.14", "phpstan/phpstan-phpunit": "^1.3.11", "phpunit/phpunit": "^10.2.6" }, "suggest": { - "ext-json": "PHP JSON is needed when using JSONVariableProvider: A relatively rare use case" + "ext-json": "PHP JSON is needed when using JSONVariableProvider: A relatively rare use case", + "ext-simplexml": "SimpleXML is required for the XSD schema generator" }, "bin": [ "bin/fluid" @@ -5858,7 +5631,7 @@ "issues": "https://github.com/TYPO3/Fluid/issues", "source": "https://github.com/TYPO3/Fluid" }, - "time": "2023-10-30T21:48:21+00:00" + "time": "2024-08-30T21:24:26+00:00" }, { "name": "webmozart/assert", @@ -5922,16 +5695,16 @@ "packages-dev": [ { "name": "apache-solr-for-typo3/solr", - "version": "12.0.1", + "version": "12.0.5", "source": { "type": "git", "url": "https://github.com/TYPO3-Solr/ext-solr.git", - "reference": "d3130acdb35bfbc5d039442de39a1b6c5c684523" + "reference": "7e800fb764377eedfba6b03dc0dcbf397c706a9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-Solr/ext-solr/zipball/d3130acdb35bfbc5d039442de39a1b6c5c684523", - "reference": "d3130acdb35bfbc5d039442de39a1b6c5c684523", + "url": "https://api.github.com/repos/TYPO3-Solr/ext-solr/zipball/7e800fb764377eedfba6b03dc0dcbf397c706a9c", + "reference": "7e800fb764377eedfba6b03dc0dcbf397c706a9c", "shasum": "" }, "require": { @@ -5941,7 +5714,7 @@ "ext-pdo": "*", "ext-simplexml": "*", "php": "^8.1", - "solarium/solarium": "6.3.2", + "solarium/solarium": "6.3.5", "typo3/cms-backend": "*", "typo3/cms-core": "^v12.4.3", "typo3/cms-extbase": "*", @@ -5959,18 +5732,18 @@ "typo3-ter/solrfluidgrouping": "*" }, "require-dev": { - "dg/bypass-finals": "^1.4", - "phpstan/phpstan": "^1.10", + "dg/bypass-finals": "^1.6", + "phpstan/phpstan": "^1.11", "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^10.5", "typo3/cms-fluid-styled-content": "*", "typo3/coding-standards": "~0.7.1", - "typo3/testing-framework": "^7.0.2" + "typo3/testing-framework": "^8.0" }, "type": "typo3-cms-extension", "extra": { "branch-alias": { - "dev-main": "12.0.x-dev" + "dev-release-12.0.x": "12.0.x-dev" }, "typo3/cms": { "extension-key": "solr", @@ -5983,7 +5756,14 @@ "ext-solrconsole": "^12.0", "ext-solrdebugtools": "^12.0", "ext-solrmlt": "^12.0", - "Apache-Solr": "9.3.0", + "Apache-Solr": [ + "9.6.1", + "9.6.0", + "9.5.0", + "9.4.1", + "9.4.0", + "9.3.0" + ], "configset": "ext_solr_12_0_0" }, "ext-solrfal": [], @@ -6004,9 +5784,9 @@ ], "authors": [ { - "name": "Ingo Renner", - "email": "ingo@typo3.org", - "role": "Lead Developer" + "name": "dkd Internet Service GmbH", + "email": "info@dkd.de", + "homepage": "https://www.dkd.de" } ], "description": "Apache Solr for TYPO3", @@ -6019,7 +5799,7 @@ ], "support": { "docs": "https://docs.typo3.org/p/apache-solr-for-typo3/solr/main/en-us/", - "email": "solr-eb-support@dkd.de", + "email": "info@dkd.de", "forum": "https://talk.typo3.org", "issues": "https://github.com/TYPO3-Solr/ext-solr/issues", "slack": "https://typo3.slack.com/archives/C02FF05Q4", @@ -6031,7 +5811,145 @@ "type": "custom" } ], - "time": "2023-11-16T17:20:09+00:00" + "time": "2024-07-30T12:24:53+00:00" + }, + { + "name": "bnf/phpstan-psr-container", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/bnf/phpstan-psr-container.git", + "reference": "38242e71616aa677a0fdd08af8edc4a730a24f67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bnf/phpstan-psr-container/zipball/38242e71616aa677a0fdd08af8edc4a730a24f67", + "reference": "38242e71616aa677a0fdd08af8edc4a730a24f67", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0", + "phpstan/phpstan": "^1.0", + "psr/container": "^1.0|^2.0" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Bnf\\PhpstanPsrContainer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Benjamin Franzke", + "email": "benjaminfranzke@gmail.com", + "homepage": "https://bnfr.net", + "role": "Developer" + } + ], + "description": "PHPStan dynamic return type extension for PSR-11 ContainerInterface", + "keywords": [ + "PHPStan", + "PSR-11", + "service-provider", + "static" + ], + "support": { + "issues": "https://github.com/bnf/phpstan-psr-container/issues", + "source": "https://github.com/bnf/phpstan-psr-container/tree/1.0.1" + }, + "time": "2022-04-26T04:03:19+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-09-19T14:15:21+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", @@ -6113,24 +6031,25 @@ }, { "name": "halaxa/json-machine", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/halaxa/json-machine.git", - "reference": "514025c5ebbdb8a058745b573b4a1e81d685802c" + "reference": "5147f38f74d7ab3e27733e3f3bdabbd2fd28e3fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/halaxa/json-machine/zipball/514025c5ebbdb8a058745b573b4a1e81d685802c", - "reference": "514025c5ebbdb8a058745b573b4a1e81d685802c", + "url": "https://api.github.com/repos/halaxa/json-machine/zipball/5147f38f74d7ab3e27733e3f3bdabbd2fd28e3fa", + "reference": "5147f38f74d7ab3e27733e3f3bdabbd2fd28e3fa", "shasum": "" }, "require": { - "php": ">=7.0" + "php": "7.0 - 8.3" }, "require-dev": { "ext-json": "*", "friendsofphp/php-cs-fixer": "^3.0", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^8.0" }, "suggest": { @@ -6159,7 +6078,7 @@ "description": "Efficient, easy-to-use and fast JSON pull parser", "support": { "issues": "https://github.com/halaxa/json-machine/issues", - "source": "https://github.com/halaxa/json-machine/tree/1.1.3" + "source": "https://github.com/halaxa/json-machine/tree/1.1.4" }, "funding": [ { @@ -6167,36 +6086,241 @@ "type": "other" } ], - "time": "2022-10-12T11:40:33+00:00" + "time": "2023-11-28T21:12:40+00:00" + }, + { + "name": "phpstan/extension-installer", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "85e90b3942d06b2326fba0403ec24fe912372936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936", + "reference": "85e90b3942d06b2326fba0403ec24fe912372936", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.9.0 || ^2.0" + }, + "require-dev": { + "composer/composer": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPStan\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPStan\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Composer plugin for automatic installation of PHPStan extensions", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpstan/extension-installer/issues", + "source": "https://github.com/phpstan/extension-installer/tree/1.4.3" + }, + "time": "2024-09-04T20:21:43+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.12.4", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ffa517cb918591b93acc9b95c0bebdcd0e4538bd", + "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2024-09-19T07:58:01+00:00" + }, + { + "name": "remind/coding-standard", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/remindgmbh/coding-standard.git", + "reference": "770053583364238e035ada832c7db9b06c737c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/remindgmbh/coding-standard/zipball/770053583364238e035ada832c7db9b06c737c28", + "reference": "770053583364238e035ada832c7db9b06c737c28", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "slevomat/coding-standard": "^8.15", + "squizlabs/php_codesniffer": "^3.10" + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "support": { + "issues": "https://github.com/remindgmbh/coding-standard/issues", + "source": "https://github.com/remindgmbh/coding-standard/tree/v1.0.1" + }, + "time": "2024-08-08T11:48:58+00:00" + }, + { + "name": "saschaegerer/phpstan-typo3", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/sascha-egerer/phpstan-typo3.git", + "reference": "1848c6a2bfcef90cff75e0a8a5c043bcf84765de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sascha-egerer/phpstan-typo3/zipball/1848c6a2bfcef90cff75e0a8a5c043bcf84765de", + "reference": "1848c6a2bfcef90cff75e0a8a5c043bcf84765de", + "shasum": "" + }, + "require": { + "bnf/phpstan-psr-container": "^1.0", + "composer/semver": "^3.3", + "ext-simplexml": "*", + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^1.10.9", + "ssch/typo3-debug-dump-pass": "^0.0.2", + "typo3/cms-core": "^11.5 || ^12.4 || ^13.0", + "typo3/cms-extbase": "^11.5 || ^12.4 || ^13.0" + }, + "require-dev": { + "consistence-community/coding-standard": "^3.10", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "nikic/php-parser": "^v4.19.1", + "phing/phing": "^2.17", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "^9.6", + "symfony/polyfill-php80": "^1.29" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "SaschaEgerer\\PhpstanTypo3\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "TYPO3 CMS class reflection extension for PHPStan", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/sascha-egerer/phpstan-typo3/issues", + "source": "https://github.com/sascha-egerer/phpstan-typo3/tree/1.10.2" + }, + "funding": [ + { + "url": "https://github.com/sascha-egerer", + "type": "github" + }, + { + "url": "https://liberapay.com/sascha.egerer", + "type": "liberapay" + } + ], + "time": "2024-08-26T20:37:49+00:00" }, { "name": "slevomat/coding-standard", - "version": "8.14.1", + "version": "8.15.0", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926" + "reference": "7d1d957421618a3803b593ec31ace470177d7817" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/fea1fd6f137cc84f9cba0ae30d549615dbc6a926", - "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/7d1d957421618a3803b593ec31ace470177d7817", + "reference": "7d1d957421618a3803b593ec31ace470177d7817", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", "php": "^7.2 || ^8.0", "phpstan/phpdoc-parser": "^1.23.1", - "squizlabs/php_codesniffer": "^3.7.1" + "squizlabs/php_codesniffer": "^3.9.0" }, "require-dev": { "phing/phing": "2.17.4", "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.10.37", + "phpstan/phpstan": "1.10.60", "phpstan/phpstan-deprecation-rules": "1.1.4", - "phpstan/phpstan-phpunit": "1.3.14", - "phpstan/phpstan-strict-rules": "1.5.1", - "phpunit/phpunit": "8.5.21|9.6.8|10.3.5" + "phpstan/phpstan-phpunit": "1.3.16", + "phpstan/phpstan-strict-rules": "1.5.2", + "phpunit/phpunit": "8.5.21|9.6.8|10.5.11" }, "type": "phpcodesniffer-standard", "extra": { @@ -6220,7 +6344,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.14.1" + "source": "https://github.com/slevomat/coding-standard/tree/8.15.0" }, "funding": [ { @@ -6232,20 +6356,20 @@ "type": "tidelift" } ], - "time": "2023-10-08T07:28:08+00:00" + "time": "2024-03-09T15:20:58+00:00" }, { "name": "solarium/solarium", - "version": "6.3.2", + "version": "6.3.5", "source": { "type": "git", "url": "https://github.com/solariumphp/solarium.git", - "reference": "52e5623102bd8b056d159eea8cce991d21cb8593" + "reference": "ae4ea592dc92d2be4dfd0a329f1ffbe3cbd01cf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/solariumphp/solarium/zipball/52e5623102bd8b056d159eea8cce991d21cb8593", - "reference": "52e5623102bd8b056d159eea8cce991d21cb8593", + "url": "https://api.github.com/repos/solariumphp/solarium/zipball/ae4ea592dc92d2be4dfd0a329f1ffbe3cbd01cf3", + "reference": "ae4ea592dc92d2be4dfd0a329f1ffbe3cbd01cf3", "shasum": "" }, "require": { @@ -6269,6 +6393,7 @@ "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", "phpunit/phpunit": "^9.6", + "rawr/phpunit-data-provider": "^3.3", "roave/security-advisories": "dev-master", "symfony/event-dispatcher": "^5.0 || ^6.0" }, @@ -6297,22 +6422,22 @@ ], "support": { "issues": "https://github.com/solariumphp/solarium/issues", - "source": "https://github.com/solariumphp/solarium/tree/6.3.2" + "source": "https://github.com/solariumphp/solarium/tree/6.3.5" }, - "time": "2023-09-19T06:59:53+00:00" + "time": "2024-01-10T08:36:53+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.2", + "version": "3.10.3", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "62d32998e820bddc40f99f8251958aed187a5c9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c", + "reference": "62d32998e820bddc40f99f8251958aed187a5c9c", "shasum": "" }, "require": { @@ -6322,11 +6447,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -6341,40 +6466,200 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", "standards", "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-09-18T10:38:58+00:00" + }, + { + "name": "ssch/typo3-debug-dump-pass", + "version": "v0.0.2", + "source": { + "type": "git", + "url": "https://github.com/sabbelasichon/typo3-debug-dump-pass.git", + "reference": "44776b48e78e50db999370dc65f85872420b4e79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabbelasichon/typo3-debug-dump-pass/zipball/44776b48e78e50db999370dc65f85872420b4e79", + "reference": "44776b48e78e50db999370dc65f85872420b4e79", + "shasum": "" + }, + "require": { + "symfony/config": "^5.0 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.0 || ^6.0 || ^7.0", + "typo3/cms-core": "^10.4 || ^11.5 || ^12.4 || ^13.0" + }, + "require-dev": { + "symplify/easy-coding-standard": "^12.1" + }, + "type": "typo3-cms-extension", + "extra": { + "branch-alias": { + "dev-main": "1.0.x-dev" + }, + "typo3/cms": { + "extension-key": "typo3_debug_dump_pass", + "web-dir": ".Build/Web" + } + }, + "autoload": { + "psr-4": { + "Ssch\\Typo3DebugDumpPass\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian Schreiber", + "email": "me@schreibersebastian.de" + } + ], + "description": "Add debug dump compiler pass for better static analysis", + "keywords": [ + "dev", + "refactoring" + ], + "support": { + "issues": "https://github.com/sabbelasichon/typo3-debug-dump-pass/issues", + "source": "https://github.com/sabbelasichon/typo3-debug-dump-pass/tree/v0.0.2" + }, + "time": "2024-02-05T19:24:11+00:00" + }, + { + "name": "typo3/cms-backend", + "version": "v12.4.20", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/backend.git", + "reference": "175402085bb835a9ea4f6ab670195f0e091a61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/backend/zipball/175402085bb835a9ea4f6ab670195f0e091a61be", + "reference": "175402085bb835a9ea4f6ab670195f0e091a61be", + "shasum": "" + }, + "require": { + "psr/event-dispatcher": "^1.0", + "typo3/cms-core": "12.4.20" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "typo3/cms-about": "self.version", + "typo3/cms-context-help": "self.version", + "typo3/cms-cshmanual": "self.version", + "typo3/cms-func-wizards": "self.version", + "typo3/cms-recordlist": "self.version", + "typo3/cms-wizard-crpages": "self.version", + "typo3/cms-wizard-sortpages": "self.version" + }, + "suggest": { + "typo3/cms-install": "To generate url to install tool in environment toolbar" + }, + "type": "typo3-cms-framework", + "extra": { + "branch-alias": { + "dev-main": "12.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Backend\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "backend" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Backend\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "TYPO3 CMS backend", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" }, - "time": "2023-02-22T23:07:41+00:00" + "time": "2024-09-10T07:47:57+00:00" }, { "name": "typo3/cms-frontend", - "version": "v12.4.8", + "version": "v12.4.20", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/frontend.git", - "reference": "527733250a9c78d9d1253fbfeac147c305eb28ba" + "reference": "4432df3f46566d2a9494420d61d44a177d7505cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/frontend/zipball/527733250a9c78d9d1253fbfeac147c305eb28ba", - "reference": "527733250a9c78d9d1253fbfeac147c305eb28ba", + "url": "https://api.github.com/repos/TYPO3-CMS/frontend/zipball/4432df3f46566d2a9494420d61d44a177d7505cd", + "reference": "4432df3f46566d2a9494420d61d44a177d7505cd", "shasum": "" }, "require": { "ext-libxml": "*", - "typo3/cms-core": "12.4.8" + "typo3/cms-core": "12.4.20" }, "conflict": { "typo3/cms": "*" @@ -6426,24 +6711,24 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2023-11-14T09:26:32+00:00" + "time": "2024-09-10T07:47:57+00:00" }, { "name": "typo3/cms-reports", - "version": "v12.4.8", + "version": "v12.4.20", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/reports.git", - "reference": "c3bc0dffde18b22da2641d7d610d0b8adf23ab1b" + "reference": "5b6d18fc00c8fd2c9693bfb6980b9c7a5ebbc380" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/reports/zipball/c3bc0dffde18b22da2641d7d610d0b8adf23ab1b", - "reference": "c3bc0dffde18b22da2641d7d610d0b8adf23ab1b", + "url": "https://api.github.com/repos/TYPO3-CMS/reports/zipball/5b6d18fc00c8fd2c9693bfb6980b9c7a5ebbc380", + "reference": "5b6d18fc00c8fd2c9693bfb6980b9c7a5ebbc380", "shasum": "" }, "require": { - "typo3/cms-core": "12.4.8" + "typo3/cms-core": "12.4.20" }, "conflict": { "typo3/cms": "*" @@ -6487,24 +6772,24 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2023-11-14T09:26:32+00:00" + "time": "2024-09-10T07:47:57+00:00" }, { "name": "typo3/cms-scheduler", - "version": "v12.4.8", + "version": "v12.4.20", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/scheduler.git", - "reference": "c9b21e227a8667019e61928520be4e14c32781b7" + "reference": "0fa04a475abffcb1de0b767b3846b4dfe4a83f1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/scheduler/zipball/c9b21e227a8667019e61928520be4e14c32781b7", - "reference": "c9b21e227a8667019e61928520be4e14c32781b7", + "url": "https://api.github.com/repos/TYPO3-CMS/scheduler/zipball/0fa04a475abffcb1de0b767b3846b4dfe4a83f1c", + "reference": "0fa04a475abffcb1de0b767b3846b4dfe4a83f1c", "shasum": "" }, "require": { - "typo3/cms-core": "12.4.8" + "typo3/cms-core": "12.4.20" }, "conflict": { "typo3/cms": "*" @@ -6542,24 +6827,24 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2023-11-14T09:26:32+00:00" + "time": "2024-09-10T07:47:57+00:00" }, { "name": "typo3/cms-tstemplate", - "version": "v12.4.8", + "version": "v12.4.20", "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/tstemplate.git", - "reference": "8f41aa98d493e59ef45b415a01b01d9563d8cbff" + "reference": "059598019587dd53de637edcb2dde66b20c3d2ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/tstemplate/zipball/8f41aa98d493e59ef45b415a01b01d9563d8cbff", - "reference": "8f41aa98d493e59ef45b415a01b01d9563d8cbff", + "url": "https://api.github.com/repos/TYPO3-CMS/tstemplate/zipball/059598019587dd53de637edcb2dde66b20c3d2ec", + "reference": "059598019587dd53de637edcb2dde66b20c3d2ec", "shasum": "" }, "require": { - "typo3/cms-core": "12.4.8" + "typo3/cms-core": "12.4.20" }, "conflict": { "typo3/cms": "*" @@ -6600,7 +6885,7 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2023-11-14T09:26:32+00:00" + "time": "2024-09-10T07:47:57+00:00" } ], "aliases": [], diff --git a/ext_localconf.php b/ext_localconf.php index 12deb5f..20320b1 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -2,67 +2,20 @@ declare(strict_types=1); -use FriendsOfTYPO3\Headless\DataProcessing\FilesProcessor as BaseFilesProcessor; -use Remind\Headless\DataProcessing\FilesProcessor; -use TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider; -use TYPO3\CMS\Core\Imaging\IconRegistry; -use TYPO3\CMS\Core\Utility\GeneralUtility; - defined('TYPO3') or die; -(function () { - /* @var $iconRegistry \TYPO3\CMS\Core\Imaging\IconRegistry */ - $iconRegistry = GeneralUtility::makeInstance(IconRegistry::class); - - $iconRegistry->registerIcon( - 'content-footer', - SvgIconProvider::class, - ['source' => 'EXT:rmnd_headless/Resources/Public/Icons/content-footer.svg'] - ); +(function (): void { + $GLOBALS['TYPO3_CONF_VARS']['SYS']['features']['headless.elementBodyResponse'] = true; - $GLOBALS - ['TYPO3_CONF_VARS'] - ['SYS']['features'] - ['headless.elementBodyResponse'] = true; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['features']['headless.frontendUrls'] = true; - $GLOBALS - ['TYPO3_CONF_VARS'] - ['SYS']['features'] - ['headless.frontendUrls'] = true; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['EXT:headless/Resources/Private/Language/locallang.xlf'][] = 'EXT:rmnd_headless/Resources/Private/Language/Overrides/locallang_headless.xlf'; - $GLOBALS - ['TYPO3_CONF_VARS'] - ['SYS'] - ['locallangXMLOverride'] - ['EXT:headless/Resources/Private/Language/locallang.xlf'] - [] = 'EXT:rmnd_headless/Resources/Private/Language/Overrides/locallang_headless.xlf'; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['de']['EXT:headless/Resources/Private/Language/de.locallang.xlf'][] = 'EXT:rmnd_headless/Resources/Private/Language/Overrides/de.locallang_headless.xlf'; - $GLOBALS - ['TYPO3_CONF_VARS'] - ['SYS'] - ['locallangXMLOverride'] - ['de'] - ['EXT:headless/Resources/Private/Language/de.locallang.xlf'] - [] = 'EXT:rmnd_headless/Resources/Private/Language/Overrides/de.locallang_headless.xlf'; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['EXT:felogin/Resources/Private/Language/locallang.xlf'][] = 'EXT:rmnd_headless/Resources/Private/Language/Overrides/locallang_felogin.xlf'; - $GLOBALS - ['TYPO3_CONF_VARS'] - ['SYS'] - ['locallangXMLOverride'] - ['EXT:felogin/Resources/Private/Language/locallang.xlf'] - [] = 'EXT:rmnd_headless/Resources/Private/Language/Overrides/locallang_felogin.xlf'; - - $GLOBALS - ['TYPO3_CONF_VARS'] - ['SYS'] - ['locallangXMLOverride'] - ['de'] - ['EXT:felogin/Resources/Private/Language/de.locallang.xlf'] - [] = 'EXT:rmnd_headless/Resources/Private/Language/Overrides/de.locallang_felogin.xlf'; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['de']['EXT:felogin/Resources/Private/Language/de.locallang.xlf'][] = 'EXT:rmnd_headless/Resources/Private/Language/Overrides/de.locallang_felogin.xlf'; $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['default'] = 'EXT:rmnd_headless/Configuration/RTE/Default.yaml'; - - $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][BaseFilesProcessor::class] = [ - 'className' => FilesProcessor::class, - ]; })(); diff --git a/ext_tables.sql b/ext_tables.sql index 2c59fda..2bfe2ab 100644 --- a/ext_tables.sql +++ b/ext_tables.sql @@ -36,6 +36,7 @@ CREATE TABLE tt_content ( CREATE TABLE pages ( tx_headless_breadcrumbs_background_color VARCHAR(60), tx_headless_config mediumtext, + tx_headless_footer mediumtext, tx_headless_overview_label VARCHAR(60) DEFAULT '' NOT NULL, ); diff --git a/phpcs.xml b/phpcs.xml new file mode 100644 index 0000000..805ea01 --- /dev/null +++ b/phpcs.xml @@ -0,0 +1,6 @@ + + + public/* + vendor/* + + \ No newline at end of file diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..24295ba --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,7 @@ +parameters: + level: 8 + paths: + - . + excludePaths: + - public + - vendor