// +----------------------------------------------------------------------+ // // $Id$ // $Author$ // $URL$ // $Date$ // $Rev$ // require_once 'PEAR.php'; // +X2C Class 210 :SAMURAI_Permiso /** * Clase para el manejo de los Permisos. * * @access public */ class SAMURAI_Permiso { /** * Identificador del permiso. * * @var int $id * @access protected */ var $_id; /** * Descripcion del permiso. * * @var string $descripcion * @access protected */ var $_descripcion; /** * Objeto Samurai_DB * * @var SAMURAI_DB $db * @access protected */ var $_db; /** * Indentificador del ultimo que realizo alguna operacion sobre el permiso * * @var string $responsable * @access protected */ var $_responsable; /** * Gets Id. * * @return int * @access public */ function getId() { return $this->_id; } /** * Sets Id. * * @param int $id Id. * * @return void * @access public */ function setId($id) { $this->_id = $id; } /** * Gets Descripcion. * * @return string * @access public */ function getDescripcion() { return $this->_descripcion; } /** * Sets Descripcion. * * @param string $descripcion Descripcion. * * @return void * @access public */ function setDescripcion($descripcion) { $this->_descripcion = $descripcion; } /** * Gets Responsable. * * @return string * @access public */ function getResponsable() { return $this->_responsable; } /** * Sets Responsable. * * @param string $responsable Responsable. * * @return void * @access public */ function setResponsable($responsable) { $this->_responsable = $responsable; } // ~X2C // +X2C Operation 259 /** * Constructor. Si recibe como parametro el identificador del permiso, busca la informacion en la DB. * * @param SAMURAI_DB &$db Objeto conexion * @param int $id Identificador del permiso * * @return void * @access public */ function SAMURAI_Permiso(&$db, $id = null) // ~X2C { $this->_db = $db; $this->_id = $id; $this->setDescripcion(null); if (!is_null($id)) { $this->_obtenerDatosDb(); } } // -X2C // +X2C Operation 295 /** * Obtiene de la base de datos la informacion del permiso * * @return void * @access protected */ function _obtenerDatosDb() // ~X2C { $sql = parse_ini_file(dirname(__FILE__) . '/Permiso/consultas.ini', true); $tmp = $sql['obtener_datos_permiso'].$sql['obtener_datos_permiso2']; $dbh = $this->_db->prepare($tmp); $tmp = array ($this->_id); $res = $this->_db->execute($dbh,$tmp); if ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) { if (isset($re['desc_permiso'])) { $this->setDescripcion($re['desc_permiso']); } else { $this->setDescripcion(); } if (isset($re['responsable'])) { $this->setResponsable($re['responsable']); } else { $this->setResponsable(); } } } // -X2C // +X2C Operation 316 /** * Modifica la base de datos segun accion * * @param string $accion Indica la accion a realizar * * @return mixed * @access public */ function guardarDatos($accion = grabar) // ~X2C { $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 // +X2C Operation 317 /** * Graba en base el permiso * * @return mixed * @access protected */ function _grabarDb() // ~X2C { $idPermiso = $this->_db->nextId('permiso'); $datos = array ( 'id_permiso' => $idPermiso, 'desc_permiso' => $this->getDescripcion(), 'responsable' => $this->getResponsable(), ); return $this->_db->autoExecute('samurai.permiso', $datos, DB_AUTOQUERY_INSERT); } // -X2C // +X2C Operation 318 /** * Borra de la base el permiso * * @return mixed * @access protected */ function _borrarDb() // ~X2C { $sql = parse_ini_file(dirname(__FILE__) . '/Permiso/consultas.ini', true); $datos[] = $this->getId(); //Verifico que el permiso no tenga asociaciones $tmp = $sql['verificar_asociaciones1'].$sql['obtener_datos_permiso2']; $dbh = $this->_db->prepare($tmp); $res = $this->_db->execute($dbh, $datos); if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && !$re['cuenta'] == 0) { return new PEAR_Error("Hay sistemas asociados al permiso seleccionado"); } $tmp = $sql['verificar_asociaciones2'].$sql['obtener_datos_permiso2']; $dbh = $this->_db->prepare($tmp); $res = $this->_db->execute($dbh, $datos); if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && !$re['cuenta'] == 0) { return new PEAR_Error("Hay pefiles asociados al permiso seleccionado"); } // //Borro el permiso de la base $tmp = $sql['borrar_permiso']; $dbh = $this->_db->prepare($tmp); return $this->_db->execute($dbh, $datos); // } // -X2C // +X2C Operation 319 /** * Actualiza los datos del permiso * * @return mixed * @access protected */ function _modificarDb() // ~X2C { $datos = array ( 'id_permiso' => $this->getId(), 'desc_permiso' => $this->getDescripcion(), 'responsable' => $this->getResponsable(), ); return $this->_db->autoExecute('samurai.permiso', $datos, DB_AUTOQUERY_UPDATE, 'id_permiso ='.$this->getId()); } // -X2C // +X2C Operation 332 /** * Devuleve un array con los identificadores de todos los permisos. * * @param SAMURAI_DB &$db Base de Datos * @param int $id_sistema Identificador del sistema * * @return array(int) * @access protected * @static */ function _getIdPermisos(&$db, $id_sistema = null) // ~X2C { //OBTENGO LOS ID DE LA BASE $rta = array(); $tmp = array(); $sql = parse_ini_file(dirname(__FILE__) . '/Permiso/consultas.ini', true); $consulta = $sql['obtener_datos_permiso']; if ($id_sistema) { $consulta.= $sql['obtener_datos_permiso3']; $tmp[] = $id_sistema; } $consulta.= $sql['obtener_datos_permiso5']; $dbh = $db->prepare($consulta); $res = $db->execute($dbh, $tmp); while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) { array_push($rta,$re['id_permiso']); } $res->free(); return $rta; } // -X2C // +X2C Operation 333 /** * Devuelve un array asociativo en donde la clave es el identificador y el valor es la descripcion del permiso * * @param SAMURAI_DB &$db Base de Datos * @param int $id_sistema Identificador del sistema * * @return array() * @access public * @static */ function getArrayPermisos(&$db, $id_sistema = null) // ~X2C { //FORECHEO LO QUE ME DEVUELVA GET PERMISOS $rta = array (); foreach (SAMURAI_Permiso::getPermisos($db, $id_sistema) as $permiso) { $rta[$permiso->getId()] = $permiso->getDescripcion(); } return $rta; } // -X2C // +X2C Operation 334 /** * Devuelve el array de permisos * * @param SAMURAI_DB &$db Base de Datos * @param int $id_sistema Identificador del sistema * * @return array(Permiso) * @access public * @static */ function getPermisos(&$db, $id_sistema = null) // ~X2C { $rta = array (); foreach (SAMURAI_Permiso::_getIdPermisos($db, $id_sistema) as $id) { $tmp = new SAMURAI_Permiso($db,$id); array_push($rta, $tmp); } return $rta; } // -X2C // +X2C Operation 364 /** * Devuelve true si esta asociado a algun sistema, caso contrario devuelve false * * @return bool * @access public */ function asociadoASistema() // ~X2C { $rta = array(); $tmp = array(); $sql = parse_ini_file(dirname(__FILE__) . '/Permiso/consultas.ini', true); $tmp = $sql['verificar_asociaciones1'].$sql['obtener_datos_permiso2']; $dbh = $this->_db->prepare($tmp); $res = $this->_db->execute($dbh, array ($this->getId())); if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && !$re['cuenta'] == 0) { return true; } else { return false; } } // -X2C /** * Metodo que devuelve los datos necesarios para listar permisos. * * @param SAMURAI_DB &$db Base de Datos * @param int $id_sistema Identificador de un sistema en particular. * * @return mixed * @access public * @static */ function getPermisosPager(&$db, $id_sistema = null) { //@TODO REEMPLAZA A getPermisos if ($id_sistema) { $sql = ' SELECT p.id_permiso, p.desc_permiso, p.responsable FROM samurai.permiso AS p, samurai.perm_sist AS ps WHERE ps.id_sistema = '. $id_sistema .' AND ps.id_permiso = p.id_permiso ORDER BY p.desc_permiso '; } else { $sql = ' SELECT p.id_permiso, p.desc_permiso, NOT count(ps.id_sistema) AS cuenta FROM samurai.permiso AS p LEFT JOIN samurai.perm_sist AS ps ON (p.id_permiso = ps.id_permiso) GROUP BY p.id_permiso, p.desc_permiso ORDER BY p.desc_permiso '; } return $db->query ($sql); } } // -X2C Class :SAMURAI_Permiso ?>