Vistas

Mejora G-Forge 13: Modificar los formularios para que permitan introducir texto con formato

De MorfeoWiki

Tabla de contenidos

Introducción

La implementación de esta mejora aporta al usuario de GForge la capacidad para introducir texto con formato en los múltiples formularios que aparecen en la forja. Esta mejora permite pasar de introducir excusivamente texto plano en los 'cuadros de texto' (etiqueta "<TEXTAREA></TEXTAREA>" de HTML), a disponer de un potente editor WYSIWYG que permite el procesamiento del texto introducido a un nivel muy parecido al que se obtendría editando con un software del tipo 'Word' u 'OpenOffice'.

En definitiva, esta mejora implementa un funcionalidad muy importante para GForge y ha sido considerada de prioridad alta sobretodo por la relación beneficio obtenido/Coste de implementación que nos da.


Planificación

  • Prioridad: Alta
  • Responsable: UPM


TinyMCE

El editor WYSIWYG elegido para la integración en GForge ha sido TinyMCE (existe un documento dónde se ha realizado un estudio de un conjunto de editores WYSIWYG basados en 'open source', y en el cual, aparecen las conclusiones de por qué es el editor que mejor se adapta a las necesidades de GForge).

Una de las características más importantes del mismo es que dispone de una herrramienta de corrección ortográfica, la cual, es independiente del navegador utilizado para el acceso a GForge. Este corrector ortográfico dispone de la corrección para los idiomas de Español y de Inglés, y esta basado en un servicio de corrección ortográfica que Google ofrece de forma gratuita.

TinyMCE es un producto desarrollado enteramente en JavaScript.


Integración con GForge

Para la integración de este editor con GForge se han seguido los siguientes pasos:

  • Se desempaqueta en el directorio "Path_to_gforge"/www/ el código del editor WYSYWYG. Existe un "tar.gz", el cual, empaqueta lo siguiente:
    • Código del editor TinyMCE.
    • Skin para el editor en idioma Español.
    • Plugin del corrector ortográfico.
    • Soporte para la corrección ortográfica en Español.
[Se recomienda que se utilize el "tar.gz" en vez de tomar el código de TinyMCE y empezar a introducir los componentes antes descritos,
 ya que se han introducido una serie de cambios en código de determinadas partes del editor]
  • Hay que disponer del paquete debian php4-curl para que el corrector ortográfico pueda funcionar:
user@host# apt-get install php4-curl
  • Para que el editor funcione hay que introducir el script que lanza el editor (
     
    ) entre la etiquetas <HEAD></HEAD> de todo fichero php de GForge que pretenda utilizar dicho editor. Para ello se introduce la siguiene línea en "Path_to_gforge"/www/include/Layout.class:
requiere_once('tinyMCE_head.php');

En el fichero que se se incluye en la anterior línea aparece el script y la configuración inicial que se le pasa al editor (ya que se han eliminado ciertas capacidades de que el editor disponía, las cuales se han considerado inecesarias como por ejemplo: introducción de contenidos flash, introducción de formularios, etc...).

  • Una vez realizado lo anterior, se dispone del editor en todos los "cuadros de texto" que aparecen en GForge, pero hay un problema: GForge filtra el contenido que le llega de estos cuadros de texto mediante la función nativa de PHP htmlspecialchars, la cual cambia los mayores y menores del código HTML que el editor introduce, haciendo que no se interprete el código HTML. Para solucionar este problema se ha realizado lo siguiente:

En vez de cambiar el código de múltiples ficheros de GForge para que no se llame a la función htmlspecialchars y que llame a otra función implementada por nosotros realizando un filtrado del código peligroso (formularios, scripts, etc...) pero que permita etiquetas HTML; se ha decidido sobreescribir la implementación de la función htmlspecialchars para no estar tocando tanto código. Para realizar lo anterior es necesario instalar previamente el componente RUNKIT de PHP que permite la sobreescitura, redeclaración, etc... de cualquier función de PHP.

1) Hay que instalar la herramienta PECL; para lo anterior hay varias posibilidades, al final se ha de disponer de dicha herramienta (realizese en función de cual se adapta mejor a la instalación de su máquina, ya que algunas pueden depender de otros paquetes que previamente se tendrán que instalar):

user@host# lynx -source http://go-pear.org | php  [Requiere la herramiet lynx]
user@host# apt-get install php-pear php4-dev      [Puede haber dependencias con otros paquetes]

2) Una vez que se tiene la herramienta PECL ya se puede instalar el módulo RUNKIT de PHP:

user@host# pecl install runkit-X.Y     [Realizar esta acción puede depender de ciertos paquetes como por ejemplo 'phpize']

3) Después de realizar lo anterior hay que introducir las siguientes líneas en el fichero de configuración de PHP (/etc/php4/apache2/php.ini):

extension=runkit.so
[runkit]
runkit.internal_override=1     [Necesario para permitir la sobreescritura de funciones nativas de PHP]

4) Por último, una vez que el módulo RUNKIT de PHP ha sido instalado hay que introducir en el fichero pre.php (que es incluido en todos los ficheros PHP de la forja) la siguiente línea:

requiere_once('filtro_HTML.php');

El fichero incluido anterior utiliza las funciones que el RUNKIT nos ofrece y sobreescribe a la función htmlspecialchars por una función implementada por nosotros, la cual como se ha mencionado antes, realiza un filtrado del texto introducido permitiendo las etiquetas HTML consideradas válidas y no permitiendo formularios, JavaScripts, etc....