Skip to content

Commit cc58054

Browse files
committed
Script: Add conversion of cidReq markers in HTML files to replace_course_code script + options to preview without change - refs BT#22302
1 parent aff71f3 commit cc58054

File tree

1 file changed

+50
-25
lines changed

1 file changed

+50
-25
lines changed

tests/scripts/replace_course_code.php

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,16 @@
1717
$list = [
1818
'CURRENTCODE' => 'NEWCODE',
1919
];
20+
$previewMode = false;
21+
$updateFilesAndDirs = true;
2022

2123
foreach (replaceCodes($list) as $message) {
2224
echo time()." -- $message".PHP_EOL;
2325
};
2426

2527
function replaceCodes(array $list): Generator
2628
{
29+
global $updateFilesAndDirs, $previewMode;
2730
foreach ($list as $currentCode => $newCode) {
2831
$currentCodeExists = CourseManager::course_code_exists($currentCode);
2932

@@ -54,17 +57,22 @@ function replaceCodes(array $list): Generator
5457

5558
$newCode = CourseManager::generate_course_code($newCode);
5659

57-
yield "New code to use for '$currentCode' is '$newCode' and its directory is '$newDirectory'";
60+
yield "New code to use for '$currentCode' is '$newCode' and its (new) directory is '$newDirectory'";
61+
62+
if (false === $previewMode) {
63+
Database::update(
64+
'course',
65+
[
66+
'code' => $newCode,
67+
'visual_code' => $newVisualCode,
68+
'directory' => $newDirectory,
69+
],
70+
['code = ?' => [$currentCode]]
71+
);
72+
} else {
73+
yield " Course table not updated: previewMode=true";
74+
}
5875

59-
Database::update(
60-
'course',
61-
[
62-
'code' => $newCode,
63-
'visual_code' => $newVisualCode,
64-
'directory' => $newDirectory,
65-
],
66-
['code = ?' => [$currentCode]]
67-
);
6876

6977
$tablesWithCode = [
7078
'course_rel_class' => ['course_code'],
@@ -82,34 +90,51 @@ function replaceCodes(array $list): Generator
8290

8391
Database::query('SET foreign_key_checks = 0');
8492

85-
foreach ($tablesWithCode as $tblName => $fieldNames) {
86-
foreach ($fieldNames as $fieldName) {
87-
Database::update(
88-
$tblName,
89-
[$fieldName => $newCode],
90-
["$fieldName = ?" => [$currentCode]]
91-
);
93+
if (false === $previewMode) {
94+
foreach ($tablesWithCode as $tblName => $fieldNames) {
95+
foreach ($fieldNames as $fieldName) {
96+
Database::update(
97+
$tblName,
98+
[$fieldName => $newCode],
99+
["$fieldName = ?" => [$currentCode]]
100+
);
101+
}
92102
}
103+
} else {
104+
yield " Tables with course code not updated for $currentCode: previewMode=true";
93105
}
94106

95107
yield "Replacing course code in exercises content";
96108

97-
ExerciseLib::replaceTermsInContent("/courses/$currentDirectory/", "/courses/$newDirectory/");
98-
ExerciseLib::replaceTermsInContent("cidReq=$currentCode", "cidReq=$newCode");
109+
if (false === $previewMode) {
110+
ExerciseLib::replaceTermsInContent("/courses/$currentDirectory/", "/courses/$newDirectory/");
111+
ExerciseLib::replaceTermsInContent("cidReq=$currentCode", "cidReq=$newCode");
112+
} else {
113+
yield " Content replacement not executed: previewMode=true";
114+
}
99115

100116
yield "Replacing course code in HTML files";
101117

102118
$coursePath = api_get_path(SYS_COURSE_PATH);
103119

104-
exec('find '.$coursePath.$currentDirectory.'/document/ -type f -name "*.html" -exec sed -i '."'s#/courses/$currentDirectory/#/courses/$newDirectory/#g' {} +");
120+
if (false === $previewMode && true === $updateFilesAndDirs) {
121+
exec('find '.$coursePath.$currentDirectory.'/document/ -type f -name "*.html" -exec sed -i '."'s#/courses/$currentDirectory/#/courses/$newDirectory/#g' {} +");
122+
exec('find '.$coursePath.$currentDirectory.'/document/ -type f -name "*.html" -exec sed -i '."'s#cidReq=$currentCode#cidReq=$newCode#g' {} +");
123+
} else {
124+
yield " File changes ignored (variable updateFilesAndDirs set to false)";
125+
}
105126

106127
yield "Renaming course directory";
107128

108-
$fs = new Filesystem();
109-
$fs->rename(
110-
$coursePath.$currentDirectory,
111-
$coursePath.$newDirectory
112-
);
129+
if (false === $previewMode && true === $updateFilesAndDirs) {
130+
$fs = new Filesystem();
131+
$fs->rename(
132+
$coursePath.$currentDirectory,
133+
$coursePath.$newDirectory
134+
);
135+
} else {
136+
yield " Directory changes ignored (variable updateFilesAndDirs set to false)";
137+
}
113138
}
114139

115140
yield "Done";

0 commit comments

Comments
 (0)