From e000b17b562987f608c09dda88ae1c5963013e1a Mon Sep 17 00:00:00 2001 From: NicoDucou Date: Tue, 8 Aug 2023 10:11:08 +0200 Subject: [PATCH] Script: to update course extra fields based on other extra field value -refs BT#20813 --- ...afield_based_on_other_extrafield_value.php | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tests/scripts/update_course_extrafield_based_on_other_extrafield_value.php diff --git a/tests/scripts/update_course_extrafield_based_on_other_extrafield_value.php b/tests/scripts/update_course_extrafield_based_on_other_extrafield_value.php new file mode 100644 index 0000000000..8f1436a1a0 --- /dev/null +++ b/tests/scripts/update_course_extrafield_based_on_other_extrafield_value.php @@ -0,0 +1,64 @@ + [ + 'SourceExtraFieldName' => 'region', + 'SourceExtraFieldValue' => '("NAISAUKI", "ME", "NA")', + 'UpdateExtraFieldName' => 'segment', + 'UpdateExtraFieldValue' => 'GEEMS' + ], + '2' => [ + 'SourceExtraFieldName' => 'region', + 'SourceExtraFieldValue' => '("IBILAT", "FAB", "TR", "EE", "DE")', + 'UpdateExtraFieldName' => 'segment', + 'UpdateExtraFieldValue' => 'EASA' + ], + '3' => [ + 'SourceExtraFieldName' => 'region', + 'SourceExtraFieldValue' => '("CN", "EA")', + 'UpdateExtraFieldName' => 'segment', + 'UpdateExtraFieldValue' => 'CEA' + ] +]; + +// Internal variables +$courseExtraField = EntityExtraField::COURSE_FIELD_TYPE; +$ExtraFieldTable = Database::get_main_table(TABLE_EXTRA_FIELD); +$ExtraFieldValueTable = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES); + +foreach ($rules as $rule) { + $sqlCourseIds = "select item_id + from " . $ExtraFieldValueTable . " + where field_id in + (select id from " . $ExtraFieldTable . " + where variable = '". $rule['SourceExtraFieldName'] . "' + and extra_field_type = '" . $courseExtraField ."') + and value in " . $rule['SourceExtraFieldValue'] . ";"; + $ResultCourseIds = Database::query($sqlCourseIds); + while ($data = Database::fetch_array($ResultCourseIds)) { + // See tests/scripts/synchronize_user_base_from_ldap.php for global entities update at once for better performance if necessary + $courseInfo = api_get_course_info_by_id($data['item_id']); + $courseCode = $courseInfo['code']; + $saved = CourseManager::update_course_extra_field_value($courseCode, $rule['UpdateExtraFieldName'], $rule['UpdateExtraFieldValue']); + if ($saved) { + echo "Updating extrafield " . $rule['UpdateExtraFieldName'] . " with value " . $rule['UpdateExtraFieldValue'] . " for course with code = " . $courseCode . PHP_EOL; + } + } +} + +?>