Obtener alumnos de un curso y meterlos en una tabla

Obtener alumnos de un curso y meterlos en una tabla

de Rebeca Gómez -
Número de respuestas: 16

Wenas!

A ver si alguien puede ayudarme.... Me gustaria obtener los alumnos de un curso, para lo cual tenia pensado usar la funcion get_course_students que aparece en el archivo deprecatelib.php. Lo que pasa es q nose como usarla, que parametros le tengo q pasar, etc. Y además una vez hecho esto queria que meterlos en una tabla pero nose como hacerlo.

Si alguien sabe como hacer lo que digo....Muchas gracias!

Promedio de valoraciones: -
En respuesta a Rebeca Gómez

Re: Obtener alumnos de un curso y meterlos en una tabla

de Mario Rivas Sanchez -
Hola Rebeca,

esta es la sintaxi de la función segun Xref

get_course_students($courseid, $sort='ul.timeaccess', $dir='', $page='', $recordsperpage='',$firstinitial='', $lastinitial='', $group=NULL, $search='', $fields='', $exceptions='') X-Ref Returns array of userinfo of all students in this course
or on this site if courseid is id of site

param: int $courseid The course in question.
param: string $sort ?
param: string $dir ?
param: int $page ?
param: int $recordsperpage ?
param: string $firstinitial ?
param: string $lastinitial ?
param: ? $group ?
param: string $search ?
param: string $fields A comma separated list of fields to be returned from the chosen table.
param: string $exceptions ?
return: object

Un saludo y espero que te sirva
En respuesta a Mario Rivas Sanchez

Re: Obtener alumnos de un curso y meterlos en una tabla

de Rebeca Gómez -

Muchas gracias

Pero nose como usar dicha función, yo hago la llamada  get_course_student($courseid) y no me aparece nada por pantalla. Nose bien que parametros en concreto tengo que pasarle, ni si tengo que meter lo que devuelve en alguna variable...nose.... si pudiese  ver algún ejemplo o si alguien puede ayudarme...

Gracias

En respuesta a Rebeca Gómez

Re: Obtener alumnos de un curso y meterlos en una tabla

de Xavier Paz -
En mi opinión, no es recomendable usar funciones en desuso, que es lo que contiene el archivo deprecated.php (deprecated significa en desuso)

Existen varias formas de obtener esa lista de alumnos, pero la más común que recuerdo haber visto es usar el contexto y el rol para obtener todos los usuarios con dicho rol en un contexto determinado (en este caso el contexto se corresponde con un curso) La función para llevar a cabo esto la puedes encontrar en lib/acceslib.php, línea 5149.

Ejemplo:

//obtenemos el contexto del curso a partir de su id
$contexto = get_context(CONTEXT_COURSE,$id_curso);
//obtenemos rol de estudiante
$rol = get_record('role','shortname','student');
//obtenemos alumnos estudiantes en el contexto del curso
$alumnos = get_users_from_role_on_context($rol,$contexto);

Si existen estudiantes en el curso, la variable alumnos contendrán una serie de objetos, con varios campos cada uno, que se corresponden con los campos de la tabla role_assignments. En este caso el que más te podría interesar es userid, ya que con él, a continuación podrías obtener el registro del alumno asociado a ese id.

Ejemplo:

//si hay alumnos
if ($alumnos){
  //para cada alumno
  foreach($alumnos as $alumno){
      //obtenemos el usuario asociado
      $persona = get_record('user','id',$alumno->userid)
      //si se han podido obtener los datos del alumno
      if ($persona){
          //esto es una funcion de moodle que imprime el nombre completo
          echo fullname($persona);
      }
  }
}

Espero que te sea de ayuda
En respuesta a Xavier Paz

Re: Obtener alumnos de un curso y meterlos en una tabla

de Mariano Gonzalez -
Hola Xavier, muchas gracias por tu respuesta... justo ahora estoy creando un .php para hacer las pruebaspero mi duda es que require_once necesito además del de la conexión.

Muchas gracias.
En respuesta a Mariano Gonzalez

Re: Obtener alumnos de un curso y meterlos en una tabla

de Xavier Paz -
En principio bastaría con lib/acceslib.php para la funcion get_users_from_rol_on_context(), ya que el resto son funciones básicas de moodle, accesibles con la inclusión de config.php
En respuesta a Xavier Paz

Re: Obtener alumnos de un curso y meterlos en una tabla

de Rebeca Gómez -

Muchas gracias por tu respuesta Xavier, pero he puesto exactamente eso en mi codigo y no me sale la lista de alumnos, he puesto por si acaso la libreria de accesslib pero nada,no se porque puede ser...

He puesto echos para ver hasta donde llega y no entra en el if de if ($students)

si puedes ayudarme... Gracias!

En respuesta a Rebeca Gómez

Re: Obtener alumnos de un curso y meterlos en una tabla

de Xavier Paz -
¿Podrías poner el código o subir el script que estas probando?
En respuesta a Xavier Paz

Re: Obtener alumnos de un curso y meterlos en una tabla

de Rebeca Gómez -

wenas!!

Aquí te envío lo requires que tengo por si el problema viene de ahi:


 require_once(dirname(__FILE__).'/../../../config.php');
 require_once(dirname(__FILE__).'/../lib.php');
 require_once($CFG->libdir.'/tablelib.php');
 require_once $CFG->dirroot.'/lib/blocklib.php';
 require_once($CFG->dirroot.'/course/lib.php');

Te mando parte del código, donde está la tabla que quiero usar (aunq de momento no la uso), y donde he puesto el código que me pasaste para obtener los alumnos.

