feed

PHP

Moodle es un ambiente educativo virtual (VLE) desarrollado inicialmente por Martin Dougiamas con la intención de ayudar a los educadores a crear cursos en línea pensando en todo momento en la colaboración del contenido y su evolución continua. Por supuesto, Moodle es Software Libre bajo el amparo de la GPL.

Es la plataforma educativa más extendida del mundo con más de cuarenta millones de usuarios y cuatro millones de cursos alrededor del globo. Está programada en legacy PHP (esto es que la práctica totalidad del core de Moodle no soporta clases) y por lo tanto no está orientado a objetos.

Realmente Moodle mezcla un poco de programación orientada a objetos con mucha programación estructurada. Tampoco utiliza ningún sistema de encapsulación de datos ni separa la vista de la lógica de la aplicación. Si pienso en implementar el patrón de diseño MVC en Moodle me entra la risa y una flojera interesante.

Arquitectura de MoodleMoodle se basa en un núcleo (conocido como el Moodle core) del sistema rodeado de una gran cantidad de plugins que proveen de funcionalidad específica a la plataforma. Los plugins en Moodle pueden ser de varios tipos distintos, autenticación, bloques, matriculación, temas, actividades, etc.

Todos los módulos comparten funcionalidad específica entre si y el core. La distribución estándar de Moodle incluye el core del sistema y un número de módulos de todos los tipos que proveen de la funcionalidad base del sistema y con el cual se puede empezar a funcionar sin carencias ni problemas de ningún tipo.

La estructura de los módulos en Moodle es muy simple, un directorio con archivos PHP, JavaScript, XML y/o CSS y puntos de entrada definidos en varios archivos clave como locallib.php, db/install.xml o lib.php que permiten la comunicación con el core.

El CoreEl core de Moodle proporciona todos los mecanismos necesarios para implementar la plataforma educativa. Implementa todos aquellos mecanismos que luego los plugins utilizan para desarrollar su función. Es por lo tanto el core la parte más importante del sistema Moodle y sus componentes principales son los siguientes.

Cursos y ActividadesMoodle define un curso como una secuencia de actividades agrupadas en secciones. Existen actividades de todo tipo y son muy flexibles. Los cursos se organizan en categorías jerárquicas dentro de la plataforma educativa.

Usuarios y GruposCada curso puede tener un número indeterminado de alumnos y un número indeterminado de grupos que acoja a esos alumnos. Los alumnos tienen un perfil de usuario que pueden editar y opciones específicas por curso en el que están matriculados. Los cursos cuentan con históricos, roles, permisos, etc.

MatriculacionEn Moodle los tipos de matriculación disponibles en la plataforma se definen a través de módulos por lo que podemos definir nuevos tipos de matriculación con sus peculiaridades de forma bastante sencilla a través de módulos externos. Cada tipo de matriculación puede implementar sus propios mecanismos al margen del core.

Los módulos principalesComo ya he dicho anteriormente, Moodle viene con una serie de módulos principales o estándar que además le son necesarios para su correcto funcionamiento. A parte, al estar tan extendida, moodle cuenta con una base de datos de módulos ingente donde buscar algo a veces puede ser un poco exasperante.

Algunos de los más importantes tipos de módulos en Moodle son:Actividades y Recursos: Componen los objetos individuales del curso. Existen actividades de todo tipo, colaborativas, foro, wiki, cuestionarios, etc. Es de largo el tipo de módulo más desarrollado y se instalan en el directorio mod dentro de la raíz de MoodleBloques: Los bloques son cajas con contenido añadido en columnas a los lados del contenido principal que ofrecen funcionalidades varias. Residen en el directorio blocksMatriculación: Aunque este tipo de plugin no es muy común, voy a hablar mucho de él en esta serie puesto que la experiencia que tengo en el desarrollo de módulos de Moodle incluye uno de estos, Los plugins de matriculación residen en el directorio enrolTemas: Los estilos se desarrollan dentro de módulos que residen (efectivamente, lo has adivinado) en el directorio theme Existen muchos otros tipos de plugins pero su completa enumeración y definición excede de sobremanera el propósito de este artículo.

La base de datosMoodle integra más de doscientas tablas en su base de datos incluyendo las necesarias por el core y las de los módulos principales. La estructura de las tablas de los módulos se definen en el archivo install.xml dentro del directorio db en el directorio principal de los módulos. La base de datos puede ser editada y revisada a través del menú de administración de la plataforma.

En Moodle no usamos un objeto para interactuar con la base de datos (aunque existe, es una de las pocas cosas que si cuenta con orientación a objetos en Moodle) sino con funciones al estilo de la programación estructurada que interactúan con un objeto ODBC.

Tampoco existe un ORM propiamente dicho pero si una capa de abstracción sobre la base de datos llamada XMLDB

Organización del códigoMoodle sigue un enfoque de transaction script para organizar el código apoyado por elementos de un modelo de dominio puesto que al empezar a programar Moodle, lo orientación a objetos no estaba soportada en PHP, o al menos esa es la excusa oficial expuesta en la documentación para desarrolladores del proyecto.

