Files
Documentation/Moodle/PHP/objpage.php
2025-08-20 23:33:52 +07:00

137 lines
4.5 KiB
PHP

<?php
// Định nghĩa là script CLI
define('CLI_SCRIPT', true);
// Nạp cấu hình Moodle
require_once(__DIR__ . '/config.php');
require_once($CFG->dirroot . '/course/lib.php');
require_once($CFG->dirroot . '/mod/page/lib.php');
class PageActivityGenerator {
protected $courseId;
protected $topicId;
protected $streamFile;
public function __construct($streamFile, $courseId, $topicId) {
$this->courseId = $courseId;
$this->topicId = $topicId;
$this->streamFile = $streamFile;
}
public function run() {
if (!file_exists($this->streamFile)) {
echo "Lỗi: Không tìm thấy file: {$this->streamFile}\n";
exit(1);
}
$lines = file($this->streamFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
list($filename, $url) = $this->parse_stream_line($line);
if (!$filename || !$url) {
echo "⚠️ Bỏ qua dòng không hợp lệ: $line\n";
continue;
}
$pageName = $this->ensure_utf8($filename);
$pageContent = $this->ensure_utf8('[stream=' . $url . ']');
$success = $this->create_page_activity($pageName, $pageContent);
if ($success) {
echo "✅ Đã tạo Page: $pageName\n";
}
}
}
protected function ensure_utf8($string) {
return mb_convert_encoding($string, 'UTF-8', mb_detect_encoding($string, 'UTF-8, ISO-8859-1, ISO-8859-15', true));
}
protected function parse_stream_line($line) {
if (preg_match('/\[stream=(.*?)\]/', $line, $matches)) {
$url = trim($matches[1]);
$filename = pathinfo($url, PATHINFO_FILENAME);
$filename_clean = preg_replace('/[^\p{L}\p{N}\s_-]/u', '', $filename); // Giữ unicode và ký tự hợp lệ
return [$filename_clean, $url];
}
return ['', ''];
}
protected function create_page_activity($pageName, $pageContent) {
global $DB;
try {
// Lấy thông tin course & topic
$course = $DB->get_record('course', ['id' => $this->courseId], '*', MUST_EXIST);
$section = $DB->get_record('course_sections', ['course' => $this->courseId, 'section' => $this->topicId], '*', MUST_EXIST);
// Tạo bản ghi trong bảng page
$page = (object)[
'course' => $this->courseId,
'name' => $pageName,
'content' => $pageContent,
'contentformat' => FORMAT_HTML,
'intro' => 'Automatically generated page activity.',
'introformat' => FORMAT_HTML,
'timemodified' => time()
];
$pageId = $DB->insert_record('page', $page);
if (!$pageId) {
throw new moodle_exception("Không thể tạo bản ghi trong bảng page.");
}
// Tạo bản ghi trong bảng course_modules
$module = $DB->get_record('modules', ['name' => 'page'], '*', MUST_EXIST);
$cm = (object)[
'course' => $this->courseId,
'module' => $module->id,
'instance' => $pageId,
'section' => $section->id,
'added' => time(),
'visible' => 1,
'visibleold' => 1,
'groupmode' => 0,
'groupingid' => 0,
'groupmembersonly' => 0
];
$cmid = $DB->insert_record('course_modules', $cm);
if (!$cmid) {
throw new moodle_exception("Không thể tạo bản ghi trong bảng course_modules.");
}
// Cập nhật chuỗi hoạt động của section
if (!empty($section->sequence)) {
$section->sequence .= ',' . $cmid;
} else {
$section->sequence = $cmid;
}
$DB->update_record('course_sections', $section);
// Làm mới cache khóa học
rebuild_course_cache($this->courseId);
return $pageId;
} catch (Exception $e) {
echo "❌ Lỗi: " . $e->getMessage() . "\n";
return false;
}
}
}
// CLI entry point
if ($argc !== 4) {
echo "Cách dùng: php script.php <stream_file> <courseid> <topicid>\n";
exit(1);
}
$streamFile = $argv[1];
$courseId = (int)$argv[2];
$topicId = (int)$argv[3];
$generator = new PageActivityGenerator($streamFile, $courseId, $topicId);
$generator->run();