I need to create an external application that creates, modifies and enrol users of Moodle.
I\'ve been reading Moodle documentation but its more for front administrat
As answered here creating moodle users and register them on courses programatically by me =3. This works completely extern to moodle.
$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.