# Drupal

Drupal (pronunciación IPA en inglés: [druː pʰʊɫ]) es un sistema de gestión de contenidos o CMS (por sus siglas en inglés, Content Management System) libre, modular, multipropósito y muy configurable que permite publicar artículos, imágenes, archivos y que también ofrece la posibilidad de otros servicios añadidos como foros, encuestas, votaciones, blogs, administración de usuarios y permisos. Drupal es un sistema dinámico: en lugar de almacenar sus contenidos en archivos estáticos en el sistema de ficheros del servidor de forma fija, el contenido textual de las páginas y otras configuraciones son almacenados en una base de datos y se editan utilizando un entorno Web.
Es un programa libre, con licencia GNU/GPL, escrito en PHP, combinable con MySQL/PostgresQL/SQLite, desarrollado y mantenido por una activa comunidad de usuarios. Destaca por la calidad de su código y de las páginas generadas, el respeto de los estándares de la web, y un énfasis especial en la usabilidad y consistencia de todo el sistema.
El diseño de Drupal es especialmente idóneo para construir y gestionar comunidades en Internet, también destaca por su flexibilidad y adaptabilidad, así como la gran cantidad de módulos adicionales disponibles, hace que sea adecuado para realizar muchos tipos diferentes de sitio web.
En marzo de 2022, la comunidad de Drupal tenía más de 1,39 millones de miembros, incluidos 124.000 usuarios que contribuyeron activamente, lo que resultó en más de 48.300 módulos gratuitos que amplían y personalizan la funcionalidad de Drupa, más de 3.000 temas gratuitos que cambian la apariencia de Drupal y al menos 1.400 distribuciones gratuitas.

## Funcionalidades

Código abierto para grandes organizaciones
Drupal es la plataforma que muchos gobiernos utilizan para comunicar sus mensajes más importantes (Gobierno de la República Argentina, Bélgica, Francia, Nueva Zelanda, ….).
Es también el framework para los contenidos que entretienen (The GRAMMYs, Lady Gaga, Bruno Mars, Warner Bros., ...) y para los contenidos de alto valor informativos (Fox News, The Weather Channel, NBC, Los Tiempos, France24, ...).
Drupal es muy utilizado por importantes universidades (Harvard, Stanford, Oxford, UNAM, UNAH, UdG, ...) o grandes ONG’s (GreenPeace, la Cruz Roja, Oxfam, Amnesty, ...).
Experiencia digital para marcas poderosas
La flexibilidad de Drupal permite a poderosas marcas internacionales entregar una experiencia digital de primer nivel a sus clientes tanto a nivel del marketing de contenidos, gestión de marca digital como a nivel de comercio electrónico. Es por ello que Nike, Best Buy, General Electric, Puma, Alcatel-Lucent, Cisco, Verizon y Pinterest utilizan Drupal a lo largo de todo su proceso de comunicación digital y soluciones de comercio electrónico.
Muy apreciado por los usuarios finales
Si bien la seguridad, el desempeño y la flexibilidad son elementos valorados por los administradores de sistemas y los desarrolladores web, Drupal es muy apreciado por los usuarios finales visto que Drupal permite desde una interfaz gráfica web crear, actualizar y administrar páginas web de manera intuitiva aún para las personas que no programan. Este software permite publicar, administrar y organizar todo tipo de contenido (texto, imágenes, vídeos y audios) en forma muy segura, sin necesidad de programar, lo que permite a los usuarios no informáticos administrar una página web, añadir un menú o crear nuevas páginas en forma autónoma, eficiente y dinámica.
Drupal es un gestor de contenidos multipropósito que puede usarse para aplicaciones como por ejemplo:
* Portales comunitarios
* Portales para periódicos en línea
* Comercio electrónico
* Foros de discusión
* Sitios web corporativos
* Aplicaciones de Intranet
* Sitios personales o blogs
* Aplicaciones de comercio electrónico
* Directorio de recursos
* Sitios de redes sociales
* Bibliotecas y archivos

## Módulos

