]> git.llucax.com Git - mecon/samurai.git/blobdiff - lib/SAMURAI/Perfil.php
Primera version lista con permisos.
[mecon/samurai.git] / lib / SAMURAI / Perfil.php
index a74a16fd8b8da7bdf6b5556f56b0f3d97c8edc6e..445c01a677d04ff5c3432f88eaa0b7b34efba208 100644 (file)
@@ -26,8 +26,6 @@
 
 #require_once 'PEAR.php';
 
-
-
 // +X2C Class 208 :SAMURAI_Perfil
 /**
  * Clase para el manejo de los perfies.
@@ -313,10 +311,12 @@ class SAMURAI_Perfil {
     function _grabarDb() // ~X2C
     {
         //Obtengo el id del perfil de ser necesario
+        $nuevo = 0;
         if (!$this->getId()) { 
             //No existe el perfil. Lo cargo por primera vez.
             $idPerfil = $this->_db->nextId('perfil');
             $this->setId($idPerfil);       
+            $nuevo = 1;
         }        
        
         //GRABO EN PERM_PERFIL_SIST
@@ -326,7 +326,7 @@ class SAMURAI_Perfil {
         }
 
         //GRABO EN PERFIL
-        if (!$this->getId()) { 
+        if ($nuevo) { 
             $datos = array (
                         'id_perfil'   => $idPerfil,
                         'desc_perfil' => $this->getDescripcion(),
@@ -415,6 +415,12 @@ class SAMURAI_Perfil {
         if (PEAR::isError($res)) {         
             return $res;               
         }
+
+        //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
+        $res = $this->_verifPermisos();
+        if (PEAR::isError($res)) {
+            return $res;
+        }
         //Modifico la tabla perm_perfil_sist
         $res = $this->_borrarPermisos();
         if (PEAR::isError($res)) {         
@@ -450,6 +456,7 @@ class SAMURAI_Perfil {
             //Reemplazo el filtro por ##?##
             $consulta = ereg_replace ('##FILTRO##', $filtro, $tmp2);
         }
+        $consulta.= $sql['obtener_id_perfiles4'];
         $dbh = $db->prepare($consulta);
         if ($id_sistema) { 
             $tmp[] = $id_sistema;
@@ -460,7 +467,7 @@ class SAMURAI_Perfil {
         }
         while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
             array_push($rta,$re['id_perfil']);
-        }        
+        }
         $res->free();
         return $rta;
     }
@@ -575,22 +582,11 @@ class SAMURAI_Perfil {
      */
     function _guardarPermisos() // ~X2C
     {
-        //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
         $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
-        $tmp = $sql['verif_perm_perfil_sist'];
-        $dbh = $this->_db->prepare($tmp);
-        $tmp = array ($_SESSION['samurai']['id_sistema']);
-        $res = $this->_db->execute($dbh,$tmp);
-        $perm = array();
-        while ($re  = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
-            $perm[$re['id_perfil']][] = $re['id_permiso'].'##'.$re['observaciones'];
-        }
-        foreach ($perm as $p) {
-            $rta1 = array_diff($p, $this->getPermisos());
-            $rta2 = array_diff($this->getPermisos(), $p);
-            if (!$rta1 && !$rta2) {
-                return new PEAR_Error("Ya existe un perfil con esos mismos permisos");
-            }
+        //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
+        $res = $this->_verifPermisos();
+        if (PEAR::isError($res)) {
+            return $res;
         }
 
         //GRABO EN PERM_PERFIL_SIST
@@ -624,6 +620,39 @@ class SAMURAI_Perfil {
     }
     // -X2C
 
+    // +X2C Operation 376
+    /**
+     * Verifica si se puede insertar
+     *
+     * @return mixed
+     * @access protected
+     */
+    function _verifPermisos() // ~X2C
+    {
+        //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
+        $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+        $tmp = $sql['verif_perm_perfil_sist'];
+        $dbh = $this->_db->prepare($tmp);
+        $tmp = array ($_SESSION['samurai']['id_sistema']);
+        $res = $this->_db->execute($dbh,$tmp);
+        $perm = array();
+        while ($re  = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
+            $perm[$re['id_perfil']][] = $re['id_permiso'].'##'.$re['observaciones'];
+        }
+        foreach ($perm as $key => $p) {
+            $rta1 = array_diff($p, $this->getPermisos());
+            $rta2 = array_diff($this->getPermisos(), $p);
+            if (!$rta1 && !$rta2) {
+                $perf = new SAMURAI_Perfil($this->_db, $key);
+                if ($perf->getDescripcion() != $this->getDescripcion()) {
+                    return new PEAR_Error("El perfil \"".$perf->getDescripcion()."\" contiene los mismos permisos.");
+                }
+            }
+        }
+        return true;
+    }
+    // -X2C
+
 } // -X2C Class :SAMURAI_Perfil
 
 ?>