Cấu trúc Module

Một phần của tài liệu LMS CHO HỆ THỐNG ELEARNING CỦA KHOA HỌC CÔNG NGHỆ THÔNG TIN (Trang 35 - 46)

Module chính là các đơn vị riêng rẽ cấu thành nên Moodle. Các hoạt động (activity) hoặc tài nguyên (resource) cũng được xem là module. Moodle được xây dựng để nhiều người cùng nhau phát triển, tùy theo quan điểm về khóa học của mỗi người mà họ có thể tạo ra một module riêng. Ví dụ: có thể tạo ra module bài kiểm tra, module lý thuyết, module toán học…

Các module như: forum, choice, lesson, quiz, resource, servey, assignment, wockshop, chat…được đặt ở trong thư mục 'mod\'. Có một số module mặc định: assignment, choice, forum, journal, quiz, resource, và survey. Mỗi module là một thư mục con riêng biệt chứa các phần tử có tính bắt buộc sau:

 mod.html: form để nhập mới hoặc cập nhật thông tin cho mỗi thể

Tập tin Chức năng

adminlib.php Chứa các hàm cần dùng cho nhà quản trị.

weblib.php Chứa các hàm xuất kết quả dạng HTML. uploadlib.php Lớp điều khiển việc upload các file.

pagelib.php Chứa lớp cha của các trang trong Moodle.

Moodlelib.php Bộ thư viện chính của Moodle.

graphlib.php Lớp vẽ các hình đồ họa như đường thẳng, HCN…

gdlib.php Tập hợp các chức năng liên quan đến xử lý file ảnh.

filterlib.php Chứa các hàm riêng biệt hỗ trợ lọc dữ liệu.

datalib.php Thư viện chứa các hàm để thao tác với CSDL.

blocklib.php Chứa hàm cần thiết để sử dụng các khối.

hiện (instance) của module.

 version.php: thông tin về phiên bản.

 icon.gif: biểu tượng 16x16 pixel đại diện cho module.  db/: chứa file .sql tạo các bảng cần sử dụng cho module.

 index.php: trang liệt kê tất cả instance của module trong khóa học.  view.php: trang dùng để xem một instance.

 lib.php: chứa các hàm cần thiết để tạo nên một instance. Nếu tên module là mymodule, thì các hàm được yêu cầu bao gồm :

- mymodule_add_instance(): thêm một instance mymodule

mới.

- mymodule_update_instance(): cập nhật một instance đã có. - mymodule_delete_instance(): xóa một instance.

- mymodule_user_outline(): trả về tóm tắt ý kiến đóng góp của một người về một instance.

- mymodule_user_complete(): trả về đầy đủ ý kiến đóng góp của một người về một instance.

Cuối cùng, mỗi module có một số file ngôn ngữ chứa các chuỗi đặc trưng cho module đó.

Để ngăn chặn khả năng xung đột, bất kỳ hàm nào của module có tên

mymodule thì Moodle khuyến cáo nên đặt tên bắt đầu với mymodule_ và bất kỳ hằng nào được định nghĩa trong module nên bắt đầu với MYMODULE_.

Tìm hiểu mã nguồn module Lesson

Mỗi module giữ một vai trò riêng tuỳ thuộc vào mục đích sử dụng Moodle. Ở đây, trong khuôn khổ của đồ án tôi chỉ đề cập đến module lesson với mục đích sử dụng làm các câu hỏi ôn tập trong một khoá học mẫu.

Chức năng của module này là cho phép người giảng dạy tạo và quản lý một tập các trang được kết nối. Mỗi trang có thể kết thúc bởi một câu hỏi. Người học

trí cũ.

Cấu trúc của module lesson cũng bao gồm các file, thư mục bắt buộc như:

mod.html, version.php, icon.gif, index.php, view.php, lib.php, db/. Ngoài ra còn có thêm thư mục action/ (chứa các file sử lý các hành động của lesson: update, delete, updatepage, move, continue…), backuplib.php (chứa các hàm phục vụ chức năng sao lưu dự phòng các lesson), locallib.php (file thư viện cục bộ trong lesson, nó bao gồm các hàm chỉ được dùng trong lesson), highscores.php ( cung cấp một giao diện để hiển thị và thêm vào các điểm số cao),…

Để học viên có thể tham gia vào một lesson thì trước hết ta phải tạo ra lesson đó. File lib.php chứa các hàm cần thiết để tạo nên một lesson. Sau đây ta sẽ nghiên cứu một số hàm này.