En Drupal se pueden ampliar sus funcionalidades mediante extensiones llamadas módulos programados por su comunidad de usuarios. En 2023 en la página oficial de Drupal se listan más de 50.800módulos libres.
Existen tres tipos de módulos de Drupal, llamadas las "3 C":
* Core (núcleo): son los módulos provistos por Drupal al instalarse, por lo cual no requieren ser descargados ni instalados independientemente y pueden ser activados o desactivados desde el back-end. Algunos de ellos fueron contribuciones de la comunidad de Drupal que se incorporaron. Ejemplos: Comments, Node, Taxonomy
* Contributed (contribuciones): son los módulos que son compartidos para la comunidad de Drupal, están bajo GNU de Licencia Pública (GPL). Se pueden descargar desde la sección de descarga de módulos de drupal.org.
* Custom (personalizados): son los módulos creados por el desarrollador del sitio. Para crearlos se requiere un conocimiento profundo del funcionamiento de Drupal, programación PHP, y la API de Drupal.
Entre los más importantesque no están incluidos en la distribución oficial, se pueden destacar:
* Chaos Tool Suite (ctools)
* Token
* Pathauto
* Webform
* Metatag
* Admin Toolbar
* CAPTCHA
* Libraries API
* Paragraphs

## Origen de Drupal

Drupal fue originalmente escrito por Dries Buytaert y es el software usado para impulsar por ejemplo a los sitios web Debian Planet , Spread Firefox , Kernel Trap y White House .
A pesar de que empezó como un pequeño BBS, Drupal ha llegado a ser mucho más que solo un portal de noticias gracias a su arquitectura flexible. Drupal se compone de una infraestructura base y un conjunto de módulos que ofrecen un amplio conjunto de funciones, incluyendo sistemas de comercio electrónico, galerías de fotos, administración de listas de correo electrónico, e integración de CVS. Es posible añadir módulos de terceros para modificar el comportamiento de Drupal u ofrecer nuevas funciones.
Drupal se usa, entre otros, en intranets de compañías, enseñanza en línea, comunidades de arte y administración de proyectos. Muchos piensan que la relevancia de Drupal en las comunidades de usuarios es lo que lo hace destacarse de la competencia.

### Versiones más importantes

| Color | Significado |
| Rojo | Versión antigua sin soporte |
| Verde | Versión actual |
| Azul | Versión futura |

#### Versiones 1 al 6

| Versión | Fecha de lanzamiento | Notas |
| 1.0 | 15 de enero de 2001 | |
| 2.0 | 15 de marzo de 2001 | |
| 3.0 | 15 de septiembre de 2001 | |
| 4.0 | 16 de junio de 2002 | |
| 4.7 | 16 de mayo de 2006 | |
| 5.0 | 15 de junio de 2007 | |
| 6.0 | 13 de febrero de 2008 | Fin de soporte 24 de febrero de 2016 |

#### Versión 7

| Versión | Fecha de lanzamiento |
| 7.0 | 5 de junio de 2011 |
| 7.98 | 7 de junio de 2023 |

#### Versión 8

| Versión | Fecha de lanzamiento |
| 8.0.0 | 19 de noviembre de 2015 |
| 8.9.20 | 17 de noviembre de 2021 | Fin de soporte 2 de noviembre de 2021 |

#### Versión 9

| Versión | Fecha de lanzamiento |
| 9.0.0 | 3 de junio de 2020 |
| 9.5.11 | 20 de septiembre de 2023 | Fin de soporte 1 de noviembre de 2023 |

#### Versión 10

| Versión | Fecha de lanzamiento |
| 10.0.0 | 15 de diciembre de 2022 |
| 10.1.6 | 1 de noviembre de 2023 |

## Conceptos generales de Drupal
### Módulo

El módulo (module) es un software que extiende las funcionalidades y/o características de Drupal. Viene con módulos precargados según la versión, a los cuales se les puede añadir los que se necesite según la funcionalidad que tenga el sitio.

### Usuario, Permiso, Rol

