1 <?php
2 3 4 5 6
7 class ImportAdmin extends ModelAdmin {
8
9 public static $managed_models = array(
10 'ImportLog'
11 );
12
13 static $url_segment = 'import';
14 static = 'Import';
15 static = -10;
16
17 public static $collection_controller_class = "ImportAdmin_CollectionController";
18
19 function getLastLog(){
20 return ImportLog::get_last_log();
21 }
22
23 function getWaitforstart() {
24 return file_exists(CatalogImportTask::absolute_import_path('start_ok'));
25 }
26
27 function getIsImportCanceled() {
28 $rs = Session::get('Import.ImportCanceled');
29 Session::clear('Import.ImportCanceled');
30 return $rs;
31 }
32
33 function getImportValidationMessage() {
34 $rs = Session::get('Import.ValidationMessage');
35 Session::clear('Import.ValidationMessage');
36 return $rs;
37 }
38
39 }
40
41
42 class ImportAdmin_CollectionController extends ModelAdmin_CollectionController {
43
44 public function () {
45 return $this->renderWith('ImportAdminModelSidebar');
46 }
47
48 public function ImportForm() {
49 $sc = SiteConfig::current_site_config();
50 $fields = new FieldSet();
51
52 $fileField = new FileField('ImportFile', _t('ImportAdmin.ImportFile','Import File'));
53 $fileField->allowedExtensions = array('xml');
54 $uploadValidator = new Upload_Validator();
55 $uploadValidator->setAllowedExtensions(array('xml'));
56 $fileField->setValidator($uploadValidator);
57 $fields->push($fileField);
58
59 $fields->push(new DropdownField("StartPage", _t('ImportSiteConfig.StartPage', 'Start Page'), $sc->getImportStartPageMap(), $sc->StartPage));
60 $fields->push(new DropdownField('ImportMode', _t('ImportAdmin.ImportMode','Import Mode'), $sc->getImportModeMap(), $sc->ImportMode));
61 $fields->push(new DropdownField('OldItemAction', _t('ImportSiteConfig.OldItemAction','OldItemAction'), $sc->getOldItemActionMap(), $sc->OldItemAction));
62 $fields->push(new CheckboxField('ClearCategory', _t('ImportAdmin.ClearCategory','Clear Category'), $sc->ClearCategory=='true'));
63 $fields->push(new CheckboxField('ClearProducts', _t('ImportAdmin.ClearProducts','Clear Products'), $sc->ClearProducts=='true'));
64
65
66
67 $actions = new FieldSet(
68 new FormAction('prepareImport', _t('ImportAdmin.PrepareImport','Prepare Import')),
69 new FormAction('cancelImport', _t('ImportAdmin.CancelImport','Cancel Import')),
70 new FormAction('validateImport', _t('ImportAdmin.ValidateImport','Validate Import File'))
71 );
72
73 $validator = new RequiredFields(array('ImportFile', 'ImportMode'));
74 $validator->setJavascriptValidationHandler('none');
75
76 $form = new Form(
77 $this,
78 'ImportForm',
79 $fields,
80 $actions,
81 $validator
82 );
83 return $form;
84
85 }
86
87 88 89 90 91 92 93
94 function prepareImport($data, $form) {
95 if (isset($data['ImportFile']['tmp_name']) && is_file($data['ImportFile']['tmp_name'])) {
96 move_uploaded_file($data['ImportFile']['tmp_name'], CatalogImportTask::import_filepath());
97 $config = $this->customise(
98 array(
99 'Data' => $data
100 )
101 )->renderWith('Config');
102 file_put_contents(CatalogImportTask::absolute_import_path('config.xml'), $config);
103 file_put_contents(CatalogImportTask::absolute_import_path('start_ok'), 'import by cms');
104 $form->sessionMessage(_t('ImportAddmin.ImportTaskCreated', 'File is uploded. Import start closely.'), 'info');
105
106 if (file_exists(CatalogImportTask::absolute_import_path('cancelImport')))
107 unlink(CatalogImportTask::absolute_import_path('cancelImport'));
108 if (file_exists(CatalogImportTask::absolute_import_path('validateImport')))
109 unlink(CatalogImportTask::absolute_import_path('validateImport'));
110 }
111 else {
112 }
113 Director::redirectBack();
114
115 }
116
117 118 119 120 121 122 123
124 function cancelImport($data, $form) {
125 if (is_file(CatalogImportTask::absolute_import_path('config.xml')))
126 unlink(CatalogImportTask::absolute_import_path('config.xml'));
127 if (is_file(CatalogImportTask::absolute_import_path('start_ok'))) {
128 unlink(CatalogImportTask::absolute_import_path('start_ok'));
129 $form->sessionMessage(_t('ImportAdmin.ImportTaskCanceled', 'Import Canceled.'), 'info');
130 Session::set('Import.ImportCanceled', _t('ImportAdmin.ImportTaskCanceled', 'Import Canceled.'));
131 }
132 Director::redirectBack();
133 }
134
135 136 137 138
139 function validateImport($data, $form) {
140 if (isset($data['ImportFile']['tmp_name']) && ($data['ImportFile']['size'] > 0) && is_file($data['ImportFile']['tmp_name'])) {
141 $validator = new XMLValidate($data['ImportFile']['tmp_name'], CatalogImportTask::xml_validate_file_path());
142 $rs = $validator->validate();
143 if ($rs != 'validated') {
144 $errorText = '';
145 foreach ($rs as $error)
146 $errorText .= _t('CatalogImportTask.ValidationError', 'Validation Error') . ': ' . $error . '<br>';
147 if ($errorText) {
148 Session::set('Import.ValidationMessage', $errorText);
149 }
150 } else {
151
152 if (is_file(CatalogImportTask::absolute_import_path('validateImport'))) {
153 unlink(CatalogImportTask::absolute_import_path('validateImport'));
154 }
155 Session::set('Import.ValidationMessage', _t('ImportAdmin.ValidationSuccess', 'Validation Success'));
156 }
157 unlink($data['ImportFile']['tmp_name']);
158 }
159 Director::redirectBack();
160 }
161
162 public function CreateForm() {
163 return false;
164 }
165
166 function getResultsTable($searchCriteria) {
167 $tf = parent::getResultsTable($searchCriteria);
168 169 170 171 172 173
174 return $tf;
175 }
176 }
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-