• No results found

Discussion, Conclusions, and Recommendations

Pensando en un enfoque de programación, una de las ideas de Moodle consiste en llegar a reunir la mayor cantidad de funcionalidades, permitiendo que sus cursos sean los más íntegros posibles, tanto para el profesor como para el alumno. La comunidad de desarrolladores de Moodle presenta gran fuerza, ya que resulta fácil impactar sobre su código de una forma limpia y satisfactoria. Gracias a esta cualidad consigue atraer a la afición para que se logre crear nuevas herramientas de acuerdo a las necesidades que van surgiendo. Entre los recursos que tiene el entorno se encuentran un conjunto de bibliotecas y funciones que facilitan el trabajo de los desarrolladores. Por eso, es importante tener conocimiento sobre su estructura y los requisitos que deben cumplir cada una de las extensiones a desarrollar. Para la creación del bloque es importante tener en cuenta su estructura visual, las clases y funciones obligatorias que deben contener los archivos y clases principales que se encargan de su funcionalidad.

46 Directorios y archivos principales y necesarios

Para iniciar la programación del bloque lo primero que se debe hacer es crear una carpeta dentro del directorio /blocks en el servidor la plataforma. El nombre de este directorio no puede contener ningún carácter en mayúsculas y tampoco acepta el (-). Este debe empezar con un carácter alfanumérico seguido de combinaciones de dígitos y letras. En este proyecto el directorio se llama detectar_emociones.

El siguiente paso fue crear el archivo que contendrá la clase principal dentro del directorio del bloque (/blocks/detectar_emociones). En este caso se llama block_detectar_emociones.php. Este contiene las funciones básicas para el funcionamiento del bloque. La clase block_detectar_emociones extiende de block_list, clase que pertenece a la biblioteca /blocks/moodleblockclass.php y se usa para crear un bloque donde se pueda listar el contenido en lugar de mostrar solo texto. La estructura del directorio del bloque (véase Figura 2.11) se describe seguidamente:

 db: se guarda el archivo acces.php. Este es el que controla la accesibilidad de los usuarios. Además, se encuentra el archivo install.xml que contiene el modelo de la tabla de datos útil para el trabajo con el bloque, creada en el proceso de instalación.

 images: aquí se guardan las imágenes que se les toman a los estudiantes.

 lang: contienen los archivos que representa los idiomas que soporta el Moodle. Estos archivos deben ser nombrados con el mismo nombre de la clase principal. El bloque “Emociones” contiene los idiomas inglés y español.

 config.php: contiene otras funciones necesarias para el funcionamiento del bloque.  edit_form.php: se implementan las configuraciones locales del bloque.

 emociones_detectadas_form.php: clase en la que se crean los componentes del formulario para seleccionar los estudiantes.

 emociones_detectadas_view.php: con este archivo se muestra la vista del formulario “Seleccionar estudiantes”.

 guardar_foto.php: se realiza el trabajo con la cámara para la captura de las imágenes. Además, se trabaja con la FER REST API para detectar las emociones.

47  seleccionar_estudiante_form.php: clase en la que se crean los componentes del

formulario “Visualizar emociones detectadas”.

 seleccionar_estudiante_view.php: se muestra la vista del formulario “Visualizar emociones detectadas”.

 version.php: registra la versión del bloque y la requerida por el bloque de Moodle donde se instalará.

Figura 2.11 Estructura del bloque “Emociones” Clase principal y funciones implementadas

En la clase block_detectar_emociones se define principalmente: el nombre del bloque y el contenido que se va a mostrar para los diferentes usuarios. Además, permite modificar los datos una vez que son cargados y antes de que estén disponibles. Se especifica en qué formatos del curso se mostrará el bloque y dónde se va a instanciar. A continuación, se describen brevemente las funciones más importantes.

Con la función init() se declara el título del bloque para cada una de las instancias que se muestran en el curso, haciendo uso de la variable $this->title.

Mediante la función get_content()se muestra el contenido del bloque. Se diferencia según el premiso que tenga el usuario registrado (apoyado del archivo acces.php). Para ello se hace

48 uso de la variable $this->content. A través de ella se muestran los enlaces asociados a las actividades que puede realizar el usuario, en caso que sea profesor.