Cada visitante del sitio que tenga ingreso al mismo o no (como visitante anónimo) es considerado un Usuario para Drupal. Se pueden definir los tipos de usuario desde el núcleo de Drupal en la parte de Perfil (profile) y los campos asociados a cada usuario. Los Usuarios anónimos tendrán el ID cero (0). Los que hayan iniciado sesión tendrán un id distinto de 0. A estos usuarios se les asignará los Permisos por medio de Roles, pudiendo crear diferentes tipos de roles además de los preestablecidos por defecto, para luego agregarle o quitarle permisos según la necesidad del sitio. El usuario con el id 1 es el usuario que tiene permitido tener todos los permisos.

### Nodo

El Nodo (node) es un término genérico para cada pieza de contenido del sitio. Algunos ejemplos de nodos pueden ser: páginas en libros, temas de discusión en foros, entradas en blogs, nuevos artículos, etc. Cada nodo será un tipo de contenido que tendrá un ID, un título, una fecha de creación, un autor, un cuerpo o body y otras propiedades, también según qué otros módulos se encuentre usando agregará más propiedades a cada nodo.

### Comentario

El Comentario (comment) es otro tipo de contenido dentro de Drupal, ya que cada comentario es una pequeña pieza de contenido que un usuario envía a un nodo específico, por ejemplo, cada pieza de comentario dentro de una discusión en el foro.

### Taxonomía

La Taxonomía (taxonomy) es el sistema mediante el cual Drupal clasifica el contenido y es uno de los módulos del núcleo de Drupal. Se pueden definir los vocabularios propios como grupos de términos de taxonomía. Cada tipo de vocabulario puede ser agregado como uno o más tipos de contenido y por ello, los nodos en el sitio pueden ser clasificados según agrupaciones en categorías, etiquetas o como cualquier cosa que se elija.

### Base de datos

La información de Drupal depende de la base de datos, cada información se encuentra en una tabla dentro de la base de datos. Por ejemplo, la información básica de los nodos se encuentra en la tabla de Node.
Drupal soporta diferentes tipos de bases de datos, como:
* Drupal 6: MySQL 4.1 o superior, PostgreSQL 7.1.
* Drupal 7: MySQL 5.0.15 o superior con PDO; PostgreSQL 8.3 o superior con PDO; SQLite 3.3.7 o superior; Microsoft SQL Server, Oracle y MongoDB están soportadas con módulos adicionales.

### Path

Cuando se visita un sitio con Drupal, una parte de la dirección de URL es conocida como path. Es la información enviada por el navegador a la base de datos. Si se está viendo la página http://drupal.org/node/16785 el path será "node/16785". Por defecto, luego de la instalación del sitio se proseguirá con "?q=". Pero con el sistema de URL limpias que se puede activar desde la administración se puede quitar ese atributo.

### Plantilla

La Plantilla (theme) controlará cómo se visualizará el sitio, el diseño y los colores. Consiste en uno o más archivos en PHP que definen la salida HTML, con uno o más archivos en CSS definiendo las fuentes, colores y otros estilos.

### Región, Bloque, Menú

Drupal se encuentra dividido en Regiones (regions) que pueden incluir la cabecera, el pie, las barras laterales, la sección principal de contenido. Los Bloques (blocks) es la información que se visualiza en las diferentes regiones, pudiendo tomar la forma de menús (como el menú de navegación) o visualizaciones de módulos (como los contenidos más vistos del foro) o información estática o dinámica que fue creada por un usuario (como eventos). Existen tres menús estándar en Drupal: Enlaces primarios, Enlaces secundarios y Menú de navegación. Los primarios y secundarios son construidos a criterio de los administradores y mostrados automáticamente. También se pueden crear menús personalizados mediante la creación de bloques.

### Tipos de entidad

Un tipo de entidad (Entity types) es una abstracción para agrupar campos; son usados para guardar y mostrar datos, como pueden ser nodos, comentarios, términos taxonómicos, perfiles de usuarios, o algún desarrollo personalizado.

## Arquitectura

