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>
112 lines
4.4 KiB
PHP
Executable File
112 lines
4.4 KiB
PHP
Executable File
<?php
|
|
declare(strict_types=1);
|
|
|
|
use TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider;
|
|
|
|
return [
|
|
'vitec-plugin-productlist' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-productlist.svg',
|
|
],
|
|
'vitec-plugin-simplecard' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-simplecard.svg',
|
|
],
|
|
'vitec-plugin-productshow' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-productshow.svg',
|
|
],
|
|
'vitec-plugin-usecaseshow' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-usecaseshow.svg',
|
|
],
|
|
'vitec-plugin-marketshow' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-marketshow.svg',
|
|
],
|
|
'vitec-plugin-solutionshow' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-solutionshow.svg',
|
|
],
|
|
'vitec-plugin-usecaselist' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-usecaselist.svg',
|
|
],
|
|
'vitec-plugin-eventlist' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-eventlist.svg',
|
|
],
|
|
'vitec-plugin-downloadcard' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-downloadcard.svg',
|
|
],
|
|
'vitec-plugin-downloadcardcollection' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-downloadcardcollection.svg',
|
|
],
|
|
'vitec-plugin-datasheets' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-datasheets.svg',
|
|
],
|
|
'vitec-cols-50-50' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-50-50.svg',
|
|
],
|
|
'vitec-cols-33-33-33' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-33-33-33.svg',
|
|
],
|
|
'vitec-cols-25-25-25-25' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-25-25-25-25.svg',
|
|
],
|
|
'vitec-cols-66-33' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-66-33.svg',
|
|
],
|
|
'vitec-cols-33-66' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-cols-33-66.svg',
|
|
],
|
|
'vitec-container' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-container.svg',
|
|
],
|
|
'vitec-ogimage' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-ogimage.svg',
|
|
],
|
|
'vitec-plugin-locationlist' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-locationlist.svg',
|
|
],
|
|
'vitec-plugin-marketlist' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-marketlist.svg',
|
|
],
|
|
'vitec-import' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-import.svg',
|
|
],
|
|
'vitec-plugin-customerlogos' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-customerlogos.svg',
|
|
],
|
|
'vitec-plugin-modelcard' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-modelcard.svg',
|
|
],
|
|
'vitec-plugin-contactform' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-contactform.svg',
|
|
],
|
|
'vitec-plugin-demoform' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-demoform.svg',
|
|
],
|
|
'vitec-plugin-helpdeskform' => [
|
|
'provider' => SvgIconProvider::class,
|
|
'source' => 'EXT:vitec/Resources/Public/Icons/vitec-plugin-helpdeskform.svg',
|
|
],
|
|
];
|