Files
VITEC-website/packages/vitec/Configuration/Backend/Modules.php
T
orascheandClaude Fable 5.2 8f8ae039d4 Real JSON null for empty product feature; SSR warm-cache button and CLI
Ticket 0068-FE: ProductFeatureJsonRenderer returned json_encode(null), which headless passes on as the STRING null (it only decodes object/array-looking strings) and crashed the front end. It now returns an empty string and the TypoScript field sets ifEmptyReturnNull = 1, giving a real JSON null. No other renderer used the pattern. Ticket 0066-FE: SsrPurgeService::warm() posts to the node /__warm endpoint (derived from SSR_PURGE_ENDPOINT, same secret), exposed as a Warm cache button with confirmation in the VITEC SSR module, a Cache warming progress row fed by /__health, and the CLI vitec:ssr-warm [paths]. Warm runs are deliberately not written to the purge log. Verified: two-path run 2/2 done, affected page delivers productfeature null.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-10 10:59:24 +01:00

157 lines
6.1 KiB
PHP

<?php
declare(strict_types=1);
use Evomedien\Vitec\Controller\Backend\ImportController;
use Evomedien\Vitec\Controller\Backend\ProductTextImportController;
use Evomedien\Vitec\Controller\Backend\SubmarketImportController;
use Evomedien\Vitec\Controller\Backend\SubsolutionImportController;
use Evomedien\Vitec\Controller\Backend\WordPressImportController;
use Evomedien\Vitec\Controller\OgImageController;
return [
'web_vitecimport' => [
'parent' => 'web',
'position' => ['after' => 'web_info'],
'access' => 'user',
'workspaces' => 'live',
'path' => '/module/web/vitec-import',
'labels' => [
'title' => 'VITEC Import',
'shortDescription' => 'CSV import for the VITEC domain models',
],
'extensionName' => 'Vitec',
'iconIdentifier' => 'vitec-import',
'routes' => [
'_default' => [
'target' => ImportController::class . '::indexAction',
],
'process' => [
'target' => ImportController::class . '::processAction',
'methods' => ['POST'],
],
'seo' => [
'target' => ImportController::class . '::seoAction',
],
'seo_upload' => [
'target' => ImportController::class . '::seoUploadAction',
'methods' => ['POST'],
],
'seo_aliases' => [
'target' => ImportController::class . '::seoAliasesAction',
'methods' => ['POST'],
],
'products' => [
'target' => ProductTextImportController::class . '::productsAction',
],
'product_edit' => [
'target' => ProductTextImportController::class . '::productEditAction',
],
'product_preview' => [
'target' => ProductTextImportController::class . '::productPreviewAction',
'methods' => ['POST'],
],
'product_apply' => [
'target' => ProductTextImportController::class . '::productApplyAction',
'methods' => ['POST'],
],
'submarkets' => [
'target' => SubmarketImportController::class . '::submarketsAction',
],
'submarket_upload' => [
'target' => SubmarketImportController::class . '::submarketUploadAction',
'methods' => ['POST'],
],
'submarket_process' => [
'target' => SubmarketImportController::class . '::submarketProcessAction',
'methods' => ['POST'],
],
'subsolutions' => [
'target' => SubsolutionImportController::class . '::subsolutionsAction',
],
'subsolution_upload' => [
'target' => SubsolutionImportController::class . '::subsolutionUploadAction',
'methods' => ['POST'],
],
'subsolution_process' => [
'target' => SubsolutionImportController::class . '::subsolutionProcessAction',
'methods' => ['POST'],
],
],
],
'web_vitecwpimport' => [
'parent' => 'web',
'position' => ['after' => 'web_vitecimport'],
'access' => 'user',
'workspaces' => 'live',
'path' => '/module/web/vitec-wp-import',
'labels' => [
'title' => 'WordPress Import',
'shortDescription' => 'Imports WordPress blog posts as news records',
],
'extensionName' => 'Vitec',
'iconIdentifier' => 'vitec-wpimport',
'routes' => [
'_default' => [
'target' => WordPressImportController::class . '::indexAction',
],
'import' => [
'target' => WordPressImportController::class . '::importAction',
'methods' => ['POST'],
],
],
],
'web_vitecogimage' => [
'parent' => 'web',
'position' => ['after' => 'web_info'],
'access' => 'user',
'workspaces' => 'live',
'path' => '/module/web/vitec-ogimage',
'labels' => [
'title' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_ogimage.xlf:mlang_tabs_tab',
'shortDescription' => 'LLL:EXT:vitec/Resources/Private/Language/locallang_ogimage.xlf:mlang_labels_tabdescr',
],
'extensionName' => 'Vitec',
'iconIdentifier' => 'vitec-ogimage',
'routes' => [
'_default' => [
'target' => OgImageController::class . '::indexAction',
],
'generate' => [
'target' => OgImageController::class . '::generateAction',
'methods' => ['POST'],
],
'preview' => [
'target' => OgImageController::class . '::previewAction',
'methods' => ['POST'],
],
],
],
'web_vitecssr' => [
'parent' => 'web',
'position' => ['after' => 'web_vitecimport'],
'access' => 'user',
'workspaces' => 'live',
'path' => '/module/web/vitec-ssr',
'labels' => [
'title' => 'VITEC SSR',
'shortDescription' => 'SSR delivery: VPS status, manual purge, purge/health protocol',
],
'extensionName' => 'Vitec',
'iconIdentifier' => 'actions-system-cache-clear-impact-medium',
'routes' => [
'_default' => [
'target' => \Evomedien\Vitec\Controller\Backend\SsrController::class . '::indexAction',
],
'purge' => [
'target' => \Evomedien\Vitec\Controller\Backend\SsrController::class . '::purgeAction',
'methods' => ['POST'],
],
'warm' => [
'target' => \Evomedien\Vitec\Controller\Backend\SsrController::class . '::warmAction',
'methods' => ['POST'],
],
],
],
];