Trước khi nghiên cứu một số hàm trong file lib.php ta tìm hiểu cấu trúc một lesson. Mỗi lesson được tổ chức thành các phần: các thiết lập cho các trang (lưu trong bảng lesson_pages), các thông số thời gian của lesson (bảng lesson_timer), các thiết lập điểm số lesson (bảng lesson_grades), các thông tin về điểm số cao (bảng lesson_high_scores). Với mỗi thiết lập cho trang câu hỏi (lesson_pages) lại có mức thấp hơn phụ thuộc vào nó: các nhánh câu hỏi (bảng phân nhánh: lesson_branch) và các thông số thiết lập câu trả lời (bảng lesson_answers). Phần các thông số thiết lập câu trả lời (lesson_answers) lại được chi tiết hơn bằng các đáp án, kèm theo thông tin người trả lời câu hỏi (bảng lesson_attempts). Chú ý, nếu các thiết lập của lesson (bảng lesson_pages) được chọn làm default thì ta có bảng lesson_default với các giá trị tương ứng. Cấu trúc đó được thể hiện dưới đây:

Hình 3.1: Cây cấu trúc của một lesson

Trong đó: pk là trường khoá chính trong bảng fk là khoá ngoài

CL là thông tin về khóa học mà chứa lesson

UL là thông tin của người dùng khi thực hiện lesson

Giải thích một số hàm được sử dụng trong file lib.php:

make_timestamp: tạo timestamp từ ngày, tháng, năm, giờ, phút, lesson_grades (UL, pk->id,fk->lessonid) lesson_high_scores (UL, pk->id,fk->lessonid) lesson_timer (UL, pk->id,fk->lessonid) lesson_pages (CL,pk->id,fk->lessonid) lesson_answers (CL,pk->id,fk->pageid) lesson_branch (UL, pk->id,fk->pageid) lesson_attempts (UL,pk->id,fk->answerid) lesson (CL, pk id) lesson_default (UL, pk->id,fk-courseid)

- time(): trả về thời gian hiện hành.

- addslashes(): xử lý các ký tự đặc biệt trong mẩu tin dữ liệu. - clean_param(): xoá các biến.

- get_field(): trả về giá trị của field từ một mẩu tin CSDL. - add_event(): thêm sự kiện vào lịch.

- insert_record(): chèn một mẩu tinvào bảng và trả về Id của mẩu tin đó. - update_record(): cập nhật một mẩu tin trong bảng.

- delete_records(): xóa một hay nhiều mẩu tin từ bảng. - get_record(): trả về một mẩu tin vào một đối tượng.

- get_records_select(): trả về một mảng đối tượng tương ứng với một số mẩu tin trong bảng.

- count_record(): đếm số mẩu tin trong bảng thỏa điều kiện.

Hàm thêm một instance lesson mới: lesson_add_instance

/* Hàm này sẽ tham chiếu tới các biến từ form trong file mod.html và lấy giá trị để tạo ra một instance lesson mới và trả về số id của instance mới này*/

