]> git.llucax.com Git - mecon/samurai.git/blobdiff - lib/SAMURAI/Sistema.php
Libreria SAMURAI_Perm en Perl casi lista. Falta getObservaciones y verificar que...
[mecon/samurai.git] / lib / SAMURAI / Sistema.php
index 7a8ee4c31b118348bb8d9bb2d6157d9c6befe190..fe7eb7549fb2d352e230a528af9ea69f64545ee6 100644 (file)
@@ -25,7 +25,7 @@
 //
 
 require_once 'PEAR.php';
-require_once 'Samurai_DB.php';
+require_once 'SAMURAI/DB.php';
 require_once 'Date.php';
 
 // +X2C Class 209 :SAMURAI_Sistema
@@ -41,7 +41,7 @@ class SAMURAI_Sistema {
      * @var    int $id
      * @access protected
      */
-    var $_id;
+    var $_id = null;
 
     /**
      * Nombre del sistema.
@@ -49,7 +49,7 @@ class SAMURAI_Sistema {
      * @var    string $nombre
      * @access protected
      */
-    var $_nombre;
+    var $_nombre = null;
 
     /**
      * Descripcion del sistema.
@@ -57,7 +57,7 @@ class SAMURAI_Sistema {
      * @var    string $descripcion
      * @access protected
      */
-    var $_descripcion;
+    var $_descripcion = null;
 
     /**
      * Fecha en la cual se inicio el sistema.
@@ -65,7 +65,7 @@ class SAMURAI_Sistema {
      * @var    date $fecha_inicio
      * @access protected
      */
-    var $_fecha_inicio;
+    var $_fecha_inicio = null;
 
     /**
      * Fecha en la cual se dio por terminado el desarrollo del sistema.
@@ -73,7 +73,7 @@ class SAMURAI_Sistema {
      * @var    date $fecha_fin
      * @access protected
      */
-    var $_fecha_fin;
+    var $_fecha_fin = null;
 
     /**
      * Fecha de implementacion del sistema.
@@ -81,7 +81,7 @@ class SAMURAI_Sistema {
      * @var    date $fecha_implementacion
      * @access protected
      */
-    var $_fecha_implementacion;
+    var $_fecha_implementacion = null;
 
     /**
      * Texto con los datos del o de los contacto/s en el area usuario.
@@ -89,7 +89,7 @@ class SAMURAI_Sistema {
      * @var    string $contacto
      * @access protected
      */
-    var $_contacto;
+    var $_contacto = null;
 
     /**
      * Objeto Samurai_DB
@@ -105,7 +105,7 @@ class SAMURAI_Sistema {
      * @var    string $responsable
      * @access protected
      */
-    var $_responsable;
+    var $_responsable = null;
 
     /**
      * Array asociativo (id - descripcion) con los permisos asociados al sistema.
@@ -113,7 +113,7 @@ class SAMURAI_Sistema {
      * @var    array $permisos
      * @access protected
      */
-    var $_permisos;
+    var $_permisos = null;
 
     /**
      * Array con los permisos asociados al sistema
@@ -121,7 +121,15 @@ class SAMURAI_Sistema {
      * @var    array $asociaciones
      * @access protected
      */
-    var $_asociaciones;
+    var $_asociaciones = null;
+
+    /**
+     * indica si el sistema esta activo o no.
+     *
+     * @var    int $estado
+     * @access protected
+     */
+    var $_estado = 1;
 
     /**
      * Gets Asociaciones.
@@ -146,6 +154,29 @@ class SAMURAI_Sistema {
         $this->_asociaciones = $asociaciones;
     }
 
+    /**
+     * Gets Estado.
+     *
+     * @return int
+     * @access public
+     */
+    function getEstado()
+    {
+        return $this->_estado;
+    }
+    /**
+     * Sets Estado.
+     *
+     * @param  int $estado Estado.
+     *
+     * @return void
+     * @access public
+     */
+    function setEstado($estado)
+    {
+        $this->_estado = $estado;
+    }
+
     // ~X2C
 
     // +X2C Operation 243
@@ -165,16 +196,6 @@ class SAMURAI_Sistema {
         if (!is_null($id)) {
             $this->_obtenerDatosDb();
         }
-        else {
-            $this->setNombre();
-            $this->setDescripcion(); 
-            $this->setFechaInicio();
-            $this->setFechaFin();
-            $this->setFechaImplementacion();
-            $this->setContacto();
-            $this->setResponsable();
-            $this->setPermisos();
-        }
     }
     // -X2C
 
@@ -399,7 +420,7 @@ class SAMURAI_Sistema {
      */
     function _obtenerDatosDb() // ~X2C
     {
-        $sql = include 'Sistema/consultas.php'; //Incluyo las consultas de este objeto nada mas.
+        $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
         $tmp = $sql['obtener_datos_sistema'].$sql['obtener_datos_sistema2'];
         $dbh = $this->_db->prepare($tmp);
         $tmp = array ($this->getId());
@@ -409,44 +430,26 @@ class SAMURAI_Sistema {
             if (isset($re['nombre_sistema'])) {
                 $this->setNombre($re['nombre_sistema']);
             }
-            else {
-                $this->setNombre();
-            }
             if (isset($re['desc_sistema'])) {
                $this->setDescripcion($re['desc_sistema']);
             }
-            else {
-                $this->setDescripcion();
-            }
             if (isset($re['fecha_inicio'])) {
                 $this->setFechaInicio($re['fecha_inicio']);
             }
-            else {
-                $this->setFechaInicio();
-            }
             if (isset($re['fecha_fin'])) {
                 $this->setFechaFin($re['fecha_fin']);
             }
-            else {
-                $this->setFechaFin();
-            }
             if (isset($re['fecha_implementacion'])) {
                 $this->setFechaImplementacion($re['fecha_implementacion']);
             }
-            else {
-                $this->setFechaImplementacion();
-            }
             if (isset($re['contacto'])) {
                 $this->setContacto($re['contacto']);
             }
-            else {
-                $this->setContacto();
-            }
             if (isset($re['responsable'])) {
                 $this->setResponsable($re['responsable']);
             }
-            else {
-                $this->setResponsable();
+            if (isset($re['estado'])) {
+                $this->setEstado($re['estado']);
             }
         }
         $tmp = $sql['obtener_permisos'];
@@ -469,8 +472,9 @@ class SAMURAI_Sistema {
         $tmp  = array();
         $i = 0;
         while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
-            $tmp[$i]['id']  = $re['0'];
-            $tmp[$i]['obs'] = $re['1'];
+            $tmp[$i]['id']   = $re['0'];
+            $tmp[$i]['obs']  = $re['1'];
+            $tmp[$i]['desc'] = $re['2'];
             $i++;
         }
         $this->_asociaciones = $tmp;
@@ -567,7 +571,7 @@ class SAMURAI_Sistema {
      */
     function getMaxIdSistema() // ~X2C
     {
-        $sql = include 'Sistema/consultas.php';
+        $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
         $dbh = $this->_db->prepare($sql['obtener_max_id_sistemas']);
         $res = $this->_db->execute($dbh);
         $re = $res->fetchrow(DB_FETCHMODE_ASSOC);
@@ -600,9 +604,9 @@ class SAMURAI_Sistema {
                     'fecha_implementacion'  => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
                     'contacto'              => $this->getContacto(),
                     'responsable'           => $this->getResponsable(),
-                    'estado'                => 1
+                    'estado'                => $this->getEstado()
                 );                
-        $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_INSERT);
+        $res = $this->_db->autoExecute('samurai.sistema', $datos, DB_AUTOQUERY_INSERT);
         
         if (PEAR::isError($res)) {
             return $res;
@@ -612,6 +616,7 @@ class SAMURAI_Sistema {
         if (PEAR::isError($res)) {
             return $res;
         }
+        $this->_id = $idSistema;
     }
     // -X2C
 
@@ -630,15 +635,13 @@ class SAMURAI_Sistema {
         $datos = array( 'responsable' => $responsable,
                         'estado'      => 0
                 );                
-        $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
+        $res = $this->_db->autoExecute('samurai.sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
         if (PEAR::isError($res)) {
             return $res;
         }
-        //Borro los permisos que tiene asignado el sistema
-        //Borro absolutamente todos los permisos que tiene asociado -> No hay vuelta a atras
-        $res = $this->_borrarPermisosDb($idSistema);
-        if (PEAR::isError($res)) {
-            return $res;
+
+        if ($idSistema == @$_SESSION['samurai']['id_sistema']){
+            $_SESSION['samurai']['id_sistema'] = '';
         }
     }
     // -X2C
@@ -667,8 +670,9 @@ class SAMURAI_Sistema {
                     'fecha_implementacion'  => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
                     'contacto'              => $this->getContacto(),
                     'responsable'           => $this->getResponsable(),
+                    'estado'                => $this->getEstado()
                 );                
-        $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
+        $res = $this->_db->autoExecute('samurai.sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
         if (PEAR::isError($res)) {
             return $res;
         }
@@ -698,10 +702,10 @@ class SAMURAI_Sistema {
     function _grabarPermisosDb($idSistema) // ~X2C
     {
         $datos = array ('id_permiso','id_sistema','responsable');
-        $re = $this->_db->autoPrepare('perm_sist', $datos, DB_AUTOQUERY_INSERT);
+        $re = $this->_db->autoPrepare('samurai.perm_sist', $datos, DB_AUTOQUERY_INSERT);
         if (isset($this->_permisos)) {
             foreach ($this->_permisos as $permiso) {
-                $datos = array ($permiso['0'], $idSistema, $this->getResponsable());
+                $datos = array ($permiso, $idSistema, $this->getResponsable());
                 $res = $this->_db->execute($re, $datos);
                 if (PEAR::isError($res)) {
                     return $res;
@@ -725,7 +729,7 @@ class SAMURAI_Sistema {
      */
     function _borrarPermisosDb($idSistema, $observaciones = null, $idPermiso = null) // ~X2C
     {
-        $sql = include 'Sistema/consultas.php';
+        $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
         $datos[] = $idSistema;
         $tmp = $sql['borrar_permisos']; 
         if (isset($observaciones)) {
@@ -757,7 +761,6 @@ class SAMURAI_Sistema {
      */
     function guardarAsociacion($idPermiso, $observacion = '') // ~X2C
     {
-        $error = true;
         if (!$this->_existeAsociacion($idPermiso, $observacion)) {    
             //Guardo la asociacion
             //Grabo el sistema        
@@ -767,12 +770,14 @@ class SAMURAI_Sistema {
                         'observaciones' => $observacion,
                         'responsable'   => $this->getResponsable(),
                     );                
-            $res = $this->_db->autoExecute('perm_sist', $datos, DB_AUTOQUERY_INSERT);
+            $res = $this->_db->autoExecute('samurai.perm_sist', $datos, DB_AUTOQUERY_INSERT);
             //Recargo los datos del sistema
             $this->_obtenerDatosDb();
-            $error = false;
+            return null;
+        }
+        else {
+            return new PEAR_Error('La Asociacion ya existe.'); 
         }
-        return $error;
     }
     // -X2C
 
@@ -788,12 +793,74 @@ class SAMURAI_Sistema {
      */
     function eliminarAsociacion($idPermiso, $observacion = '') // ~X2C
     {
-        $error = false;
-        //Elimino la asociacion
-        $this->_borrarPermisosDb($this->getId(), $observacion, $idPermiso);
+        //TODO Arreglar el asco este 
+        $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
+        $res = '';
+        //Obtengo los id de los perfiles del permiso en el sistema
+        $tmp = $sql['ea_obt_idperfil']; 
+        $dbh = $this->_db->prepare($tmp);
+        $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
+        if (PEAR::isError($res)) {
+            return $res;
+        }
+        $i = 0;
+        $tmp = '';
+        while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
+            $tmp[] = $re['0'];
+            $i++;
+        }
+        $PERFILES = $tmp;
+        //Borro el permiso de los perfiles del sistema
+        $tmp = $sql['ea_del_perm_perfil_sist']; 
+        $dbh = $this->_db->prepare($tmp);
+        $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
+        if (PEAR::isError($res)) {
+            return $res;
+        }
+        //Verifico si era el unico permiso de cada uno de los perfiles en los que estaba asignado
+        if (@$PERFILES) {
+            foreach ($PERFILES as $perfil) {
+                //Cuento
+                $tmp = $sql['ea_obt_cuenta_perfil']; 
+                $dbh = $this->_db->prepare($tmp);
+                $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
+                if (($re  = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0) {
+                    //Borro perfil_sist 
+                    $tmp = $sql['ea_del_perfil_sist']; 
+                    $dbh = $this->_db->prepare($tmp);
+                    $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
+                    if (PEAR::isError($res)) {
+                        return $res;
+                    }
+                    //Borro perfil_sist_usuario
+                    $tmp = $sql['ea_del_perfil_sist_usuario']; 
+                    $dbh = $this->_db->prepare($tmp);
+                    $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
+                    if (PEAR::isError($res)) {
+                        return $res;
+                    }
+                    //Verifico si hay otro sistema usando este perfil
+                    $tmp = $sql['ea_obt_cuenta_perfil_sist']; 
+                    $dbh = $this->_db->prepare($tmp);
+                    $res = $this->_db->execute($dbh, array ($perfil));
+                    if (($re  = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0){
+                        $tmp = $sql['ea_del_perfil']; 
+                        $dbh = $this->_db->prepare($tmp);
+                        $res = $this->_db->execute($dbh, array ($perfil));
+                        if (PEAR::isError($res)) {
+                            return $res;
+                        }
+                    }
+                }
+            }
+        }
+        //Borro la asociacion perm_sist
+        $res = $this->_borrarPermisosDb($this->getId(), $observacion, $idPermiso);
+        if (PEAR::isError($res)) {
+            return $res;
+        }
         //Recargo los datos del sistema
         $this->_obtenerDatosDb();
-        return $error;
     }
     // -X2C
 
@@ -802,16 +869,14 @@ class SAMURAI_Sistema {
      * Actualiza los datos de la asociacion en la base de datos.
      *
      * @param  int $idPermiso Identificador del permiso
-     * @param  int $idPermiso_ant Identificador del permiso anterior
      * @param  string $observacion Observacion a insertar
      * @param  string $obs_ant Observacion anterior
      *
      * @return bool
      * @access public
      */
-    function modificarAsociacion($idPermiso, $idPermiso_ant, $observacion = '', $obs_ant = '') // ~X2C
+    function modificarAsociacion($idPermiso, $observacion = '', $obs_ant = '') // ~X2C
     {
-        $error = true;
         //Busco la nueva asociacion
         if (!$this->_existeAsociacion($idPermiso, $observacion)) {    
             //Actualizo la asociacion
@@ -821,16 +886,18 @@ class SAMURAI_Sistema {
                         'observaciones' => $observacion,
                         'responsable'   => $this->getResponsable(),
                     );                
-            $this->_db->autoExecute('perm_sist', 
+            $this->_db->autoExecute('samurai.perm_sist', 
                                     $datos, 
                                     DB_AUTOQUERY_UPDATE, 
-                                    'id_sistema = '.$this->getId().' AND id_permiso = '.$idPermiso_ant.' AND observaciones =\''.$obs_ant.'\'');
+                                    'id_sistema = '.$this->getId().' AND id_permiso = '.$idPermiso.' AND observaciones =\''.$obs_ant.'\'');
 
             //Recargo los datos del sistema
             $this->_obtenerDatosDb();
-            $error = false;
+            return null;
+        }
+        else {
+            return new PEAR_Error('La Asociacion ya existe.'); 
         }
-        return $error;
     }
     // -X2C
 
@@ -846,7 +913,7 @@ class SAMURAI_Sistema {
      */
     function _existeAsociacion($idPermiso, $observacion) // ~X2C
     {
-        $sql = include 'Sistema/consultas.php'; //Incluyo las consultas de este objeto nada mas.
+        $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
         $tmp = $sql['obtener_permisos'].$sql['obtener_permisos3'].$sql['obtener_permisos4'];
         $dbh = $this->_db->prepare($tmp);
         $tmp = array ($this->getId(),$idPermiso,$observacion);
@@ -867,15 +934,16 @@ class SAMURAI_Sistema {
      * Devuelve el array de sistemas
      *
      * @param  SAMURAI_DB &$db Base de Datos
+     * @param  bool $activos Indica si se deben buscar solamente los sistemas activos
      *
      * @return array(Sistema)
      * @access public
      * @static
      */
-    function getSistemas(&$db) // ~X2C
+    function getSistemas(&$db, $activos = true) // ~X2C
     {
         $rta = array ();
-        foreach (SAMURAI_Sistema::_getIdSistemas($db) as $id) {
+        foreach (SAMURAI_Sistema::_getIdSistemas($db, $activos) as $id) {
             $tmp = new SAMURAI_Sistema($db,$id);
             array_push($rta, $tmp);
         }
@@ -888,17 +956,23 @@ class SAMURAI_Sistema {
      * Devuleve un array con los identificadores de todos los sistemas.
      *
      * @param  SAMURAI_DB &$db Base de Datos
+     * @param  bool $activos Indica si se deben buscar solamente los sistemas activos
      *
      * @return array(int)
      * @access protected
      * @static
      */
-    function _getIdSistemas(&$db) // ~X2C
+    function _getIdSistemas(&$db, $activos = true) // ~X2C
     {
         //OBTENGO LOS ID DE LA BASE
         $rta = array();
         $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
-        $dbh = $db->prepare($sql['obtener_datos_sistema'].$sql['obtener_datos_sistema3']);
+        $consulta = $sql['obtener_datos_sistema']; 
+        if (@$activos) {
+            $consulta.= $sql['obtener_datos_sistema3'];
+        }
+        $consulta.= $sql['obtener_datos_sistema4'];
+        $dbh = $db->prepare($consulta);
         $res = $db->execute($dbh);
         while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
             array_push($rta,$re['id_sistema']);
@@ -913,21 +987,68 @@ class SAMURAI_Sistema {
      * Devuelve un array asociativo en donde la clave es el identificador y el valor es el nombre del sistema
      *
      * @param  SAMURAI_DB &$db Base de Datos
+     * @param  bool $activos Indica si se deben buscar solamente los sistemas activos
      *
      * @return array()
      * @access public
      * @static
      */
-    function getArraySistemas(&$db) // ~X2C
+    function getArraySistemas(&$db, $activos = true) // ~X2C
     {
         $rta = array ();
-        foreach (SAMURAI_Sistema::getSistemas($db) as $sistema) {
+        foreach (SAMURAI_Sistema::getSistemas($db, $activos) as $sistema) {
             $rta[$sistema->getId()] = $sistema->getNombre();
         }
         return $rta;
     }
     // -X2C
 
+    // +X2C Operation 397
+    /**
+     * Devuelve un array asociativo en donde la clave es el identificador y el valor es el nombre del sistema. Solo devuelve aquellos sistemas en los cuales el usuario tiene permisos.
+     *
+     * @param  DB &$DB Conexion a la base de datos
+     *
+     * @return array()
+     * @access public
+     */
+    function getArraySistemasSeleccionar(&$DB) // ~X2C
+    {
+        $rta = array();
+        $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
+        //Verifico si tiene permiso developer en samurai
+        $consulta = $sql['sistemas_seleccionar2'];
+        $dbh = $DB->prepare($consulta);
+        $res = $DB->execute($dbh, array(SAMURAI_PERM, $_SESSION['usuario'],
+                    SAMURAI_PERM_DEVELOPER));
+        $re = $res->fetchrow(DB_FETCHMODE_ASSOC);
+        if ($re['cuenta']) {
+            $consulta = $sql['obtener_datos_sistema']; 
+            $consulta.= $sql['obtener_datos_sistema3'];
+            $consulta.= $sql['obtener_datos_sistema4'];
+            $dbh = $DB->prepare($consulta);
+            $res = $DB->execute($dbh);
+            while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
+                $rta[$re['id_sistema']] = $re['nombre_sistema'];
+            }        
+            $res->free();
+            return $rta;
+        }
+        //Si no tiene permiso developer en samurai le muestro solo aquellos
+        //sistemas en los cuales puede trabajar
+        $consulta = $sql['sistemas_seleccionar'];
+        $dbh = $DB->prepare($consulta);
+        $res = $DB->execute($dbh, array($_SESSION['usuario']));
+        while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
+            $rta[$re['id_sistema']] = $re['nombre_sistema'];
+        }        
+        $res->free();
+        
+        return $rta;
+
+    }
+    // -X2C
+
 } // -X2C Class :SAMURAI_Sistema
 
 ?>