Drupal 7 está creado sobre el patrón PAC Presentation Abstraction Control, donde cada agente tiene capas propias e independientes de presentación, abstracción y control. Los agentes heredan del controlador del agente precedente en orden jerárquico para mantener una cohesión funcional entre múltiples capas de procesamiento representadas en módulos.
En Drupal 8 se integraron componentes de Symfony adoptando una arquitectura MVC - Modelo Vista Controlador e integrando el motor de plantillas Twig.
* La capa Modelo define la lógica de negocio (la base de datos pertenece a esta capa).
* La Vista es con lo que el usuario interactúa (un motor de plantillas es parte de esta capa).
* El Controlador es la pieza de código que llama al Modelo para obtener algunos datos que le pasa a la Vista para la presentación al cliente.
Los componentes de Symfony integrados en Drupal 8 son:
* Routing
* Yaml
* Twig
* DependencyInjection
* Serializer
* Validator
* EventDispatcher
* HttpFoundation
* Debug

## Novedades en Drupal 7

Requisitos mínimos del sistema
* Base de datos: MySQL 5.0.15 o PostgreSQL 8.3
* PHP Versión: 5.2 o superior
* PHP Memoria: 40 MB - 64 MB
En cuanto a la seguridad se reformaron las tareas programadas como el "cron.php", el ingreso como usuario y el sistema de contraseñas, también la actualización de los módulos. Se agregaron más tareas administrativas desplegables, las tareas programadas del Cron se realizan desde la administración sin necesidad de scripts en el servidor web, se rediseñó la fortaleza de la contraseña entre otras cuestiones.
En la base de datos se agregó los INSERT, UPDATE, DELETE, MERGE, y SELECT y se agregó soporte para las bases de datos SQLite. Se incluye la ayuda de las aplicaciones dentro del núcleo de Drupal. Se eliminaron las plantillas de "Bluemarine", "Chameleon" y "Pushbutton" y se incorporan las nuevas llamadas "Bartik" para la vista de usuario, "Seven" para la administración y "Stark".
Se actualiza el núcleo de JavaScript a jQuery versión 1.4.2 y también actualiza la librería de jQuery a la versión 2.36 y se añade jQuery UI 1.8.

## Novedades en Drupal 8

Drupal 8 fue lanzado oficialmente el 19 de noviembre de 2015, luego de 5 años de desarrollo en el que participaron más de 3300 colaboradores.

### Novedades Drupal 8.0

* Implementación de WYSIWYG en la edición y previsualización.
* Accesibilidad mejorada.
* Actualizado a jQuery 2.1.4 y jQuery UI 1.11.4.
* Nuevo concepto de “módulo experimental”, módulos que todavía no son totalmente compatibles o están a prueba.
* Personalización de la página de contenidos y administración usando la interfaz administrativa.
* Traducción y localización completa lista para usarse.
* Completo modelado de entidades, campos y vistas.
* Adaptación a cualquier dispositivo usando salidas HTML5, diseño adaptativo y con filosofía Mobile-first.
* Integración nativa de servicios web REST.
* Gestión más confiable para el despliegue seguro y sencillo de cambios entre los entornos.
* Rendimiento mejorado en el front-end.
* Mejoras en el sistemas de caché, incluidos CDNs y proxies inversos.
* Nuevo sistema de tutoriales de ayuda llamados Recorridos (Tours).
* Compatibilidad total con PHP7, PostgreSQL y bases de datos SQLite.
* Integra librerías populares como composer, symfony 2, Guzzle, y Twig en su núcleo (core).
* CSS3 y HTML5 soportado de forma nativa.

### Novedades Drupal 8.1

* Interfaz de usuario para la migración desde las versiones 6 y 7 hacia Drupal 8. (Módulo experimental)
* Implementación de la técnica BigPipe inventada por Facebook, una avanzada estrategia de procesamiento de página que permite mejorar el rendimiento de la carga de contenido no dinámico o no almacenable en caché. (Módulo experimental)
* Permite usar el corrector ortográfico del navegador en la edición WYSIWYG. Además incorpora un botón que permite agregar la etiqueta de lenguaje a un fragmento del texto, es útil para la accesibilidad y el procesamiento de la máquina.
* Inclusión en el resumen de ayuda administrativa de los Tours de ayuda implementados en la versión 8.0.
* Renderizado de entidades en campos de las vistas.
* Soporte para pruebas automatizadas de JavaScript.
* Soporte mejorado de Composer.
* Mejoras en la API para desarrolladores.

### Novedades Drupal 8.2

