Ir al contenido principal

Guía para desarrollo y extensión de Moodle: CRUD (1/?)

CRUD es el acrónimo para Create, Read, Update y Delete voy a iniciar esta secuencia de guías de desarrollo y extensión de las funcionalidades de moodle indicando el conjunto de funciones que permiten realizar estas cuatro operaciones.

El orden de este conjunto de guías no siguen un plan específico, aunque debería, sino responden a las necesidades de documentación del Equipo de desarrollo y extensión tecnológica de la Unidad de Virtualización.

El código de moodle esta organizado de forma modular, lo cual se aplica al conjunto de funcionalidades que se distribuyen y a las que se pueden agregar luego bajo la modalidad de plugins siguiendo un proceso de instalación manual, de este proceso se hablara en otra guía de esta secuencia.

En fin para que los módulos puedan ejecutarse sobre moodle requieren de un conjunto de procedimientos y funciones genéricas que representan el corazón del sistema o núcleo. A este conjunto de funciones se les denomina API de moodle y es el que describiré a continuación, limitándome al conjunto de estas que permiten hacer CRUD sobre el medio de almacenamiento persistente.

More...
Librerías

Las librerías son un conjunto de guiones de comandos que contienen la implementación de funciones que permiten realizar alguna operación. Para quienes están familiarizados con el funcionamiento de moodle, sepan que todas esas funcionalidades están implementadas como una función que recibe parámetros, generalmente un objeto que contiene toda la información relacionada con una entidad o varias según sea el requerimiento. Ej.: La creación de un usuario; para crear el usuario, el administrador llena un formulario, luego este formulario es procesado, luego los datos en él contenidos se cargan en memoria en un objeto, finalmente este objeto es pasado como parámetro a la función del API de moodle respectiva, que permite crear una entrada en el medio de almacenamiento persistente para un usuario.

En moodle existen dos tipos de librerías, las de módulo y las del núcleo del sistema. Las primeras se encuentran en un archivo llamado lib.php en el directorio de trabajo de cada módulo. Las librerías del núcleo se almacenan en el directorio [moodleroot]/lib.

En esta parte de la guía voy a describir las funciones del núcleo que permiten realizar CRUD en moodle. El archivo [moodleroot]/lib/dmllib.php contiene el conjunto de funciones del Lenguaje de Manipulación de Datos usadas para interactuar con la base de datos o medio de almacenamiento persistente. La implementación de estas funciones es genérica, es decir que no están ligadas a un RDBMS específico, lo que garantiza la independencia del software respecto al motor de base de datos. Según la documentación de moodle, las funciones han sido probadas en bases de datos como: mysql, postresql, mssql, oracle.

La librería dmllib contine 57 funciones que crean, leen, actualizan y borran entidades de la base de datos; así como también funciones utilitarias que realizan cosas puntuales en el contexto del trabajo con bases de datos.

Las tareas más comunes al momento de escribir nuevas funcionalidades para moodle son las de crear, leer, actualizar y borrar en la base de datos; a continuación se muestran las funciones de uso más frecuente junto con una descripción. Para seguir un orden nos basaremos en CRUD.

Los parámetros que recibe una función y el valor de retorno representan el mejor descriptor de la función en si mismo. Moodle es un LCMS construido modularmente y orientado a objetos; esto se nota en la estructura de las funciones que conforman el API. La mayoría de estas reciben objetos y otras variables adicionales que indican a la función como ha de procesar la información del objeto que recibe.

CREATE

insert_record: Crea un nuevo registro en la tabla [$table] de datos con la información contenida en el objeto [$dataobject] pasado como argumento. Por defecto retorna el ID del nuevo registro [$returnid=true] y permite personalizar el nombre de la columna de clave primaria [$primarykey='id']; aunque en la practica casi nunca se usa estos dos últimos modificadores de la función.
function insert_record($table, $dataobject, $returnid=true, $primarykey='id');

READ: para leer de la base de datos existen una gran variedad de funciones; la mayoría de estas retornan objetos o arreglos de objetos. En el archivo, estas funciones, son sencillas de identificar todas empiezan con el prefijo get_. A continuación las de uso más común, lo dicho para estas se aplica para todas.

get_field: Obtiene el valor de la columna [$return] de la tabla [$table] de la fila que coincida con los criterios [$field1]=[$value1] y [$field2]=[$value2] y [$field3]=[$value3]. Retorna false si no existe la columna o no existen coincidencia en la base de datos.

function get_field($table, $return, $field1, $value1, $field2='', $value2='', $field3='', $value3='')

