#moodle
#moodle
Вопрос:
Я пытаюсь создать разделы в курсе Moodle с помощью скрипта, но не могу. Я использую course_create_sections_if_missing
функцию Moodle, но не могу получить разделы, которые отображаются в Интернете, но в базе данных они создаются.
Код, который я использую, выглядит следующим образом:
if($numSections >0){
foreach ($sections as $nameSection) {
$idSection = checkSections($moodle_course , $nameSection);
if($idSection == -1){
m("crear section: ". $nameSection);
$maxSection = getMaxSections($moodle_course );
if($maxSection != -1){
m("max section: " . $maxSection);
$idSec = $maxSection 1;
course_create_sections_if_missing($moodle_course , $idSec);
$res = updateNameSection($moodle_course , $nameSection, $idSec);
m("result update: " . $res);
}else{
m("There aren't sections for the course");
}
}else{
m("section already exists: ". $nameSection);
}
}
}else{
m("No sections for the course. ");
}
Примечание: функция m ( «») отвечает за отображение текста на консоли.
функция checkSections — это:
/**
* Check if there is a section.
*
* @param $course id of the course.
* @param $section name of the section
*
* @return id of section
*/
function checkSections($course , $section){
global $DB;
$id = null;
$sql = "SELECT id FROM mdl_course_sections where course = ? and name = ? ";
$sections = $DB->get_records_sql($sql, array($course, $section));
foreach ( $sections as $r ) {
$id = $r->id;
}
if(is_null($id))
return -1;
else
return $id;
}
функция getMaxSections заключается в следующем:
/**
* Returns the id of the highest section for a course.
*
* @param $course id of the course.
*
* @return max id of section
*/
function getMaxSections($course){
global $DB;
$id = null;
$sql = "SELECT max(section) as sec FROM mdl_course_sections where course = ? ";
$sections = $DB->get_records_sql($sql, array($course));
foreach ( $sections as $r ) {
$id = $r->sec;
}
if(is_null($id))
return -1;
else
return $id;
}
функция updateNameSection такова:
/**
* Update the name of a section .
*
* @param $course id of the course.
* @param $nameSection name of the section.
* @param $idSection id of the section.
*
* @return result
*/
function updateNameSection($course, $nameSection , $idSection){
global $DB;
$id = null;
$sql = "update mdl_course_sections set name = ? where course = ? and section = ?";
$result = $DB->execute($sql, array($nameSection , $course, $idSection));
return $resu<
}
Так что, если кто-нибудь знает, как это сделать, или у него есть какие-либо примеры или документация, которые могут быть полезны, это было бы полезно.
Заранее спасибо.
Ответ №1:
Вам необходимо обновить номер разделов в таблице mdl_course_format_options
Попробуйте это:
$sql = "update mdl_course_format_options set value = ? where courseid = ? and name ='numsections'";
$result = $DB->execute($sql, array($numSections , $course));
Ответ №2:
Я пробую код, предложенный @aleix, и он отлично работает для меня, и вот как выглядит код:
if($numSections >0){
foreach ($sections as $nameSection) {
$idSection = checkSections($moodle_course , $nameSection);
if($idSection == -1){
m("crear section: ". $nameSection);
$maxSection = getMaxSections($moodle_course );
if($maxSection != -1){
m("max section: " . $maxSection);
$idSec = $maxSection 1;
course_create_sections_if_missing($moodle_course , $idSec);
$res = updateNameSection($moodle_course , $nameSection, $idSec);
if($res){
$idSec = $idSec 1;
$res2 = updateNumSectionsCourse($comunidad_moodle, $idSec);
}
}else{
m("There aren't sections for the course");
}
}else{
m("section already exists: ". $nameSection);
}
}
}else{
m("No sections for the course. ");
}
и функция updateNumSectionsCourse такова:
/**
* Update the number of sections for a course.
*
* @param $course id of the course.
* @param $numSections number of sections.
*
* @return result
*/
function updateNumSectionsCourse($course, $numSections){
global $DB;
$sql = "update mdl_course_format_options set value = ? where courseid = ? and name ='numsections'";
$result = $DB->execute($sql, array($numSections , $course));
return $resu<
}