2012-10-18 55 views
0

我想用PHP創建一個論壇到Moodle課程(由用戶指定)通過外部PHP在Moodle創建論壇

我試過尋找它的網絡,但我還沒有找到任何東西,即使在Moodle的webservices(我找不到函數來創建一個論壇)。

的想法是選擇課程(一個在他/她會學習),選擇「單元」,插入一個標題和內容並提交(該用戶其餘選項可以是默認選項)。

我可以從數據庫檢索所需的所有數據,但是我無法創建任何論壇。我已經嘗試通過SQL添加它,但我還沒有能夠也沒有

希望這裏有人能幫助我!

謝謝你的時間。

回答

2

如果要直接建立一個論壇,然後你需要做以下步驟 -

  1. 插入新記錄mdl_forum表,並得到插入ID
  2. 插入新記錄mdl_course_module表以下值 course = courseid,module = 7(對於論壇,在moodle 2.9論壇ID爲9),instance = fourmid,visible = 1,showavailability = 1
  3. 插入記錄(如果不存在)或更新記錄到mdl_course_section與下面的值,並得到sectionid 當然= courseid,可見= 1,序列=的moduleId(逗號seprated),

  4. 更新mdl_course_module表和更新sectionid

最後重建moodle coures緩存

以下是創建新的fourm的moodle代碼。

$forum = new stdClass(); 
$forum->course = $courseid; 
$forum->type = "general";  
$forum->timemodified = time(); 
$forum->id = $DB->insert_record("forum", $forum); 

if (! $module = $DB->get_record("modules", array("name" => "forum"))) { 
    echo $OUTPUT->notification("Could not find forum module!!"); 
    return false; 
} 
$mod = new stdClass(); 
$mod->course = $courseid; 
$mod->module = $module->id; 
$mod->instance = $forum->id; 
$mod->section = 0; 
if (! $mod->coursemodule = add_course_module($mod)) { // assumes course/lib.php is loaded 
    echo $OUTPUT->notification("Could not add a new course module to the course '" . $courseid . "'"); 
    return false; 
} 
if (! $sectionid = add_mod_to_section($mod)) { // assumes course/lib.php is loaded 
    echo $OUTPUT->notification("Could not add the new course module to that section"); 
    return false; 
} 
$DB->set_field("course_modules", "section", $sectionid, array("id" => $mod->coursemodule)); 

include_once("$CFG->dirroot/course/lib.php"); 
rebuild_course_cache($courseid); 
+0

非常感謝您的回答!讓我們看看它是否符合我的需求! – Unapedra

+0

@Adracat您的歡迎。如果有其他問題讓我知道。 –

+0

你能幫我把表格直接註冊一門課程嗎?我想mdl_enrol,mdl_user_enrolments,mdl_role_assignments和mdl_context,最後一張表,我不明白什麼樣的記錄包含。謝謝 – Diego

1

不幸的是,我沒有50分置評,因此從Jitendra的出色答卷增編進爲「答案」。在Moodle 2.4上,add_mod_to_section()已被廢棄,所以應該更改爲:

$sectionid = course_add_cm_to_section ($courseid, $mod->coursemodule, $sectionid, null);