Reporte de lista de eventos

De MoodleDocs
translator note icon.png Nota del traductor: La expresión inglesa report se tradujo como reporte en el Español de México y como informe en el Español internacional.


Los eventos en Moodle son una notificación interna de que algo ha pasado. Se usan para escribir en las bitácoras, para reportes, y en cualquier momento en que el código de una parte de Moodle quiera "oir" a cosas que están sucediendo.

  • Un administrador puede ver una lista de todos los tipos de eventos desde Administración > Administración del sitio > Reportes > Lista de eventos.
  • La lista puede filtrarse para mostrar componentes específicos (núcleo, Tarea, Libro, etc), niveles ( Enseñando, Participando, Otro ) y tipos de consulta a BasedeDatos (crear, eliminar, leer, actualizar).

EventsList.png

  • Al elegir un nombre de Evento se mostrará información más detallada acerca de ese evento.

eventdetail.png

Niveles educativos

  • Enseñando - Estos eventos usualmente se relacionan con lo que hacen los profesores de curso que afecta la experiencia de aprendizaje de los estudiantes. Puede ser, por ejemplo, actualizar una sección de un curso, calificar una Tarea o cambiar fases en un Taller.
  • Participando - Estos eventos usualmente se relacionan con la experiencia de aprendizaje de un usuario; por ejemplo, publicar en un Foro o enviar una Tarea.
  • Otro - Este nivel incluye acciones que no tienen un efecto directo sobre la enseñanza o el aprendizaje. Los ejemplos podrían ser actualizar un Calendario, crear un usuario o ver un mensaje.


Generando Moodle Events

Eventos son diferentes acontecimientos que se generan en Moodle.

Un evento podría ser crear un quiz dentro de un curso, o ver el informe de un cuestionario, o habilitar una insignia, etc. Que acaezca un evento nos da la oportunidad de que podamos crear nuevas acciones de manera automática a partir de ellos.

Utilicemos el ejemplo práctico de un evento. En nuestro caso necesitamos que cuando creemos un quiz, según la categoría del curso al que pertenezca, de manera automática límite el número de intentos ofrecidos. Es decir si el quiz se encuentra en un curso cuya categoría es course_category id 1, entonces el quiz tendrá intentos ilimitados. Si no, tiene un límite de 3 intentos.

El listado de los eventos recogidos de mi sitio se encuentran en

Administración del sitio Informes Listado de eventos

Los archivos que recogen estos eventos están disponibles en html/lib/classes/event

En el ejemplo el evento que necesitaríamos sería course_module_created que encontramos en course_module_created.php

Los eventos heredan de la clase base, su función más interesante sería

public static final function create_from_cm($cm, $modcontext = null)

En esta nos confirma que al generar el evento (crear un módulo en un curso) el evento va a ofrecer información que luego podemos procesar, en este caso

       // Create event object for course module update action.
       $event = static::create(array(
           'context'  => $modcontext,
           'objectid' => $cm->id,
           'other'    => array(
               'modulename' => $cm->modname,
               'instanceid' => $cm->instance,
               'name'       => $cm->name,
           )
       ));


Nos va a ofrecer el id del objeto (módulo), nombre, instancia y nombre del módulo creado.

¿Y ahora?

De la definición que venimos sosteniendo, cuando sucede un evento, nosotros necesitamos generar algún tipo de acción. En el ejemplo

evento.png

1. CREO UN MÓDULO QUIZ, EN UN CURSO

2. PERSONALIZO AUTOMATICAMENTE EL CAMPO ATTEMPS DEL QUIZ, DEPENDIENDO DE LA CATEGORÍA DEL CURSO

Los eventos constan en este sentido de 2 espacios diferentes

1. Evento (se originan cuando hacemos alguna acción, o bien pueden ser lanzados por el cron)

2. Observers. Son las funciones que dicen lo que hay que hacer una vez que se produce el evento, utilizando los parámetros que el propio evento le envía (por ejemplo el id del módulo)

Para ello es necesario indicar que cuando se produzca el evento crear un módulo quiz, se active un determinado observer (que actualice la tabla del quiz con unos valores según la categoría del curso en el que se encuentra este módulo).

Cada plugin tiene reservado un espacio para activar eventos en su carpeta db

Observamos html/mod/quiz/db/events.php donde encontramos la lista de observers, es decir que va a suceder una vez que se produce el evento.

En el ejemplo nuestro evento va a ser \core\event\course_module_created Lo obtenemos del nombre del evento mymoodle/report/eventlist/index.php

En html/mod/quiz/db/events.php habrá que definir la acción para que cuando suceda el evento haya un observer que realice la tarea necesaria

Para ello es necesario indicar el archivo y la función que va a gestionar este servicio (el del observer)

En el ejemplo existe previamente un archivo de observers en el quiz html/quiz/clases/group_observers.php

Aquí creamos una nueva función (el observer) que vamos a llamar public function mycourse_module_created($event)

Apreciamos que el parámetro $event, es toda la información que le va a enviar el evento (id del módulo, nombre, etc)

De acuerdo con esto actualizamos html/mod/quiz/db/events.php

$observers = array(

   // Handle group events, so that open quiz attempts with group overrides get updated check times.
  // incorporamos un nuevo array
   array(
       'eventname' => '\core\event\course_module_created',
       'callback' => '\mod_quiz\group_observers::mycourse_module_created',
   ),


1. nombre del evento (que ya lo sabemos) 2. Archivo (dentro de la carpeta class y sin extensión del módulo quiz) y función que va a realizar el servicio

Dicho de otra manera, hemos articulado que cuando suceda el evento (crear un quiz) se automatice una tarea que tiene que definir la función mycourse_module_created

Vamos a desarrollar esta precisa función


public function mycourse_module_created($event) {

global $DB;

$myqmod = get_coursemodule_from_id('quiz', $event->objectid); // info del módulo

$myc = $DB->get_record('course', array('id'=>$myqmod->course)); // info del curso

  $myattempts = 0;
  if ($myc->category > 1) { $myattempts = 3;}   
  // si la categoría del curso no es 1, 
  // entonces limitamos los intentos del quiz a 3
  // actualizamos los datos
  $table = 'quiz';
  $dataobject -> id = $myqmod->instance;
  $dataobject -> attempts = $myattempts;
  $DB->update_record($table, $dataobject);

}

¿Qué hemos hecho?

En resumen hemos utilizado los eventos para personalizar nuestro moodle respetando el core y donde le estamos indicando que cuando creemos un quiz (evento) comprobemos que categoría tiene ese curso, si la categoría no es la 1, entonces tendrá un límite de intentos de 3


Vea también

Developer documentation on Events (giving examples of levels