Para efetuar a checagem do perfil do usuário logado no Moodle em contexto do curso é aluno ou tutor com PHP, adoto o seguinte procedimento:
1) Faço a checagem se é admin verificando se tem permissão moodle/site:config. Faço isso usando a função a seguir
function is_admin() {
if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
return true;
}
return false;
}
2) Se não for admin, faço checagem se é tutor no curso, usando a seguinte função
function is_teachear($courseid) {
if (has_capability('report/courseoverview:view', get_context_instance(CONTEXT_COURSE,$courseid))) {
return true;
}
return false;
}
3) Se não for tutor, então faço checagem se é aluno usando as função a seguir.
Nessa função chamo a função get_student_profile que retorna id de perfil que são estudantes
function is_student($courseid, $userid) {
global $DB, $CFG;
$rolesid = get_student_profile();
if (empty($rolesid)) {
return false;
}
$sql = "SELECT COUNT(rs.id) AS countrecord FROM {$CFG->prefix}role_assignments rs INNER JOIN {$CFG->prefix}context e ON rs.contextid=e.id WHERE e.contextlevel=50 AND e.instanceid=$courseid AND rs.userid=$userid AND rs.roleid IN ($rolesid)";
$r = $DB->get_record_sql($sql);
return $r->countrecord;
}
function get_student_profile() {
global $DB, $CFG;
$sql = "SELECT value FROM {$CFG->prefix}config WHERE name = 'gradebookroles' ";
$r = $DB->get_record_sql($sql);
return $r->value;
}
Uma outra alternativa é verificar se é aluno sem parâmetro curso, ou seja, verificar se tem pelo meno uma inscrição como aluno. Para isso, basta executar a função a seguir:
function is_student() { global $DB, $CFG,$USER; $userid = $USER->id; if(empty($userid)){ return 0;} $sql = "SELECT COUNT(rs.id) AS countrecord FROM {$CFG->prefix}role_assignments rs INNER JOIN mdl_context e ON rs.contextid=e.id INNER JOIN {$CFG->prefix}role r ON r.id=rs.roleid WHERE e.contextlevel=50 AND e.instanceid=$courseid AND r.shortname ='student' AND rs.userid=$userid"; $r = $DB->get_record_sql($sql); return $r->countrecord; }
Bem como são quatro funções para fazer essa checagem, o ideal é organizar isso em um classe.