{"id":130,"date":"2009-11-16T09:41:30","date_gmt":"2009-11-16T08:41:30","guid":{"rendered":"https:\/\/david.xn--cantn-3ta.com\/blog\/?p=130"},"modified":"2010-03-04T22:36:59","modified_gmt":"2010-03-04T21:36:59","slug":"integracion-de-joomla-y-mrbs","status":"publish","type":"post","link":"https:\/\/david.xn--cantn-3ta.com\/blog\/informatica\/integracion-de-joomla-y-mrbs\/130\/","title":{"rendered":"Integraci\u00f3n de MRBS en Joomla"},"content":{"rendered":"<p>En este art\u00edculo vamos a ver c\u00f3mo <strong>integrar MRBS en Jomla<\/strong>, o sea, utilizar MRBS con la tabla de usuarios de Joomla. Por si no lo sabes, <strong>MRBS<\/strong> (<a href=\"https:\/\/mrbs.sourceforge.net\/\" target=\"_blank\">mrbs.sourceforge.net<\/a>) es una aplicaci\u00f3n web gratuita, con licencia GPL, que sirve para <strong>reservar salas de reuniones y otros recursos<\/strong>. Supongo que no necesito decir para qu\u00e9 sirve Joomla (<a href=\"https:\/\/www.joomla.org\/\" target=\"_blank\">www.joomla.org<\/a> y <a href=\"https:\/\/www.joomlaspanish.org\/\" target=\"_blank\">www.joomlaspanish.org<\/a>).<\/p>\n<p><!--more-->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 <em>index<\/em> de cada aplicaci\u00f3n se producir\u00e1 desde <span class=\"inline-code\">https:\/\/www.nuestrodominio.com\/joomla\/<\/span> y desde <span class=\"inline-code\">https:\/\/www.nuestrodominio.com\/mrbs\/<\/span>. <\/p>\n<h2>Instalaci\u00f3n de MRBS<\/h2>\n<p>La versi\u00f3n con la que vamos a trabajar es la 1.4.2. Estos son los pasos a seguir para la instalaci\u00f3n, una vez descargada la aplicaci\u00f3n desde la web (<a href=\"https:\/\/mrbs.sourceforge.net\/download.php\" target=\"_blank\">mrbs.sourceforge.net\/download.php<\/a>):<\/p>\n<ol>\n<li>Sube al servidor web, a la carpeta <span class=\"inline-code\">mrbs<\/span>, todos los ficheros de la carpeta <span class=\"inline-code\">web<\/span> del fichero descargado.<br \/>\n<img loading=\"lazy\" decoding=\"async\" style=\"cursor: url(https:\/\/david.xn--cantn-3ta.com\/blog\/wp-content\/js\/magnify.cur), -moz-zoom-in;\" src=\"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-content\/uploads\/2009\/11\/mrbs_filezilla.gif\" alt=\"Captura de pantalla de Filezilla\" title=\"Subida de ficheros MRBS al servidor web\" width=\"300\" height=\"221\" border=\"0\"  data-magnifyto=\"891\" class=\"magnify\" \/><\/li>\n<li>Crea una base de datos para alojar en ella los datos de la aplicaci\u00f3n<\/li>\n<li>En el fichero <span class=\"inline-code\">tables.my.sql<\/span> (supongo que vayas a utilizar MySQL) tienes las instrucciones para la creaci\u00f3n de las tablas que necesitas. Ejecuta estas sentencias en la base de datos que has creado en el paso anterior.<\/li>\n<\/ol>\n<p>Con esto tendr\u00edamos la aplicaci\u00f3n funcionando, aunque no integrada en Joomla. Vamos a ver c\u00f3mo hacer esto ahora.<\/p>\n<h2>Modificaci\u00f3n de ficheros de MRBS<\/h2>\n<h3>auth_db_ext.inc<\/h3>\n<p>Tal y como est\u00e1 ahora el script, cuando se comprueba si quien se est\u00e1 conectando es un usuario v\u00e1lido, s\u00f3lo se verifica el nombre de usuario y la contrase\u00f1a. Resultar\u00eda interesante que tambi\u00e9n se comprobase si es un usuario activo; para ello vamos a modificar la sentencia SQL para que se permitan incluir m\u00e1s condiciones en la cl\u00e1usula WHERE, lo que adem\u00e1s se traducir\u00e1 en que, si se quiere, podr\u00e1n ponerse condiciones para cualquier otro campo de la tabla de usuarios; por ejemplo, podr\u00edamos a\u00f1adir un campo a la tabla para indicar si se trata de un usuario con acceso al sistema MRBS o no. As\u00ed pues, a la altura de la l\u00ednea 58, justo a continuaci\u00f3n de:<\/p>\n<pre><code>\r\n  $query = &quot;SELECT &quot; . $auth['db_ext']['column_name_password'] .\r\n           &quot; FROM &quot; . $auth['db_ext']['db_table'] .\r\n           &quot; WHERE &quot;. $auth['db_ext']['column_name_username'] . &quot;='$user'&quot;;<\/code><\/pre>\n<p>A\u00f1adimos el siguiente fragmento de c\u00f3digo:<\/p>\n<pre><code>\r\n  if (strlen($auth['db_ext']['aditional_conditions'])&gt;0)\r\n  {\r\n    $query .= &quot; And &quot;.$auth['db_ext']['aditional_conditions'];\r\n  }<\/code><\/pre>\n<p>Si, adem\u00e1s, la versi\u00f3n de Joomla con la que trabajamos es la 1.5 necesitamos tambi\u00e9n a\u00f1adir este otro caso adicional<\/p>\n<pre><code>\r\n      case 'md5-joomla15':\r\n        list( $passfromdb, $salt ) = explode( &quot;:&quot;, $row[0] );\r\n        if ($passfromdb == md5( $pass . $salt ))\r\n        {\r\n          $retval = 1;\r\n        }\r\n        break;<\/code><\/pre>\n<p>Esto hemos de a\u00f1adirlo antes de cualquier otro <span class=\"inline-code\">case<\/span> del <span class=\"inline-code\">switch ($auth[&#8216;db_ext&#8217;][&#8216;password_format&#8217;])<\/span>, aproximadamente entre las l\u00edneas 75 y 100. La raz\u00f3n es que Joomla guarda las contrase\u00f1as de forma distinta en las versiones 1.0 y 1.5 (en realidad, creo que este cambio se produce a partir de la versi\u00f3n 1.0.13) y el formato de las \u00faltimas versiones no est\u00e1 considerado en el script de MRBS.<\/p>\n<h3>config.inc.php<\/h3>\n<p>Desde este fichero se establecen todas las opciones de configuraci\u00f3n (servidor, usuario, contrase\u00f1a, intervalos horarios, recursos, etc.). Lo que m\u00e1s nos interesa en relaci\u00f3n con la integraci\u00f3n en Joomla es la configuraci\u00f3n de la autenticaci\u00f3n (Authentication settings &#8211; read AUTHENTICATION). Estas opciones se establecen a partir de, aproximadamente, la l\u00ednea 400. Concretamente, nos interesan estas variables:<\/p>\n<pre><code>\r\n$auth[&quot;type&quot;] = &quot;db_ext&quot;; \/\/ How to validate the user\/password. One of &quot;none&quot;\r\n                          \/\/ &quot;config&quot; &quot;db&quot; &quot;db_ext&quot; &quot;pop3&quot; &quot;imap&quot; &quot;ldap&quot; &quot;nis&quot;\r\n                          \/\/ &quot;nw&quot; &quot;ext&quot;.\r\n\r\n\/\/ The list of administrators (can modify other peoples settings).\r\n\/\/\r\n\/\/ This list is not needed when using the 'db' authentication scheme EXCEPT\r\n\/\/ when upgrading from a pre-MRBS 1.4.2 system that used db authentication.\r\n\/\/ Pre-1.4.2 the 'db' authentication scheme did need this list.   When running\r\n\/\/ edit_users.php for the first time in a 1.4.2 system or later, with an existing\r\n\/\/ users list in the database, the system will automatically add a field to\r\n\/\/ the table for access rights and give admin rights to those users in the database\r\n\/\/ for whom admin rights are defined here.   After that this list is ignored.\r\n$auth[&quot;admin&quot;][] = &quot;127.0.0.1&quot;;     \/\/ localhost IP address. Useful with IP sessions.\r\n$auth[&quot;admin&quot;][] = &quot;administrator&quot;; \/\/ A user name from the user list. Useful \r\n                                    \/\/ with most other session schemes.\r\n\/\/$auth[&quot;admin&quot;][] = &quot;&quot;;\r\n\/\/$auth[&quot;admin&quot;][] = &quot;&quot;;\r\n\/\/$auth[&quot;admin&quot;][] = &quot;&quot;;\r\n\r\n\/\/ 'auth_db_ext' configuration settings\r\n\/\/ The 'db_system' variable is equivalent to the core MRBS $dbsys variable,\r\n\/\/ and allows you to use any of MRBS's database abstraction layers for\r\n\/\/ db_ext authentication.\r\n$auth['db_ext']['db_system'] = 'mysql';\r\n$auth['db_ext']['db_host'] = 'localhost';\r\n$auth['db_ext']['db_username'] = 'nombre_usuario_bd';\r\n$auth['db_ext']['db_password'] = 'contrase&ntilde;a_usuario_bd';\r\n$auth['db_ext']['db_name'] = 'nombre_base_datos';\r\n$auth['db_ext']['db_table'] = 'jos_users';\r\n$auth['db_ext']['column_name_username'] = 'username';\r\n$auth['db_ext']['column_name_password'] = 'password';\r\n\/\/ Either 'md5', 'sha1', 'crypt' or 'plaintext'\r\n$auth['db_ext']['password_format'] = 'md5';          \/\/si tu versi&oacute;n Joomla es anterior a 1.0.13\r\n$auth['db_ext']['password_format'] = 'md5-joomla15'; \/\/para versiones de Joomla posteriores.\r\n\r\n\/\/condiciones adicionales...\r\n$auth['db_ext']['aditional_conditions'] = 'block=0';\r\n<\/code><\/pre>\n<p>Trato de explicar ahora cada variable, cada opci\u00f3n:<\/p>\n<ul>\n<li><span class=\"inline-code\">$auth[&quot;type&quot;] = &quot;db_ext&quot;;<\/span>: Esta variable admite cualquiera de estos valores (&quot;none&quot; &quot;config&quot; &quot;db&quot; &quot;db_ext&quot; &quot;pop3&quot; &quot;imap&quot; &quot;ldap&quot; &quot;nis&quot; &quot;nw&quot; &quot;ext&quot;). &quot;db_ext&quot; es el que hemos de utilizar para indicar a MRBS que debe buscar la verificaci\u00f3n de usuario y contrase\u00f1a en una base de datos externa.<\/li>\n<li><span class=\"inline-code\">$auth[&quot;admin&quot;][] = &quot;127.0.0.1&quot;;<br \/>$auth[&quot;admin&quot;][] = &quot;administrator&quot;;<\/span>: Es la lista de administradores. Estos pueden modificar las solicitudes de otros usuarios, pueden a\u00f1adir edificios y salas (los dem\u00e1s usuarios no). Pueden a\u00f1adirse cuantos se deseen. En el ejemplo se han se\u00f1alado dos \u00fanicamente: &quot;127.0.0.1&quot; &quot;administrator&quot;.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;db_system&#8217;] = &#8216;mysql&#8217;;<\/span>: No tiene mucho que explicar. El sistema de base de datos. Como se trata del sistema de Joomla, ser\u00e1 MySQL.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;db_host&#8217;] = &#8216;localhost&#8217;;<\/span>: El host. La direcci\u00f3n en la que est\u00e1 ubicado el servidor de bases de datos.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;db_username&#8217;] = &#8216;nombre_usuario_bd&#8217;;<\/span>: El nombre de usuario con derechos de acceso a la base de datos.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;db_password&#8217;] = &#8216;contrase&ntilde;a_usuario_bd&#8217;;<\/span>: La contrase\u00f1a para acceso a la base de datos.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;db_name&#8217;] = &#8216;nombre_base_datos&#8217;;<\/span>: El nombre de la base de datos.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;db_table&#8217;] = &#8216;jos_users&#8217;;<\/span>: El nombre de la tabla de usuarios en la base de datos.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;column_name_username&#8217;] = &#8216;username&#8217;;<\/span>: El nombre del campo en el que se guarda el dato de usuario en la tabla anterior.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;column_name_password&#8217;] = &#8216;password&#8217;;<\/span>: El nombre del campo en el que se guarda la contrase\u00f1a.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;password_format&#8217;] = &#8216;xxx&#8217;;<\/span>: El formato en que est\u00e1 guardada la contrase\u00f1a: <strong>md5<\/strong> \u00f3 <strong>md5-joomla15<\/strong>, seg\u00fan tu versi\u00f3n de Joomla.<\/li>\n<li><span class=\"inline-code\">$auth[&#8216;db_ext&#8217;][&#8216;aditional_conditions&#8217;] = &#8216;block=0&#8217;;<\/span>: Esto no es imprescindible. Tiene que ver con el fragmento de c\u00f3digo a\u00f1adido en auth_db_ext.inc. Nos permite a\u00f1adir m\u00e1s condiciones que usuario y contrase\u00f1a para consultar a la base de datos. As\u00ed, en el ejemplo de c\u00f3digo se a\u00f1ade que verifique c\u00f3mo v\u00e1lido si el usuario encontrado no est\u00e1 bloqueado.<\/li>\n<\/ul>\n<p>Otra cosa m\u00e1s: Los usuarios de Joomla a los que quieras asignar derechos de adminisraci\u00f3n en MRBS (que puedan editar los edificios y salas a reservar) debes a\u00f1adirlos a la matriz <span class=\"inline-code\">$auth[&quot;admin&quot;][]<\/span>. Por ejemplo, si en Joomla tienes registrados los usuarios <span class=\"inline-code\">admin<\/span> y <span class=\"inline-code\">maxi<\/span> y quieres que estos sean los que puedan administrar totalmente MRBS deber\u00e1s a\u00f1adir a <span class=\"inline-code\">config.inc.php<\/span> las siguientes l\u00edneas:<\/p>\n<pre><code>\r\n$auth[&quot;admin&quot;][] = &quot;admin&quot;;\r\n$auth[&quot;admin&quot;][] = &quot;maxi&quot;;<\/code><\/pre>\n<p>Esto, con independencia del perfil con el que est\u00e9n registrados en Joomla.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo vamos a ver c\u00f3mo 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\u00f3n web gratuita, con licencia GPL, que sirve para reservar salas de reuniones y otros recursos. Supongo que no necesito decir para qu\u00e9 sirve [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[43,44,45],"class_list":["post-130","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-joomla","tag-mrbs","tag-sistema-de-reservas"],"_links":{"self":[{"href":"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-json\/wp\/v2\/posts\/130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-json\/wp\/v2\/comments?post=130"}],"version-history":[{"count":0,"href":"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-json\/wp\/v2\/posts\/130\/revisions"}],"wp:attachment":[{"href":"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-json\/wp\/v2\/media?parent=130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-json\/wp\/v2\/categories?post=130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/david.xn--cantn-3ta.com\/blog\/wp-json\/wp\/v2\/tags?post=130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}