2014-10-17 73 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