You are here

Drupal与Moodle的集成2

g089h515r806 的头像
Submitted by g089h515r806 on 星期三, 2013-02-27 12:34

      我们在前面,介绍的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所不能比的。

    就像一个朋友说了,有个免费的用就可以了,就不要抱怨易用性了。

 

     

Drupal版本: