Home » Archive

Articles Archive for 12 noviembre 2009

Factorsim, Moodle »

[ | 12 nov 2009 | 3 Comments | 963 views | ]

Consultar la nota del alumno logeado en un curso parece una operación sencilla. Podemos necesitarla para decidir si ha aprovado o no, para decidir nostrarle una actividad de final de curso, un diploma, una felicitación…

Moodle cuenta con una función grade_get_grades() capaz de proporcionarnos cualquier nota EXCEPTO las notas de curso, de categorías y las manuales. Por tanto, no nos queda más remedio que buscarnos esas notas de otra manera.

En el caso de moodle 1.8 / 1.9, podemos obtenerlas con una simple consulta a la base de datos:

$grades = get_record_sql("SELECT g.finalgrade,
                                 g.rawgrademin,
                                 g.rawgrademax
                          FROM ".$CFG->prefix."grade_grades g,
                               ".$CFG->prefix."grade_items i
                          WHERE i.itemtype='course' AND
                                i.id=g.itemid AND
                                i.courseid='".$COURSE->id."' AND
                                g.userid='".$USER->id."'");

En versiones más antiguas, en cambio, no disponemos de estas notas ya calculadas en la base de datos. Cada vez que se utilizan, el módulo de gradebook obtiene las notas parciales, invoca a las funciones de evaluación de notas de los módulos pertinentes y pondera los resultados para terminar con una nota global. Nuestras dos únicas opciones son replicar ese comportamiento a mano o bien intentar reaprovechar el código del gradebook. Esto último es lo que hemos hecho en Factorsim en el siguiente ejemplo para Moodle 1.6:

require_once($CFG->dirroot.'/grade/lib.php');
$grades = grade_get_formatted_grades();
$grade = $grades[0][$USER->id]['student_data'];

Esta última solución es un buen ejemplo de “matar mosquitos a cañonazos”, porque la función grade_get_formatted_grades() nos devuelve todas las notas de todos los alumnos del curso. Nosotros después las descartamos todas excepto las del alumno que nos interesa.