]> git.llucax.com Git - mecon/ai.git/commitdiff
- Se agrega un TODO list.
authorLeandro Lucarella <llucax@gmail.com>
Fri, 18 Jul 2003 21:57:27 +0000 (21:57 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Fri, 18 Jul 2003 21:57:27 +0000 (21:57 +0000)
- Se actualiza la template del xmi2code.
- Se ordenan bastante los objetos principales, dando lugar a nuevos objetos
  más abstractos.
- Nuevo objeto AI_DBObject que implementa métodos generales de ABM.
- AI_DBObject (y sus subclases) usan archivos de configuración .ini para
  guardar los datos sobre la base de datos.
- Nuevo objeto AI_DBTreeObject que hereda de AI_DBObject. Implementa métodos
  para obtener hijos.
- AI_Sistema ahora hereda de AI_DBObject.
- AI_GrupoSecciones y AI_Servicio ahora heredan de AI_DBTreeObject.

TODO [new file with mode: 0644]
doc/uml.xmi
doc/xmi2code.tpl.php
lib/AI/DBObject.php [new file with mode: 0644]
lib/AI/DBTreeObject.php [new file with mode: 0644]
lib/AI/GrupoSecciones.ini [new file with mode: 0644]
lib/AI/GrupoSecciones.php
lib/AI/Servicio.ini [new file with mode: 0644]
lib/AI/Servicio.php
lib/AI/Sistema.ini [new file with mode: 0644]
lib/AI/Sistema.php

diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..6468e1f
--- /dev/null
+++ b/TODO
@@ -0,0 +1,14 @@
+$Id$
+
+- Mover listarImagenes() y arbol2array() de Form.php a un lugar más apropiado y
+  con un nombre más apropiado.
+- Ordenar todo mejor (index.php no da más).
+- Mejorar obtención de lista de sistemas (que no cree una DB on-the-fly en
+  Form.php).
+- Filtrar sistemas ya agregados en el select para agregar un sistema nuevo
+  (SAMURAI_Sistema no sirve para esto).
+- Ver que se hace con los hijos cuando se borra un elemento. Opciones:
+    * Borrar todos los hijos.
+    * Mover los hijos al padre del elemento a borrar (recomendado).
+- Agregar links para agregar un elemento nuevo sin tener que tocar en el
+  ícono de la sección que es poco intuitivo.
index 7e5ad51b9e548717b585a26618cd282c8c2092f0..d5e692f82201437264929a2975cca231635ead3e 100644 (file)
@@ -9,33 +9,21 @@
   <XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
  </XMI.header>
  <XMI.content>
-  <docsettings viewid="412" documentation="" uniqueid="514" />
+  <docsettings viewid="412" documentation="" uniqueid="527" />
   <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:Parameter stereotype="" package="" xmi.id="1" value="0" type="int" abstract="0" documentation="ID del servicio." name="servicio" static="0" scope="200" />
     </UML:Operation>
-    <UML:Operation stereotype="" package="" xmi.id="457" 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 a utilizar." name="db" static="0" scope="200" />
-    </UML:Operation>
     <UML:Operation stereotype="" package="" xmi.id="458" 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="456" type="PEAR_Error" abstract="0" documentation="" name="borrar" static="0" scope="200" >
-     <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="DB de donde borrar." name="db" static="0" scope="200" />
-    </UML:Operation>
-    <UML:Operation stereotype="" package="" xmi.id="463" type="PEAR_Error" abstract="0" documentation="" name="cargarHijos" static="0" scope="200" >
-     <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="DB de donde cargar los hijos." name="db" static="0" scope="200" />
-    </UML:Operation>
-    <UML:Operation stereotype="" package="" xmi.id="501" type="Servicio" abstract="0" documentation="" name="__clone" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="428" value="0" type="int" abstract="0" documentation="ID del servicio." name="servicio" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="452" value="0" type="int" abstract="0" documentation="" name="servicio_padre" static="0" scope="200" />
-    <UML:Attribute stereotype="" package="" xmi.id="467" value="array()" type="array" abstract="0" documentation="Servicios hijos.
-x2c:get" name="hijos" static="0" scope="202" />
     <UML:Attribute stereotype="" package="" xmi.id="429" value="''" type="string" abstract="0" documentation="Nombre del servicio." name="nombre" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="433" value="''" type="string" abstract="0" documentation="Descripción del servicio." name="descripcion" static="0" scope="200" />
-    <UML:Attribute stereotype="" package="" xmi.id="430" value="null" type="HTML_Imagen" abstract="0" documentation="Ícono del servicio." name="icono" static="0" scope="200" />
+    <UML:Attribute stereotype="" package="" xmi.id="430" value="''" type="string" abstract="0" documentation="Ícono del servicio." name="icono" 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" />
@@ -45,23 +33,16 @@ x2c:get" name="hijos" static="0" scope="202" />
     <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="460" 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 a utilizar." 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="461" type="PEAR_Error" abstract="0" documentation="" name="borrar" static="0" scope="200" >
-     <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="DB de donde borrar." name="db" static="0" scope="200" />
-    </UML:Operation>
-    <UML:Operation stereotype="" package="" xmi.id="502" type="Sistema" abstract="0" documentation="" name="__clone" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="437" value="0" type="int" abstract="0" documentation="ID del sistema (ID en SAMURAI).
 FIXME - preguntar a gonzalo si le sirve." 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).
 FIXME - preguntar a gonzalo si le sirve." name="nombre" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="514" value="''" type="string" abstract="0" documentation="Descripción del sistema (sólo de lectura, extraído de SAMURAI)." name="descripcion" static="0" scope="200" />
-    <UML:Attribute stereotype="" package="" xmi.id="438" value="null" type="HTML_Imagen" abstract="0" documentation="Ícono del sistema." name="icono" 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" />
@@ -88,18 +69,12 @@ x2c:include: PEAR.php" name="PEAR_Error" static="0" scope="200" />
     <UML:Operation stereotype="" package="" xmi.id="498" type="PEAR_Error" abstract="0" documentation="" name="borrar" static="0" scope="200" >
      <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="DB de donde borrar." name="db" static="0" scope="200" />
     </UML:Operation>
-    <UML:Operation stereotype="" package="" xmi.id="499" type="PEAR_Error" abstract="0" documentation="" name="cargarHijos" static="0" scope="200" >
-     <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="DB de donde cargar los hijos." name="db" static="0" scope="200" />
-    </UML:Operation>
     <UML:Operation stereotype="" package="" xmi.id="512" type="array" abstract="0" documentation="Obtiene un array con una lista de secciones." name="getSeccionesArray" static="1" scope="200" >
      <UML:Parameter stereotype="" package="" xmi.id="1" value="null" type="DB" abstract="0" documentation="Base de datos a usar para obtener los datos." name="db" static="0" scope="200" />
     </UML:Operation>
-    <UML:Operation stereotype="" package="" xmi.id="500" type="GrupoSecciones" abstract="0" documentation="" name="__clone" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="487" value="0" type="int" abstract="0" documentation="ID del grupo de secciones." name="grupo" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="488" value="''" type="string" abstract="0" documentation="Nombre." name="nombre" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="489" value="0" type="int" abstract="0" documentation="" name="grupo_padre" static="0" scope="200" />
-    <UML:Attribute stereotype="" package="" xmi.id="490" value="array()" type="array" abstract="0" documentation="Grupos de secciones que tiene este grupo.
-x2c:get" name="hijos" static="0" scope="202" />
     <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" />
@@ -124,38 +99,94 @@ x2c:get" name="hijos" static="0" scope="202" />
     </UML:Operation>
    </UML:Class>
    <UML:Class stereotype="" package="" xmi.id="508" abstract="0" documentation="x2c:extern" name="MECON_HTML_QuickForm" static="0" scope="200" />
+   <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 objeto a cargar." name="id" static="0" scope="200" />
+     <UML:Parameter stereotype="" package="" xmi.id="2" value="''" type="string" abstract="0" documentation="Archivo de configuración del objeto." name="confFile" static="0" scope="200" />
+    </UML:Operation>
+    <UML:Operation stereotype="" package="" xmi.id="520" 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 a usar para cargar el objeto." name="db" static="0" scope="200" />
+    </UML:Operation>
+    <UML:Operation stereotype="" package="" xmi.id="521" type="PEAR_Error" abstract="0" documentation="" name="guardar" static="1" scope="200" >
+     <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="Base de datos a usar para guardar el objeto." name="db" static="0" scope="200" />
+     <UML:Parameter stereotype="" package="" xmi.id="3" value="" type="array" abstract="0" documentation="Array con los datos a guardar en la DB (donde la clave es el campo y el valor el contenido a guardar)." name="datos" static="0" scope="200" />
+     <UML:Parameter stereotype="" package="" xmi.id="4" value="false" type="bool" abstract="0" documentation="Si es true, se fuerza a cargar el objeto en la base como si fuera nuevo." name="nuevo" static="0" scope="200" />
+    </UML:Operation>
+    <UML:Operation stereotype="" package="" xmi.id="522" type="PEAR_Error" abstract="0" documentation="" name="borrar" static="0" scope="200" >
+     <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="DB" abstract="0" documentation="Base de datos a usar para borrar el objeto." name="db" static="0" scope="200" />
+    </UML:Operation>
+    <UML:Operation stereotype="" package="" xmi.id="523" type="AI_DBObject" abstract="0" documentation="" name="__clone" static="0" scope="200" />
+    <UML:Attribute stereotype="" package="" xmi.id="517" value="array()" type="array" abstract="0" documentation="" name="conf" static="0" scope="200" />
+   </UML:Class>
+   <UML:Class stereotype="" package="AI" xmi.id="524" abstract="1" documentation="" name="AI_DBTreeObject" static="0" scope="200" >
+    <UML:Operation stereotype="" package="" xmi.id="526" type="void" abstract="0" documentation="" name="AI_DBTreeObject" 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: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:Operation>
+    <UML:Attribute stereotype="" package="" xmi.id="525" value="array()" type="array" abstract="0" documentation="Grupos de secciones que tiene este grupo.
+x2c:get" name="hijos" static="0" scope="202" />
+   </UML:Class>
   </umlobjects>
   <diagrams>
-   <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" showgrid="0" 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" >
+   <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="277" showattsigs="601" usesdiagramusefillcolour="0" x="300" linecolour="#ff0000" y="11" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="238" 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="277" showattsigs="601" usesdiagramusefillcolour="0" x="12" linecolour="#ff0000" y="241" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="182" 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="302" linecolour="#ff0000" y="338" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="35" 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="397" linecolour="#ff0000" y="264" 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="12" linecolour="#ff0000" y="11" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="224" 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="192" showattsigs="601" usesdiagramusefillcolour="0" x="345" linecolour="#ff0000" y="477" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="49" usefillcolor="1" showattributes="1" xmi.id="503" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="46" showattsigs="601" usesdiagramusefillcolour="0" x="418" linecolour="#ff0000" y="414" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="24" usefillcolor="1" showattributes="0" xmi.id="504" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="271" showattsigs="601" usesdiagramusefillcolour="0" x="24" linecolour="#ff0000" y="477" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="49" usefillcolor="1" showattributes="1" xmi.id="507" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="146" showattsigs="601" usesdiagramusefillcolour="0" x="86" linecolour="#ff0000" y="432" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="24" usefillcolor="1" showattributes="0" xmi.id="508" showoperations="0" 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="278" linecolour="#ff0000" y="324" 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="277" showattsigs="601" usesdiagramusefillcolour="0" x="27" linecolour="#ff0000" y="171" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="140" 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="421" linecolour="#ff0000" y="557" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="35" 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="516" linecolour="#ff0000" y="501" 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="461" linecolour="#ff0000" y="310" 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="192" showattsigs="601" usesdiagramusefillcolour="0" x="64" linecolour="#ff0000" y="393" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="49" usefillcolor="1" showattributes="1" xmi.id="503" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="46" showattsigs="601" usesdiagramusefillcolour="0" x="137" linecolour="#ff0000" y="330" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="24" usefillcolor="1" showattributes="0" xmi.id="504" showoperations="0" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="271" showattsigs="601" usesdiagramusefillcolour="0" x="27" linecolour="#ff0000" y="543" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="49" usefillcolor="1" showattributes="1" xmi.id="507" showoperations="1" showpackage="0" showscope="1" showstereotype="0" font="Helvetica,8,-1,5,50,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="146" showattsigs="601" usesdiagramusefillcolour="0" x="89" linecolour="#ff0000" y="468" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="24" usefillcolor="1" showattributes="0" xmi.id="508" showoperations="0" 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="157" linecolour="#ff0000" y="31" 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="327" linecolour="#ff0000" y="171" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="56" 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="433" starty="338" />
-       <endpoint endx="433" endy="288" />
+       <startpoint startx="552" starty="557" />
+       <endpoint endx="552" endy="525" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="508" widgetaid="507" documentation="" type="500" >
       <linepath>
-       <startpoint startx="159" starty="477" />
-       <endpoint endx="159" endy="456" />
+       <startpoint startx="162" starty="543" />
+       <endpoint endx="162" endy="492" />
+      </linepath>
+     </UML:AssocWidget>
+     <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="516" widgetaid="416" documentation="" type="500" >
+      <linepath>
+       <startpoint startx="165" starty="171" />
+       <endpoint endx="272" endy="129" />
+      </linepath>
+     </UML:AssocWidget>
+     <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="516" widgetaid="524" documentation="" type="500" >
+      <linepath>
+       <startpoint startx="475" starty="171" />
+       <endpoint endx="387" endy="129" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="504" widgetaid="503" documentation="" type="500" >
       <linepath>
-       <startpoint startx="441" starty="477" />
-       <endpoint endx="441" endy="438" />
+       <startpoint startx="160" starty="393" />
+       <endpoint endx="160" endy="354" />
+      </linepath>
+     </UML:AssocWidget>
+     <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="524" widgetaid="486" documentation="" type="500" >
+      <linepath>
+       <startpoint startx="599" starty="310" />
+       <endpoint endx="525" endy="227" />
+      </linepath>
+     </UML:AssocWidget>
+     <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="524" widgetaid="413" documentation="" type="500" >
+      <linepath>
+       <startpoint startx="363" starty="324" />
+       <endpoint endx="426" endy="227" />
       </linepath>
      </UML:AssocWidget>
     </associations>
@@ -169,6 +200,19 @@ x2c:get" name="hijos" static="0" scope="202" />
        <listitem open="0" type="815" id="506" label="connect" />
        <listitem open="0" type="815" id="511" label="isError" />
       </listitem>
+      <listitem open="0" type="813" id="516" label="AI_DBObject" >
+       <listitem open="0" type="815" id="519" label="AI_DBObject" />
+       <listitem open="0" type="815" id="522" label="borrar" />
+       <listitem open="0" type="815" id="520" label="cargar" />
+       <listitem open="0" type="815" id="523" label="__clone" />
+       <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="0" type="815" id="526" label="AI_DBTreeObject" />
+       <listitem open="0" type="815" id="527" label="cargarHijos" />
+       <listitem open="0" type="814" id="525" label="hijos" />
+      </listitem>
       <listitem open="0" type="813" id="469" label="AI_Error" >
        <listitem open="0" type="815" id="470" label="AI_Error" />
       </listitem>
@@ -181,28 +225,20 @@ x2c:get" name="hijos" static="0" scope="202" />
        <listitem open="0" type="814" id="492" label="antiguedad" />
        <listitem open="0" type="815" id="498" label="borrar" />
        <listitem open="0" type="815" id="496" label="cargar" />
-       <listitem open="0" type="815" id="499" label="cargarHijos" />
-       <listitem open="0" type="815" id="500" label="__clone" />
        <listitem open="0" type="815" id="512" label="getSeccionesArray" />
        <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="490" label="hijos" />
        <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="0" type="815" id="465" label="AI_Servicio" />
-       <listitem open="0" type="815" id="456" label="borrar" />
-       <listitem open="0" type="815" id="457" label="cargar" />
-       <listitem open="0" type="815" id="463" label="cargarHijos" />
-       <listitem open="0" type="815" id="501" label="__clone" />
        <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="467" label="hijos" />
        <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" />
@@ -213,9 +249,6 @@ x2c:get" name="hijos" static="0" scope="202" />
       </listitem>
       <listitem open="0" type="813" id="416" label="AI_Sistema" >
        <listitem open="0" type="815" id="466" label="AI_Sistema" />
-       <listitem open="0" type="815" id="461" label="borrar" />
-       <listitem open="0" type="815" id="460" label="cargar" />
-       <listitem open="0" type="815" id="502" label="__clone" />
        <listitem open="0" type="814" id="514" label="descripcion" />
        <listitem open="0" type="815" id="459" label="guardar" />
        <listitem open="0" type="814" id="445" label="habilitado" />
index eea3564351f2653f4b08819826fa19d8a6d18324..fa94d9a570e8d1f5eed551b7d252ff2a29452331 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
+// vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
 // +--------------------------------------------------------------------+
 // |                      Ministerio de Economía                        |
 // |                  AI (Administrador de Intranet)                    |
diff --git a/lib/AI/DBObject.php b/lib/AI/DBObject.php
new file mode 100644 (file)
index 0000000..8d8297c
--- /dev/null
@@ -0,0 +1,184 @@
+<?php
+// vim: set binary expandtab tabstop=4 shiftwidth=4:
+// +--------------------------------------------------------------------+
+// |                      Ministerio de Economía                        |
+// |                  AI (Administrador de Intranet)                    |
+// +--------------------------------------------------------------------+
+// | This file is part of AI.                                           |
+// |                                                                    |
+// | AI is free software; you can redistribute it and/or modify         |
+// | it under the terms of the GNU General Public License as published  |
+// | by the Free Software Foundation; either version 2 of the License,  |
+// | or (at your option) any later version.                             |
+// |                                                                    |
+// | AI is distributed in the hope that it will be useful, but          |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   |
+// | General Public License for more details.                           |
+// |                                                                    |
+// | You should have received a copy of the GNU General Public License  |
+// | along with Hooks; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      |
+// +--------------------------------------------------------------------+
+// | Creado: Fri Jul 18 16:05:22 2003                                   |
+// | Autor:  Leandro Lucarella <llucar@mecon.gov.ar>                    |
+// +--------------------------------------------------------------------+
+//
+// $Id$
+//
+
+// +X2C Class 516 :AI_DBObject
+/**
+ * Objecto con capacidad de guardarse, cargarse y borrarse de una base de datos.
+ *
+ * @package AI
+ * @access public
+ * @abstract
+ */
+class AI_DBObject {
+    /**
+     * @var    array $conf
+     * @access public
+     */
+    var $conf = array();
+
+    // ~X2C
+
+    // +X2C Operation 519
+    /**
+     * @param  int $id Identificador del objeto a cargar.
+     * @param  string $confFile Archivo de configuracin del objeto.
+     *
+     * @return void
+     * @access public
+     */
+    function AI_DBObject($id = 0, $confFile = '') // ~X2C
+    {
+        if ($confFile) {
+            $this->conf = parse_ini_file($confFile, true);
+        } else {
+            $this->conf = parse_ini_file(dirname(__FILE__) . get_class($this)
+                               . '.ini', true);
+        }
+               $id_field = $this->conf['id'];
+        $this->$id_field = $id;
+    }
+    // -X2C
+
+    // +X2C Operation 520
+    /**
+     * @param  mixed $db Base de datos o resultado a usar para cargar el objeto.
+     *
+     * @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 {
+            $result = $db->query(
+                "SELECT *
+                    FROM {$this->conf['base']}.{$this->conf['tabla']}
+                    WHERE $id_field = $id"
+            );
+            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 521
+    /**
+     * @param  DB $db Base de datos a usar para guardar el objeto.
+     * @param  array $datos Array con los datos a guardar en la DB (donde la clave es el campo y el valor el contenido a guardar).
+     * @param  bool $nuevo Si es true, se fuerza a cargar el objeto en la base como si fuera nuevo.
+     *
+     * @return PEAR_Error
+     * @access public
+     * @static
+     */
+    function guardar($db, $datos, $nuevo = false) // ~X2C
+    {
+               $id_field = $this->conf['id'];
+        $tabla    = $this->conf['tabla'];
+        $base     = $this->conf['base'];
+        $id       = intval($this->$id_field);
+        $where = '';
+        if ($id and !$nuevo) {
+            $accion = DB_AUTOQUERY_UPDATE;
+            $where  = "$id_field = $id";
+        } else {
+            $accion = DB_AUTOQUERY_INSERT;
+            // Si no tiene ID, le asigno uno nuevo.
+            if (!$id) {
+                $id = $db->nextId($tabla);
+                if (DB::isError($id)) {
+                    return $id;
+                }
+                $this->$id_field = $id;
+            }
+            $datos[$id_field] = $id;
+        }
+        $res = $db->autoExecute("$base.$tabla", $datos, $accion, $where);
+        if (DB::isError($res)) {
+            return $res;
+        }
+        return true;
+    }
+    // -X2C
+
+    // +X2C Operation 522
+    /**
+     * @param  DB $db Base de datos a usar para borrar el objeto.
+     *
+     * @return PEAR_Error
+     * @access public
+     */
+    function borrar($db) // ~X2C
+    {
+               $id_field = $this->conf['id'];
+        $tabla = $this->conf['base'].'.'.$this->conf['tabla'];
+        $id = intval($this->$id_field);
+        if ($id) {
+            $res = $db->query(
+                "DELETE FROM $tabla WHERE $id_field = $id");
+            if (DB::isError($res)) {
+                return $res;
+            }
+            return true;
+        }
+        return PEAR::raiseError('No hay un identificador válido para borrar');
+    }
+    // -X2C
+
+    // +X2C Operation 523
+    /**
+     * @return AI_DBObject
+     * @access public
+     */
+    function __clone() // ~X2C
+    {
+        return $this;
+    }
+    // -X2C
+
+} // -X2C Class :AI_DBObject
+
+?>
\ No newline at end of file
diff --git a/lib/AI/DBTreeObject.php b/lib/AI/DBTreeObject.php
new file mode 100644 (file)
index 0000000..5d86cba
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+// vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
+// +--------------------------------------------------------------------+
+// |                      Ministerio de Economía                        |
+// |                  AI (Administrador de Intranet)                    |
+// +--------------------------------------------------------------------+
+// | This file is part of AI.                                           |
+// |                                                                    |
+// | AI is free software; you can redistribute it and/or modify         |
+// | it under the terms of the GNU General Public License as published  |
+// | by the Free Software Foundation; either version 2 of the License,  |
+// | or (at your option) any later version.                             |
+// |                                                                    |
+// | AI is distributed in the hope that it will be useful, but          |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   |
+// | General Public License for more details.                           |
+// |                                                                    |
+// | You should have received a copy of the GNU General Public License  |
+// | along with Hooks; if not, write to the Free Software Foundation,   |
+// | Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      |
+// +--------------------------------------------------------------------+
+// | Creado: Fri Jul 18 18:19:35 2003                                   |
+// | Autor:  Leandro Lucarella <llucar@mecon.gov.ar>                    |
+// +--------------------------------------------------------------------+
+//
+// $Id$
+//
+
+// +X2C includes
+require_once 'AI/DBObject.php';
+// ~X2C
+
+// +X2C Class 524 :AI_DBTreeObject
+/**
+ * @package AI
+ * @access public
+ * @abstract
+ */
+class AI_DBTreeObject extends AI_DBObject {
+    /**
+     * Grupos de secciones que tiene este grupo.
+     *
+     * @var    array $hijos
+     * @access protected
+     */
+    var $_hijos = array();
+
+    /**
+     * Gets Hijos.
+     *
+     * @return array
+     * @access public
+     */
+    function getHijos()
+    {
+        return $this->_hijos;
+    }
+
+    // ~X2C
+
+    // +X2C Operation 526
+    /**
+     * @param  int $id Identificador del objecto.
+     * @param  string $confFile Configuracin del objeto.
+     *
+     * @return void
+     * @access public
+     */
+    function AI_DBTreeObject($id = 0, $confFile = '') // ~X2C
+    {
+        parent::AI_DBObject($id, $confFile);
+    }
+    // -X2C
+
+    // +X2C Operation 527
+    /**
+     * @param  mixed $db Base de datos o resultado de donde cargar los hijos.
+     *
+     * @return PEAR_Error
+     * @access public
+     */
+    function cargarHijos($db) // ~X2C
+    {
+        $id_field = $this->conf['id'];
+        $id_padre = $this->conf['padre'];
+        $tabla    = $this->conf['base'].'.'.$this->conf['tabla'];
+        $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 {
+            $result   = $db->query("SELECT * FROM $tabla WHERE $id_padre = $id");
+            if (DB::isError($result)) {
+                return $result;
+            }
+        }
+        $this->_hijos = array();
+        $clase = get_class($this);
+        $hijo  = new $clase;
+        $err   = $hijo->cargar($result);
+        while (!PEAR::isError($err)) {
+            $this->_hijos[] = $hijo->__clone();
+            $err = $hijo->cargar($result);
+        }
+        // Si no hay mas resultados, entonces terminó bien.
+        if (AI_Error::isError($err)
+                and $err->getCode() == AIERROR_NO_RESULTADOS) {
+            return true;
+        }
+        // Si no, se devuelve el error.
+        return $err;
+    }
+    // -X2C
+
+} // -X2C Class :AI_DBTreeObject
+
+?>
\ No newline at end of file
diff --git a/lib/AI/GrupoSecciones.ini b/lib/AI/GrupoSecciones.ini
new file mode 100644 (file)
index 0000000..0d162df
--- /dev/null
@@ -0,0 +1,13 @@
+; $Id$
+
+base  = intranet
+tabla = grupo_secciones
+id    = grupo
+padre = grupo_padre
+
+; Vinculación con secciones de noticias.
+[secciones]
+base  = intranet
+tabla = grupo_secciones_seccion
+id    = grupo
+campo = seccion
index c7d54d93d712844906c5b00e8356edce29fa2471..b842671b65423e0816401687766b4ccce587b5d9 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// vim: set expandtab tabstop=4 shiftwidth=4 binary:
+// vim: set binary expandtab tabstop=4 shiftwidth=4:
 // +--------------------------------------------------------------------+
 // |                      Ministerio de Economía                        |
 // |                  AI (Administrador de Intranet)                    |
 // $Id$
 //
 
+// +X2C includes
+require_once 'AI/DBTreeObject.php';
+// ~X2C
+
 require_once 'AI/Error.php';
 
 // +X2C Class 486 :AI_GrupoSecciones
@@ -36,7 +40,7 @@ require_once 'AI/Error.php';
  * @package AI
  * @access public
  */
-class AI_GrupoSecciones {
+class AI_GrupoSecciones extends AI_DBTreeObject {
     /**
      * ID del grupo de secciones.
      *
@@ -59,14 +63,6 @@ class AI_GrupoSecciones {
      */
     var $grupo_padre = 0;
 
-    /**
-     * Grupos de secciones que tiene este grupo.
-     *
-     * @var    array $hijos
-     * @access protected
-     */
-    var $_hijos = array();
-
     /**
      * Secciones que pertenecen a este grupo.
      *
@@ -99,17 +95,6 @@ class AI_GrupoSecciones {
      */
     var $habilitado = true;
 
-    /**
-     * Gets Hijos.
-     *
-     * @return array
-     * @access public
-     */
-    function getHijos()
-    {
-        return $this->_hijos;
-    }
-
     // ~X2C
 
     // +X2C Operation 495
@@ -121,7 +106,7 @@ class AI_GrupoSecciones {
      */
     function AI_GrupoSecciones($grupo = 0) // ~X2C
     {
-        $this->grupo = $grupo;
+        parent::AI_DBTreeObject($grupo, dirname(__FILE__) . '/GrupoSecciones.ini');
     }
     // -X2C
 
@@ -134,40 +119,18 @@ class AI_GrupoSecciones {
      */
     function cargar($db) // ~X2C
     {
-        $grupo = intval($this->grupo);
-        if (is_a($db, 'db_result')) {
-            $result = $db;
-            $db     = $result->dbh;
-        // Si no es un resultado, hago el query.
-        } else {
-            $result = $db->query(
-                "SELECT *
-                    FROM grupo_secciones
-                    WHERE grupo = $grupo"
-            );
-            if (DB::isError($result)) {
-                return $result;
-            }
+        // Obtengo campos comunes.
+        $err = parent::cargar($db);
+        if (PEAR::isError($err)) {
+            return $err;
         }
-        // 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 [grupo=$grupo]");
-        }
-        // Asigno valores al objeto.
-        extract($row);
-        $this->grupo        = $grupo;
-        $this->nombre       = $nombre;
-        $this->grupo_padre  = $grupo_padre;
-        $this->habilitado   = $habilitado;
-        $this->antiguedad   = $antiguedad;
-        $this->mostrar_hijos= $mostrar_hijos;
         // Obtengo secciones.
+        $id = intval($this->grupo);
+        extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
         $secciones = $db->getCol(
-            "SELECT seccion
-                FROM grupo_secciones_seccion
-                WHERE grupo = $grupo"
+            "SELECT $cnf_campo
+                FROM $cnf_base.$cnf_tabla
+                WHERE $cnf_id = $id"
         );
         if (DB::isError($secciones)) {
             return $secciones;
@@ -191,8 +154,7 @@ class AI_GrupoSecciones {
      */
     function guardar($db, $nuevo = false) // ~X2C
     {
-        $grupo = intval($this->grupo);
-        $where = '';
+        // Guardo datos generales.
         $datos = array(
             'grupo_padre'   => intval($this->grupo_padre),
             'nombre'        => $this->nombre,
@@ -200,31 +162,20 @@ class AI_GrupoSecciones {
             'antiguedad'    => intval($this->antiguedad),
             'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0,
         );
-        if ($grupo and !$nuevo) {
-            $accion = DB_AUTOQUERY_UPDATE;
-            $where  = "grupo = $grupo";
-        } else {
-            $accion = DB_AUTOQUERY_INSERT;
-            // Si no tiene ID, le asigno uno nuevo.
-            if (!$grupo) {
-                $grupo = $db->nextId('grupo_secciones');
-                if (DB::isError($grupo)) {
-                    return $grupo;
-                }
-                $this->grupo = $grupo;
-            }
-            $datos['grupo'] = $grupo;
+        $err = parent::guardar($db, $datos, $nuevo);
+        if (PEAR::isError($err)) {
+            return $err;
         }
-        $res = $db->autoExecute('grupo_secciones', $datos, $accion, $where);
+        // Guardo datos de secciones.
+               $id_field = $this->conf['id'];
+        $id = intval($this->$id_field);
+        extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
+        $res = $db->query("DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id");
         if (DB::isError($res)) {
             return $res;
         }
-        $res = $db->query("DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo");
-        if (DB::isError($res)) {
-            return $res;
-        }
-        $prepare = $db->prepare("INSERT INTO grupo_secciones_seccion
-            (grupo, seccion) VALUES ($grupo, ?)");
+        $prepare = $db->prepare("INSERT INTO $cnf_base.$cnf_tabla
+            ($cnf_id, $cnf_campo) VALUES ($id, ?)");
         if (DB::isError($prepare)) {
             return $prepare;
         }
@@ -245,55 +196,24 @@ class AI_GrupoSecciones {
      */
     function borrar($db) // ~X2C
     {
-        $grupo = intval($this->grupo);
-        if ($grupo) {
-            $res = $db->query(
-                "DELETE FROM grupo_secciones WHERE grupo = $grupo");
-            if (DB::isError($res)) {
-                return $res;
-            }
-            $res = $db->query(
-                "DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo");
-            if (DB::isError($res)) {
-                return $res;
-            }
-            return true;
-        }
-        return PEAR::raiseError("No hay un grupo válido para borrar");
-    }
-    // -X2C
-
-    // +X2C Operation 499
-    /**
-     * @param  DB $db DB de donde cargar los hijos.
-     *
-     * @return PEAR_Error
-     * @access public
-     */
-    function cargarHijos($db) // ~X2C
-    {
-        $grupo  = intval($this->grupo);
-        $result = $db->query("SELECT * FROM grupo_secciones WHERE grupo_padre = $grupo");
-        if (DB::isError($result)) {
-            return $result;
-        }
-        $this->_hijos = array();
-        $hijo = new GrupoSecciones;
-        $err = $hijo->cargar($result);
-        while (!PEAR::isError($err)) {
-            $this->_hijos[] = $hijo->__clone();
-            $err = $hijo->cargar($result);
+        // Obtengo campos comunes.
+        $err = parent::borrar($db);
+        if (PEAR::isError($err)) {
+            return $err;
         }
-        // Si no hay mas resultados, entonces terminó bien.
-        if (AI_Error::isError($err)
-                and $err->getCode() == AI_ERROR_NO_RESULTADOS) {
-            return true;
+        // Obtengo secciones.
+        $id = intval($this->grupo);
+        extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf');
+        $res = $db->query(
+            "DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id");
+        if (DB::isError($res)) {
+            return $res;
         }
-        // Si no, se devuelve el error.
-        return $err;
+        return true;
     }
     // -X2C
 
+
     // +X2C Operation 512
     /**
      * Obtiene un array con una lista de secciones.
@@ -320,17 +240,6 @@ class AI_GrupoSecciones {
     }
     // -X2C
 
-    // +X2C Operation 500
-    /**
-     * @return GrupoSecciones
-     * @access public
-     */
-    function __clone() // ~X2C
-    {
-        return $this;
-    }
-    // -X2C
-
 } // -X2C Class :AI_GrupoSecciones
 
 ?>
\ No newline at end of file
diff --git a/lib/AI/Servicio.ini b/lib/AI/Servicio.ini
new file mode 100644 (file)
index 0000000..05eae1e
--- /dev/null
@@ -0,0 +1,6 @@
+; $Id$
+
+base  = intranet
+tabla = servicio
+id    = servicio
+padre = servicio_padre
index e83bfd19696784d6f4c3206f169cc5f99ee19f3b..a6b4fec3d7935b07a395d737262d5c0604b4d7a1 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
+// vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
 // +--------------------------------------------------------------------+
 // |                      Ministerio de Economía                        |
 // |                  AI (Administrador de Intranet)                    |
 // $Id$
 //
 
+// +X2C includes
+require_once 'AI/DBTreeObject.php';
+// ~X2C
+//
 require_once 'AI/Error.php';
 
 // +X2C Class 413 :AI_Servicio
@@ -36,7 +40,7 @@ require_once 'AI/Error.php';
  * @package AI
  * @access public
  */
-class AI_Servicio {
+class AI_Servicio extends AI_DBTreeObject {
     /**
      * ID del servicio.
      *
@@ -51,14 +55,6 @@ class AI_Servicio {
      */
     var $servicio_padre = 0;
 
-    /**
-     * Servicios hijos.
-     *
-     * @var    array $hijos
-     * @access protected
-     */
-    var $_hijos = array();
-
     /**
      * Nombre del servicio.
      *
@@ -78,10 +74,10 @@ class AI_Servicio {
     /**
      * ?ono del servicio.
      *
-     * @var    HTML_Imagen $icono
+     * @var    string $icono
      * @access public
      */
-    var $icono = null;
+    var $icono = '';
 
     /**
      * Enlace a donde el este servicio.
@@ -115,17 +111,6 @@ class AI_Servicio {
      */
     var $habilitado = true;
 
-    /**
-     * Gets Hijos.
-     *
-     * @return array
-     * @access public
-     */
-    function getHijos()
-    {
-        return $this->_hijos;
-    }
-
     // ~X2C
 
     // +X2C Operation 465
@@ -137,51 +122,7 @@ class AI_Servicio {
      */
     function AI_Servicio($servicio = 0) // ~X2C
     {
-        $this->servicio = $servicio;
-    }
-    // -X2C
-
-    // +X2C Operation 457
-    /**
-     * @param  mixed $db Base de datos o Resultado a utilizar.
-     *
-     * @return PEAR_Error
-     * @access public
-     */
-    function cargar($db) // ~X2C
-    {
-        $servicio = intval($this->servicio);
-        if (is_a($db, 'db_result')) {
-            $result = $db;
-        // Si no es un resultado, hago el query.
-        } else {
-            $result = $db->query(
-                "SELECT *
-                    FROM servicio
-                    WHERE servicio = $servicio"
-            );
-            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 [servicio=$servicio]");
-        }
-        // Asigno valores al objeto.
-        extract($row);
-        $this->servicio         = $servicio;
-        $this->servicio_padre   = $servicio_padre;
-        $this->nombre           = $nombre;
-        $this->descripcion      = $descripcion;
-        $this->icono            = $icono; # FIXME - new HTML_Icono (o no?)
-        $this->link             = $link;
-        $this->link_ayuda       = $link_ayuda;
-        $this->necesita_logueo  = $necesita_logueo;
-        $this->habilitado       = $habilitado;
-        return true;
+        parent::AI_DBTreeObject($servicio, dirname(__FILE__) . '/Servicio.ini');
     }
     // -X2C
 
@@ -195,9 +136,7 @@ class AI_Servicio {
      */
     function guardar($db, $nuevo = false) // ~X2C
     {
-        $servicio = intval($this->servicio);
-        $where    = '';
-        $datos    = array(
+        $datos = array(
             'servicio_padre'    => intval($this->servicio_padre),
             'nombre'            => $this->nombre,
             'descripcion'       => $this->descripcion,
@@ -207,92 +146,14 @@ class AI_Servicio {
             'necesita_logueo'   => $this->necesita_logueo ? 1 : 0,
             'habilitado'        => $this->habilitado ? 1 : 0,
         );
-        if ($servicio and !$nuevo) {
-            $accion = DB_AUTOQUERY_UPDATE;
-            $where  = "servicio = $servicio";
-        } else {
-            $accion = DB_AUTOQUERY_INSERT;
-            // Si no tiene ID, le asigno uno nuevo.
-            if (!$servicio) {
-                $servicio = $db->nextId('servicio');
-                if (DB::isError($servicio)) {
-                    return $servicio;
-                }
-                $this->servicio = $servicio;
-            }
-            $datos['servicio'] = $servicio;
+        $err = parent::guardar($db, $datos, $nuevo);
+        if (PEAR::isError($err)) {
+            return $err;
         }
-        $res = $db->autoExecute('servicio', $datos, $accion, $where);
-        if (DB::isError($res)) {
-            return $res;
-        }
-        return true;
     }
     // -X2C
 
-    // +X2C Operation 456
-    /**
-     * @param  DB $db DB de donde borrar.
-     *
-     * @return PEAR_Error
-     * @access public
-     */
-    function borrar($db) // ~X2C
-    {
-        $servicio = intval($this->servicio);
-        if ($servicio) {
-            $res = $db->query(
-                "DELETE FROM servicio WHERE servicio = $servicio");
-            if (DB::isError($res)) {
-                return $res;
-            }
-            return true;
-        }
-        return PEAR::raiseError("No hay un servicio válido para borrar");
-    }
-    // -X2C
 
-    // +X2C Operation 463
-    /**
-     * @param  DB $db DB de donde cargar los hijos.
-     *
-     * @return PEAR_Error
-     * @access public
-     */
-    function cargarHijos($db) // ~X2C
-    {
-        $servicio = intval($this->servicio);
-        $result   = $db->query("SELECT * FROM servicio WHERE servicio_padre = $servicio");
-        if (DB::isError($result)) {
-            return $result;
-        }
-        $this->_hijos = array();
-        $hijo = new Servicio;
-        $err  = $hijo->cargar($result);
-        while (!PEAR::isError($err)) {
-            $this->_hijos[] = $hijo->__clone();
-            $err = $hijo->cargar($result);
-        }
-        // Si no hay mas resultados, entonces terminó bien.
-        if (AI_Error::isError($err)
-                and $err->getCode() == AIERROR_NO_RESULTADOS) {
-            return true;
-        }
-        // Si no, se devuelve el error.
-        return $err;
-    }
-    // -X2C
-
-    // +X2C Operation 501
-    /**
-     * @return Servicio
-     * @access public
-     */
-    function __clone() // ~X2C
-    {
-        return $this;
-    }
-    // -X2C
 
 } // -X2C Class :AI_Servicio
 
diff --git a/lib/AI/Sistema.ini b/lib/AI/Sistema.ini
new file mode 100644 (file)
index 0000000..c9ec62f
--- /dev/null
@@ -0,0 +1,5 @@
+; $Id$
+
+base  = intranet
+tabla = sistema
+id    = sistema
index 84a074e0f8768230053eb22617205c705af6c86f..05f2559735967806d176f5515463ecbfee739051 100644 (file)
 // $Id$
 //
 
+// +X2C includes
+require_once 'AI/DBObject.php';
+// ~X2C
+//
 require_once 'AI/Error.php';
 // TODO - preguntar a gmeray si le sirve, yo no lo uso...
 require_once 'SAMURAI/Sistema.php';
@@ -38,9 +42,10 @@ require_once 'SAMURAI/Sistema.php';
  * @package AI
  * @access public
  */
-class AI_Sistema {
+class AI_Sistema extends AI_DBObject {
     /**
      * ID del sistema (ID en SAMURAI).
+FIXME - preguntar a gonzalo si le sirve.
      *
      * @var    int $sistema
      * @access public
@@ -49,6 +54,7 @@ class AI_Sistema {
 
     /**
      * Nombre del sistema (slo de lectura, extra?o de SAMURAI).
+FIXME - preguntar a gonzalo si le sirve.
      *
      * @var    string $nombre
      * @access public
@@ -66,10 +72,10 @@ class AI_Sistema {
     /**
      * ?ono del sistema.
      *
-     * @var    HTML_Imagen $icono
+     * @var    string $icono
      * @access public
      */
-    var $icono = null;
+    var $icono = '';
 
     /**
      * Enlace a donde se encuentra el sistema.
@@ -106,52 +112,7 @@ class AI_Sistema {
      */
     function AI_Sistema($sistema = 0) // ~X2C
     {
-        $this->sistema = $sistema;
-    }
-    // -X2C
-
-    // +X2C Operation 460
-    /**
-     * @param  mixed $db Base de datos o Resultado a utilizar.
-     *
-     * @return PEAR_Error
-     * @access public
-     */
-    function cargar($db) // ~X2C
-    {
-        $sistema = intval($this->sistema);
-        if (is_a($db, 'db_result')) {
-            $result = $db;
-        // Si no es un resultado, hago el query.
-        } else {
-            $result = $db->query(
-                "SELECT *
-                    FROM sistema
-                    WHERE sistema = $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 [sistema=$sistema]");
-        }
-        // Asigno valores al objeto.
-        extract($row);
-        $this->sistema    = $sistema;
-        $this->icono      = $icono;
-        $this->link       = $link;
-        $this->link_ayuda = $link_ayuda;
-        $this->habilitado = $habilitado;
-        // Obtengo datos de SAMURAI. FIXME - preguntar a marrese por manejo de errores.
-        // TODO - preguntar a gmeray si le sirve, yo no lo uso...
-        #$sist = new SAMURAI_Sistema($db, $sistema);
-        #$this->nombre       = $sist->getNombre();
-        #$this->descripcion  = $sist->getDescripcion();
-        return true;
+        parent::AI_DBObject($sistema, dirname(__FILE__) . '/Sistema.ini');
     }
     // -X2C
 
@@ -165,67 +126,16 @@ class AI_Sistema {
      */
     function guardar($db, $nuevo = false) // ~X2C
     {
-        $sistema = intval($this->sistema);
-        $where    = '';
-        $datos    = array(
+        $datos = array(
             'icono'      => $this->icono,
             'link'       => $this->link,
             'link_ayuda' => $this->link_ayuda,
             'habilitado' => $this->habilitado ? 1 : 0,
         );
-        if ($sistema and !$nuevo) {
-            $accion = DB_AUTOQUERY_UPDATE;
-            $where  = "sistema = $sistema";
-        } else {
-            $accion = DB_AUTOQUERY_INSERT;
-            // Si no tiene ID, le asigno uno nuevo.
-            if (!$sistema) {
-                $sistema = $db->nextId('sistema');
-                if (DB::isError($sistema)) {
-                    return $sistema;
-                }
-                $this->sistema = $sistema;
-            }
-            $datos['sistema'] = $sistema;
-        }
-        $res = $db->autoExecute('sistema', $datos, $accion, $where);
-        if (DB::isError($res)) {
-            return $res;
-        }
-        return true;
-    }
-    // -X2C
-
-    // +X2C Operation 461
-    /**
-     * @param  DB $db DB de donde borrar.
-     *
-     * @return PEAR_Error
-     * @access public
-     */
-    function borrar($db) // ~X2C
-    {
-        $sistema = intval($this->sistema);
-        if ($sistema) {
-            $res = $db->query(
-                "DELETE FROM sistema WHERE sistema = $sistema");
-            if (DB::isError($res)) {
-                return $res;
-            }
-            return true;
+        $err = parent::guardar($db, $datos, $nuevo);
+        if (PEAR::isError($err)) {
+            return $err;
         }
-        return PEAR::raiseError("No hay un sistema válido para borrar");
-    }
-    // -X2C
-
-    // +X2C Operation 502
-    /**
-     * @return Sistema
-     * @access public
-     */
-    function __clone() // ~X2C
-    {
-        return $this;
     }
     // -X2C