|
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