|
2 | 2 |
|
3 | 3 | namespace SilverStripe\Admin; |
4 | 4 |
|
5 | | -use SilverStripe\Control\Controller; |
6 | | -use SilverStripe\Control\HTTPRequest; |
7 | | -use SilverStripe\Control\HTTPResponse; |
| 5 | +use SilverStripe\Forms\Form; |
8 | 6 | use SilverStripe\Core\Convert; |
| 7 | +use SilverStripe\ORM\ArrayList; |
9 | 8 | use SilverStripe\Dev\BulkLoader; |
| 9 | +use SilverStripe\ORM\DataObject; |
| 10 | +use SilverStripe\View\ArrayData; |
10 | 11 | use SilverStripe\Dev\Deprecation; |
11 | | -use SilverStripe\Forms\CheckboxField; |
12 | 12 | use SilverStripe\Forms\FieldList; |
13 | 13 | use SilverStripe\Forms\FileField; |
14 | | -use SilverStripe\Forms\Form; |
15 | 14 | use SilverStripe\Forms\FormAction; |
| 15 | +use SilverStripe\Dev\CsvBulkLoader; |
| 16 | +use SilverStripe\Forms\HiddenField; |
| 17 | +use SilverStripe\Security\Security; |
| 18 | +use SilverStripe\Control\Controller; |
| 19 | +use SilverStripe\Forms\LiteralField; |
| 20 | +use SilverStripe\Control\HTTPRequest; |
| 21 | +use SilverStripe\Forms\CheckboxField; |
| 22 | +use SilverStripe\Control\HTTPResponse; |
| 23 | +use SilverStripe\ORM\ValidationResult; |
16 | 24 | use SilverStripe\Forms\GridField\GridField; |
17 | 25 | use SilverStripe\Forms\GridField\GridFieldConfig; |
18 | | -use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor; |
| 26 | +use SilverStripe\Forms\GridField\GridFieldPaginator; |
19 | 27 | use SilverStripe\Forms\GridField\GridFieldDetailForm; |
| 28 | +use SilverStripe\Forms\GridField\GridFieldPrintButton; |
20 | 29 | use SilverStripe\Forms\GridField\GridFieldExportButton; |
21 | 30 | use SilverStripe\Forms\GridField\GridFieldFilterHeader; |
22 | 31 | use SilverStripe\Forms\GridField\GridFieldImportButton; |
23 | | -use SilverStripe\Forms\GridField\GridFieldPaginator; |
24 | | -use SilverStripe\Forms\GridField\GridFieldPrintButton; |
25 | | -use SilverStripe\Forms\HiddenField; |
26 | | -use SilverStripe\Forms\LiteralField; |
27 | | -use SilverStripe\ORM\ArrayList; |
28 | | -use SilverStripe\ORM\DataObject; |
29 | | -use SilverStripe\ORM\ValidationResult; |
30 | | -use SilverStripe\Security\Security; |
31 | | -use SilverStripe\View\ArrayData; |
| 32 | +use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor; |
32 | 33 |
|
33 | 34 | /** |
34 | 35 | * Generates a three-pane UI for editing model classes, tabular results and edit forms. |
@@ -485,23 +486,25 @@ public function getManagedModels() |
485 | 486 | * with a default {@link CsvBulkLoader} class. In this case the column names of the first row |
486 | 487 | * in the CSV file are assumed to have direct mappings to properties on the object. |
487 | 488 | * |
488 | | - * @return array Map of model class names to importer instances |
| 489 | + * @return array Map of model keys to importer instances (same keys as $managed_models) |
489 | 490 | */ |
490 | 491 | public function getModelImporters() |
491 | 492 | { |
492 | | - $importerClasses = $this->config()->get('model_importers'); |
| 493 | + $importers = []; |
| 494 | + $importerSpec = $this->config()->get('model_importers'); |
| 495 | + $models = $this->getManagedModels(); |
493 | 496 |
|
494 | | - // fallback to all defined models if not explicitly defined |
495 | | - if (is_null($importerClasses)) { |
496 | | - $models = $this->getManagedModels(); |
497 | | - foreach ($models as $modelName => $options) { |
498 | | - $importerClasses[$modelName] = 'SilverStripe\\Dev\\CsvBulkLoader'; |
| 497 | + foreach ($models as $modelName => $options) { |
| 498 | + $modelClass = $options['dataClass']; |
| 499 | + if (isset($importerSpec[$modelName])) { |
| 500 | + $importerClass = $importerSpec[$modelName]; |
| 501 | + } elseif (isset($importerSpec[$modelClass])) { |
| 502 | + $importerClass = $importerSpec[$modelClass]; |
| 503 | + } else { |
| 504 | + $importerClass = CsvBulkLoader::class; |
499 | 505 | } |
500 | | - } |
501 | | - |
502 | | - $importers = array(); |
503 | | - foreach ($importerClasses as $modelClass => $importerClass) { |
504 | | - $importers[$modelClass] = new $importerClass($modelClass); |
| 506 | + // Needs to be indexed by name to avoid collisions |
| 507 | + $importers[$modelName] = new $importerClass($modelClass); |
505 | 508 | } |
506 | 509 |
|
507 | 510 | return $importers; |
@@ -608,7 +611,7 @@ public function import($data, $form, $request) |
608 | 611 |
|
609 | 612 | $importers = $this->getModelImporters(); |
610 | 613 | /** @var BulkLoader $loader */ |
611 | | - $loader = $importers[$this->modelClass]; |
| 614 | + $loader = $importers[$this->modelTab]; |
612 | 615 |
|
613 | 616 | // File wasn't properly uploaded, show a reminder to the user |
614 | 617 | if (empty($_FILES['_CsvFile']['tmp_name']) || |
|
0 commit comments