define("LESSON_MAX_EVENT_LENGTH", "432000"); function lesson_add_instance($lesson) {

global $SESSION;

// thiết lập giá trị thời gian chỉnh sửa là thời gian hiện hành

$lesson->timemodified = time();

// thiết lập thời gian bắt đầu câu hỏi các giá trị đều lấy từ form mod.html

$lesson->available = make_timestamp($lesson->availableyear,

$lesson->availablemonth, $lesson->availableday, $lesson->availablehour, $lesson->availableminute);

.

// thiết lập thời gian kết thúc cho câu hỏi

$lesson->deadline = make_timestamp($lesson->deadlineyear,

$lesson->deadlinemonth, $lesson->deadlineday, $lesson->deadlinehour, $lesson->deadlineminute);

/* Kiểm tra giá trị các thông số: thời gian sử dụng, đựơc hoàn thành chưa, điểm số hoàn thành theo tỉ lệ % */

if(empty($lesson->timespent) or !is_numeric($lesson->timespent) or $lesson->timespent < 0)

{

$lesson->timespent = 0;// thời gian sử dụng=0 }

if(!isset($lesson->completed)) {

$lesson->completed = 0; // chưa được hoàn thành }

// kiểm tra biến điểm số hoàn thành theo tỉ lệ phần trăm

if(empty($lesson->gradebetterthan) or !is_numeric($lesson->timespent) or $lesson->gradebetterthan < 0) { $lesson->gradebetterthan = 0; } else if ($lesson->gradebetterthan > 100) { $lesson->gradebetterthan = 100; }

// truyền giá trị các biến trên vào các biến của đối tượng conditions

$conditions = new stdClass;

$conditions->timespent = $lesson->timespent; $conditions->completed = $lesson->completed; $conditions->gradebetterthan = clean_param($lesson->gradebetterthan, PARAM_INT); $lesson->conditions = addslashes(serialize($conditions)); unset($lesson->timespent); unset($lesson->completed); unset($lesson->gradebetterthan);

// thiết lập lại các giá trị định sẵn: // thời gian giới hạn của câu hỏi

$lesson->maxtime = clean_param($lesson->maxtime, PARAM_INT);

// chiều rộng của slide hiển thị câu hỏi

$lesson->width = clean_param($lesson->width, PARAM_INT);

// chiều cao của slide hiển thị câu hỏi

$lesson->height = clean_param($lesson->height, PARAM_INT);

// chiều rộng, cao của nút Close

$lesson->mediawidth = clean_param($lesson->mediawidth, PARAM_INT); $lesson->mediaheight = clean_param($lesson->mediaheight, PARAM_INT);

// Số lượng điểm cao để hiển thị

$lesson->password = md5($lesson->password); } else {

unset($lesson->password); }

/* Nếu như id bài học không đựơc đưa vào bảng và không trả về Id của mẩu tin đó thì return false */

if (!$lesson->id = insert_record("lesson", $lesson)) { return false;

}

/* chọn các thiết lập của lesson này làm default cho các lesson khác hay ko, nếu có thì các thông số mặc định sẽ có giá trị như sau */

if ($lesson->lessondefault) { $default = new stdClass; $default = clone($lesson); unset($default->lessondefault); unset($default->name); unset($default->timemodified); unset($default->available); unset($default->deadline);

if ($default->id = get_field("lesson_default", "id", "course", $default->course))

{

update_record("lesson_default", $default);// Cập nhật một mẩu tintrong bảng }

else {

insert_record("lesson_default", $default); /*Chèn một mẩu tinvào bảng và trả về Id của mẩu tinđó.*/

} } else {

unset($lesson->lessondefault); }

delete_records('event', 'modulename', 'lesson', 'instance', $lesson->id);

/* thiết lập trạng thái của lesson, nếu visible hiện thì các thông số của lesson như: tên bài học, miêu tả bài học, id khoá học, id nhóm, id người dùng, tên module, id của bài học, kiểu event, thời gian bắt đầu, trạng thái của instant, khoảng thời gian tồn tại bài học được gán vào event như sau: */

$event = new stdClass;

$event->name = $lesson->name; $event->description = $lesson->name; $event->courseid = $lesson->course; $event->groupid = 0;

$event->modulename = 'lesson'; $event->instance = $lesson->id; $event->eventtype = 'open';

$event->timestart = $lesson->available;

$event->visible = instance_is_visible('lesson', $lesson);

$event->timeduration = ($lesson->deadline - $lesson->available);

/* Nếu đã hết thời gian tồn tại câu hỏi thì một event khác sẽ được thực hiện và thiết lập lại một số thông số trên, lúc này lesson có trạng thái ẩn*/

if ($event->timeduration > LESSON_MAX_EVENT_LENGTH) {

$event2 = $event;

$event->name .= ' ('.get_string('lessonopens', 'lesson').')'; $event->timeduration = 0;

$event2->timestart = $lesson->deadline; $event2->eventtype = 'close';

$event2->timeduration = 0;

$event2->name .= ' ('.get_string('lessoncloses', 'lesson').')'; add_event($event2);

}

add_event($event);// thêm sự kiện vào danh sách return $lesson->id;

}

Hàm cập nhật một instance lesson đã có: lesson_update_instance

/* Hàm này sẽ lấy các giá trị của các biến từ form trong file mod.html và update vào một instance các dữ liệu mới */

function lesson_update_instance($lesson) { $lesson->timemodified = time();

$lesson->available = make_timestamp($lesson->availableyear,

$lesson->availablemonth, $lesson->availableday, $lesson->availablehour, $lesson->availableminute);

$lesson->deadline = make_timestamp($lesson->deadlineyear,

$lesson->deadlinemonth, $lesson->deadlineday, $lesson->deadlinehour, $lesson->deadlineminute);

$lesson->id = $lesson->instance;

if(empty($lesson->timespent) or !is_numeric($lesson->timespent) or $lesson- >timespent < 0)

if(!isset($lesson->completed)) { $lesson->completed = 0; }

if(empty($lesson->gradebetterthan) or !is_numeric($lesson->timespent) or $lesson- >gradebetterthan < 0) { $lesson->gradebetterthan = 0; } else if ($lesson->gradebetterthan > 100) { $lesson->gradebetterthan = 100; }

// Các điều kiện phụ thuộc

$conditions = new stdClass;

$conditions->timespent = $lesson->timespent; $conditions->completed = $lesson->completed; $conditions->gradebetterthan = $lesson->gradebetterthan; $lesson->conditions = addslashes(serialize($conditions)); unset($lesson->timespent); unset($lesson->completed); unset($lesson->gradebetterthan); if (!empty($lesson->password)) { $lesson->password = md5($lesson->password); } else { unset($lesson->password); } if ($lesson->lessondefault) { $default = new stdClass; $default = clone($lesson); unset($default->lessondefault); unset($default->name); unset($default->timemodified); unset($default->available); unset($default->deadline);

if ($default->id = get_field("lesson_default", "id", "course", $default->course)) { update_record("lesson_default", $default); } else { insert_record("lesson_default", $default); } } else { unset($lesson->lessondefault); }

// cập nhập vào lịch biểu các sự việc.

if ($events = get_records_select('event', "modulename = 'lesson'

and instance = '$lesson->id'")) { foreach($events as $event) {

} }

$event = new stdClass;

$event->name = $lesson->name; $event->description = $lesson->name; $event->courseid = $lesson->course; $event->groupid = 0; $event->userid = 0; $event->modulename = 'lesson'; $event->instance = $lesson->id; $event->eventtype = 'open'; $event->timestart = $lesson->available;

$event->visible = instance_is_visible('lesson', $lesson);

$event->timeduration = ($lesson->deadline - $lesson->available); if ($event->timeduration > LESSON_MAX_EVENT_LENGTH) { $event2 = $event;

$event->name .= ' ('.get_string('lessonopens', 'lesson').')'; $event->timeduration = 0;

$event2->timestart = $lesson->deadline; $event2->eventtype = 'close';

$event2->timeduration = 0;

$event2->name .= ' ('.get_string('lessoncloses', 'lesson').')'; add_event($event2);

}

add_event($event);

return update_record("lesson", $lesson); // Cập nhật một mẩu tintrong bảng }

Hàm xoá một instance lesson: lesson_delete_instance

/* Từ một số ID của một instant trong module. Hàm này sẽ tham chiếu đến để xoá instance và bất kỳ dữ liệu nào liên quan đến nó.*/

/* Như trên hình vẽ cấu trúc của lesson thì hàm này sẽ xoá cả các bản ghi có liên quan đến instant này trong các bảng: lesson_pages, lesson_answers, lesson_attempts, lesson_grades, lesson_timer, lesson_branch, lesson_high_scores.*/

}

$result = true;

// Kiểm tra việc xoá các bản ghi trong các bảng và trả về kết quả if (! delete_records("lesson", "id", "$lesson->id")) {

$result = false; }

if (! delete_records("lesson_pages", "lessonid", "$lesson->id")) { $result = false;

}

if (! delete_records("lesson_answers", "lessonid", "$lesson->id")) { $result = false;

}

if (! delete_records("lesson_attempts", "lessonid", "$lesson->id")) { $result = false;

}

if (! delete_records("lesson_grades", "lessonid", "$lesson->id")) { $result = false;

}

if (! delete_records("lesson_timer", "lessonid", "$lesson->id")) { $result = false;

}

if (! delete_records("lesson_branch", "lessonid", "$lesson->id")) { $result = false;

}

if (! delete_records("lesson_high_scores", "lessonid", "$lesson->id")) { $result = false;

}

/* Lấy về một mảng đối tượng tương ứng với một số mẩu tin trong bảng và lần lượt xoá nó */

if ($events = get_records_select('event', "modulename = 'lesson' and instance = '$lesson->id'")) { foreach($events as $event) { delete_event($event->id); } } return $result; }