En el caso del estudiante, se comprueba si está seleccionado en el análisis para mostrar la cámara en tiempo real utilizando el arreglo $this->content->ítems[]. Para ello, se realiza una consulta a la base de datos verificando si el estudiante se encuentra añadido al estudio. Para mostrar la cámara y capturar las fotos se utiliza el lenguaje JavaScript. Dentro de este se ejecuta el archivo guardar_foto.php para guardar las fotos dentro de la carpeta “images” que se encuentra en el directorio del bloque en el servidor. Luego se realiza la comunicación con la FER REST API para el reconocimiento de emociones. Mediante la función file_get_content() se pueden consumir los recursos que brinda la API. Para ello se le pasan como parámetro la URI donde se especifica el método que se va a consumir. En este caso es “predict”. Este permite clasificar la emoción que refleja el rostro humano especificándole la dirección física de cada imagen. Cada emoción se obtiene a través del estándar JSON. Este objeto se mapea y se toma la emoción para almacenarla en la tabla asociada al bloque.

La función instance_allow_multiple permite añadir varias instancias del bloque “Emociones” en un mismo curso. La función specialization se usa para que se pueda cambiar el nombre del bloque desde la interfaz de Moodle.

Asignación de privilegios y acceso a la base de datos

El bloque está pensado para que el profesor tenga conocimiento del estado emocional en el que se encuentran sus estudiantes. Es por eso que se designaron diferentes privilegios entre los tipos de usuarios que contiene el Moodle. En dependencia de los permisos que se asignen se puede restringir el acceso a determinadas informaciones o vistas. Toda esta configuración de permisos se encuentra en /blocks/detectar_emociones/acces.php.

Distribución de permisos

Moodle logra la diferenciación entre las vistas de un bloque para el estudiante y profesor haciendo uso de las capabilities. Esto es lo que se conoce como las capacidades asociadas a la interfaz que se va a mostrar y no son más que un conjunto de reglas específicas. Estas

49 describen estrictamente qué función tendrá cada usuario. Las capacidades poseen un conjunto de propiedades que se explican a continuación:

 captype: define el tipo de la capacidad (write/read).

 archetype: contiene un arreglo de los usuarios a los que se le asignará una capacidad específica. Se define como un objeto clave-valor, donde la clave corresponde al identificador del usuario y el valor es el tipo de acceso.

 contextlevel: define el contexto al que pertenece la capacidad (CONTEXT_BLOCK /CONTEXT_COURSE).

Para el bloque “Emociones” se creó la capacidad “block/detectar_emociones: addinstances”. Esta permite instanciar el bloque y gestionarlo en los cursos; definir el contexto que tendrá el bloque haciendo uso del parámetro contextlevel. En este caso recibe CONTEXT_BLOCK para que puedan acceder el administrador y el profesor. Para otorgar el permiso de escritura se usa captype que recibe write para realizar cambios. El arreglo archetype contiene los usuarios con su tipo de acceso a la capacidad (CAP_ALLOW).

Operaciones con la base de datos

Todas las actividades que se realizan en el bloque, necesitan de los datos que brinda su tabla de datos. Moodle tiene una potente API para la manipulación con su base de datos. Esta se compone por varias bibliotecas ubicadas en /lib. A continuación, se describen las que se usaron en la implementación junto con las funciones:

 accesslib.php: tiene implementadas las funciones para trabajar con las capacidades. En el trabajo se usó has_capability para saber qué tipo de permiso tiene el usuario que está accediendo al bloque.

 moodle_database.php: contiene funciones para gestionar la base de datos, facilitándole el trabajo a los desarrolladores. En el trabajo se usaron: get_records, para hacer consultas a la tabla del bloque, estas son devueltas en un arreglo de registros en forma de objetos. Además, se usó insert_record, recibe como parámetro un objeto y el nombre de la tabla para introducirlo; execute, para actualizar los campos de la tabla correspondiente al bloque.

50  formslib.php: se usó para crear los formularios de las vistas que implementa el bloque, haciendo uso de la función principal definition, donde se describen los componentes que se mostrarán con los atributos.

Estructura de la tabla “mdl_block_detectar_emociones”. Archivo xml.

