Мне нужно создать внешнее приложение, которое создает, изменяет и регистрирует пользователей Moodle.
Я читал документацию moodle, но больше для начальных администраторов, которые для разработчиков. Как сделать, чтобы создать пользователя? какие таблицы содержат обязательную информацию о них? и как я могу зарегистрировать существующих пользователей в moodle?
Вы должны использовать веб-службы, а не использовать SQL- https://docs.moodle.org/dev/Creating_a_web_service_client
core_user_create_users
и enrol_manual_enrol_users
После того, как вы создали эту настройку, используйте что-то вроде этого:
// First get the token. $tokenurl = 'http://www.yourmoodlesite.com/login/token.php?username=testuser&password=xx&service=myservice'; $tokenresponse = file_get_contents($tokenurl); $tokenobject = json_decode($tokenresponse); if (!empty($tokenobject->error)) { echo $tokenobject->error; die(); } // Then call the create user and enrol functions // Remember to add the question mark after "server.php" because http_build_query() won't add it on its own and you'll end up with a 404 error $baseurl = 'http://www.yourmoodlesite.com/webservice/rest/server.php?'; // Then add these parameters to the url. $users = array(); // See the api documentation /admin/webservice/documentation.php // for core_user_create_users for building the $users array // eg // $users = array(array( // 'username' => 'lecapitaine', //Username policy is defined in Moodle security config // 'password' => 'EngageNCC-1701', //Plain text password consisting of any characters // 'firstname' => 'William', //The first name(s) of the user // 'lastname' => 'Shatner', //The family name of the user // 'email' => 'jimmy.k@enterprise.com', // 'lang' => 'en', // )); $params = array( 'wstoken' => $tokenobject->token, 'wsfunction' => 'core_user_create_users', 'moodlewsrestformat' => 'json', 'users' => $users, ); $url = $baseurl . http_build_query($params); $response = file_get_contents($url); $newusers = json_decode($response); // Newusers will be an array of objects containing the new user ids. $enrolments = array(); // See the api documentation /admin/webservice/documentation.php // for enrol_manual_enrol_users for building the $enrolments array // Then enrol the users. $params = array( 'wstoken' => $tokenobject->token, 'wsfunction' => 'enrol_manual_enrol_users', 'moodlewsrestformat' => 'json', 'enrolments' => $enrolments, ); $url = $baseurl . http_build_query($params); $response = file_get_contents($url); $enrolled = json_decode($response);
Как ответили здесь, создавая пользователей moodle и регистрируя их на курсах программно мной = 3. Это полностью работает с 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. Там вы получили новое имя пользователя, включенное в курс 123.