Upload to Git
Upload to Git
This commit is contained in:
151
Moodle/move_pages_to_topics.php
Normal file
151
Moodle/move_pages_to_topics.php
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Thêm các thư viện cần thiết của Moodle
|
||||||
|
define('CLI_SCRIPT', true);
|
||||||
|
require_once(__DIR__ . '/config.php');
|
||||||
|
|
||||||
|
global $CFG, $DB;
|
||||||
|
require_once($CFG->dirroot . '/lib/clilib.php');
|
||||||
|
require_once($CFG->dirroot . '/lib/moodlelib.php');
|
||||||
|
require_once($CFG->dirroot . '/course/lib.php');
|
||||||
|
|
||||||
|
// Đặt các tham số CLI
|
||||||
|
list($options, $unrecognised) = cli_get_params([
|
||||||
|
'courseid' => 0,
|
||||||
|
'help' => false,
|
||||||
|
], [
|
||||||
|
'c' => 'courseid',
|
||||||
|
'h' => 'help',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Hiển thị trợ giúp nếu cần
|
||||||
|
if ($options['help'] || !is_numeric($options['courseid']) || $options['courseid'] <= 0) {
|
||||||
|
$help = "Di chuyển các trang trong Moodle.\n\n" .
|
||||||
|
"Sử dụng: php move_pages_to_topics.php [OPTIONS]\n" .
|
||||||
|
" --courseid, -c COURSEID ID của khóa học (bắt buộc).\n" .
|
||||||
|
" --help, -h Hiển thị trợ giúp này.\n";
|
||||||
|
echo $help;
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$courseid = (int)$options['courseid'];
|
||||||
|
|
||||||
|
// Lấy thông tin khóa học và các section
|
||||||
|
$course = $DB->get_record('course', ['id' => $courseid], '*', MUST_EXIST);
|
||||||
|
$sections = $DB->get_records('course_sections', ['course' => $courseid], 'section ASC');
|
||||||
|
|
||||||
|
cli_heading("Bắt đầu di chuyển các trang cho khóa học ID: $courseid");
|
||||||
|
|
||||||
|
$count_moved = 0;
|
||||||
|
$count_total = 0;
|
||||||
|
|
||||||
|
// Lấy ID của module 'page'
|
||||||
|
$page_module_id = $DB->get_field('modules', 'id', ['name' => 'page']);
|
||||||
|
|
||||||
|
if (!$page_module_id) {
|
||||||
|
cli_write("Không tìm thấy module 'page'. Kiểm tra cài đặt Moodle.");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lấy tất cả các module 'page' trong toàn bộ khóa học
|
||||||
|
$all_pages_in_course = $DB->get_records('course_modules', ['course' => $courseid, 'module' => $page_module_id]);
|
||||||
|
|
||||||
|
if (empty($all_pages_in_course)) {
|
||||||
|
cli_write("Không tìm thấy trang nào trong khóa học này. Kết thúc.");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lặp qua tất cả các trang trong khóa học
|
||||||
|
foreach ($all_pages_in_course as $cm) {
|
||||||
|
$count_total++;
|
||||||
|
|
||||||
|
$page = $DB->get_record('page', ['id' => $cm->instance]);
|
||||||
|
if (!$page) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$page_name = $page->name;
|
||||||
|
|
||||||
|
cli_write("Đang xử lý trang: " . $page_name);
|
||||||
|
|
||||||
|
$page_name_lowercase = strtolower($page_name);
|
||||||
|
|
||||||
|
// Lấy một từ khóa duy nhất từ tên trang
|
||||||
|
$main_keyword = '';
|
||||||
|
preg_match_all('/\b([a-z]{5,})\b/', $page_name_lowercase, $matches);
|
||||||
|
if (!empty($matches[1])) {
|
||||||
|
// Lấy từ đầu tiên có ý nghĩa
|
||||||
|
$main_keyword = $matches[1][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($main_keyword)) {
|
||||||
|
cli_write(" -> Không tìm thấy từ khóa có ý nghĩa trong tên trang. Bỏ qua trang này.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$best_match_section = null;
|
||||||
|
$found_match = false;
|
||||||
|
|
||||||
|
// Lặp qua tất cả các section để tìm section phù hợp
|
||||||
|
foreach ($sections as $section) {
|
||||||
|
if ($section->id === $cm->section) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$section_name = '';
|
||||||
|
if ($section->name) {
|
||||||
|
$section_name = $section->name;
|
||||||
|
} else {
|
||||||
|
$section_name = get_string('topic', 'moodle') . ' ' . $section->section;
|
||||||
|
}
|
||||||
|
$section_name_lowercase = strtolower($section_name);
|
||||||
|
|
||||||
|
// Kiểm tra xem từ khóa chính của trang có trong tên section không
|
||||||
|
if (str_contains($section_name_lowercase, $main_keyword)) {
|
||||||
|
$best_match_section = $section;
|
||||||
|
$found_match = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($found_match) {
|
||||||
|
// Kiểm tra xem trang đã ở đúng chỗ chưa
|
||||||
|
if ($cm->section === $best_match_section->id) {
|
||||||
|
cli_write(" -> Trang đã ở đúng section: " . $best_match_section->name . ". Bỏ qua.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
cli_write(" -> Tìm thấy sự trùng khớp với section: " . $best_match_section->name);
|
||||||
|
|
||||||
|
$old_section = $DB->get_record('course_sections', ['id' => $cm->section]);
|
||||||
|
if (!$old_section) {
|
||||||
|
cli_write(" -> Lỗi: Không tìm thấy section cũ. Bỏ qua trang này.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$modid_to_move = $cm->id;
|
||||||
|
|
||||||
|
$old_sequence = explode(',', $old_section->sequence);
|
||||||
|
$new_sequence = explode(',', $best_match_section->sequence);
|
||||||
|
|
||||||
|
if (($key = array_search($modid_to_move, $old_sequence)) !== false) {
|
||||||
|
unset($old_sequence[$key]);
|
||||||
|
}
|
||||||
|
$old_section->sequence = implode(',', array_filter($old_sequence));
|
||||||
|
|
||||||
|
$new_sequence[] = $modid_to_move;
|
||||||
|
$best_match_section->sequence = implode(',', array_filter($new_sequence));
|
||||||
|
|
||||||
|
$DB->set_field('course_modules', 'section', $best_match_section->id, ['id' => $modid_to_move]);
|
||||||
|
$DB->update_record('course_sections', $old_section);
|
||||||
|
$DB->update_record('course_sections', $best_match_section);
|
||||||
|
|
||||||
|
rebuild_course_cache($courseid, true);
|
||||||
|
|
||||||
|
cli_write(" -> Đã di chuyển thành công!");
|
||||||
|
$count_moved++;
|
||||||
|
} else {
|
||||||
|
cli_write(" -> Không tìm thấy sự trùng khớp phù hợp. Bỏ qua trang này.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cli_write("Hoàn thành! Đã di chuyển $count_moved trên tổng số $count_total trang.");
|
Reference in New Issue
Block a user