La estructura de la tabla se registra en el fichero install.xml (véase Anexo 2.1). Este se genera con la herramienta de Moodle XMLDB. La tabla del bloque se crea cuando se instala el plugin en el sitio.

Lo primero que se hace es definir la versión y tipo de codificación que se va a usar para el archivo xml. Luego se define en qué dirección estará el fichero (PATH), la versión del bloque (VERSION) y una descripción sobre la tabla del bloque “Emociones” (COMMENT). Además, se puntualiza la definición y localización del esquema del archivo. Finalmente, con la etiqueta <TABLES> se crea la tabla (quedando registrado el nombre) y dentro de esta los campos, haciendo uso de la etiqueta <FIELD> para describir los tipos y valores por defecto.

Configuración y creación de los paquetes de idiomas

Otra de las características que tiene Moodle y por la que tiene tantos usuarios actualmente matriculados en los cursos que brinda, es la variedad de idioma que engloba. El trabajo desarrollado en esta investigación se desenvuelve en dos idiomas (español e inglés) porque son los que proporciona el Moodle de la UCLV. Es por esto que se creó el directorio lang, donde están agrupados dos paquetes por tipo de idioma (“es” para español y “en” para inglés). Cada una de estas carpetas contiene un archivo con extensión php, que almacena los string y sus descripciones para los idiomas. Es importante que al menos el plugin contenga el idioma en el que se instaló la plataforma.

Esta funcionalidad la logra el programador a medida que va creando los nuevos textos o mensajes que vayan a ser mostrados al usuario, de la siguiente forma:

 Definir dentro del fichero blocks_detectar_emociones.php el texto que se quiere mostrar con el siguiente formato: $string[‘identificadorDelTexto’] = ‘texto’.

51  El texto definido se obtiene haciendo uso de la función get_string. Dicha función

recibe el identificador del texto y el nombre del bloque.

Establecimiento de las versiones para el nuevo bloque

En el fichero version.php se define la versión actual del bloque y la mínima versión de Moodle que requiere el bloque. La forma de comprobar nuevas actualizaciones del bloque se realiza a través de la validación de este archivo. Su descripción se presenta a continuación:

 plugin->component: se define el nombre del bloque con el que se trabaja.

 pluguin->version: contiene la versión del módulo en formato YYYMMDDXX, el cual corresponde al año, mes, día y hora respectivamente.

 plugin->requires: establece la versión mínima de Moodle en la que se podrá trabajar con el bloque y su formato es el mismo que el anterior.

 plugin->cron: intervalo de segundos para comprobar la versión del bloque.

Configuraciones locales

Moodle tiene definido un grupo de configuraciones locales por defecto para los bloques. Estas configuraciones pueden ser modificadas o incrementadas según la funcionalidad deseada. El trabajo con estas configuraciones para el bloque “Emociones” se realiza dentro del archivo edit_form.php. En él se define la clase block_detectar_emociones_edit_form, la cual hereda de la clase block_edit_form. Esta se usa para crear formularios dentro de los bloques ya que controla su identificador, el formato del curso en el que se encuentra y además extiende de la clase moodleform. Para esta investigación en específico, la configuración añadida permite cambiar el nombre del bloque. Se crea usando la función specific_definition($mform), para definir los nuevos componentes del formulario. El profesor decidirá si desea cambiarlo en dependencia del curso y del enfoque que quiera tener.

Formulario Seleccionar estudiantes

Para crear la página que le permitirá al profesor seleccionar los estudiantes a analizar y definir la cantidad de imágenes por tiempo que desea obtener se crearon dos archivos: seleccionar_estudiantes_form.php y seleccionar_estudiantes_view.php.

52 En el archivo seleccionar_estudiantes_form.php se define el formulario “Seleccionar estudiantes”. Aquí se crea la clase seleccionar_estudiantes_form que extiende de moodleform. Esta clase brinda facilidades para el trabajo con formularios. Dentro se encuentra la función definition() que permite crear los componentes del formulario para trabajar con la información (mostrarla o guardarla). Desde esta se realizan consultas a la base de datos de Moodle para obtener los estudiantes que están matriculados en el curso donde se instanció el bloque. Se realiza con el uso de la función get_record_sql() que recibe como parámetro una consulta SQL.

