2011-12-05 19 views
9

En un sitio habilitado para Moodle, deseo proporcionar cupones a los usuarios.Verifique si el usuario está inscrito en un curso específico de Moodle

Lo hice para verificar si el usuario está conectado, pero también quiero verificar si el usuario registrado actual se inscribe en un curso específico (una matriz de 3 ID de curso).

Hasta ahora probé con $USER->currentcourseaccess o $USER-> lastcourseaccess, pero no funcionan.

Entonces, ¿cómo puedo verificar si el usuario registrado actualmente está inscrito en un curso específico de Moodle?


Editar: el sitio utiliza Moodle 2 .

Respuesta

4

Primero tendrá que obtener el contexto del curso y luego compararlo con la lista de usuarios inscritos con un ID de rol específico en ese contexto (ID de rol predeterminado para el alumno es 5). Ingenio h la API de Moodle 2.0+, puede hacerlo sin consultar directamente la base de datos:

$context = get_context_instance(CONTEXT_COURSE, $course_id); 
$students = get_role_users(5, $context); 

En Moodle 1.9, que necesitará para conseguir manualmente el material de la BD:

  • por primera vez el mdl_contexts mesa con contextlevel = CONTEXT_COURSE (CONTEXT_COURSE = 50) y instanceid = <id of course>
  • mdl_role_assignments y luego con contextid = <first result> y roleid = 5
+0

Sí, el sitio usa Moodle 2 [se olvidó mencionar]. –

1

inscripción código de verificación fragmento:

function check_enrollment($username, $course){ 
    global $DB; 
    $sql = "SELECT count(*) 
      FROM mdl_user_enrolments a, 
      mdl_enrol b, 
      mdl_user c 

      WHERE c.username='$username' 
      AND a.userid=c.id 
      AND b.courseid=$course 
      AND a.enrolid=b.id"; 
    $n = $DB->count_records_sql($sql); 
    if($n==0) { 
     //user not enrolled 
     return False; 
    } elseif($n==1) { 
     //user already enrolled 
     return True; 
    } else { 
     //, bad data ie<Data sanity not maintained> 
     add_to_log($course, 'ERROR: check-enrollment', 'Entered into mordor code block'); 
     return False; 
    } 
} 

http://www.iank.it/category/e-learning/

5

sólo tiene que utilizar esta solución sencilla de 2 líneas (, utilizando por supuesto y el id de usuario):

global $USER; 

$context = get_context_instance(CONTEXT_COURSE, $courseid, MUST_EXIST); 
$enrolled = is_enrolled($context, $USER->id, '', true); 
+0

Tengo una duda en moodle .. – user3663

+0

¿Cuál es tu pregunta? – Mike

+0

puede verificar este https://stackoverflow.com/questions/46110220/use-moodle-enrol-me-option-in-custom-php-application..if le puede ayudar si puede explicarlo .. – user3663

2

También puede ejecutar este comando SQL:

SELECT c.id AS id, c.fullname,c.shortname, u.username, u.firstname, 
u.lastname, u.email 
FROM mdl_role_assignments ra, mdl_user u, mdl_course c, mdl_context cxt 
WHERE ra.userid = u.id 
AND ra.contextid = cxt.id 
AND cxt.contextlevel = 50 
AND cxt.instanceid = c.id 
AND u.username = 'User_Username' 
AND c.shortname = 'Course_Shortname' 
AND (roleid =5 OR roleid=3); 

esto debe comprobar si el usuario con el nombre de usuario 'User_Username' está inscrito en el curso con el nombre corto 'Course_Shortname' como estudiante o profesor

espero que ayude.

Cuestiones relacionadas