/*Trong một đối tượng course hàm này sẽ xoá sạch mọi thứ của lesson kể cả những gì chưa dùng đến của các instant đã được xoá. Vì vậy, ở đây nó sẽ xoá tiếp bảng lesson_default */

/* Biến đối tượng $course là một đối tượng thể hiện của khoá học và nó đang được xoá. Biến $feedback là chỉ rõ kết quả trả về (true/false) của quá trình đưa ra bản tổng kết về quá trình làm việc của nó. */

function lesson_delete_course($course, $feedback=true) {

$count = count_records('lesson_default', 'course', $course->id); delete_records('lesson_default', 'course', $course->id);

if ($feedback) {

notify(get_string('deletedefaults', 'lesson', $count)); }

return true; }

Ngoài ra, trong file lib.php còn một số function thực hiện một số chức năng sau: - lesson_user_outline(): trả về tóm tắt ý kiến đóng góp của một

người về một instance.

- lesson_user_complete(): trả về đầy đủ ý kiến đóng góp của một người về một instance.

- lesson_print_recent_activity(): in ra danh sách các hoạt động gần đây của một instance

- lesson_grades(): trả về một mảng các điểm số cho một instance của module có được bởi người dùng. Hơn nữa nó còn cho phép trả về điểm số lớn nhất.

- lesson_get_participants(): trả về một mảng các bản ghi người sử dụng (người tham gia instance của lesson). Bao gồm nhiều người sử dụng với rất nhiều vai (student, teacher, admin…).

Một phần của tài liệu LMS CHO HỆ THỐNG ELEARNING CỦA KHOA HỌC CÔNG NGHỆ THÔNG TIN (Trang 35 - 46)

Tải bản đầy đủ (DOC)

(94 trang)
w