///Imprimo la tabla de alumnos
 
 $table = NULL;
    $table->head = array('Nombre','DNI','Observaciones');
    $table->align = array ("left");
 $table->size = array (15,15,20);
 $table->cellpadding = 5;
 $table->cellspacing = 1;
 $primlinea = array('este','ese','aquella niña');
       print_table($table);

 $context = get_context_instance(CONTEXT_COURSE,$courseid);
 $role = get_record('role','Primero','student');
  
 $students = get_users_from_role_on_context($role,$context);
   
 
 if ($students){

    foreach($students as $student){

     $person = get_record('user','id',$student->userid);
   
     if ($person){

        echo fullname($person);
   } 
  }
 }

Weno pues si puedes echarle un ojillo ver cual es el error por el que no me salen los alumnos..., porque he cambiado cosas y tal pero siguen sin salir.

Muchas gracias!

En respuesta a Rebeca Gómez

Re: Obtener alumnos de un curso y meterlos en una tabla

de Xavier Paz -
Si no entra en el if($students) es que dicha variable está vacia, y por tanto no está siendo capaz de obtener los estudiantes del contexto del curso. Entonces, hay que suponer que los parámetros de la función get_users_from_role_on_context no se están obteniendo de la forma correcta.

En el caso del parámetro $role, creo que el fallo está en los parámetros que pasas a la función get_record. El orden es:
1.- nombre de la tabla
2.- nombre del campo
3.- valor del campo

En este caso, no se porque el valor del segundo parámetro es Primero, pero opino que la forma adecuada de llamara a esa función sería con los siguientes valores:

$role = get_record('role','shortname','student');

con esto obtienes los datos del rol student a través del nombre corto (shortname)

En el caso del parámetro $context, el fallo puede estar en que $courseid no tiene valor o no se lo has dado. Esta variable debe contener el id del curso, que es un número. Normalmente suele venir como parámetro mediante el método POST, pero tienes que conocer el nombre de dicho parámetro (suele ser id, o cid) y obtenerlo mediante la funcion optional_param.

Creo que una vez hayas resuelto ambos detalles, todo tendría que funcionar correctamente.

En respuesta a Xavier Paz

Re: Obtener alumnos de un curso y meterlos en una tabla

de Rebeca Gómez -

Puffff sigo sin conseguirlo....

He intentado usar la función optional_param pero no consigo nada, no sé si la  estaré usando bien porque no entiendo muy bien como funciona.

¿Cómo hay que usarla? yo he puesto $courseid=optional_param('courseid') antes de $context, quiza haya puesto una bobada pero es que no tengo mucha idea de como hacerlo...

En respuesta a Rebeca Gómez

Re: Obtener alumnos de un curso y meterlos en una tabla

de Gabriel Dias -
Prueben con este codigo, a mi me anduvo. creo que lo que estabas haciendo mal es como tomabas el rol de la DB.

<?php

require_once('config.php');

$courseid = required_param('courseid');

$context = get_context_instance(CONTEXT_COURSE, $courseid);
$role = get_record('role','shortname','student');

$table = new stdClass;
$table->head = array('Nombre','DNI','Observaciones');
$table->align = array ("left");
$table->size = array (15,15,20);
$table->cellpadding = 5;
$table->cellspacing = 1;
$primlinea = array('este','ese','aquella niña');

$students = get_users_from_role_on_context($role,$context);

if ($students)
{
foreach($students as $student)
{
if( $person = get_record('user','id',$student->userid))
{
//aca se asignan los datos que van a contener las columnas en forma de array
//fijate que para dni y observaciones no puse nada, eso habria que completarlo

$table->data[] = array(fullname($person), '', '');
}
}
}

print_table($table);


Espero les sirva, saludos
En respuesta a Gabriel Dias

Re: Obtener alumnos de un curso y meterlos en una tabla

de Rebeca Gómez -

Muchas gracias por la respuesta. Lo he probado y me sale el siguiente error:

A required parameter (courseid) was missing

¿como lo puedo solucionar?

En respuesta a Rebeca Gómez

Re: Obtener alumnos de un curso y meterlos en una tabla

de Gabriel Dias -
Cuando llamas a la página pasale como parametro el id de curso. Algo como

http://....../script.php?courseid=2

(suponiendo que el script se llama script.php y el id de curso 2 existe)

saludos
En respuesta a Gabriel Dias

Esta publicación en el foro ha sido borrada

El contenido de esta publicación en el foro ha sido borrado y ya no puede accederse a él.
En respuesta a Javier Vega Carbajal

Re: Obtener alumnos de un curso y meterlos en una tabla

de Alejandro Michavila Pallarés -
Hola,

¿Me sirve este código para obtener el profesor que añade un módulo a un curso?, logicamente en lugar de alumno sería profesor.

//obtenemos el contexto del curso a partir de su id
$contexto = get_context(CONTEXT_COURSE,$id_curso);
//obtenemos rol de estudiante
$rol = get_record('role','shortname','student');
//obtenemos alumnos estudiantes en el contexto del curso
$alumnos = get_users_from_role_on_context($rol,$contexto);

//si hay alumnos
if ($alumnos){
//para cada alumno
foreach($alumnos as $alumno){
//obtenemos el usuario asociado
$persona = get_record('user','id',$alumno->userid)
//si se han podido obtener los datos del alumno
if ($persona){
//esto es una funcion de moodle que imprime el nombre completo
echo fullname($persona);
}
}
}

Lo que quiero hacer es insertar en la tabla principal de mi módulo el id del profesor para relacionar este módulo con un profesor.

¿Qué rol debo seleccionar para hacerlo, teacher, editingteacher o coursecreator?.

Gracias de antemano, un saludo.