<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
</XMI.header>
<XMI.content>
- <docsettings viewid="412" documentation="" uniqueid="531" />
+ <docsettings viewid="412" documentation="" uniqueid="536" />
<umlobjects>
<UML:Class stereotype="" package="AI" xmi.id="413" abstract="0" documentation="Servicio." name="AI_Servicio" static="0" scope="200" >
<UML:Operation stereotype="" package="" xmi.id="465" type="void" abstract="0" documentation="" name="AI_Servicio" static="0" scope="200" >
<UML:Attribute stereotype="" package="" xmi.id="431" value="''" type="string" abstract="0" documentation="Enlace a donde el este servicio." name="link" static="0" scope="200" />
<UML:Attribute stereotype="" package="" xmi.id="432" value="''" type="string" abstract="0" documentation="Enlace a donde se encuentra la ayuda del servicio." name="link_ayuda" static="0" scope="200" />
<UML:Attribute stereotype="" package="" xmi.id="434" value="false" type="bool" abstract="0" documentation="True si es necesario que el usuario se loguee para usar el servicio." name="necesita_logueo" static="0" scope="200" />
- <UML:Attribute stereotype="" package="" xmi.id="444" value="true" type="bool" abstract="0" documentation="Indica si esta habilitado." name="habilitado" static="0" scope="200" />
+ <UML:Attribute stereotype="" package="" xmi.id="534" value="true" type="bool" abstract="0" documentation="Indica si esta habilitado." name="habilitado" static="0" scope="200" />
</UML:Class>
<UML:Class stereotype="" package="AI" xmi.id="416" abstract="0" documentation="Sistema." name="AI_Sistema" static="0" scope="200" >
<UML:Operation stereotype="" package="" xmi.id="466" type="void" abstract="0" documentation="" name="AI_Sistema" static="0" scope="200" >
<UML:Parameter stereotype="" package="" xmi.id="1" value="0" type="int" abstract="0" documentation="ID del sistema." name="sistema" static="0" scope="200" />
</UML:Operation>
+ <UML:Operation stereotype="" package="" xmi.id="536" type="PEAR_Error" abstract="0" documentation="" name="cargar" static="0" scope="200" >
+ <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="mixed" abstract="0" documentation="Base de datos o resultado de donde cargar el sistema." name="db" static="0" scope="200" />
+ </UML:Operation>
<UML:Operation stereotype="" package="" xmi.id="459" type="PEAR_Error" abstract="0" documentation="" name="guardar" static="0" scope="200" >
<UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="DB donde guardar." name="db" static="0" scope="200" />
<UML:Parameter stereotype="" package="" xmi.id="2" value="false" type="bool" abstract="0" documentation="Si es true, se fuerza a guardar el servicio como nuevo." name="nuevo" static="0" scope="200" />
</UML:Operation>
<UML:Operation stereotype="" package="" xmi.id="531" type="array" abstract="0" documentation="" name="getSistemas" static="1" scope="200" >
<UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="Base de datos de donde obtener los sistemas." name="db" static="0" scope="200" />
- <UML:Parameter stereotype="" package="" xmi.id="2" value="''" type="string" abstract="0" documentation="Clausula WHERE para filtrar la búsqueda." name="where" static="0" scope="200" />
+ <UML:Parameter stereotype="" package="" xmi.id="2" value="true" type="bool" abstract="0" documentation="Clausula WHERE para filtrar la búsqueda." name="soloHabilitados" static="0" scope="200" />
+ <UML:Parameter stereotype="" package="" xmi.id="3" value="''" type="string" abstract="0" documentation="Clausula WHERE para filtrar la búsqueda." name="where" static="0" scope="200" />
</UML:Operation>
<UML:Operation stereotype="" package="" xmi.id="528" type="array" abstract="0" documentation="Obtiene un array con los identificadores de los sistemas cargados." name="getSistemasArray" static="1" scope="200" >
<UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="Base de datos de la cual obtener los sistemas." name="db" static="0" scope="200" />
- <UML:Parameter stereotype="" package="" xmi.id="2" value="''" type="string" abstract="0" documentation="Clausula WHERE para filtrar resultados." name="where" static="0" scope="200" />
+ <UML:Parameter stereotype="" package="" xmi.id="3" value="''" type="string" abstract="0" documentation="Clausula WHERE para filtrar la búsqueda." name="where" static="0" scope="200" />
</UML:Operation>
<UML:Attribute stereotype="" package="" xmi.id="437" value="0" type="int" abstract="0" documentation="ID del sistema (ID en SAMURAI)." name="sistema" static="0" scope="200" />
<UML:Attribute stereotype="" package="" xmi.id="513" value="''" type="string" abstract="0" documentation="Nombre del sistema (sólo de lectura, extraído de SAMURAI)." name="nombre" static="0" scope="200" />
<UML:Attribute stereotype="" package="" xmi.id="438" value="''" type="string" abstract="0" documentation="Ícono del sistema." name="icono" static="0" scope="200" />
<UML:Attribute stereotype="" package="" xmi.id="439" value="''" type="string" abstract="0" documentation="Enlace a donde se encuentra el sistema." name="link" static="0" scope="200" />
<UML:Attribute stereotype="" package="" xmi.id="440" value="''" type="string" abstract="0" documentation="Enlace a la ayuda del sistema." name="link_ayuda" static="0" scope="200" />
- <UML:Attribute stereotype="" package="" xmi.id="445" value="true" type="bool" abstract="0" documentation="Indica si esta habilitado." name="habilitado" static="0" scope="200" />
+ <UML:Attribute stereotype="" package="" xmi.id="533" value="true" type="bool" abstract="0" documentation="Indica si esta habilitado." name="habilitado" static="0" scope="200" />
</UML:Class>
<UML:Class stereotype="" package="AI" xmi.id="469" abstract="0" documentation="" name="AI_Error" static="0" scope="200" >
<UML:Operation stereotype="" package="" xmi.id="470" type="void" abstract="0" documentation="" name="AI_Error" static="0" scope="200" >
<UML:Attribute stereotype="" package="" xmi.id="491" value="array()" type="array" abstract="0" documentation="Secciones que pertenecen a este grupo." name="secciones" static="0" scope="200" />
<UML:Attribute stereotype="" package="" xmi.id="492" value="0" type="int" abstract="0" documentation="Antigüedad (en días) de las noticias a mostrar." name="antiguedad" static="0" scope="200" />
<UML:Attribute stereotype="" package="" xmi.id="493" value="false" type="bool" abstract="0" documentation="True si hay que mostrar los grupos hijos (?? FIXME)." name="mostrar_hijos" static="0" scope="200" />
- <UML:Attribute stereotype="" package="" xmi.id="494" value="true" type="bool" abstract="0" documentation="Indica si esta habilitado." name="habilitado" static="0" scope="200" />
+ <UML:Attribute stereotype="" package="" xmi.id="535" value="true" type="bool" abstract="0" documentation="Indica si esta habilitado." name="habilitado" static="0" scope="200" />
</UML:Class>
<UML:Class stereotype="" package="AI" xmi.id="516" abstract="1" documentation="Objecto con capacidad de guardarse, cargarse y borrarse de una base de datos." name="AI_DBObject" static="0" scope="200" >
<UML:Operation stereotype="" package="" xmi.id="519" type="void" abstract="0" documentation="" name="AI_DBObject" static="0" scope="200" >
<UML:Parameter stereotype="" package="" xmi.id="1" value="0" type="int" abstract="0" documentation="Identificador del objecto." name="id" static="0" scope="200" />
<UML:Parameter stereotype="" package="" xmi.id="2" value="''" type="string" abstract="0" documentation="Configuración del objeto." name="confFile" static="0" scope="200" />
</UML:Operation>
- <UML:Operation stereotype="" package="" xmi.id="527" type="PEAR_Error" abstract="0" documentation="" name="cargarHijos" static="0" scope="200" >
+ <UML:Operation stereotype="" package="" xmi.id="527" type="mixed" abstract="0" documentation="Carga hijos de un objeto. Si hubo error devuelve un PEAR_Error, si no hubo error, devuleve un array de objetos (los hijos)." name="cargarHijos" static="0" scope="200" >
<UML:Parameter stereotype="" package="" xmi.id="1" value="" type="mixed" abstract="0" documentation="Base de datos o resultado de donde cargar los hijos." name="db" static="0" scope="200" />
+ <UML:Parameter stereotype="" package="" xmi.id="2" value="true" type="bool" abstract="0" documentation="Si es true, se cargan solo los hijos con el flag habilitado." name="soloHabilitados" static="0" scope="200" />
</UML:Operation>
<UML:Operation stereotype="" package="" xmi.id="529" type="PEAR_Error" abstract="0" documentation="Borra el objeto de la base de datos verificando que no tenga hijos." name="borrar" static="0" scope="200" >
<UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="Base de datos de la cual borrar el objeto." name="db" static="0" scope="200" />
<diagrams>
<diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" showgrid="1" showopsig="1" usefillcolor="1" snapx="10" snapy="10" showatts="1" xmi.id="412" documentation="" type="402" showops="1" showpackage="0" name="Clases" localid="30000" showstereotype="0" showscope="1" font="Helvetica,8,-1,5,50,0,0,0,0,0" linecolor="#ff0000" >
<widgets>
- <UML:ConceptWidget usesdiagramfillcolour="0" width="170" showattsigs="601" usesdiagramusefillcolour="0" x="309" linecolour="#ff0000" y="360" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="168" usefillcolor="1" showattributes="1" xmi.id="413" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
- <UML:ConceptWidget usesdiagramfillcolour="0" width="287" showattsigs="601" usesdiagramusefillcolour="0" x="29" linecolour="#ff0000" y="162" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="168" usefillcolor="1" showattributes="1" xmi.id="416" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
- <UML:ConceptWidget usesdiagramfillcolour="0" width="262" showattsigs="601" usesdiagramusefillcolour="0" x="30" linecolour="#ff0000" y="441" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="49" usefillcolor="1" showattributes="1" xmi.id="469" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
- <UML:ConceptWidget usesdiagramfillcolour="0" width="73" showattsigs="601" usesdiagramusefillcolour="0" x="125" linecolour="#ff0000" y="385" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="24" usefillcolor="1" showattributes="0" xmi.id="471" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
- <UML:ConceptWidget usesdiagramfillcolour="0" width="277" showattsigs="601" usesdiagramusefillcolour="0" x="492" linecolour="#ff0000" y="360" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="182" usefillcolor="1" showattributes="1" xmi.id="486" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
- <UML:ConceptWidget usesdiagramfillcolour="0" width="346" showattsigs="601" usesdiagramusefillcolour="0" x="144" linecolour="#ff0000" y="29" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="98" usefillcolor="1" showattributes="1" xmi.id="516" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
- <UML:ConceptWidget usesdiagramfillcolour="0" width="297" showattsigs="601" usesdiagramusefillcolour="0" x="350" linecolour="#ff0000" y="162" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="70" usefillcolor="1" showattributes="1" xmi.id="524" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+ <UML:ConceptWidget usesdiagramfillcolour="0" width="170" showattsigs="601" usesdiagramusefillcolour="0" x="419" linecolour="#ff0000" y="353" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="156" usefillcolor="1" showattributes="1" xmi.id="413" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+ <UML:ConceptWidget usesdiagramfillcolour="0" width="404" showattsigs="601" usesdiagramusefillcolour="0" x="9" linecolour="#ff0000" y="180" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="169" usefillcolor="1" showattributes="1" xmi.id="416" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+ <UML:ConceptWidget usesdiagramfillcolour="0" width="262" showattsigs="601" usesdiagramusefillcolour="0" x="89" linecolour="#ff0000" y="430" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="45" usefillcolor="1" showattributes="1" xmi.id="469" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+ <UML:ConceptWidget usesdiagramfillcolour="0" width="73" showattsigs="601" usesdiagramusefillcolour="0" x="184" linecolour="#ff0000" y="374" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="23" usefillcolor="1" showattributes="0" xmi.id="471" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+ <UML:ConceptWidget usesdiagramfillcolour="0" width="158" showattsigs="601" usesdiagramusefillcolour="0" x="605" linecolour="#ff0000" y="354" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="169" usefillcolor="1" showattributes="1" xmi.id="486" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+ <UML:ConceptWidget usesdiagramfillcolour="0" width="346" showattsigs="601" usesdiagramusefillcolour="0" x="244" linecolour="#ff0000" y="10" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="91" usefillcolor="1" showattributes="1" xmi.id="516" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+ <UML:ConceptWidget usesdiagramfillcolour="0" width="322" showattsigs="601" usesdiagramusefillcolour="0" x="448" linecolour="#ff0000" y="180" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="65" usefillcolor="1" showattributes="1" xmi.id="524" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
</widgets>
<messages/>
<associations>
<UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="471" widgetaid="469" documentation="" type="500" >
<linepath>
- <startpoint startx="161" starty="441" />
- <endpoint endx="161" endy="409" />
+ <startpoint startx="220" starty="430" />
+ <endpoint endx="220" endy="397" />
</linepath>
</UML:AssocWidget>
<UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="516" widgetaid="416" documentation="" type="500" >
<linepath>
- <startpoint startx="172" starty="162" />
- <endpoint endx="259" endy="127" />
+ <startpoint startx="211" starty="180" />
+ <endpoint endx="359" endy="101" />
</linepath>
</UML:AssocWidget>
<UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="516" widgetaid="524" documentation="" type="500" >
<linepath>
- <startpoint startx="498" starty="162" />
- <endpoint endx="374" endy="127" />
+ <startpoint startx="609" starty="180" />
+ <endpoint endx="474" endy="101" />
</linepath>
</UML:AssocWidget>
<UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="524" widgetaid="486" documentation="" type="500" >
<linepath>
- <startpoint startx="630" starty="360" />
- <endpoint endx="548" endy="232" />
+ <startpoint startx="684" starty="354" />
+ <endpoint endx="662" endy="245" />
</linepath>
</UML:AssocWidget>
<UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="524" widgetaid="413" documentation="" type="500" >
<linepath>
- <startpoint startx="394" starty="360" />
- <endpoint endx="449" endy="232" />
+ <startpoint startx="504" starty="353" />
+ <endpoint endx="555" endy="245" />
</linepath>
</UML:AssocWidget>
</associations>
<listitem open="0" type="814" id="517" label="conf" />
<listitem open="0" type="815" id="521" label="guardar" />
</listitem>
- <listitem open="0" type="813" id="524" label="AI_DBTreeObject" >
+ <listitem open="1" type="813" id="524" label="AI_DBTreeObject" >
<listitem open="0" type="815" id="526" label="AI_DBTreeObject" />
<listitem open="0" type="815" id="529" label="borrar" />
<listitem open="0" type="815" id="527" label="cargarHijos" />
<listitem open="0" type="815" id="470" label="AI_Error" />
<listitem open="0" type="815" id="530" label="isError" />
</listitem>
- <listitem open="0" type="813" id="486" label="AI_GrupoSecciones" >
+ <listitem open="1" type="813" id="486" label="AI_GrupoSecciones" >
<listitem open="0" type="815" id="495" label="AI_GrupoSecciones" />
<listitem open="0" type="814" id="492" label="antiguedad" />
<listitem open="0" type="815" id="498" label="borrar" />
<listitem open="0" type="814" id="487" label="grupo" />
<listitem open="0" type="814" id="489" label="grupo_padre" />
<listitem open="0" type="815" id="497" label="guardar" />
- <listitem open="0" type="814" id="494" label="habilitado" />
+ <listitem open="0" type="814" id="535" label="habilitado" />
<listitem open="0" type="814" id="493" label="mostrar_hijos" />
<listitem open="0" type="814" id="488" label="nombre" />
<listitem open="0" type="814" id="491" label="secciones" />
</listitem>
- <listitem open="0" type="813" id="413" label="AI_Servicio" >
+ <listitem open="1" type="813" id="413" label="AI_Servicio" >
<listitem open="0" type="815" id="465" label="AI_Servicio" />
<listitem open="0" type="814" id="433" label="descripcion" />
<listitem open="0" type="815" id="458" label="guardar" />
- <listitem open="0" type="814" id="444" label="habilitado" />
+ <listitem open="0" type="814" id="534" label="habilitado" />
<listitem open="0" type="814" id="430" label="icono" />
<listitem open="0" type="814" id="431" label="link" />
<listitem open="0" type="814" id="432" label="link_ayuda" />
<listitem open="0" type="814" id="428" label="servicio" />
<listitem open="0" type="814" id="452" label="servicio_padre" />
</listitem>
- <listitem open="0" type="813" id="416" label="AI_Sistema" >
+ <listitem open="1" type="813" id="416" label="AI_Sistema" >
<listitem open="0" type="815" id="466" label="AI_Sistema" />
+ <listitem open="0" type="815" id="536" label="cargar" />
<listitem open="0" type="814" id="514" label="descripcion" />
<listitem open="0" type="815" id="531" label="getSistemas" />
<listitem open="0" type="815" id="528" label="getSistemasArray" />
<listitem open="0" type="815" id="459" label="guardar" />
- <listitem open="0" type="814" id="445" label="habilitado" />
+ <listitem open="0" type="814" id="533" label="habilitado" />
<listitem open="0" type="814" id="438" label="icono" />
<listitem open="0" type="814" id="439" label="link" />
<listitem open="0" type="814" id="440" label="link_ayuda" />
}
// -X2C
+ // +X2C Operation 536
+ /**
+ * @param mixed $db Base de datos o resultado de donde cargar el sistema.
+ *
+ * @return PEAR_Error
+ * @access public
+ */
+ function cargar($db) // ~X2C
+ {
+ $id_field = $this->conf['id'];
+ $id = intval($this->$id_field);
+ if (is_a($db, 'db_result')) {
+ $result = $db;
+ $db = $result->dbh;
+ // Si no es un resultado, hago el query.
+ } else {
+ // FIXME - ver como manejar JOINs - Ver de hacer el JOIN tambien en cargar.
+ $result = $db->query(
+ "SELECT AI.*, SA.nombre_sistema as nombre, SA.desc_sistema as descripcion
+ FROM {$this->conf['base']}.{$this->conf['tabla']} as AI, samurai.sistema as SA
+ WHERE AI.$id_field = $id AND AI.$id_field = SA.id_sistema"
+ );
+ if (DB::isError($result)) {
+ return $result;
+ }
+ }
+ // Obtengo la fila.
+ $row = $result->fetchRow(DB_FETCHMODE_ASSOC);
+ if (!$row) {
+ return new AI_Error(AI_ERROR_NO_RESULTADOS,
+ "No hay más resultados en la DB [id=$id]");
+ }
+ // Asigno valores al objeto.
+ foreach ($row as $key => $val) {
+ $this->$key = $val;
+ }
+ return true;
+ }
+ // -X2C
+
// +X2C Operation 459
/**
* @param DB $db DB donde guardar.
* Obtiene un array con los identificadores de los sistemas cargados.
*
* @param DB $db Base de datos de la cual obtener los sistemas.
- * @param string $where Clausula WHERE para filtrar resultados.
+ * @param string $where Clausula WHERE para filtrar la bsqueda.
*
* @return array
* @access public
$conf = parse_ini_file(AI_SISTEMA_CONFFILE, true);
}
extract($conf);
+ // FIXME - ver como manejar JOINs - Ver de hacer el JOIN tambien en cargar.
$query = "
- SELECT $id
- FROM $base.$tabla";
+ SELECT SA.nombre_sistema, SA.id_sistema
+ FROM samurai.sistema as SA
+ LEFT JOIN $base.$tabla as AI
+ ON AI.sistema = SA.id_sistema
+ WHERE AI.sistema IS NULL AND SA.estado = 1";
if ($where) {
- $query .= "WHERE $where";
+ $query .= " AND $where";
}
+ $query .= " ORDER BY SA.nombre_sistema ASC";
return $db->getCol($query);
}
// -X2C
// +X2C Operation 531
/**
* @param DB $db Base de datos de donde obtener los sistemas.
+ * @param bool $soloHabilitados Clausula WHERE para filtrar la bsqueda.
* @param string $where Clausula WHERE para filtrar la bsqueda.
*
* @return array
* @access public
* @static
*/
- function getSistemas($db, $where = '') // ~X2C
+ function getSistemas($db, $soloHabilitados = true, $where = '') // ~X2C
{
static $conf;
if (!$conf) {
$query = "
SELECT AI.*, SA.nombre_sistema as nombre, SA.desc_sistema as descripcion
FROM $tabla as AI, samurai.sistema as SA
- WHERE SA.id_sistema = AI.sistema and SA.estado = 1";
+ WHERE SA.id_sistema = AI.sistema AND SA.estado = 1";
+ if ($soloHabilitados) {
+ $query .= ' AND AI.habilitado = 1';
+ }
if ($where) {
- $query .= " WHERE $where";
+ $query .= " AND $where";
}
$query .= ' ORDER BY nombre ASC';
$result = $db->query($query);