Я хочу соединить внешний сайт с Moodle-системой. Я уже настроил веб-сервис и создал токен для получения доступа.
Я следовал http://www.rumours.co.nz/manuals/using_moodle_web_services.htm настроить, но, напротив, я хотел реализовать соединение через REST, как в https://github.com/moodlehq/sample-ws-clients/find/master
Мой подход — создать класс Moodle, который будет заниматься обменом данными. Во-первых, я просто хотел попытаться создать несколько новых жестко запрограммированных пользователей через веб-сервис, но это не удалось с Moodle-Response:
msgstr «invalidrecord Не могу найти запись данных в таблице базы данных external_functions.»
Который кажется мне, как будто я вызов был успешно, но у moodle есть проблема, чтобы найти функцию «core_user_create_users». Я проверил локальную базу данных Moodle и в таблице external_functions есть запись для «core_user_create_users», поэтому я немного запутался, когда Moodle не знает, что делать.
Вот мой класс:
require_once (DOCUMENT_ROOT.'/tcm/api/moodle/curl.php');
class Moodle {
private $token;
private $domainName; // 'local.moodle.dev';
private $serverUrl;
public function __construct($token, $domainName) {
$this->token = $token;
$this->domainName = $domainName;
$this->serverUrl = $this->domainName . '/webservice/rest/server.php' . '?wstoken=' . $this->token;
echo "initialize Service: $this->serverUrl </br>";
}
public function createUser() {
$functionName = 'core_user_create_users';
/// PARAMETERS - NEED TO BE CHANGED IF YOU CALL A DIFFERENT FUNCTION
$user1 = new stdClass();
$user1->username = 'testusername1';
$user1->password = 'testpassword1';
$user1->firstname = 'testfirstname1';
$user1->lastname = 'testlastname1';
$user1->email = '[email protected]';
$user1->auth = 'manual';
$user1->idnumber = 'testidnumber1';
$user1->lang = 'en';
$user1->theme = 'standard';
$user1->timezone = '-12.5';
$user1->mailformat = 0;
$user1->description = 'Hello World!';
$user1->city = 'testcity1';
$user1->country = 'au';
$preferencename1 = 'preference1';
$preferencename2 = 'preference2';
$user1->preferences = array(
array('type' => $preferencename1, 'value' => 'preferencevalue1'),
array('type' => $preferencename2, 'value' => 'preferencevalue2'));
$user2 = new stdClass();
$user2->username = 'testusername2';
$user2->password = 'testpassword2';
$user2->firstname = 'testfirstname2';
$user2->lastname = 'testlastname2';
$user2->email = '[email protected]';
$user2->timezone = 'Pacific/Port_Moresby';
$users = array($user1, $user2);
$params = array('users' => $users);
/// REST CALL
$serverurl = $this->serverUrl . '&wsfunction=' . $functionName;
require_once (DOCUMENT_ROOT.'/tcm/api/moodle/curl.php');
$curl = new curl;
//if rest format == 'xml', then we do not add the param for backward compatibility with Moodle < 2.2
$restformat = "json";
$resp = $curl->post($serverurl . $restformat, $params);
//print_r($resp);
echo '</br>*************Server Response*************</br>';
var_dump($resp);
}
}
Я использую класс curl из того же github-проекта, который я разместил выше — moodle ссылается на него в своей документации.
docs.moodle.org/dev/Creating_a_web_service_client
Точка входа в мой звонок прямо сейчас жестко запрограммирована:
<?php
include_once (DOCUMENT_ROOT.'/tcm/api/moodle/moodle.php');
//entry point of code
if (isset($_POST)){
//token and domain would be in $_POST
$bla = new Moodle('0b5a1e98061c5f7fb70fc3b42af6bfc4', 'local.moodle.dev');
$bla->createUser();
}
Кто-нибудь знает, как решить ошибку «invalidrecord Не удается найти запись данных в таблице базы данных external_functions» или имеет другой подход / предложение, как я могу создавать своих пользователей удаленно ??
заранее спасибо
Наконец-то я получил работу со следующим кодом:
class Moodle {
private $token; //'0b5a1e98061c5f7fb70fc3b42af6bfc4';
private $domainName; // 'http://local.moodle.dev';
private $serverUrl;
public $error;
public function __construct($token, $domainName) {
$this->token = $token;
$this->domainName = $domainName;
$this->serverUrl = $this->domainName . '/webservice/rest/server.php' . '?wstoken=' . $this->token;
echo "initialize Service: $this->serverUrl </br>";
}
public function createUser() {
$functionName = 'core_user_create_users';
$user1 = new stdClass();
$user1->username = 'testusername1';
$user1->password = 'Uk3@0d5w';
$user1->firstname = 'testfirstname1';
$user1->lastname = 'testlastname1';
$user1->email = '[email protected]';
$user1->auth = 'manual';
$user1->idnumber = '';
$user1->lang = 'en';
$user1->timezone = 'Australia/Sydney';
$user1->mailformat = 0;
$user1->description = '';
$user1->city = '';
$user1->country = 'AU'; //list of abrevations is in yourmoodle/lang/en/countries
$preferencename1 = 'auth_forcepasswordchange';
$user1->preferences = array(
array('type' => $preferencename1, 'value' => 'true')
);
$users = array($user1);
$params = array('users' => $users);
/// REST CALL
$restformat = "json";
$serverurl = $this->serverUrl . '&wsfunction=' . $functionName. '&moodlewsrestformat=' . $restformat;
require_once (DOCUMENT_ROOT . '/tcm/api/moodle/curl.php');
$curl = new curl();
$resp = $curl->post($serverurl, $params);
echo '</br>************************** Server Response createUser()**************************</br></br>';
echo $serverurl . '</br></br>';
var_dump($resp);
}
}
Информация:
Для всех начинающих пользователей Moodle. Активация сообщений отладки Moodle немного помогает. Вы получите дополнительную информацию об ошибке в ответе, возвращаемом с сервера.
Moodle -> Администрирование сайта -> Разработка -> Отладка -> Отладочные сообщения
Выберите: РАЗРАБОТЧИК: дополнительные сообщения отладки Moodle для разработчиков
Других решений пока нет …