Skip to content

Commit 5f87db6

Browse files
Admin: Fix course CSV import: Preserve existing non-required fields - refs BT#21441
Author: @christianbeeznest
1 parent 6a57e1b commit 5f87db6

File tree

1 file changed

+37
-21
lines changed

1 file changed

+37
-21
lines changed

main/admin/course_update_import.php

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -103,24 +103,39 @@ function validateCourseData(array $courses): array
103103
function updateCourse(array $courseData, int $courseId): void
104104
{
105105
$courseTable = Database::get_main_table(TABLE_MAIN_COURSE);
106+
$fieldsMapping = [
107+
'Title' => 'title',
108+
'Language' => 'course_language',
109+
'CourseCategory' => 'category_code',
110+
'Visibilit' => 'visibility',
111+
];
106112
$params = [];
107-
if (isset($courseData['Title'])) {
108-
$params['title'] = $courseData['Title'];
109-
}
110-
if (isset($courseData['Language'])) {
111-
$params['course_language'] = $courseData['Language'];
112-
}
113-
if (isset($courseData['CourseCategory'])) {
114-
$params['category_code'] = $courseData['CourseCategory'];
115-
}
116-
if (isset($courseData['Visibility'])) {
117-
$params['visibility'] = $courseData['Visibility'];
113+
foreach ($fieldsMapping as $inputField => $dbField) {
114+
if (isset($courseData[$inputField])) {
115+
$params[$dbField] = $courseData[$inputField];
116+
}
118117
}
118+
119119
Database::update($courseTable, $params, ['id = ?' => $courseId]);
120-
$courseData['code'] = $courseData['Code'];
121-
$courseData['item_id'] = $courseId;
122-
$courseFieldValue = new ExtraFieldValue('course');
123-
$courseFieldValue->saveFieldValues($courseData);
120+
121+
if (isset($courseData['extra'])) {
122+
$courseData['extra']['code'] = $courseData['Code'];
123+
$courseData['extra']['item_id'] = $courseId;
124+
$saveOnlyThisFields = [];
125+
foreach ($courseData['extra'] as $key => $value) {
126+
$newKey = preg_replace('/^extra_/', '', $key);
127+
$saveOnlyThisFields[] = $newKey;
128+
}
129+
$courseFieldValue = new ExtraFieldValue('course');
130+
$courseFieldValue->saveFieldValues(
131+
$courseData['extra'],
132+
false,
133+
false,
134+
$saveOnlyThisFields,
135+
[],
136+
true
137+
);
138+
}
124139
}
125140

126141
/**
@@ -150,7 +165,7 @@ function parseCsvCourseData(string $file, array $extraFields): array
150165
}
151166
if (in_array($key, array_column($extraFields, 'variable'))) {
152167
$processedValue = processExtraFieldValue($key, $value, $extraFields);
153-
$courseData['extra_'.$key] = $processedValue;
168+
$courseData['extra']['extra_'.$key] = $processedValue;
154169
} else {
155170
$courseData[$key] = $value;
156171
}
@@ -181,7 +196,7 @@ function parseXmlCourseData(string $file, array $extraFields): array
181196
$value = $node->nodeValue;
182197
if (in_array($key, array_column($extraFields, 'variable'))) {
183198
$processedValue = processExtraFieldValue($key, $value, $extraFields);
184-
$courseData['extra_'.$key] = $processedValue;
199+
$courseData['extra']['extra_'.$key] = $processedValue;
185200
} else {
186201
$courseData[$key] = $value;
187202
}
@@ -219,6 +234,7 @@ function processExtraFieldValue(string $fieldName, $value, array $extraFields)
219234
if ($value == '1') {
220235
$newValue = ['extra_'.$fieldName => '1'];
221236
}
237+
222238
return $newValue;
223239
case ExtraField::FIELD_TYPE_TAG:
224240
return explode(',', $value);
@@ -345,9 +361,9 @@ function showFileType(type) {
345361

346362
$csvContent = generateCsvModel($extraFields);
347363
$xmlContent = generateXmlModel($extraFields);
348-
echo '<div id="csv-model"><p>' . get_lang('CSVMustLookLike') . ' (' . get_lang('MandatoryFields') . '):</p>';
349-
echo '<blockquote><pre>' . $csvContent . '</pre></blockquote></div>';
350-
echo '<div id="xml-model" style="display: none;"><p>' . get_lang('XMLMustLookLike') . ' (' . get_lang('MandatoryFields') . '):</p>';
351-
echo '<blockquote><pre>' . $xmlContent . '</pre></blockquote></div>';
364+
echo '<div id="csv-model"><p>'.get_lang('CSVMustLookLike').' ('.get_lang('MandatoryFields').'):</p>';
365+
echo '<blockquote><pre>'.$csvContent.'</pre></blockquote></div>';
366+
echo '<div id="xml-model" style="display: none;"><p>'.get_lang('XMLMustLookLike').' ('.get_lang('MandatoryFields').'):</p>';
367+
echo '<blockquote><pre>'.$xmlContent.'</pre></blockquote></div>';
352368

353369
Display::display_footer();

0 commit comments

Comments
 (0)