2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
3 // +----------------------------------------------------------------------+
5 // +----------------------------------------------------------------------+
6 // | Copyright (c) 1997-2003 The PHP Group |
7 // +----------------------------------------------------------------------+
8 // | This source file is subject to version 2.02 of the PHP license, |
9 // | that is bundled with this package in the file LICENSE, and is |
10 // | available at through the world-wide-web at |
11 // | http://www.php.net/license/2_02.txt. |
12 // | If you did not receive a copy of the PHP license and are unable to |
13 // | obtain it through the world-wide-web, please send a note to |
14 // | license@php.net so we can mail you a copy immediately. |
15 // +----------------------------------------------------------------------+
16 // | Created: Tue May 27 11:20:04 2003
17 // | Author: Martin Marrese - Myrna Degano <mmarre@mecon.gov.ar - mdegan@mecon.gov.ar>
18 // +----------------------------------------------------------------------+
27 require_once 'PEAR.php';
29 // +X2C Class 210 :SAMURAI_Permiso
31 * Clase para el manejo de los Permisos.
35 class SAMURAI_Permiso {
37 * Identificador del permiso.
45 * Descripcion del permiso.
47 * @var string $descripcion
61 * Indentificador del ultimo que realizo alguna operacion sobre el permiso
63 * @var string $responsable
97 function getDescripcion()
99 return $this->_descripcion;
104 * @param string $descripcion Descripcion.
109 function setDescripcion($descripcion)
111 $this->_descripcion = $descripcion;
120 function getResponsable()
122 return $this->_responsable;
127 * @param string $responsable Responsable.
132 function setResponsable($responsable)
134 $this->_responsable = $responsable;
139 // +X2C Operation 259
141 * Constructor. Si recibe como parametro el identificador del permiso, busca la informacion en la DB.
143 * @param SAMURAI_DB &$db Objeto conexion
144 * @param int $id Identificador del permiso
149 function SAMURAI_Permiso(&$db, $id = null) // ~X2C
153 $this->setDescripcion(null);
155 $this->_obtenerDatosDb();
160 // +X2C Operation 295
162 * Obtiene de la base de datos la informacion del permiso
167 function _obtenerDatosDb() // ~X2C
169 $sql = parse_ini_file(dirname(__FILE__) . '/Permiso/consultas.ini', true);
170 $tmp = $sql['obtener_datos_permiso'].$sql['obtener_datos_permiso2'];
171 $dbh = $this->_db->prepare($tmp);
172 $tmp = array ($this->_id);
173 $res = $this->_db->execute($dbh,$tmp);
175 if ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
176 if (isset($re['desc_permiso'])) {
177 $this->setDescripcion($re['desc_permiso']);
180 $this->setDescripcion();
182 if (isset($re['responsable'])) {
183 $this->setResponsable($re['responsable']);
186 $this->setResponsable();
193 // +X2C Operation 316
195 * Modifica la base de datos segun accion
197 * @param string $accion Indica la accion a realizar
202 function guardarDatos($accion = grabar) // ~X2C
204 $accion = strtolower($accion);
207 $res = $this->_grabarDb();
210 $res = $this->_modificarDb();
213 $res = $this->_borrarDb();
220 // +X2C Operation 317
222 * Graba en base el permiso
227 function _grabarDb() // ~X2C
229 $idPermiso = $this->_db->nextId('permiso');
231 'id_permiso' => $idPermiso,
232 'desc_permiso' => $this->getDescripcion(),
233 'responsable' => $this->getResponsable(),
235 $res = $this->_db->autoExecute('samurai.permiso', $datos, DB_AUTOQUERY_INSERT);
236 if (PEAR::isError($res)) {
239 $this->setId($idPermiso);
243 // +X2C Operation 318
245 * Borra de la base el permiso
250 function _borrarDb() // ~X2C
252 $sql = parse_ini_file(dirname(__FILE__) . '/Permiso/consultas.ini', true);
253 $datos[] = $this->getId();
254 //Verifico que el permiso no tenga asociaciones
255 $tmp = $sql['verificar_asociaciones1'].$sql['obtener_datos_permiso2'];
256 $dbh = $this->_db->prepare($tmp);
257 $res = $this->_db->execute($dbh, $datos);
258 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && !$re['cuenta'] == 0) {
259 return new PEAR_Error("Hay sistemas asociados al permiso seleccionado");
261 $tmp = $sql['verificar_asociaciones2'].$sql['obtener_datos_permiso2'];
262 $dbh = $this->_db->prepare($tmp);
263 $res = $this->_db->execute($dbh, $datos);
264 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && !$re['cuenta'] == 0) {
265 return new PEAR_Error("Hay pefiles asociados al permiso seleccionado");
268 //Borro el permiso de la base
269 $tmp = $sql['borrar_permiso'];
270 $dbh = $this->_db->prepare($tmp);
271 return $this->_db->execute($dbh, $datos);
276 // +X2C Operation 319
278 * Actualiza los datos del permiso
283 function _modificarDb() // ~X2C
286 'id_permiso' => $this->getId(),
287 'desc_permiso' => $this->getDescripcion(),
288 'responsable' => $this->getResponsable(),
290 return $this->_db->autoExecute('samurai.permiso', $datos, DB_AUTOQUERY_UPDATE, 'id_permiso ='.$this->getId());
295 // +X2C Operation 332
297 * Devuleve un array con los identificadores de todos los permisos.
299 * @param SAMURAI_DB &$db Base de Datos
300 * @param int $id_sistema Identificador del sistema
306 function _getIdPermisos(&$db, $id_sistema = null) // ~X2C
308 //OBTENGO LOS ID DE LA BASE
311 $sql = parse_ini_file(dirname(__FILE__) . '/Permiso/consultas.ini', true);
312 $consulta = $sql['obtener_datos_permiso'];
314 $consulta.= $sql['obtener_datos_permiso3'];
315 $tmp[] = $id_sistema;
317 $consulta.= $sql['obtener_datos_permiso5'];
318 $dbh = $db->prepare($consulta);
319 $res = $db->execute($dbh, $tmp);
320 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
321 array_push($rta,$re['id_permiso']);
328 // +X2C Operation 333
330 * Devuelve un array asociativo en donde la clave es el identificador y el valor es la descripcion del permiso
332 * @param SAMURAI_DB &$db Base de Datos
333 * @param int $id_sistema Identificador del sistema
339 function getArrayPermisos(&$db, $id_sistema = null) // ~X2C
341 //FORECHEO LO QUE ME DEVUELVA GET PERMISOS
343 foreach (SAMURAI_Permiso::getPermisos($db, $id_sistema) as $permiso) {
344 $rta[$permiso->getId()] = $permiso->getDescripcion();
350 // +X2C Operation 334
352 * Devuelve el array de permisos
354 * @param SAMURAI_DB &$db Base de Datos
355 * @param int $id_sistema Identificador del sistema
357 * @return array(Permiso)
361 function getPermisos(&$db, $id_sistema = null) // ~X2C
364 foreach (SAMURAI_Permiso::_getIdPermisos($db, $id_sistema) as $id) {
365 $tmp = new SAMURAI_Permiso($db,$id);
366 array_push($rta, $tmp);
372 // +X2C Operation 364
374 * Devuelve true si esta asociado a algun sistema, caso contrario devuelve false
379 function asociadoASistema() // ~X2C
383 $sql = parse_ini_file(dirname(__FILE__) . '/Permiso/consultas.ini', true);
384 $tmp = $sql['verificar_asociaciones1'].$sql['obtener_datos_permiso2'];
385 $dbh = $this->_db->prepare($tmp);
386 $res = $this->_db->execute($dbh, array ($this->getId()));
387 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && !$re['cuenta'] == 0) {
397 * Metodo que devuelve los datos necesarios para listar permisos.
399 * @param SAMURAI_DB &$db Base de Datos
400 * @param int $id_sistema Identificador de un sistema en particular.
406 function getPermisosPager(&$db, $id_sistema = null) {
408 //@TODO REEMPLAZA A getPermisos
412 SELECT p.id_permiso, p.desc_permiso, p.responsable
413 FROM samurai.permiso AS p, samurai.perm_sist AS ps
414 WHERE ps.id_sistema = '. $id_sistema .'
415 AND ps.id_permiso = p.id_permiso
416 ORDER BY p.desc_permiso
421 SELECT p.id_permiso, p.desc_permiso, NOT count(ps.id_sistema) AS cuenta
422 FROM samurai.permiso AS p
423 LEFT JOIN samurai.perm_sist AS ps
424 ON (p.id_permiso = ps.id_permiso)
425 GROUP BY p.id_permiso, p.desc_permiso
426 ORDER BY p.desc_permiso
429 return $db->query ($sql);
431 } // -X2C Class :SAMURAI_Permiso