X-Git-Url: https://git.llucax.com/mecon/samurai.git/blobdiff_plain/22d1ae1aa6bfee6df20dfa9544e14feaecc9fbf4..HEAD:/lib/SAMURAI/Perfil.php diff --git a/lib/SAMURAI/Perfil.php b/lib/SAMURAI/Perfil.php index 776774e..3ddfe55 100644 --- a/lib/SAMURAI/Perfil.php +++ b/lib/SAMURAI/Perfil.php @@ -26,11 +26,10 @@ #require_once 'PEAR.php'; - - // +X2C Class 208 :SAMURAI_Perfil /** * Clase para el manejo de los perfies. +@see \ref page_samurai_html_perfil * * @access public */ @@ -52,16 +51,6 @@ class SAMURAI_Perfil { var $_descripcion; /** - * Tipo de perfil. E = Externo. I = Interno. D = Dios. - * - * @var string $tipo - * @access protected - */ - var $_tipo; - - /** - * Objeto Samurai_DB - * * @var SAMURAI_DB $db * @access protected */ @@ -83,6 +72,14 @@ class SAMURAI_Perfil { */ var $_permisos; + /** + * Identificador del sistema en el cual se esta trabajando + * + * @var int $idSistema + * @access protected + */ + var $_idSistema; + /** * Gets Id. * @@ -129,29 +126,6 @@ class SAMURAI_Perfil { $this->_descripcion = $descripcion; } - /** - * Gets Tipo. - * - * @return string - * @access public - */ - function getTipo() - { - return $this->_tipo; - } - /** - * Sets Tipo. - * - * @param string $tipo Tipo. - * - * @return void - * @access public - */ - function setTipo($tipo) - { - $this->_tipo = $tipo; - } - /** * Gets Responsable. * @@ -206,13 +180,15 @@ class SAMURAI_Perfil { * * @param SAMURAI_DB &$db Objeto conexion * @param int $id Identificador del perfil. + * @param int $idSistema Identificador del sistema en el que se esta trabajando * * @return void * @access public */ - function SAMURAI_Perfil(&$db, $id = null) // ~X2C + function SAMURAI_Perfil(&$db, $id = null, $idSistema = null) // ~X2C { $this->_db = $db; + $this->_idSistema = $idSistema; if (!is_null($id)) { $this->setId($id); $this->_obtenerDatosDb(); @@ -221,7 +197,6 @@ class SAMURAI_Perfil { //INICIALIZO LA VI $this->_id = null; $this->_descripcion = null; - $this->_tipo = null; $this->_permisos = null; } } @@ -255,18 +230,11 @@ class SAMURAI_Perfil { $this->setResponsable(); } } - //OBTENGO EL TIPO DE PERFIL - $tmp = $sql['verificar_asociacion']; - $dbh = $this->_db->prepare($tmp); - $tmp = array ($this->getId(), $_SESSION['samurai']['id_sistema']); - $res = $this->_db->execute($dbh,$tmp); - $re = $res->fetchrow(DB_FETCHMODE_ASSOC); - $this->setTipo($re['tipo_perfil']); //OBTENGO LOS PERMISOS QUE TIENE ASIGNADO EL PERFIL DESDE PERM_PERFIL_SIST $tmp = $sql['obtener_permisos']; $dbh = $this->_db->prepare($tmp); - $tmp = array ($this->getId(), $_SESSION['samurai']['id_sistema']); + $tmp = array ($this->getId(), $this->_idSistema); $res = $this->_db->execute($dbh,$tmp); $rta = array (); while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) { @@ -285,7 +253,7 @@ class SAMURAI_Perfil { * @return mixed * @access public */ - function guardarDatos($accion = grabar) // ~X2C + function guardarDatos($accion = 'grabar') // ~X2C { $accion = strtolower($accion); switch ($accion) { @@ -312,35 +280,39 @@ class SAMURAI_Perfil { */ function _grabarDb() // ~X2C { - //GRABO EN PERFIL + //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); - - //GRABO EN PERM_PERFIL_SIST - $res = $this->_guardarPermisos(); - if (PEAR::isError($res)) { - return $res; - } + $nuevo = 1; + } + + //GRABO EN PERM_PERFIL_SIST + $res = $this->_guardarPermisos(); + if (PEAR::isError($res)) { + return $res; + } + //GRABO EN PERFIL + if ($nuevo) { $datos = array ( 'id_perfil' => $idPerfil, 'desc_perfil' => $this->getDescripcion(), 'responsable' => $this->getResponsable(), ); - $res = $this->_db->autoExecute('perfil', $datos, DB_AUTOQUERY_INSERT); + $res = $this->_db->autoExecute('samurai.perfil', $datos, DB_AUTOQUERY_INSERT); if (PEAR::isError($res)) { return $res; } } //GRABO EN PERFIL_SIST $datos = array ('id_perfil' => $this->getId(), - 'id_sistema' => $_SESSION['samurai']['id_sistema'], - 'tipo_perfil' => $this->getTipo(), + 'id_sistema' => $this->_idSistema, 'responsable' => $this->getResponsable(), ); - $res = $this->_db->autoExecute('perfil_sist', $datos, DB_AUTOQUERY_INSERT); + $res = $this->_db->autoExecute('samurai.perfil_sist', $datos, DB_AUTOQUERY_INSERT); } // -X2C @@ -357,7 +329,7 @@ class SAMURAI_Perfil { //Verifico en perfil_sist_usuario $tmp = $sql['verif_perfil_sist_usuario']; $dbh = $this->_db->prepare($tmp); - $datos = array ($this->getId(), $_SESSION['samurai']['id_sistema']); + $datos = array ($this->getId(), $this->_idSistema); $res = $this->_db->execute($dbh, $datos); if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && !$re['cuenta'] == 0) { return new PEAR_Error("Hay usuarios asociados al perfil seleccionado"); @@ -370,7 +342,7 @@ class SAMURAI_Perfil { //Borro perfil_sist $tmp = $sql['borrar_perfil_sist']; $dbh = $this->_db->prepare($tmp); - $datos = array ($this->getId(), $_SESSION['samurai']['id_sistema']); + $datos = array ($this->getId(), $this->_idSistema); $res = $this->_db->execute($dbh, $datos); if (PEAR::isError($res)) { return $res; @@ -405,13 +377,20 @@ class SAMURAI_Perfil { { //Modifico la tabla perfil_sist $datos = array ( - 'tipo_perfil' => $this->getTipo(), 'responsable' => $this->getResponsable(), ); - $res = $this->_db->autoExecute('perfil_sist', $datos, DB_AUTOQUERY_UPDATE, 'id_perfil ='.$this->getId().' AND id_sistema='.$_SESSION['samurai']['id_sistema']); + $res = $this->_db->autoExecute('samurai.perfil_sist', $datos, + DB_AUTOQUERY_UPDATE, 'id_perfil ='.$this->getId().' AND + id_sistema='.$this->_idSistema); 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)) { @@ -438,15 +417,24 @@ class SAMURAI_Perfil { //OBTENGO LOS ID DE LA BASE $rta = array(); $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true); - $consulta = $sql['obtener_id_perfiles']; if ($id_sistema) { + $consulta = $sql['obtener_id_perfiles']; $consulta.= $sql['obtener_id_perfiles3']; } - if ($filtro) { //Verifico si se paso un filtro + else { + $consulta = $sql['obtener_id_perfiles5']; + } + if ($filtro && $id_sistema) { //Verifico si se paso un filtro $tmp2 = $consulta.$sql['obtener_id_perfiles2']; //Reemplazo el filtro por ##?## $consulta = ereg_replace ('##FILTRO##', $filtro, $tmp2); } + elseif ($filtro) { + $tmp2 = $consulta.$sql['obtener_id_perfiles6']; + //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; @@ -457,7 +445,7 @@ class SAMURAI_Perfil { } while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) { array_push($rta,$re['id_perfil']); - } + } $res->free(); return $rta; } @@ -465,6 +453,8 @@ class SAMURAI_Perfil { // +X2C Operation 339 /** + * Devuelve un array de perfiles + * * @param SAMURAI_DB &$db Base de datos * @param string $filtro Filtro por nombre del perfil * @param int $id_sistema Identificador del sistema @@ -477,7 +467,7 @@ class SAMURAI_Perfil { { $rta = array (); foreach (SAMURAI_Perfil::_getIdPerfiles($db, $filtro, $id_sistema) as $id) { - $tmp = new SAMURAI_Perfil($db,$id); + $tmp = new SAMURAI_Perfil($db,$id, $id_sistema); array_push($rta, $tmp); } return $rta; @@ -490,16 +480,17 @@ class SAMURAI_Perfil { * * @param SAMURAI_DB $db Base de Datos * @param string $filtro Filtro por descripcion del perfil + * @param int $id_sistema Identificador del sistema con el que se esta trabajando * * @return array() * @access public * @static */ - function getArrayPerfiles($db, $filtro = null) // ~X2C + function getArrayPerfiles($db, $filtro = null, $id_sistema = null) // ~X2C { //FORECHEO LO QUE ME DEVUELVA GET PERMISOS $rta = array (); - foreach (SAMURAI_Perfil::getPerfiles($db, $filtro) as $perfil) { + foreach (SAMURAI_Perfil::getPerfiles($db, $filtro, $id_sistema) as $perfil) { $rta[$perfil->getId()] = $perfil->getDescripcion(); } return $rta; @@ -572,30 +563,19 @@ 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 $datos = array ('id_permiso', 'id_perfil', 'id_sistema', 'observaciones', 'responsable'); - $re = $this->_db->autoPrepare('perm_perfil_sist', $datos, DB_AUTOQUERY_INSERT); + $re = $this->_db->autoPrepare('samurai.perm_perfil_sist', $datos, DB_AUTOQUERY_INSERT); foreach ($this->getPermisos() as $permiso) { list($id, $obs) = split ('##',$permiso); - $datos = array ($id, $this->getId(), $_SESSION['samurai']['id_sistema'], $obs, $this->getResponsable()); + $datos = array ($id, $this->getId(), $this->_idSistema, $obs, $this->getResponsable()); $res = $this->_db->execute($re, $datos); if (PEAR::isError($res)) { return $res; @@ -616,11 +596,78 @@ class SAMURAI_Perfil { $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true); $tmp = $sql['borrar_permisos']; $dbh = $this->_db->prepare($tmp); - $tmp = array ($this->getId(), $_SESSION['samurai']['id_sistema']); + $tmp = array ($this->getId(), $this->_idSistema); return $this->_db->execute($dbh,$tmp); } // -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 ($this->_idSistema); + $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, $this->_idSistema); + if ($perf->getDescripcion() != $this->getDescripcion()) { + return new PEAR_Error("El perfil \"".$perf->getDescripcion()."\" contiene los mismos permisos."); + } + } + } + return true; + } + // -X2C + + /** + * Metodo que devuelve los datos necesarios para listar perfiles. + * + * @param SAMURAI_DB &$db Base de Datos + * @param string $filtro Filtro de perfiles + * @param int $id_sistema Identificador del sistema + * + * @return mixed + * @access public + * @static + */ + function getPerfilesPager(&$db, $filtro = null, $id_sistema = null) { + + //@TODO REEMPLAZA A getPerfiles + $where[] = 'p.id_perfil = ps.id_perfil'; + if ($id_sistema) { + $where[] = 'ps.id_sistema = '. $id_sistema; + } + if ($filtro) { + $where[] = 'p.desc_perfil LIKE '. $db->quote("%$filtro%"); + } + + $where = implode (' AND ', $where); + + $sql = " + SELECT p.id_perfil, p.desc_perfil AS descripcion + FROM samurai.perfil AS p, samurai.perfil_sist AS ps + WHERE $where + ORDER BY p.desc_perfil + "; + + return $db->query ($sql); + } + } // -X2C Class :SAMURAI_Perfil ?>