Integración de MRBS en Joomla

En este artículo vamos a ver cómo integrar MRBS en Jomla, o sea, utilizar MRBS con la tabla de usuarios de Joomla. Por si no lo sabes, MRBS (mrbs.sourceforge.net) es una aplicación web gratuita, con licencia GPL, que sirve para reservar salas de reuniones y otros recursos. Supongo que no necesito decir para qué sirve Joomla (www.joomla.org y www.joomlaspanish.org).

Partimos de que ya tenemos instalado Joomla en una carpeta del directorio raiz con visibilidad web (public_html, por ejemplo) y vamos a hacer lo mismo con MRBS, de tal forma que el acceso al index de cada aplicación se producirá desde https://www.nuestrodominio.com/joomla/ y desde https://www.nuestrodominio.com/mrbs/.

Instalación de MRBS

La versión con la que vamos a trabajar es la 1.4.2. Estos son los pasos a seguir para la instalación, una vez descargada la aplicación desde la web (mrbs.sourceforge.net/download.php):

  1. Sube al servidor web, a la carpeta mrbs, todos los ficheros de la carpeta web del fichero descargado.
    Captura de pantalla de Filezilla
  2. Crea una base de datos para alojar en ella los datos de la aplicación
  3. En el fichero tables.my.sql (supongo que vayas a utilizar MySQL) tienes las instrucciones para la creación de las tablas que necesitas. Ejecuta estas sentencias en la base de datos que has creado en el paso anterior.

Con esto tendríamos la aplicación funcionando, aunque no integrada en Joomla. Vamos a ver cómo hacer esto ahora.

Modificación de ficheros de MRBS

auth_db_ext.inc

Tal y como está ahora el script, cuando se comprueba si quien se está conectando es un usuario válido, sólo se verifica el nombre de usuario y la contraseña. Resultaría interesante que también se comprobase si es un usuario activo; para ello vamos a modificar la sentencia SQL para que se permitan incluir más condiciones en la cláusula WHERE, lo que además se traducirá en que, si se quiere, podrán ponerse condiciones para cualquier otro campo de la tabla de usuarios; por ejemplo, podríamos añadir un campo a la tabla para indicar si se trata de un usuario con acceso al sistema MRBS o no. Así pues, a la altura de la línea 58, justo a continuación de:


  $query = "SELECT " . $auth['db_ext']['column_name_password'] .
           " FROM " . $auth['db_ext']['db_table'] .
           " WHERE ". $auth['db_ext']['column_name_username'] . "='$user'";

Añadimos el siguiente fragmento de código:


  if (strlen($auth['db_ext']['aditional_conditions'])>0)
  {
    $query .= " And ".$auth['db_ext']['aditional_conditions'];
  }

Si, además, la versión de Joomla con la que trabajamos es la 1.5 necesitamos también añadir este otro caso adicional


      case 'md5-joomla15':
        list( $passfromdb, $salt ) = explode( ":", $row[0] );
        if ($passfromdb == md5( $pass . $salt ))
        {
          $retval = 1;
        }
        break;

Esto hemos de añadirlo antes de cualquier otro case del switch ($auth[‘db_ext’][‘password_format’]), aproximadamente entre las líneas 75 y 100. La razón es que Joomla guarda las contraseñas de forma distinta en las versiones 1.0 y 1.5 (en realidad, creo que este cambio se produce a partir de la versión 1.0.13) y el formato de las últimas versiones no está considerado en el script de MRBS.

config.inc.php

Desde este fichero se establecen todas las opciones de configuración (servidor, usuario, contraseña, intervalos horarios, recursos, etc.). Lo que más nos interesa en relación con la integración en Joomla es la configuración de la autenticación (Authentication settings – read AUTHENTICATION). Estas opciones se establecen a partir de, aproximadamente, la línea 400. Concretamente, nos interesan estas variables:


$auth["type"] = "db_ext"; // How to validate the user/password. One of "none"
                          // "config" "db" "db_ext" "pop3" "imap" "ldap" "nis"
                          // "nw" "ext".

// The list of administrators (can modify other peoples settings).
//
// This list is not needed when using the 'db' authentication scheme EXCEPT
// when upgrading from a pre-MRBS 1.4.2 system that used db authentication.
// Pre-1.4.2 the 'db' authentication scheme did need this list.   When running
// edit_users.php for the first time in a 1.4.2 system or later, with an existing
// users list in the database, the system will automatically add a field to
// the table for access rights and give admin rights to those users in the database
// for whom admin rights are defined here.   After that this list is ignored.
$auth["admin"][] = "127.0.0.1";     // localhost IP address. Useful with IP sessions.
$auth["admin"][] = "administrator"; // A user name from the user list. Useful 
                                    // with most other session schemes.
//$auth["admin"][] = "";
//$auth["admin"][] = "";
//$auth["admin"][] = "";