Todos los estudiantes matriculados se listan mediante componentes checkbox. Para ello se utilizan las funciones propias de Moodle que permiten la creación de formularios: addElement(), setDefault() y setType(). La función addElement()permite crear los elementos de un formulario. Para ello necesita parámetros como el identificador, el nombre y el tipo. En este caso se definió como tipo checkbox (nombre de un estudiante). La función setDefault() se utiliza para establecerle un valor por defecto al checkbox. Los checkbox relativos a los estudiantes escogidos en su último estudio se mostrarán seleccionados cuando el profesor entre nuevamente a esta página. La función setType() se utiliza para definir el tipo de elemento, en este caso es boolean.

Además, se crean los campos para registrar la cantidad de imágenes que el profesor desee tomar y el tiempo que debe transcurrir entre la captación de las fotos. Mediante la funciones addelement(), addHelpButton(), setType(), setDefault() se crean estos elementos. Ambos utilizan la función addElement() para crear el elemento donde se registrarán los valores. En este caso se le definió el tipo de elemento text. Además, se definió un identificador para cada campo y el nombre del campo. También se usó la función addHelpButton() para mostrar un botón de ayuda en cada campo. Mediante este se describe brevemente la funcionalidad. Se usó setDefault() para establecer valores por defecto. Si el profesor no desea cambiarlos se tomará una foto cada tres minutos para un total de tres fotos. Por último se crean los botones Guardar cambios y Cancelar con la función addElement() pasándole como parámetro el tipo de elemento submit, un identificador y los respectivos textos que se quieren mostrar en la vista del botón.

53 Para mostrar la vista del formulario “Seleccionar estudiantes” se creó el archivo seleccionar_estudiantes_view.php. Dentro, se crea un objeto de la clase seleccionar_estudiantes_form, donde están guardados los componentes del formulario para instanciarlo en la vista. Con los valores de entrada se crea un objeto que permitirá almacenar los datos en la tabla del bloque cuando se acciona el botón Guardar cambios. Ese objeto se mapea en correspondencia con los campos de la tabla para insertar los datos que contiene con la función insert_record(). Cuando se guardan los cambios se redirige a la página principal del curso.

Formulario Visualizar emociones detectadas

Para la creación de la página que muestra las emociones detectadas a los estudiantes según un historial se craron dos archivos: emociones_detectadas_form.php y emociones_detectadas_view.php

El formulario “Visualizar emociones detectadas” se define en el archivo

emociones_detectadas_form.php. Aquí se crea la clase

emociones_detectadas_form que también extiende de moodleform. En ella se define la función definition()para crear los componentes del formulario. En esta función se obtienen los estudios que haya realizado el profesor para mostrarlos mediante una consulta a la base de datos. Están identificados por la fecha de creación y para ello se usó la función addElement(). Esta recibe el tipo de elemento (header), un identificador y el nombre que se va a mostrar. Para cada estudio se muestran los nombres de los estudiantes seleccionados. Para cada estudiante se listan las emociones que se le detectaron. Estas se muestran con la función addElement(). Dicha función recibe como parámetro el tipo de elemento (static), un identificador, la emoción detectada y la fecha respectiva a esta. Además, cada estudiante tiene asociado un botón para descargar las emociones hacia un archivo de texto. Para ello se utiliza la función addElement(). Se le definen como parámetros el tipo de elemento (submit), un identificador y el nombre del botón Descargar.

Para mostrar la vista del formulario “Visualizar emociones detectadas” se creó el archivo emociones_detectadas_view.php. Dentro de él se crea un objeto de la clase emociones_detectadas_form para instanciar los componentes del formulario y mostrarlos

54 en la vista. Además, se implementa la funcionalidad del botón Descargar, utilizando la función exportarTxt(). Esta recibe dos parámetros: el estudiante y la lista de emociones que se le detectaron. El primer parámetro se obtiene haciendo una consulta a la base de datos para saber el nombre y los apellidos del estudiante analizado, concatenado a la extensión “txt”. Para obtener el segundo parámetro también se realiza una consulta a la base de datos, en este caso a la tabla del bloque. Según el estudiante, se logra como resultado las emociones que se le detectaron. Una vez que el profesor termine se redirige a la página principal del curso.

Related documents