我们在前面,介绍的Drupal与Moodle的集成模块,这个资料比较少。我说一下,我们实际的解决办法。实际的用户集成是以http://drupal.org/node/1829924里面介绍的方案为基础的。
shahdarsh写了两篇文档,介绍的很详细,一个是Drupal端的安装配置过程:
https://github.com/cannod/moodle-drupalservices/wiki/Installation-Drupal-Side
一个是Moodle端的配置过程:
https://github.com/cannod/moodle-drupalservices/wiki/Installation-Moodle-Side
这里面介绍的用户同步方案比较2,使用的是周期性的调用/yourpathtomoodle/auth/drupalservices/auth_drupalservices_sync_users.php
来实现同步的。
我在安装的过程中,把Drupal的用户1和Moodle的管理员,都设置成为了admin,导致同步出错。后来我修改了Moodle段的集成代码,使得可以跳过Drupal的用户1。这样就不报错了。
我在windows下面,使用命令行,直接调用执行auth_drupalservices_sync_users.php,最后是可以正常工作的。但是这不是一个好的解决办法。
后来又在Drupal端专门写了一个Drupal模块,负责用户的同步,大致的代码如下:
/**
* 实现钩子hook_user_insert().
*/
function syncuser_user_insert(&$edit, $account, $category) {
$realname = field_get_items('user', $account, 'field_realname');
$phone = field_get_items('user', $account, 'field_phone');
//$zone = field_get_items('user', $account, 'field_zone');
db_set_active('moodle');
/*
db_insert('user')
->fields(array(
'auth' => 'drupalservices',
'confirmed' => 1,
'mnethostid' => 1,
'username' => $account->name,
'password' => '',
'idnumber' => $account->uid,
'firstname' => isset($realname[0]['value']) ? $realname[0]['value'] : '',
'lastname' => '',
'email' => $account->mail,
'phone1' => isset($phone[0]['value']) ? $phone[0]['value'] : '',
//'city' => isset($phone[0]['value']) ? $phone[0]['value'] : '',
'country' => 'CN',
))
->execute();
*/
db_merge('user')
->key(array('idnumber' => $account->uid))
->fields(array(
'auth' => 'drupalservices',
'confirmed' => 1,
'mnethostid' => 1,
'username' => $account->name,
'password' => '',
//'idnumber' => $account->uid,
'firstname' => isset($realname[0]['value']) ? $realname[0]['value'] : '',
'lastname' => '',
'email' => $account->mail,
'phone1' => isset($phone[0]['value']) ? $phone[0]['value'] : '',
//'city' => isset($phone[0]['value']) ? $phone[0]['value'] : '',
'country' => 'CN',
))
->execute();
db_set_active();
}
首先是在Drupal的settings.php配置Moodle的数据库连接,这个应该大多数人都懂得。不懂得可以参看相关资料。
开始我使用的是db_insert,后来改为了db_merge,这样插入和更新都可以使用同样的代码了,这是一个小技巧。
更新的代码,就不用多写了,和上面的一样,数据同步是没有问题。Moodle的数据库里面,只存储用户名,没有存储密码。此外,Moodle里面,是必须设置first name, last name的,不然,当你访问课件的时候,总会重定向个人资料的编辑页面,我开始以为这是权限问题,后来在别人的提示,发现是这两个字段没有设置的问题。
看了Moodle的代码,就知道Drupal代码质量的优良,不过每个系统都有自己的优点,比如Moodle,他解决了课件管理问题,在教学管理方面有优势,这是Drupal所不能比的。
就像一个朋友说了,有个免费的用就可以了,就不要抱怨易用性了。