]> git.llucax.com Git - mecon/ai.git/commitdiff
- Se usa el nuevo metodo addMenuVertical() de Marco.
authorLeandro Lucarella <llucax@gmail.com>
Tue, 8 Jul 2003 21:51:30 +0000 (21:51 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Tue, 8 Jul 2003 21:51:30 +0000 (21:51 +0000)
- Se crea una nueva clase HTML_Error (hay que moverla a MECONlib).
- Se arregla el alta de sistemas.
- Se hace más amigable para el usuario el manejo de errores.
- Se implementa un primer intento de lista de íconos en AI_Form.
- Se actualiza el diagrama UML.

doc/uml.xmi
lib/AI/DB.php
lib/AI/Form.php
lib/AI/GrupoSecciones.php
lib/AI/Servicio.php
lib/AI/Sistema.php
sistema/www/index.php

index 01bdac0251156702d757293474a7ef24a1b985a3..264131fe8e5c854c625992a41ef2678a23e80b3f 100644 (file)
@@ -20,6 +20,7 @@
     </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" />
@@ -49,6 +50,7 @@ x2c:get" name="hijos" static="0" scope="202" />
     </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" />
@@ -77,6 +79,7 @@ x2c:include: PEAR.php" name="PEAR_Error" static="0" scope="200" />
     </UML:Operation>
     <UML:Operation stereotype="" package="" xmi.id="497" 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 Grupo de Secciones como nuevo." name="nuevo" static="0" scope="200" />
     </UML:Operation>
     <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" />
@@ -107,7 +110,7 @@ x2c:get" name="hijos" static="0" scope="202" />
    <UML:Class stereotype="" package="" xmi.id="507" abstract="0" documentation="Formularios para el Administrador de Intranet." name="AI_Form" static="0" scope="200" >
     <UML:Operation stereotype="" package="" xmi.id="509" type="void" abstract="0" documentation="Construye un formulario para el objecto especificado." name="iniciar" static="0" scope="200" >
      <UML:Parameter stereotype="" package="" xmi.id="4" value="" type="&amp;object" abstract="0" documentation="Objeto con el cual rellenar el formulario. Puede ser GrupoSecciones, Servicio o Sistema." name="obj" static="0" scope="200" />
-     <UML:Parameter stereotype="" package="" xmi.id="5" value="ALTA" type="int" abstract="0" documentation="Accion que realizará el formulario a crear. Puede ser ALTA, BAJA o MODIFICACION." name="accion" static="0" scope="200" />
+     <UML:Parameter stereotype="" package="" xmi.id="5" value="AI_ALTA" type="int" abstract="0" documentation="Accion que realizará el formulario a crear. Puede ser AI_ALTA, AI_BAJA o AI_MODIFICACION." name="accion" static="0" scope="200" />
     </UML:Operation>
     <UML:Operation stereotype="" package="" xmi.id="510" type="void" abstract="0" documentation="Llena un objeto con los datos del formulario." name="llenarObjeto" static="0" scope="200" >
      <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="&amp;mixed" abstract="0" documentation="Objeto a llenar con los datos del formulario. Puede ser GrupoSecciones, Servicio o Sistema." name="obj" static="0" scope="200" />
@@ -118,34 +121,34 @@ x2c:get" name="hijos" static="0" scope="202" />
   <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" >
     <widgets>
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="199" showattsigs="601" usesdiagramusefillcolour="0" x="270" linecolour="#ff0000" y="20" 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="201" showattsigs="601" usesdiagramusefillcolour="0" x="30" linecolour="#ff0000" y="250" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="154" 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="243" linecolour="#ff0000" y="347" 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="338" linecolour="#ff0000" y="273" 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="228" showattsigs="601" usesdiagramusefillcolour="0" x="30" linecolour="#ff0000" y="20" showopsigs="601" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="210" 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="309" linecolour="#ff0000" y="480" 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="382" linecolour="#ff0000" y="417" 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="254" showattsigs="601" usesdiagramusefillcolour="0" x="29" linecolour="#ff0000" y="481" 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="83" linecolour="#ff0000" y="416" 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="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="154" 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="210" 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="410" 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" />
     </widgets>
     <messages/>
     <associations>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="471" widgetaid="469" documentation="" type="500" >
       <linepath>
-       <startpoint startx="374" starty="347" />
-       <endpoint endx="374" endy="297" />
+       <startpoint startx="433" starty="338" />
+       <endpoint endx="433" endy="288" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="508" widgetaid="507" documentation="" type="500" >
       <linepath>
-       <startpoint startx="156" starty="481" />
-       <endpoint endx="156" endy="440" />
+       <startpoint startx="159" starty="477" />
+       <endpoint endx="159" endy="434" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="504" widgetaid="503" documentation="" type="500" >
       <linepath>
-       <startpoint startx="405" starty="480" />
-       <endpoint endx="405" endy="441" />
+       <startpoint startx="441" starty="477" />
+       <endpoint endx="441" endy="438" />
       </linepath>
      </UML:AssocWidget>
     </associations>
@@ -167,6 +170,7 @@ x2c:get" name="hijos" static="0" scope="202" />
        <listitem open="0" type="815" id="510" label="llenarObjeto" />
       </listitem>
       <listitem open="0" 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="815" id="496" label="cargar" />
@@ -174,7 +178,6 @@ x2c:get" name="hijos" static="0" scope="202" />
        <listitem open="0" type="815" id="500" label="__clone" />
        <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="495" label="AI_GrupoSecciones" />
        <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" />
@@ -183,6 +186,7 @@ x2c:get" name="hijos" static="0" scope="202" />
        <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" />
@@ -197,10 +201,10 @@ x2c:get" name="hijos" static="0" scope="202" />
        <listitem open="0" type="814" id="434" label="necesita_logueo" />
        <listitem open="0" type="814" id="429" label="nombre" />
        <listitem open="0" type="814" id="428" label="servicio" />
-       <listitem open="0" type="815" id="465" label="AI_Servicio" />
        <listitem open="0" type="814" id="452" label="servicio_padre" />
       </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" />
@@ -210,14 +214,13 @@ x2c:get" name="hijos" static="0" scope="202" />
        <listitem open="0" type="814" id="439" label="link" />
        <listitem open="0" type="814" id="440" label="link_ayuda" />
        <listitem open="0" type="814" id="437" label="sistema" />
-       <listitem open="0" type="815" id="466" label="AI_Sistema" />
       </listitem>
      </listitem>
      <listitem open="0" type="807" id="412" label="Clases" />
      <listitem open="0" type="803" id="-1" label="Externo" >
       <listitem open="1" type="813" id="504" label="DB" />
-      <listitem open="0" type="813" id="471" label="PEAR_Error" />
       <listitem open="1" type="813" id="508" label="MECON_HTML_QuickForm" />
+      <listitem open="0" type="813" id="471" label="PEAR_Error" />
      </listitem>
     </listitem>
     <listitem open="1" type="802" id="-1" label="Use Case View" />
index cd66f1d6c42da03fd8ce23adb09200de406d5ee0..4c40826f309b4b2d331f731b076d1fcdc7f47b49 100644 (file)
@@ -71,4 +71,4 @@ class AI_DB extends DB {
 
 } // -X2C Class :AI_DB
 
-?>
+?>
\ No newline at end of file
index 5cc482e6f7b6cac818c9375289415c2d88a183bc..38e9262d7f3c3d290be1f01ecf622837178fb098 100644 (file)
@@ -50,7 +50,7 @@ class AI_Form extends MECON_HTML_QuickForm {
      * Construye un formulario para el objecto especificado.
      *
      * @param  object &$obj Objeto con el cual rellenar el formulario. Puede ser GrupoSecciones, Servicio o Sistema.
-     * @param  int $accion Accion que realizar?el formulario a crear. Puede ser AI_ALTA, AI_BAJA o AI_MODIF.
+     * @param  int $accion Accion que realizar?el formulario a crear. Puede ser AI_ALTA, AI_BAJA o AI_MODIFICACION.
      *
      * @return void
      * @access public
@@ -137,7 +137,9 @@ class AI_Form extends MECON_HTML_QuickForm {
         if ($tipo == 'servicio' or $tipo == 'sistema') {
             $fLink      =& $this->addElement('text', 'link', 'Enlace');
             $fLinkAyuda =& $this->addElement('text', 'link_ayuda', 'Enlace de la ayuda');
-            $fIcono     =& $this->addElement('text', 'icono', 'Ícono');
+            //$fIcono     =& $this->addElement('text', 'icono', 'Ícono');
+            $fIcono     =& $this->addElement('select', 'icono', 'Ícono',
+                listaImagenes('/var/www/sistemas/ai/sistema/www/images', $tipo . '_', '\.gif'));
             // Carga datos.
             if ($accion & (AI_BAJA | AI_MODIF)) {
                 $fLink->setValue($obj->link);
@@ -215,4 +217,16 @@ class AI_Form extends MECON_HTML_QuickForm {
 
 } // -X2C Class :AI_Form
 
+function listaImagenes($dir = '.', $prepend = '', $append = '') {
+    $lista = array('' => '--');
+    $d = dir($dir);
+    while (($file = $d->read()) !== false) {
+        if (preg_match("/$prepend(.*)$append/", $file, $m)) {
+            $nombre = ucwords(join(' ', preg_split('/_/', $m[1])));
+            $lista[$file] = $nombre;
+        }
+    }
+    return $lista;
+}
+
 ?>
index 5914549768e53218991e2388e657588a92a6e404..23fa14a5edcc545a9f3beaa8cd12debf21f3ce96 100644 (file)
@@ -184,11 +184,12 @@ class AI_GrupoSecciones {
     // +X2C Operation 497
     /**
      * @param  DB $db DB donde guardar.
+     * @param  bool $nuevo Si es true, se fuerza a guardar el Grupo de Secciones como nuevo.
      *
      * @return PEAR_Error
      * @access public
      */
-    function guardar($db) // ~X2C
+    function guardar($db, $nuevo = false) // ~X2C
     {
         $grupo = intval($this->grupo);
         $where = '';
@@ -199,17 +200,19 @@ class AI_GrupoSecciones {
             'antiguedad'    => intval($this->antiguedad),
             'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0,
         );
-        if ($grupo) {
+        if ($grupo and !$nuevo) {
             $accion = DB_AUTOQUERY_UPDATE;
             $where  = "grupo = $grupo";
         } else {
             $accion = DB_AUTOQUERY_INSERT;
-            $grupo  = $db->nextId('grupo_secciones');
-            if (DB::isError($grupo)) {
-                return $grupo;
+            // Si no tiene ID, le asigno uno nuevo.
+            if (!$grupo) {
+                $grupo = $db->nextId('grupo_secciones');
+                if (DB::isError($grupo)) {
+                    return $grupo;
+                }
+                $this->grupo = $grupo;
             }
-            // Asigno el nuevo id de grupo.
-            $this->grupo = $grupo;
             $datos['grupo'] = $grupo;
         }
         $res = $db->autoExecute('grupo_secciones', $datos, $accion, $where);
@@ -304,4 +307,4 @@ class AI_GrupoSecciones {
 
 } // -X2C Class :AI_GrupoSecciones
 
-?>
\ No newline at end of file
+?>
index d4bcf0a5204eec06001e489819ada0be7913d8f3..b03c5a2c3a7a098225353ae261ff650f0c7a71f8 100644 (file)
@@ -188,11 +188,12 @@ class AI_Servicio {
     // +X2C Operation 458
     /**
      * @param  DB $db DB donde guardar.
+     * @param  bool $nuevo Si es true, se fuerza a guardar el Servicio como nuevo.
      *
      * @return PEAR_Error
      * @access public
      */
-    function guardar($db) // ~X2C
+    function guardar($db, $nuevo = false) // ~X2C
     {
         $servicio = intval($this->servicio);
         $where    = '';
@@ -206,17 +207,19 @@ class AI_Servicio {
             'necesita_logueo'   => $this->necesita_logueo ? 1 : 0,
             'habilitado'        => $this->habilitado ? 1 : 0,
         );
-        if ($servicio) {
+        if ($servicio and !$nuevo) {
             $accion = DB_AUTOQUERY_UPDATE;
             $where  = "servicio = $servicio";
         } else {
-            $accion   = DB_AUTOQUERY_INSERT;
-            $servicio = $db->nextId('servicio');
-            if (DB::isError($servicio)) {
-                return $servicio;
+            $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;
             }
-            // Asigno el nuevo id de servicio.
-            $this->servicio    = $servicio;
             $datos['servicio'] = $servicio;
         }
         $res = $db->autoExecute('servicio', $datos, $accion, $where);
index 7a547765feb1c2d5629e0548bea6cf23ebe6c733..db067010a70ed9411ee868f7b4540d6bdace31d9 100644 (file)
@@ -135,11 +135,12 @@ class AI_Sistema {
     // +X2C Operation 459
     /**
      * @param  DB $db DB donde guardar.
+     * @param  bool $nuevo Si es true, se fuerza a guardar el servicio como nuevo.
      *
      * @return PEAR_Error
      * @access public
      */
-    function guardar($db) // ~X2C
+    function guardar($db, $nuevo = false) // ~X2C
     {
         $sistema = intval($this->sistema);
         $where    = '';
@@ -149,18 +150,19 @@ class AI_Sistema {
             'link_ayuda' => $this->link_ayuda,
             'habilitado' => $this->habilitado ? 1 : 0,
         );
-        // FIXME - buscar otra forma de distinguir entre INSERT y UPDATE.
-        if ($sistema) {
+        if ($sistema and !$nuevo) {
             $accion = DB_AUTOQUERY_UPDATE;
             $where  = "sistema = $sistema";
         } else {
-            $accion  = DB_AUTOQUERY_INSERT;
-            $sistema = $db->nextId('sistema');
-            if (DB::isError($sistema)) {
-                return $sistema;
+            $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;
             }
-            // Asigno el nuevo id de sistema.
-            $this->sistema    = $sistema;
             $datos['sistema'] = $sistema;
         }
         $res = $db->autoExecute('sistema', $datos, $accion, $where);
index 5b5c97e8fd8e8c2f417d024a4a79fb45395e2bd1..4e88fabf51871a18ff8991cc046cb7529daf12d7 100644 (file)
 
 // Debug. {{{
 require_once 'PEAR.php';
-PEAR::setErrorHandling(PEAR_ERROR_TRIGGER);
+#PEAR::setErrorHandling(PEAR_ERROR_TRIGGER);
+PEAR::setErrorHandling(PEAR_ERROR_RETURN);
+// }}}
+
+// Clase de error HTML (para mostrar errores) TODO - ver si se pasa a meconlib {{{
+class HTML_Error {
+    var $msg = '';
+    function HTML_Error($msg) {
+        $this->msg = $msg;
+    }
+    function toHtml() {
+        return '<DIV style="font-size: 11px; text-align: center; color: red">' . $this->msg . '</DIV>';
+    }
+}
 // }}}
 
 // Creo el Marco. {{{
@@ -37,25 +50,7 @@ require_once 'MECON/Marco.php';
 $marco = new Marco('../conf/Marco.php');
 // }}}
 
-// Agrego una barra al costado con el listado de objetos (XXX - va a ir en Marco). {{{
-require_once 'HTML/Table.php';
-$layout = new HTML_Table(
-    array(
-        'width'         => '100%',
-        'align'         => 'center',
-        'valign'        => 'top',
-        'border'        => 0,
-        'cellspacing'   => 0,
-        'cellpadding'   => 0,
-    )
-);
-$layout->setAutoGrow(true);
-$layout->setCellAttributes(0, 0, array('width' => '1'));
-$layout->setCellAttributes(0, 1, array('width' => '10'));
-$layout->setCellContents(0, 1, '&nbsp;');
-// }}}
-
-// Averiguo si estoy administrando algún tipo de objeto. {{{
+// Averiguo si estoy administrando algún tipo de objeto. XXX - desafear {{{
 $tipo = null;
 if (@$_SERVER['PATH_INFO']) {
     $tmp = ltrim($_SERVER['PATH_INFO'], '/');
@@ -64,23 +59,26 @@ if (@$_SERVER['PATH_INFO']) {
         $clase   = "AI_GrupoSecciones";
         $require = 'AI/GrupoSecciones.php';
         $tabla   = 'grupo_secciones';
+        $nombre  = "grupo de secciones";
     } elseif ($tmp == 'servicio') {
         $tipo    = $tmp;
         $clase   = 'AI_Servicio';
         $require = 'AI/Servicio.php';
         $tabla   = $tipo;
+        $nombre  = $tipo;
     } elseif ($tmp == 'sistema') {
         $tipo    = $tmp;
         $clase   = 'AI_Sistema';
         $require = 'AI/Sistema.php';
         $tabla   = $tipo;
+        $nombre  = $tipo;
     } else { // No hay un objeto válido para administrar.
         header('Location: '.$_SERVER['SCRIPT_NAME']);
     }
 }
 // }}}
 
-// Si tiene un tipo, estamos editando algo. {{{
+// Si tiene un tipo, estamos administrando algun objeto. {{{
 if ($tipo) {
 
     // Creo formulario. {{{
@@ -94,7 +92,7 @@ if ($tipo) {
     $obj->$tipo = @$_REQUEST['id'];
     // }}}
 
-    // Verifico que la acción sea válida. {{{
+    // Verifico que la acción sea válida y si no lo es hago que sea un alta. {{{
     switch(@$_REQUEST['accion']) {
         case AI_BAJA:
         case AI_MODIF:
@@ -105,7 +103,7 @@ if ($tipo) {
     }
     // }}}
 
-    // Verifico si ya se envio el formulario. {{{
+    // Modifico la acción si ya se envió el formulario. {{{
     $botones = $form->getSubmitValue('botones');
     if ($boton = @join('', array_keys($botones))) {
         $boton = $boton . '_' . strtolower($botones[$boton]);
@@ -152,57 +150,69 @@ if ($tipo) {
     }
     // }}}
 
-    // Freezo de ser necesario. {{{
+    // Freezo el formulario si se está confirmando. {{{
     if (@$a_confirmar) {
         $form->freeze();
     }
     // }}}
 
-    // Me fijo si se cargo un formulalrio y si es válido hago el ABM. {{{
+    // Si los datos del formulario son válidos, hago el ABM. {{{
     if ($form->validate()) {
-
         switch ($accion) {
             case AI_ALTA: // {{{
                 $form->llenarObjeto($obj);
-                $err =& $obj->guardar($db);
+                $err =& $obj->guardar($db, true);
                 if (PEAR::isError($err)) {
-                    die($err->getMessage());
+                    if (DB::isError($err) and $err->getCode() == DB_ERROR_ALREADY_EXISTS) {
+                        $error = new HTML_Error("Ya existe un $nombre con el identificador "
+                            . $obj->$tipo);
+                    } else {
+                        $error = new HTML_Error('Error no esperado: ' . $err->getMessage());
+                    }
+                    $marco->addBody($error);
+                } else {
+                    header(sprintf('Location: %s?accion=%d&id=%d',
+                        $tipo, AI_MODIF, $obj->$tipo));
+                    exit;
                 }
-                header(sprintf('Location: %s?accion=%d&id=%d',
-                    $tipo, AI_MODIF, $obj->$tipo));
-                exit;
                 break;
-                // }}}
+            // }}}
             case AI_BAJA: // {{{
                 if (!@$a_confirmar) {
                     $form->llenarObjeto($obj);
                     $err =& $obj->borrar($db);
                     if (PEAR::isError($err)) {
-                        die($err->getMessage());
+                        $error = new HTML_Error('Error no esperado: ' . $err->getMessage());
+                        $marco->addBody($error);
+                    } else {
+                        header("Location: $tipo");
+                        exit;
                     }
-                    header("Location: $tipo");
-                    exit;
                 }
                 break;
-                // }}}
+            // }}}
             case AI_MODIF: // {{{
                 if (!@$cancelado) {
                     $form->llenarObjeto($obj);
                     $err =& $obj->guardar($db);
                     if (PEAR::isError($err)) {
-                        die($err->getMessage());
+                        $error = new HTML_Error('Error no esperado: ' . $err->getMessage());
+                        $marco->addBody($error);
+                    } else {
+                        header(sprintf('Location: %s?accion=%d&id=%d',
+                            $tipo, AI_MODIF, $obj->$tipo));
+                        exit;
                     }
-                    header(sprintf('Location: %s?accion=%d&id=%d',
-                        $tipo, AI_MODIF, $obj->$tipo));
-                    exit;
                 }
                 break;
-                // }}}
+            // }}}
         }
     }
     // }}}
 
-    // Creo el árbol con el tipo de objeto que manejo. {{{
+    // Agrego el menu y el formulario a la página. {{{
+
+    // Creo el árbol con el tipo de objeto que manejo y lo agrego a la página. {{{
     require_once 'MECON/HTML/Arbol/ArbolDB.php';
     $dbdata = array(
         'db'            => &$db,
@@ -216,16 +226,18 @@ if ($tipo) {
         $dbdata['id_padre'] = $tipo . '_padre';
     }
     $arbol = new HTML_ArbolDB($dbdata, '/MECON/images/arbol_noticias.gif');
+    $marco->addMenuVertical($arbol);
     // }}}
 
-    // Agrego al cuerpo de la página las cosas que voy a dibujar. {{{
-    $layout->setCellContents(0, 0, $arbol);
-    $layout->setCellContents(0, 2, $form);
-    $marco->addBody($layout);
+    // Agrego el formulario a la página. {{{
+    $marco->addBody($form);
     // }}}
+
+    // }}}
+
 // }}}
 
-// No se está editando nada, agrego al cuerpo de la página la pantalla de entrada {{{
+// No se está editando nada, agrego la imágen de bienvenida a la página. {{{
 } else {
     require_once 'HTML/Image.php';
     $marco->setEspacios(false);
@@ -233,7 +245,7 @@ if ($tipo) {
 }
 // }}}
 
-// Dibujo. {{{
+// Muestro la página. {{{
 $marco->display();
 // }}}