2014-10-17 45 views
0

我正在为Moodle 2.7开发一个自定义的Moodle认证插件。Moodle cohort_add_cohort错误

当用户通过身份验证时,我希望他们被添加到特定的群组中。如果该队列不存在,我需要它自动创建。我在我的认证插件中使用user_authenticated_hook()函数来实现此目的。

我创建的群组代码是在auth.php文件这

$data = new stdClass(); 
$data->name = 'Name string'; 
$data->idnumber = 'ID string'; 
$data->description = 'Description string'; 
$cohortId = cohort_add_cohort($data); 

我已经包括队列/ lib.php,我已经声明的全局变量$ DB,$ CFG和$ SESSION在user_authenticated_hook()函数的第一行。

认证工作没有关于队列的部分。但随着群组部分到位,身份验证失败,我被重定向到登录页面。

页面标题更改为“错误”,但这是我得到的唯一错误消息。

我在做什么错?我希望有人能够帮助我创建队列并添加成员。

回答

0

这可能是因为全局$ USER对象尚未存在或尚未填充。

您的config.php是否已打开调试程序?

$CFG->debug = 32767; 
$CFG->debugdisplay = 1; 

回应user_created事件可能会更好。所以如果用户是通过另一种方法创建的,他们仍然会被添加到队列中。例如:

创建本地插件如:

/local/add_cohorts 

创建events.php

/local/add_cohorts/db/events.php 

其中在/本地/ add_cohorts有这样的事情

$handlers = array (
    'user_created' => array (
     'handlerfile'  => '/local/add_cohorts/lib.php', 
     'handlerfunction' => 'local_add_cohorts_user_created', 
     'schedule'   => 'instant', 
     'internal'   => 1, 
    ), 
); 

然后/ lib.php有

function local_add_cohorts_user_created($user) { 
    // Do your cohort processing here and add the user 
    // Use $user->id to add to the cohort members 
} 

然后创建一个version.php并安装插件,然后事件处理程序将被注册。

事件API - https://docs.moodle.org/dev/Events_API

+0

我有调试启用。但是,调试消息仅在用户登录时显示,并且由于队列错误导致整个认证过程失败,所以我从不登录,因此看不到调试消息。 – Regicollis 2014-10-21 08:08:56

+0

我认为你没有被填充的$ USER对象是正确的。如果我尝试创建队列之前va-dump $ USER对象,我会得到如下所示的内容:object(stdClass)#83(4){ [“id”] => int(0) [“mnethostid “] => 串(1) ”1“ [” 偏爱 “] => 阵列(0){ } [” sesskey“] => 串(10) ”z7tcT7Ev8k“ } – Regicollis 2014-10-21 08:11:11

+0

感谢您你的回复。它引导我朝着正确的方向发展,我也需要指定一个环境。 – Regicollis 2014-10-22 10:47:56