La versión fue lanzada el 5 de octubre de 2016. Cuenta con las siguientes novedades:
* Nuevo módulo que permite colocar un bloque en cualquier página y visualizar como se mostrará sin la necesidad de ir al formulario de administración en el back-end. (Módulo experimental)
* Nuevo módulo para mostrar mensaje de error inline en los formularios. (Módulo experimental, posiblemente sea removido en la versión 8.3 ya que aún presenta muchos problemas sin resolver)
* Nuevo módulo para moderar el contenido del sitio, por ejemplo permitirá definir si un contenido es un borrador, esta archivado o es publicado y quienes tienen la facultad de modificar el estado de estos contenidos. (Módulo experimental)
* Nuevo módulo para modificar elementos de la página desde el front-end como bloques. (Módulo experimental)
* Nuevo módulo que define un nuevo tipo de campo con rangos de fecha (fechas que contienen una fecha de inicio y una fecha de fin). (Módulo experimental).

### Iniciativas durante el desarrollo

Algunas iniciativas (oficiales) llevadas a cabo en su desarrollo:
* Web Services (WSCCI); Esta iniciativa plantea convertir drupal en un sistema REST lo que implica que drupal podría devolver el contenido de una llamada ya no como una página HTML, sino como valores JSON o XML.
* Configuration Management (CMI) Para proveer de un mecanismo unificado para exportar e importar el contenido y las configuraciones de un sitio en drupal de forma robusta y centralizada.
* HTML 5; Esta iniciativa buscar integrar mucho más a Drupal con el estándar HTML 5.
* Layouts: Trata de convertir todos los elementos de una página en bloques que puedan organizados dentro de una disposición (layout)flexibles.
* Mobile; Busca acercar Drupal al mundo de los dispositivos móviles con elementos de HTML 5 e interfaces para trabajar desde pantallas pequeñas...
* Multilingual; Esta iniciativa busca unificar todos los sistemas de traducción de contenido.

### Requisitos mínimos del sistema

Base de datos:
* MySQL 5.5.3/MariaDB 5.5.20/Percona Server 5.5.8 o superior con PDO y un motor de almacenamiento primario compatible con InnoDB,
* PostgreSQL 9.1.2 o superior con PDO
* SQLite 3.7.11 o superior
PHP:
* PHP 5.5.9 o superior

### Requisitos mínimos del navegador

Para visualizar un sitio creado en Drupal (con solo los módulos del núcleo y sin agregados de terceros) es suficiente usar cualquier navegador moderno que soporte CSS y JavaScript. Sin embargo, los navegadores cumplen en diferentes niveles los estándares web lo que provoca que existan pequeñas diferencias en cómo se visualiza el sitio de un navegador a otro. Los siguientes navegadores soportan todas las características de Drupal:
* Internet Explorer 9.x y posteriores
* Firefox 5.x y posteriores
* Opera 12 y posteriores
* Safari 5.x y posteriores
* Google Chrome
Drupal también puede funcionar correctamente en navegadores que no cuenten con JavaScript o lo tengan desactivado, como así también si no soportan CSS, pero consecuentemente el aspecto y la funcionalidad serán diferentes.

## Distribuciones en DRUPAL

Una Distribución Drupal consiste en un paquete de diferentes módulos Drupal preconfigurados y/o modificados y que dan solución a una necesidad específica. La ventaja de trabajar con distribuciones es la facilidad en tener una solución completa funcionando en poco tiempo y poder seguir contando con la flexibilidad de Drupal que permite agregar nuevos módulos y reconfigurar los existentes. Las distribuciones más conocidas son:
* Open Publish Distribución orientada a publicaciones de contenido multimedia como diarios, revistas, sitios multimedia, radios en línea, etc. openpublishapp.com
* Drupal Commons una distribución creada para gestionar intranets, grupos de trabajo o comunidades virtuales www.acquia.com Archivado el 20 de agosto de 2012 en Wayback Machine.
* Open Atrium es una herramienta pensada para el trabajo colaborativo openatrium.com
* Managing News es un gestor de noticias RSS con diversas funcionalidades managingnews.com
* Open Public es una distribución orientada a sitios oficiales y/o políticos. Su principal función es que los sitios sean seguros, ampliables y transparentes. openpublicapp.com