2014-10-17 3 views
0

Moodle 2.7 용 사용자 정의 Moodle 인증 플러그인을 개발 중입니다.Moodle cohort_add_cohort error

사용자가 인증되면 특정 집단에 추가되기를 원합니다. 그 코호트가 존재하지 않으면 자동으로 만들어야합니다. 이를 달성하기 위해 인증 플러그 인에서 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 이벤트에 응답하는 것이 더 좋을 수 있습니다. 따라서 사용자가 다른 방법으로 작성된 경우에도 사용자는 여전히 코호트에 추가됩니다. 예 :

로컬 플러그인 예를 들어 만들기 :/지역/add_cohorts에서 그런 다음이

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

같은이있는 events.php

/local/add_cohorts/db/events.php 

만들기

/local/add_cohorts 

를/lib.php have

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

+0

$ USER- 개체가 채워지지 않는다는 것에 대해 당신이 맞다고 생각합니다. 내가 코호트를 만들려고 시도하기 전에 $ USER 객체를 버리고 다음과 같은 결과를 얻는다면 : object (stdClass) # 83 (4) { [ "id"] => int (0) [ "mnethostid "] => 캐릭터 (1)"1 " ["선호도 "] => 배열 (0) { } 는 ["sesskey "] => 문자열 (10)"z7tcT7Ev8k " } – Regicollis

+0

는 감사 귀하의 회신.그것은 올바른 방향으로 나를 이끌었고 나는 또한 컨텍스트를 지정할 필요가 있다는 것을 알게되었습니다. – Regicollis