Translate

miércoles, 5 de febrero de 2014

LIFERAY: organizaciones con país

Patrocinador




Hasta la fecha solamente una entrada adorna este blog. La siguiente entrada pretendía ser una apología al software libre y un reconocimiento público hacia la herramienta Liferay. Sin embargo, he preferido desestimar la idea y reservar esa entrada para otro momento aunque ello suponga tardar un poco más en publicar una nueva entrada. Quería ofrecer algo práctico, útil, que es para lo que realmente decidí crear el blog.

En esta entrada en particular, toco un tema que recientemente ha aparecido en uno de los proyectos en los que colaboro (con Tracom Consulting S.L. en este caso) y que ya está llegando a su fin. En él, fue necesario planificar con extremo detenimiento el sistema jerárquico que utilizará Liferay en el proyecto. Un grupo de empresas, diferentes localizaciones, organizaciones que contienen a otras, sitios web privados por organización...

Liferay se ha prestado de manera excepcional para abordar el proyecto gracias a su sistema de sitios, organizaciones, roles, usuarios, etc.

Aún así, nos encontramos con el problema de que no podíamos usar una localización para un país concreto, por el hecho de que una organización normal en Liferay no permite tener organizaciones hijas, un requisito que necesitábamos. La solución: por supuesto usar una organización.

Pero esto nos lleva a otro problema. Por defecto, Liferay no permite asignar un país a una organización normal (regular) y, era un requerimiento importante.

Podemos modificar esto desde el fichero portal-ext.properties mediante la propiedad:

1:  organizations.country.enabled[regular-organization]=true  
El valor entre corchetes [regular-organization], indica el tipo de organización sobre el que tendrá efecto este cambio. En este caso, la organización normal de Liferay.

Como era un requisito imprescindible, también hicimos uso de otra propiedad más, que hace que indicar el país para la organización sea necesario:

1:  organizations.country.required[regular-organization]=true  
Para que los cambios realizados sobre portal-ext.properties tengan efecto reiniciamos el servidor de aplicaciones, como siempre.

El proyecto nos exigía igualmente obtener el país asignado a la organización, desde un contenido web, por lo que desde una plantilla Velocity, teníamos que obtenerlo:

1:     #if($page.getGroup().isOrganization())  
2:        #set($organizationService = $serviceLocator.findService("com.liferay.portal.service.OrganizationLocalService"))  
3:        #set($countryService = $serviceLocator.findService("com.liferay.portal.service.CountryService"))  
4:        #set($organizacionActual = $organizationService.getOrganization($page.getGroup().getOrganizationId()))  
5:        #set($pais = $countryService.getCountry($organizacionActual.getCountryId()))  
6:     #end  
Teniendo en cuenta que existen variables en el contexto de Velocity que están reservadas en los contenidos web, modificamos otra de las propiedades de portal-ext.properties (con el correspondiente reinicio del servidor de aplicaciones):

1:  journal.template.velocity.restricted.variables=  
Con esto, ya no estarán restringidas y todo lo que necesitábamos quedará cubierto.

Importante: A partir de la versión 6.2, la propiedad journal.template.velocity.restricted.variables ya no existe.
Actualización realizada el 22/01/2015
La propuesta para sustituir la anterior línea obsoleta es esta:
freemarker.engine.restricted.classes=
freemarker.engine.restricted.variables=
velocity.engine.restricted.classes=
velocity.engine.restricted.variables=

// Y para guardar compatibilidad hacia versiones anteriores:
journal.template.freemarker.restricted.variables=
journal.template.velocity.restricted.variables=

No hay comentarios:

Publicar un comentario

Una opinión constructiva siempre es bienvenida. Gracias por tu aportación.