Backend module: CSV import for the VITEC domain models
New "VITEC Import" module under Web: one import page per domain model (v1: Market, Solution, Product - registry-driven, adding a model is one config entry). Workflow: upload a CSV (delimiter and encoding are auto-detected, including German-Excel semicolon/Windows-1252), map CSV columns to DB fields, persist the mapping per model together with the identity field used for matching (new table tx_vitec_import_mapping, no TCA - pure tool configuration), review a unified list of CSV rows matched against the DB records (new / update with differing fields / unchanged / db-only), then apply the checked rows through DataHandler. Each importable row carries an editable JSON payload textarea - what is written is the textarea content, not the raw CSV, so editors can fix values right in the review step. The parsed CSV travels through the form as a hidden JSON field: no session state, no temp files. Importable fields are derived from TCA at runtime (scalar types only; files, categories and other relations are excluded - a flat CSV cannot carry them). Payloads are whitelisted against that field list on apply; new records require a storage pid (prefilled from existing records). BE user permissions apply via DataHandler. Deliberately out of v1: import log with three-way compare (protection against overwriting manual edits), images/relations, multiple saved mappings per model. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
baa0fdd331
commit
10c0328bf2
9 files changed
+831
No files matched your search
@@ -2,9 +2,32 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Evomedien\Vitec\Controller\Backend\ImportController;
|
||||
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'],
|
||||
],
|
||||
],
|
||||
],
|
||||
'web_vitecogimage' => [
|
||||
'parent' => 'web',
|
||||
'position' => ['after' => 'web_info'],
|
||||
|
||||
Reference in new issue
Block a user