// 'auth_db_ext' configuration settings
// The 'db_system' variable is equivalent to the core MRBS $dbsys variable,
// and allows you to use any of MRBS's database abstraction layers for
// db_ext authentication.
$auth['db_ext']['db_system'] = 'mysql';
$auth['db_ext']['db_host'] = 'localhost';
$auth['db_ext']['db_username'] = 'nombre_usuario_bd';
$auth['db_ext']['db_password'] = 'contraseña_usuario_bd';
$auth['db_ext']['db_name'] = 'nombre_base_datos';
$auth['db_ext']['db_table'] = 'jos_users';
$auth['db_ext']['column_name_username'] = 'username';
$auth['db_ext']['column_name_password'] = 'password';
// Either 'md5', 'sha1', 'crypt' or 'plaintext'
$auth['db_ext']['password_format'] = 'md5';          //si tu versión Joomla es anterior a 1.0.13
$auth['db_ext']['password_format'] = 'md5-joomla15'; //para versiones de Joomla posteriores.

//condiciones adicionales...
$auth['db_ext']['aditional_conditions'] = 'block=0';

Trato de explicar ahora cada variable, cada opción:

  • $auth["type"] = "db_ext";: Esta variable admite cualquiera de estos valores ("none" "config" "db" "db_ext" "pop3" "imap" "ldap" "nis" "nw" "ext"). "db_ext" es el que hemos de utilizar para indicar a MRBS que debe buscar la verificación de usuario y contraseña en una base de datos externa.
  • $auth["admin"][] = "127.0.0.1";
    $auth["admin"][] = "administrator";
    : Es la lista de administradores. Estos pueden modificar las solicitudes de otros usuarios, pueden añadir edificios y salas (los demás usuarios no). Pueden añadirse cuantos se deseen. En el ejemplo se han señalado dos únicamente: "127.0.0.1" "administrator".
  • $auth[‘db_ext’][‘db_system’] = ‘mysql’;: No tiene mucho que explicar. El sistema de base de datos. Como se trata del sistema de Joomla, será MySQL.
  • $auth[‘db_ext’][‘db_host’] = ‘localhost’;: El host. La dirección en la que está ubicado el servidor de bases de datos.
  • $auth[‘db_ext’][‘db_username’] = ‘nombre_usuario_bd’;: El nombre de usuario con derechos de acceso a la base de datos.
  • $auth[‘db_ext’][‘db_password’] = ‘contraseña_usuario_bd’;: La contraseña para acceso a la base de datos.
  • $auth[‘db_ext’][‘db_name’] = ‘nombre_base_datos’;: El nombre de la base de datos.
  • $auth[‘db_ext’][‘db_table’] = ‘jos_users’;: El nombre de la tabla de usuarios en la base de datos.
  • $auth[‘db_ext’][‘column_name_username’] = ‘username’;: El nombre del campo en el que se guarda el dato de usuario en la tabla anterior.
  • $auth[‘db_ext’][‘column_name_password’] = ‘password’;: El nombre del campo en el que se guarda la contraseña.
  • $auth[‘db_ext’][‘password_format’] = ‘xxx’;: El formato en que está guardada la contraseña: md5 ó md5-joomla15, según tu versión de Joomla.
  • $auth[‘db_ext’][‘aditional_conditions’] = ‘block=0’;: Esto no es imprescindible. Tiene que ver con el fragmento de código añadido en auth_db_ext.inc. Nos permite añadir más condiciones que usuario y contraseña para consultar a la base de datos. Así, en el ejemplo de código se añade que verifique cómo válido si el usuario encontrado no está bloqueado.

Otra cosa más: Los usuarios de Joomla a los que quieras asignar derechos de adminisración en MRBS (que puedan editar los edificios y salas a reservar) debes añadirlos a la matriz $auth["admin"][]. Por ejemplo, si en Joomla tienes registrados los usuarios admin y maxi y quieres que estos sean los que puedan administrar totalmente MRBS deberás añadir a config.inc.php las siguientes líneas:


$auth["admin"][] = "admin";
$auth["admin"][] = "maxi";

Esto, con independencia del perfil con el que estén registrados en Joomla.

Comentarios (33) »

  1. Gerardo Velázquez | 3-junio-2014 4:27 pm

    Buenos días David Cantón, tengo varias inquietudes.

    1.- Me gustaría saber si este proyecto tiene una continuidad por parte del desarrollador, he notado que no ha tenido un nuevo release desde hace ya un par de años, ya se para correcciones de bugs o mejoras funcionales en el sistema.
    2.- Hay alguna forma de que el sistema pueda ser multicalendario, es decir, no sea solo para reservas sino también sirva para una agenda privada o publica del usuario, ocupando su tiempo en esa agenda si realizo una reserva de sala de reunión por un periodo de tiempo?
    3.- Hay alguna forma que el sistema pueda usar el envío de correo al realizar una reserva por el correo del usuario guardado en joomla?.
    4. Existe alguna alternativa de agregar a participantes o invitados a una reserva a través de los correos de usuarios guardados en joomla o por la cuenta de usuario de un LDAP, para que el sistema le envíe la notificación de invitación a cada usuario?

    Las últimas tres inquietudes van relacionadas con el punto #1, en caso de que se este mejorando el sistema y pueda pensarse en que tenga algunas de estas características.

    Gracias de antemano. y disculpa tantas inquietudes.

  2. Anónimo | 27-enero-2016 9:46 pm

    Necesito ayuda como cambio le logo y nombre del Institucion y como cambio las horas de reserva

  3. Frank Arevalo | 27-enero-2016 9:47 pm

    Necesito ayuda como cambio le logo y nombre del Institucion y como cambio las horas de reserva

Generador RSS para los comentarios de este artículo

Envía un comentario sobre Integración de MRBS en Joomla