El código del core y los módulos principales de Moodle se están regulando y refactorizando para soportar el paradigma orientado a objetos a una velocidad similar a las obras del escorial, pero la esperanza es lo último que se pierde.

Otra cosa que Moodle no soporta es hooks por lo que la funcionalidad del core solo puede ser extendida a través de parches modificando el mismo y convirtiendo nuestro desarrollo en algo complicado de mantener que impide la normal actualización de la plataforma.

Pongámonos en situaciónDesde hace aproximadamente un año he estado desarrollando un módulo muy ambicioso que añade funcionalidad extra al core de Moodle sin modificar el código del mismo ni aplicar parches posibilitando la actualización completa de la plataforma. El módulo sigue una política de no intromisión en el core del sistema añadiendo funcionalidad extra, capas y entidades superiores.

En próximas entregas de esta nueva serie narraré los problemas a los que me he enfrentado a la hora de desarrollar dicho módulo y los éxitos cosechados.

Días intensos para la comunidad PHP, primero salió la última (de momento) versión estable de PHP 5.6, la 5.6.10 y a las pocas horas se liberó por fin la anhelada y hypeada primera versión de PHP 5.7 que nos podemos echar a la boca: PHP 7.0.0 Alpha 1.

Las gentes de PHP recomiendan encarecidamente testear con precaución y no utilizar esta versión en producción, normal siendo una versión Alpha que todavía está en pañales. Entre las principales característica que anuncian están las siguientes:

...
Leer más »

Cada día usamos más características de HTML5 pero a veces hay algunas que nos pasan un poco más desapercibidas. Uno de los ejemplos es HTML5 Constraint API que esta orientada a facilitar las validaciones de formularios. HTML5 soporta dos atributos que nos permiten validar elementos en un formulario, por un lado tenemos el atributo "required" que nos obliga a rellenar el campo y por otro lado...

Leer más »

Hoy por hoy en nuestro mundo técnico es prácticamente obligatorio comprar bibliografía en inglés y trabajar con editoriales internacionales. Vamos a hacer un recorrido por las editoriales más conocidas en nuestro ámbito.Seguro que muchos de vosotros tenéis algun libro en vuestras estanterías. Algunos de ellos se han convertido en auténticos best seller y, aún estando en la era de internet , son...

Leer más »

Mark, ya has sobrescrito de nuevo el config.php y mira todos esos warnings, ¡esto no puede seguir así!

ACTUALIZACIÓN: Este post se trata de una pequeña broma en ocasión del día de los Santos Inocentes que se celebra en España el 28 de diciembre de cada año. Disculpad las molestias.

Para los defensores y fanboys varios de PHP Facebook es poco menos que la piedra filosofal: "Si un gigante de la...

Leer más »

El otro día estuve echando un vistazo a la lista de lenguajes de programación más utilizados que ha publicado Gartner para 2014 en el cual vemos a Java como lider del mercado. Quizás esta vez tengamos que preguntarnos si es un líder indiscutible o no. En este caso el segundo lenguaje de programación es JavaScript que le esta pisando los talones y la presión que esta realizando es cada día más...

Leer más »

Muchos piensan que PHP está muerto o por lo menos en decadencia. Los hechos van por otro lado, no sólo no parece muerto si no que está de parranda: sigue siendo muy, muy utilizado en entorno web y se siguen haciendo nuevos desarrollos e innovaciones. De hecho este 2014 ya tuvimos la noticia de HHVM y Hack de la gente de Facebook y ahora nos encontramos con otro compilador PHP con muy buenos...

Leer más »

Cerramos la semana repasando algunas de las lecturas recopiladas por los editores de Genbeta Dev. Agrupamos en este nuevo Pull Request Semanal #11 nuestras recomendaciones de artículos técnicos para desarrolladores.

  • ¿Cumple tu web con la normativa de información de uso de cookies? Pues bien, parece que ya se están produciendo las primeras multas de 5.000 euros , ojo aunque aparecía el aviso (casi
...
Leer más »

Una vez más, traemos el código fuente de una aplicación para que nos digáis si sabéis de dónde procede. En este caso se trata de un software de servidor, desarrollado por un programador alemán (aunque de nombre noruego y apellido español), que con apenas 20 años vio la necesidad de una aplicación libre para un nicho que todavía se encontraba muy verde.

Las pistas

  • Es un habitual entre las
...

Leer más »

Muchos de vosotros habréis conocido los gloriosos días en que las conectividades (ej. la empresa A envía en tiempo real el estado del almacén a otra empresa B) se hacían directamente por TCP y se definían hermosas tarjetas que mostraban la longitud de tal o cual campo ("...el teléfono 30 char..." ). En realidad, ninguna de las partes tenía ninguna gana de definir el formato, crear el...

Leer más »

Recientemente hicimos un repaso en Genbeta Dev a 7 frameworks PHP con diferentes propósitos. Cómo era de esperar, nos dejamos muchos en el tintero y vosotros nos mostrasteis muchas más alternativas, que aquí repasaremos para tener aún más opciones a la hora de elegir que framework usar en nuestros proyectos.

Symfony

Symfony se ha convertido en uno de los frameworks más usados en la actualidad...

Leer más »

Sigue a Genbetadev