I need to create users and register users on moodle from the outside. The Moodle database is really complex and it have like 0 documentation. So far I understand that the mdl_users have the users, but I dont get what to query there, and the courses are a headache.
1条回答 默认 最新
- dongshan7708 2016-03-18 03:27关注
I see you add "php" to your tags, so I'll give you the php answer, but the query work in any mysql.
$servername = 'localhost'; $username = 'username'; $password = 'password'; $dbname = 'moodle'; $u_moodle = 'theusernameyouwant'; $hp_moodle = password_hash('thepasswordyouwant', PASSWORD_DEFAULT); ///IMPORTANT! $name = 'first name'; $lname = 'last name'; $email = 'e@m.ail'; ///This have to be verified by you as we're inserting it directly $course = '123'; //Id that you put in moodle admin, not the real id $conn = new mysqli($servername, $username, $password, $dbname); $sql = "INSERT INTO 'mdl_user' (auth, confirmed, mnethostid, username, password, firstname, lastname, email) VALUES ('manual', 1, 1, '$u_moodle', '$hp_moodle', '$name', '$lname', '$email')"; // auth = 'manual', confirmed = 1, mnethostid = 1 Always. the others are your variables if ($conn->query($sql) === TRUE) { echo "OKTC"; } else { ////Manage your errors } $sql = "SELECT * FROM $m_user WHERE email='$email'"; $result = $conn2->query($sql); if($row = $result->fetch_assoc()) { $id = $row['id']; //Id of newly created user. we're using that for to register him on the course } ////You have to use this if your idnumber for the course is the one you put into moodle (thats not the real id) $sql = "SELECT id FROM 'mdl_course' WHERE idnumber=$course"; $result = $conn->query($sql); if(!$result){ ///Not existing course, manage your error } if($row = $result->fetch_assoc()) { $idcourse = $row["id"]; } ///I need now the "enrol" id, so I do this: $sql = "SELECT id FROM 'mdl_enrol' WHERE courseid=$idcourse AND enrol='manual'"; $result = $conn->query($sql); if(!$result){ ///Not enrol associated (this shouldn't happen and means you have an error in your moodle database) } if($row = $result->fetch_assoc()) { $idenrol = $row["id"]; } ///Lastly I need the context $sql = "SELECT id FROM 'mdl_context' WHERE contextlevel=50 AND instanceid=$idcourse"; ///contextlevel = 50 means course in moodle $result = $conn->query($sql); if(!$result){ ///Again, weird error, shouldnt happen to you } if($row = $result->fetch_assoc()) { $idcontext = $row["id"]; } ///We were just getting variables from moodle. Here is were the enrolment begins: $time = time(); $ntime = $time + 60*60*24*$duration; //How long will it last enroled $duration = days, this can be 0 for unlimited. $sql = "INSERT INTO 'mdl_user_enrolments' (status, enrolid, userid, timestart, timeend, timecreated, timemodified) VALUES (0, $idenrol, $id, '$time', '$ntime', '$time', '$time')"; if ($conn->query($sql) === TRUE) { } else { ///Manage your sql error } $sql = "INSERT INTO 'mdl_role_assignments' (roleid, contextid, userid, timemodified) VALUES (5, $idcontext, '$id', '$time')"; //Roleid = 5, means student. if ($conn->query($sql) === TRUE) { } else { //manage your errors }
E finito. There you got a new user name enroled into course 123.
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 做个有关计算的小程序
- ¥15 MPI读取tif文件无法正常给各进程分配路径
- ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 setInterval 页面闪烁,怎么解决
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化