Checagem de perfil do usuário logado no Moodle em contexto de curso é aluno ou tutor

Checagem de perfil do usuário logado no Moodle em contexto de curso é aluno ou tutor

por Lino Vaz Moniz -
Número de respostas: 0

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.