2016-03-09 72 views
0

我需要创建一个extern应用程序来创建,修改和注册Moodle的用户。使用MOODLE创建用户并通过SQL将他们注册到课程中

我一直在阅读moodle文档,但更多的是面向开发人员的前台管理员。我该如何创建一个用户?哪些表格持有关于它们的强制性信息?以及如何将现有用户注册到moodle?

回答

5

你应该使用Web服务,而不是使用SQL - https://docs.moodle.org/dev/Creating_a_web_service_client

  1. 启用Web服务/admin/search.php?query=enablewebservices
  2. 启用REST协议/admin/settings.php?section=webserviceprotocols
  3. 添加服务/admin/settings.php?section=externalservices
    • 添加简称为MyService =
    • enable = true
  4. 单击服务的功能。
  5. 添加core_user_create_usersenrol_manual_enrol_users
    • 你需要看看API文档的参数
    • /admin/webservice/documentation.php
  6. 创建角色 - /管理/角色/manage.php
  7. 选择用户级别+系统上下文
  8. 添加功能 - webservice/rest:使用
  9. 创建testuser的,并加入到上述
  10. 创建的角色创建令牌用户/admin/settings.php?section=webservicetokens

一旦你的设置,使用这样的:

// 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 
// e.g. 
// $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' => '[email protected]', 
// '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); 
2

这里回答creating moodle users and register them on courses programatically由me = 3。这对moodle完全是extern。

$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 = '[email protected]'; ///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.

+0

嗨Aschab我有疑问在Moodle招收我的职能.. – user3663