Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Número de respuestas: 34Y ahora la pregunta.
Despues de dar mil vueltas, revisar los foros hasta en sanscrito y dejarme los ojos ante la pantalla, no he conseguido averiguar en que tabla almacena los usuarios matriculados en un curso.
Uso Moodle 1.8.1+ y ya he revisado hasta el esquema de la base de datos que hay en http://docs.moodle.org/en/Development:Database_Schema (lo malo es que este es de la 1.7).
Si alguien me puede orientar le estaria muy agradecida ^__^
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
- la de usuarios
- la de cursos
- la de roles
Saludos
Israel
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Mi problema ahora es conseguir otra cosilla.
Me han pedido una pequeña aplicacion web que pueda conectarse a cualquiera de las bases de datos de nuestros Moodles (tenemos 4 y mas en camino), que nos permita meter como datos el nombre, apellido, email y telefono movil del usuario. Luego ha de generar el username y la pass automaticamente. Deberiamos poder asignar ya en este programa los cursos en los que estara matriculado y al terminar, grabar los datos en la BBDD del Moodle correspondiente y permitirnos enviar un email y un SMS al usuario en cuestion con su usuario y clave autogenerados.
De momento todo va mas o menos bien, excepto el tema de meter los usuarios en el moodle con todos sus datos, por los cursos. A ver si con estas tablas que me has indicado puedo averiguar como he de insertar los registros en las mismas :P
Muchas gracias por las indicaciones.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
De todas formas, podrias mirar como lo hace moodle, es decir echale un vistazo al script que da de alta un usuario dentro de moodle y al script que le asigna un rol dentro de un curso.
Otra cosa, creo que la contraseña se almacena en md5.
Saludos y suerte
Israel
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Suene muy interesante lo del SMS, ¿cómo piensas realizarlo? Yo ando en busca de una opción como esa para contactar a mis usuarios.
Saludos.
Victor
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Dado que la estamos pagando, creimos que seria buena idea darle uso conjuntamente con Moodle, ya que tenemos casi tantos alumnos online como presenciales.
Mañana voy a rpobar con un par de ideas que se me ocurrieron para lo que estoy haciendo, os mantendre informados ^__^
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Hola
Los datos de las personas matriculadas se almacenan en una tabla llamada course_display, puedes exportarla y cruzar la los datos de la tabla Users con el idusers.
Saludos
Felipe
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Me temo que eso no es correcto. Ahora mismo ignoro lo que se almacena en la tabla course_display, pero los datos de matriculación están en las tablas de roles (principalmente en mdl_role_assignments, aunque intervienen varias más), que ligan los cursos y los usuarios.
Saludos. Iñaki.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Hola
Iñaki, disculpa que te contradiga pero esa tablka tiene los siguientes campos:
id
course
userid
display
Si ocupas courso y userid tienes la lista de matriculados por curso.
Saludos
Felipe
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
No tengo inconveniente en que me contradigas, pero el código te contradice a tí (y me da la razón a mí )
Saludos. Iñaki.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
jaj soy medio jalisco, por un lado tienes razón... pero por el otro yo, ahí aparece todos los integrantes de un curso tutores y participantes, esta tabla determina que cursos mostrar al participante o no.
El codigo no me da la razón , pero la base de datos es mi aliada.
Saludos
Felipe
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
He estado mirando el código (por encima) y no acabo de entender muy bien para qué se usa esta tabla. Es como si fuera para almacenar qué cursos están visibles al usuario, y/o qué secciones/semanas del curso puede ver. No sé si tiene mucho sentido, pero parece que hace algo así.
El caso es que quizas, pudiera dar la casualidad, que a través de aquí se pudiera ver quienes están matriculados en el curso que sea. Pero, ¿cómo sabrías quién es alumno y quién profesor? La solución pasa por el proceso que he explicado antes.
Un saludo.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Quizas sea un poco tarde, pero allá va la explicación de cómo está organizada la base de datos en este tema (a ver cómo consigo explicarme, porque es algo lioso):
- mdl_role: aquí está la relación de los roles existentes. De aquí nececesitaremos el id de cada rol para ver qué usuarios hay matriculados para cada curso con cada rol. Si sólo queremos los estudiantes, habría que quedarse sólo con el identificador del rol Estudiante.
- mdl_course: en esta tabla se almacenan los cursos. Basta con buscar aquí por el fullname (o el shortname) el curso que deseamos ver sus matriculados, y a través de ahí podemos sacar el identificador del curso.
- mdl_context: aquí están relacionados las diferentes instancias de los contextos que hay. Cada contexto tiene un código numérico (llamado nivel ó contextlevel) que lo identifica. En concreto, para los cursos, el nivel es el 50 (no me preguntas porqué es ese ni donde aparece, pero es así), por lo que, sabiendo cual es el identificador del curso, basta con buscar la entrada con el instanceid=idcurso y contextlevel=50, y el identificador que aparezca para esos datos será el identificador del contexto.
-mdl_role_assignments: por último esta es la tabla donde están las matriculaciones. Basta con hacer una búsqueda por el contextid deseado (es decir, el identificador del contexto del curso que hemos sacado de mdl_context), y por el identificador del rol que queramos (estudiante, por ejemplo), y nos dará los identificadores de todos los usuarios matriculados.
No sé si me he explicado bien, pero es que una relación un poco liosa.
Un saludo.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
En concreto, para los cursos, el nivel es el 50 (no me preguntas porqué es ese ni donde aparece, pero es así),
Si echas una ojeada al fichero .../lib/accesslib.php verás las definiciones de varias constantes usandas en el sistema de roles y capacidades. Ahí está definida la constante CONTEXT_COURSE con el valor 50.
Saludos. Iñaki.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Por si a alguien en algún momento le viene bien:
SELECT user.username, user.maildigest FROM user inner join role_assignments
on user.id=role_assignments.userid
where roleid="5" and contextid="2140"
Donde contextid ha sido obtenido según las explicaciones de Moisés
De nuevo, gracias
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Me gustaría saber cómo puedo obtener los profesores de un curso, a partir del courseid o identificador de curso.
¿Puedo usar la tabla mdl_course_display?, o ¿debo mejor usar las tablas mdl_role, mdl_course, mdl_context, mdl_role_assignments?.
Muchas gracias.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
En 2.0 la cosa es algo diferente, ya que se diferencia entre estar matriculado en el curso (lo que incluye principalmente poder hacer las actividades y recibir calificaciones) y tener un rol asignado en el mismo (se puede entrar, se pueden ver cosas, se pueden gestionar cosas, etc. pero no se pueden hacer las actividades ni recibir calificaciones).
En todo caso, en 2.0 se siguen usando las mismas tablas que en 1.7-1.9, pero en el caso de las matriculaciones, hay que consultar alguna tabla extra para los detalles.
Saludos.
Iñaki.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
En los foros he podido ver al menos dos formas de consultar los profesores que están "enrolled" en un curso.
1. Por API:
$context = get_context_instance(CONTEXT_COURSE, $courseid);
$teachers = get_role_users($role->id, $context);
2. Por SQL:
FROM mdl_role_assignments ra, mdl_user u, mdl_course c, mdl_context cxt, mdl_role r
WHERE ra.userid=u.id AND ra.contextid=cxt.id AND cxt.contextlevel=50 AND cxt.instanceid=c.id AND c.shortname ='NombreCortoCurso' AND r.shortname = 'teacher';
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Salu2
Fernando
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Tienes razón, estoy de acuerdo contigo, precisamente esa es la función de una API.
Sin embargo cuando uso el siguiente código en mi módulo para Moodle 2.0, me da error:
$context = get_context_instance(CONTEXT_COURSE, $courseid);
$teachers = get_role_users($role->id, $context);
¿Puede que exista alguna función en desuso?, o ¿simplemente me da error porque estoy intentando obtener el contexto de curso a nivel de módulo?.
Muchas gracias.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
print_object($role);
$context = get_context_instance(CONTEXT_COURSE, $courseid);
print_object($context);
$teachers = get_role_users($role->id, $context);
print_object($teachers);
Devuelve:
stdClass Object ( [id] => 4 [name] => Non-editing teacher [shortname] => teacher [description] => Non-editing teachers can teach in courses and grade students, but may not alter activities. [sortorder] => 3 [archetype] => teacher )
stdClass Object ( [id] => 10 [contextlevel] => 50 [instanceid] => 2 [path] => /1/3/10 [depth] => 3 )
Array ( )
- line 324 of /lib/setuplib.php: moodle_exception thrown
- line 416 of /course/modedit.php: call to print_error()
Falla en la función get_role_users, pero no sé por qué.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Saludos.
Iñaki.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
$context = get_context_instance(CONTEXT_COURSE, $courseid);
$teachers = get_role_users($role->id, $context);
print_object($teachers);
Y no muestra nada por pantalla, por lo que algo falla o estoy haciendo mal, porque la función get_role_users() no devuelve ningún objeto.
No parece ser el bug que antes he comentado, porque tengo un único profesor matriculado (enrolled) con el rol de profesor, y viendo el código de la función (linea 5032 de lib/accesslib.php) todo parece correcto.
Estoy desarrollando bajo la versión de Moodle 2.0 Preview 4+ (Build: 20100803).
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Ayer a la noche probé tu código (con la RC1, en ves de con la PR4, pero no creo que hayay diferencias) y creo que ya he descubierto lo que pasa.
El nombre corto del rol 'Teacher' (profesor) es 'editingteacher', y no 'teacher'. En cuanto cambié ese detalle en tu código recuperaba todos los profesores asignados en el curso (había puesto 3 para probar si sólo me devolvía uno o todos ellos).
Para verificar si estoy en lo cierto, puedes probar las dos cosas siguientes (una cada vez):
- Asignar uno o varios usuarios como profesor sin edición y ejecutar tu código tal cual.
- Asignar uno o varios usuarios como profesor normal y cambiar el nombre del rol de 'teacher' a 'editingteacher'.
Saludos. Iñaki.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Hola Iñaki,
He hecho las pruebas que dices, y efectivamente, se confirma tu descubrimiento.
Tengo 2 profesores en un curso, cada uno con un rol, Non-editing teacher (shortname=teacher) y Teacher (shortname=editingteacher).
Probando el código con "teacher", me muestra el que tiene el rol de Non-editing teacher y probando el código con "editingteacher", me muestra el que tiene el rol de Teacher.
Resulta un poco confuso, pero ahora ya lo tengo claro, muchas gracias.
Por cierto, a ver si me puedes ayudar con esto:
He conseguido mostrar los profesores en un menú de selección, en el archivo view.php de la siguiente forma:
if (isset($teachers)) {
// Sets course teachers array
$i = 1;
$options = array();
foreach ($teachers as $teacher) {
$options[$i] = fullname($teacher);
$i++;
}
echo html_writer::select($options, 'selectmenu', '1');
echo $OUTPUT->continue_button('view.php?id='.$id);
Y quiero que cuando el usuario seleccione una opción y pulse el botón se recarge la página, mostrando información del profesor .
Pero no sé cómo capturar la elección del usuario, y sí sé pasarle el parámetro a la página, para saber qué profesor consultar.
Un saludo.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
He cambiado de opinión, prefiero que no exista botón, que cuando el usuario eliga su opción de la lista se recarge la misma página con la opción seleccionada, y con este código lo consigo a medias:
echo html_writer::start_tag('form', array('id' => 'selectform', 'method' => 'get', 'action' => ''));
echo html_writer::select($options, 'selectmenu', '0', false, array('onchange' => 'this.form.submit()'));
echo html_writer::end_tag('form');
Porque pierdo el parámetro de la url "?id=$id", ¿cómo puedo hacer para no perder este parámetro?.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Usando el método "post" en el formulario, no se pierden parámetros de url.
echo html_writer::start_tag('form', array('id' => 'selectform', 'method' => 'post', 'action' => ''));
echo html_writer::select($options, 'selectmenu', '0', false, array('onchange' => 'this.form.submit()'));
echo html_writer::end_tag('form');
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
Estuve viendo mdl_course pero Quisiera saber como puedo visualizar la tabla de cursos y ver la tabla de la cantidad de usuarios matriculados en cada curso.
Quedo atento muchas gracias por tan valiosa ayuda.
Re: Donde se almacenan los usuarios matriculados en un curso (V. 1.8)
moodle_nombredelcurso.mdlws_user