Package 1: SsrPurgeService posts to the node /__purge (endpoint+secret in var/vitec-ssr-purge.env, outside git) and logs every attempt to tx_vitec_ssrpurgelog. DataHandler hooks queue per request and flush once: pages with nav-relevant field changes and all tx_news_/tx_vitec_ records purge everything, other page/content edits purge the hosting page path. Gated by the routing flag and the new Site Set switch vitec.ssr.autoPurge. Flipping the SSR switch ON purges everything once. CLI: vitec:ssr-purge, vitec:ssr-health (samples /__health into tx_vitec_ssrhealthlog, 14 days kept, scheduler-ready). Package 2: dashboard widgets vitecSsrStatus (live health, release, switch, last purge) and vitecSsrStats (purge counts, failures, uptime, response time). Package 3: backend module web_vitecssr with manual purge (paths or everything) and both protocols. Tested end to end against the running node (purge single/all 200, health sample logged). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
153 lines
5.9 KiB
PHP
153 lines
5.9 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'],
|
|
],
|
|
],
|
|
],
|
|
];
|