get_field_sql: Obtiene el valor de la columna indicada en la consulta SQL [$sql] dada en el argumento. Requiere que la sentencia SQL sólo indique una fila y columna de retorno; de lo contrario retorna false. Ej.: SELECT columna FROM tabla WHERE id=valor [AND|OR [más condiciones]];

function get_field_sql($sql)

get_record: Obtiene el objeto cuya estructura es similar a la de la tabla [$table]. La información que contiene el objeto corresponde con el registro que coincide con los criterios [$field1]=[$value1] y [$field2]=[$value2] y [$field3]=[$value3]. [$fields] indica a la función que valores o que columnas (cadena separada por comas) deben devolverse en el objeto, por defecto se retornan todas por tanto el objeto es completo.

function get_record($table, $field1, $value1, $field2='', $value2='', $field3='', $value3='', $fields='*')

get_records: Obtiene un arreglo de objetos cuya estructura es similar a la de la tabla [$table]. La información que contiene el objeto corresponde con el registro que coincide con los criterios [$field1]=[$value1] y [$field2]=[$value2] y [$field3]=[$value3]. [$fields] indica a la función que valores o que columnas (cadena separada por comas) deben devolverse en el objeto, por defecto se retornan todas por tanto el objeto es completo. La función permite retornar subconjuntos de registros a través de los argumentos [$limitfrom='', $limitnum='']; esto es útil para cuando de requiere construir listas multi páginas o se quiere optimizar el tiempo de respuesta de algunas vistas de datos.

function get_records($table, $field='', $value='', $sort='', $fields='*', $limitfrom='', $limitnum='')

El resto de funciones trabajan de forma similar en esencia, al igual que en get_field_sql es posible enviar una sentencia SQL, también es posible recuperar en un arreglo los registros devueltos por una sentencia SQL; por ejemplo esto se logra con la función get_records_sql, el funcionamiento es el mismo que get_records; la diferencia radica en que la primera permite personalizar el comando de consulta y la segunda lo construye internamente.

UPDATE

update_record: Actualiza la información de un registro en la tabla [$table] en la base de datos. La nueva información se envía encapsulada en los valores de los atributos del objeto [ $dataobject]. Internamente la función construye la sentencia SQL UPDATE y la ejecuta contra la base de datos. Si la actualización se ejecuta con éxito, retorna true; en caso contrario false.

function update_record($table, $dataobject) ;

DELETE

delete_record: Borra los registros de la tabla [$table] de la base datos que coincidan con los criterios [$field1]=[$value1] y [$field2]=[$value2] y [$field3]=[$value3]. Tenga cuidad en utilizar esta función se podría perder toda la información de una tabla de datos si no se limita bien el número de registros afectados con los criterios de selección. Ej.: la llamada delete_records("user"); eliminaría todos los registros de la tabla de usuarios.

function delete_records($table, $field1='', $value1='', $field2='', $value2='', $field3='', $value3='')

Conclusión:

El API de moodle implementa funciones útiles para realizar CRUD sobre el LCMS. Las funciones expuestas aquí representan un subconjunto, que en la práctica han resultado de utilidad y de uso frecuente. El entender como funcionan estas permite entender también el resto de funciones.

Comentarios

Entradas más populares de este blog

Los propios bocadillos de Catacocha

Me causo mucha sorpresa el frenaso del vehiculo, minutos antes, note que el conductor, trataba de ubicar algo, al margen derecho de la vía El empalme - Catacocha. Al volver, nos combido, lo que a su juicio era el mejor dulce de la provincia de Loja, y por tanto del Ecuador. Esos bocadillos, que sólo se hacen aca, un manjar hecho maní y miel de caña. Un manjar que no puedo dejar de probar cuando viajo hacia Pindal. Luego cuando tuvimos, mi familia y yo, la oportunidad de volver en auto por el mismo lugar del frenaso repentino. Senti personalmente, la sensación que aquel conductor sintio en su momento, pues parecia que hubiese perdido algo, y reduje la velocidad mientras miraba el filo del asfalto para ubicarlo. De pronto allí estaba la casita de adobe, con un gran corredor y una vitrina, que delataban que allí era el lugar. Al calor de la hornilla de leña; un pailón, miel casi a punto y, maní cocido y molido, se estaban preparando para ser más tarde aquel delicioso bocado de dulce. Pero

José Benjamín

Tomo sus puños, silencio, y al momento -"será varón"-, así se definió su nombre. En Noviembre 08, como punto final a la jornada que inicio con una alarma falsa de novatos; luego de fundirme a ella apoyando su pujo, vi su cabecita de negro pelo entrar en contacto con el aire lojano, allí empezó la vida.