#require_once 'PEAR.php';
-
-
// +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 $_responsable;
+ /**
+ * Array con los permisos asignados al perfil. Solo se cargan cuando se esta trabajando con el abm puesto que varian segun cada sistema.
+ *
+ * @var array(int) $permisos
+ * @access private
+ */
+ var $_permisos;
+
+ /**
+ * Identificador del sistema en el cual se esta trabajando
+ *
+ * @var int $idSistema
+ * @access protected
+ */
+ var $_idSistema;
+
/**
* Gets Id.
*
}
/**
- * Gets Tipo.
+ * Gets Responsable.
*
* @return string
* @access public
*/
- function getTipo()
+ function getResponsable()
{
- return $this->_tipo;
+ return $this->_responsable;
}
/**
- * Sets Tipo.
+ * Sets Responsable.
*
- * @param string $tipo Tipo.
+ * @param string $responsable Responsable.
*
* @return void
* @access public
*/
- function setTipo($tipo)
+ function setResponsable($responsable)
{
- $this->_tipo = $tipo;
+ $this->_responsable = $responsable;
}
/**
- * Gets Responsable.
+ * Gets Permisos.
*
- * @return string
+ * @return array(int)
* @access public
*/
- function getResponsable()
+ function getPermisos()
{
- return $this->_responsable;
+ return $this->_permisos;
}
/**
- * Sets Responsable.
+ * Sets Permisos.
*
- * @param string $responsable Responsable.
+ * @param array(int) $permisos Permisos.
*
* @return void
* @access public
*/
- function setResponsable($responsable)
+ function setPermisos($permisos)
{
- $this->_responsable = $responsable;
+ $this->_permisos = $permisos;
}
// ~X2C
*
* @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;
}
}
// -X2C
*/
function _obtenerDatosDb() // ~X2C
{
- $sql = include 'Perfil/consultas.php'; //Incluyo las consultas de este objeto nada mas.
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
$tmp = $sql['obtener_datos_perfil'].$sql['obtener_datos_perfil2'];
$dbh = $this->_db->prepare($tmp);
$tmp = array ($this->getId());
$res = $this->_db->execute($dbh,$tmp);
-
if ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
if (isset($re['desc_perfil'])) {
$this->setDescripcion($re['desc_perfil']);
else {
$this->setDescripcion();
}
- if (isset($re['tipo_perfil'])) {
- $this->setTipo($re['tipo_perfil']);
- }
- else {
- $this->setTipo();
- }
if (isset($re['responsable'])) {
$this->setResponsable($re['responsable']);
}
$this->setResponsable();
}
}
+
+ //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(), $this->_idSistema);
+ $res = $this->_db->execute($dbh,$tmp);
+ $rta = array ();
+ while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
+ array_push($rta,$re['id_permiso'].'##'.$re['observaciones']);
+ }
+ $this->setPermisos($rta);
}
// -X2C
* @return mixed
* @access public
*/
- function guardarDatos($accion = grabar) // ~X2C
+ function guardarDatos($accion = 'grabar') // ~X2C
{
- trigger_error('Not implemented!', E_USER_WARNING);
+ $accion = strtolower($accion);
+ switch ($accion) {
+ case 'grabar':
+ $res = $this->_grabarDb();
+ break;
+ case 'modificar':
+ $res = $this->_modificarDb();
+ break;
+ case 'eliminar':
+ $res = $this->_borrarDb();
+ break;
+ }
+ return $res;
}
// -X2C
*/
function _grabarDb() // ~X2C
{
- trigger_error('Not implemented!', E_USER_WARNING);
+ //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
+ $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('samurai.perfil', $datos, DB_AUTOQUERY_INSERT);
+ if (PEAR::isError($res)) {
+ return $res;
+ }
+ }
+ //GRABO EN PERFIL_SIST
+ $datos = array ('id_perfil' => $this->getId(),
+ 'id_sistema' => $this->_idSistema,
+ 'responsable' => $this->getResponsable(),
+ );
+ $res = $this->_db->autoExecute('samurai.perfil_sist', $datos, DB_AUTOQUERY_INSERT);
}
// -X2C
*/
function _borrarDb() // ~X2C
{
- trigger_error('Not implemented!', E_USER_WARNING);
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ //Verifico en perfil_sist_usuario
+ $tmp = $sql['verif_perfil_sist_usuario'];
+ $dbh = $this->_db->prepare($tmp);
+ $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 perm_perfil_sist
+ $res = $this->_borrarPermisos();
+ if (PEAR::isError($res)) {
+ return $res;
+ }
+ //Borro perfil_sist
+ $tmp = $sql['borrar_perfil_sist'];
+ $dbh = $this->_db->prepare($tmp);
+ $datos = array ($this->getId(), $this->_idSistema);
+ $res = $this->_db->execute($dbh, $datos);
+ if (PEAR::isError($res)) {
+ return $res;
+ }
+ //Verifico en perfil_sist (Perfil asociado a otros sistemas)
+ $tmp = $sql['verif_perfil_sist'];
+ $dbh = $this->_db->prepare($tmp);
+ $datos = array ($this->getId());
+ $res = $this->_db->execute($dbh, $datos);
+ if (PEAR::isError($res)) {
+ return $res;
+ }
+ if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0) {
+ //Borro perfil
+ $tmp = $sql['borrar_perfil'];
+ $dbh = $this->_db->prepare($tmp);
+ $datos = array ($this->getId());
+ $res = $this->_db->execute($dbh, $datos);
+ if (PEAR::isError($res)) {
+ return $res;
+ }
+ }
}
// -X2C
*/
function _modificarDb() // ~X2C
{
- trigger_error('Not implemented!', E_USER_WARNING);
+ //Modifico la tabla perfil_sist
+ $datos = array (
+ 'responsable' => $this->getResponsable(),
+ );
+ $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)) {
+ return $res;
+ }
+ return $this->_guardarPermisos();
}
// -X2C
* Devuleve un array con los identificadores de todos los perfiles.
*
* @param SAMURAI_DB &$db Base de Datos
+ * @param string $filtro Fltro por descripcion del perfil
+ * @param int $id_sistema Identificador del sistema
*
* @return array(int)
* @access protected
* @static
*/
- function _getIdPerfiles(&$db) // ~X2C
+ function _getIdPerfiles(&$db, $filtro = null, $id_sistema = null) // ~X2C
{
- trigger_error('Not implemented!', E_USER_WARNING);
+ //OBTENGO LOS ID DE LA BASE
+ $rta = array();
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ if ($id_sistema) {
+ $consulta = $sql['obtener_id_perfiles'];
+ $consulta.= $sql['obtener_id_perfiles3'];
+ }
+ 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;
+ $res = $db->execute($dbh, $tmp);
+ }
+ else {
+ $res = $db->execute($dbh);
+ }
+ while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
+ array_push($rta,$re['id_perfil']);
+ }
+ $res->free();
+ return $rta;
}
// -X2C
// +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
*
* @return array(Perfil)
* @access public
* @static
*/
- function getPerfiles(&$db) // ~X2C
+ function getPerfiles(&$db, $filtro = null, $id_sistema = null) // ~X2C
+ {
+ $rta = array ();
+ foreach (SAMURAI_Perfil::_getIdPerfiles($db, $filtro, $id_sistema) as $id) {
+ $tmp = new SAMURAI_Perfil($db,$id, $id_sistema);
+ array_push($rta, $tmp);
+ }
+ return $rta;
+ }
+ // -X2C
+
+ // +X2C Operation 356
+ /**
+ * Devuelve la informacion de los perfiles en un array.
+ *
+ * @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, $id_sistema = null) // ~X2C
+ {
+ //FORECHEO LO QUE ME DEVUELVA GET PERMISOS
+ $rta = array ();
+ foreach (SAMURAI_Perfil::getPerfiles($db, $filtro, $id_sistema) as $perfil) {
+ $rta[$perfil->getId()] = $perfil->getDescripcion();
+ }
+ return $rta;
+ }
+ // -X2C
+
+ // +X2C Operation 358
+ /**
+ * Valida la existencia de un perfil con la descripcion que se pasa por parametro. Devuelve true si existe y false si no existe.
+ *
+ * @param SAMURAI_DB $db Base de Datos
+ * @param string $descripcion Descripcion a comparar
+ *
+ * @return bool
+ * @access public
+ * @static
+ */
+ function existePerfil($db, $descripcion) // ~X2C
+ {
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ $tmp = $sql['obtener_datos_perfil'].$sql['obtener_datos_perfil3'];
+ $dbh = $db->prepare($tmp);
+ $tmp = array ($descripcion);
+ $res = $db->execute($dbh,$tmp);
+ $re = $res->fetchRow();
+ if (is_null($re)) {
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+ // -X2C
+
+ // +X2C Operation 360
+ /**
+ * Valida la existencia de una asociacion entre el perfil y el sistema seleccionado. Devuelve true si existe y false en caso contraro.
+ *
+ * @param SAMURAI_DB $db Base de Datos
+ * @param int $id_perfil Identificador del perfil con el cual hacer la comparacion
+ * @param int $id_sistema Identificador del sistema con el cual hacer la compararcion
+ *
+ * @return bool
+ * @access public
+ * @static
+ */
+ function existeAsociacion($db, $id_perfil, $id_sistema) // ~X2C
+ {
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ $tmp = $sql['verificar_asociacion'];
+ $dbh = $db->prepare($tmp);
+ $tmp = array ($id_perfil, $id_sistema);
+ $res = $db->execute($dbh,$tmp);
+ $re = $res->fetchRow();
+ if (is_null($re)) {
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+ // -X2C
+
+ // +X2C Operation 362
+ /**
+ * Se encarga de guardar la relacion entre perfiles - permisos - sistemas
+ *
+ * @return mixed
+ * @access protected
+ */
+ function _guardarPermisos() // ~X2C
+ {
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ //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('samurai.perm_perfil_sist', $datos, DB_AUTOQUERY_INSERT);
+ foreach ($this->getPermisos() as $permiso) {
+ list($id, $obs) = split ('##',$permiso);
+ $datos = array ($id, $this->getId(), $this->_idSistema, $obs, $this->getResponsable());
+ $res = $this->_db->execute($re, $datos);
+ if (PEAR::isError($res)) {
+ return $res;
+ }
+ }
+ }
+ // -X2C
+
+ // +X2C Operation 363
+ /**
+ * Borra la asociacion de un perfil de un sistema con sus permisos
+ *
+ * @return mixed
+ * @access protected
+ */
+ function _borrarPermisos() // ~X2C
{
- trigger_error('Not implemented!', E_USER_WARNING);
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ $tmp = $sql['borrar_permisos'];
+ $dbh = $this->_db->prepare($tmp);
+ $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
-?>
\ No newline at end of file
+?>