Skip to content

Commit b380b79

Browse files
committed
feat(form): version check of file on import
allows import of files without version data, at own risk of the admin Signed-off-by: Thierry Bugier <tbugier@teclib.com>
1 parent 76b2aae commit b380b79

File tree

4 files changed

+27
-4
lines changed

4 files changed

+27
-4
lines changed

front/export.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
}
3939

4040
$form = new PluginFormcreatorForm;
41-
$export_array = ['forms' => []];
41+
$export_array = ['schema_version' => PLUGIN_FORMCREATOR_SCHEMA_VERSION, 'forms' => []];
4242
foreach ($_GET['plugin_formcreator_forms_id'] as $id) {
4343
$form->getFromDB($id);
4444
$export_array['forms'][] = $form->export();

inc/condition.class.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,14 @@ public function export($remove_uuid = false) {
174174
$question = new PluginFormcreatorQuestion();
175175
$question->getFromDB($condition['plugin_formcreator_questions_id']);
176176
$condition['plugin_formcreator_questions_id'] = $question->fields['uuid'];
177+
178+
$containerType = $condition['itemtype'];
179+
if (!class_exists($containerType) || !is_subclass_of($containerType, PluginFormcreatorConditionnableInterface::class)) {
180+
return false;
181+
}
182+
$container = new $containerType();
183+
$container->getFromDB($condition['items_id']);
184+
$condition['items_id'] = $container->fields['uuid'];
177185
}
178186
unset($condition[$idToRemove]);
179187

inc/form.class.php

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1810,17 +1810,31 @@ public function importJson($params = []) {
18101810
// parse json file(s)
18111811
foreach ($params['_json_file'] as $filename) {
18121812
if (!$json = file_get_contents(GLPI_TMP_DIR."/".$filename)) {
1813-
Session::addMessageAfterRedirect(__("Forms import impossible, the file is empty"));
1813+
Session::addMessageAfterRedirect(__("Forms import impossible, the file is empty", 'formcreator'));
18141814
continue;
18151815
}
18161816
if (!$forms_toimport = json_decode($json, true)) {
1817-
Session::addMessageAfterRedirect(__("Forms import impossible, the file seems corrupt"));
1817+
Session::addMessageAfterRedirect(__("Forms import impossible, the file seems corrupt", 'formcreator'));
18181818
continue;
18191819
}
18201820
if (!isset($forms_toimport['forms'])) {
1821-
Session::addMessageAfterRedirect(__("Forms import impossible, the file seems corrupt"));
1821+
Session::addMessageAfterRedirect(__("Forms import impossible, the file seems corrupt", 'formcreator'));
18221822
continue;
18231823
}
1824+
if (isset($forms_toimport['schema_version'])) {
1825+
if (($forms_toimport['schema_version']) != PLUGIN_FORMCREATOR_SCHEMA_VERSION) {
1826+
Session::addMessageAfterRedirect(
1827+
__("Forms import impossible, the file was generated with another version", 'formcreator'),
1828+
false, ERROR
1829+
);
1830+
continue;
1831+
}
1832+
} else {
1833+
Session::addMessageAfterRedirect(
1834+
__("The file does not specifies the schema version. It was probably generated with a version older than 2.10 and import is expected to create incomplete or buggy forms.", 'formcreator'),
1835+
false, WARNING
1836+
);
1837+
}
18241838

18251839
$success = true;
18261840
foreach ($forms_toimport['forms'] as $form) {

tests/suite-unit/PluginFormcreatorCondition.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ public function testExport() {
175175
// Test the exported data
176176
$fieldsWithoutID = [
177177
'itemtype',
178+
'items_id',
178179
'plugin_formcreator_questions_id',
179180
'show_condition',
180181
'show_value',

0 commit comments

Comments
 (0)