// +X2C Class 208 :SAMURAI_Perfil
/**
* Clase para el manejo de los perfies.
+@see \ref page_samurai_html_perfil
*
* @access public
*/
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
*/
*/
var $_permisos;
+ /**
+ * Identificador del sistema en el cual se esta trabajando
+ *
+ * @var int $idSistema
+ * @access protected
+ */
+ var $_idSistema;
+
/**
* Gets Id.
*
$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.
*
*
* @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();
//INICIALIZO LA VI
$this->_id = null;
$this->_descripcion = null;
- $this->_tipo = null;
$this->_permisos = null;
}
}
$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)) {
* @return mixed
* @access public
*/
- function guardarDatos($accion = grabar) // ~X2C
+ function guardarDatos($accion = 'grabar') // ~X2C
{
$accion = strtolower($accion);
switch ($accion) {
'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
//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");
//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;
{
//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)) {
//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;
// +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
{
$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;
*
* @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;
*/
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 $key => $p) {
- $rta1 = array_diff($p, $this->getPermisos());
- $rta2 = array_diff($this->getPermisos(), $p);
- if (!$rta1 && !$rta2) {
- echo 1;
- $perf = new SAMURAI_Perfil($this->_db, $key);
- return new PEAR_Error("El perfil \"".$perf->getDescripcion()."\" contiene los 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;
$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
?>