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';
28 require_once 'SAMURAI/DB.php';
29 require_once 'Date.php';
31 // +X2C Class 209 :SAMURAI_Sistema
33 * Clase para el manejo de los sistemas.
37 class SAMURAI_Sistema {
39 * Identificador del sistema.
55 * Descripcion del sistema.
57 * @var string $descripcion
60 var $_descripcion = null;
63 * Fecha en la cual se inicio el sistema.
65 * @var date $fecha_inicio
68 var $_fecha_inicio = null;
71 * Fecha en la cual se dio por terminado el desarrollo del sistema.
73 * @var date $fecha_fin
76 var $_fecha_fin = null;
79 * Fecha de implementacion del sistema.
81 * @var date $fecha_implementacion
84 var $_fecha_implementacion = null;
87 * Texto con los datos del o de los contacto/s en el area usuario.
89 * @var string $contacto
92 var $_contacto = null;
103 * Login del responsable de los ultimos cambios del sistema.
105 * @var string $responsable
108 var $_responsable = null;
111 * Array asociativo (id - descripcion) con los permisos asociados al sistema.
113 * @var array $permisos
116 var $_permisos = null;
119 * Array con los permisos asociados al sistema
121 * @var array $asociaciones
124 var $_asociaciones = null;
127 * indica si el sistema esta activo o no.
140 function getAsociaciones()
142 return $this->_asociaciones;
147 * @param array $asociaciones Asociaciones.
152 function setAsociaciones($asociaciones)
154 $this->_asociaciones = $asociaciones;
165 return $this->_estado;
170 * @param int $estado Estado.
175 function setEstado($estado)
177 $this->_estado = $estado;
182 // +X2C Operation 243
184 * Constructor. Si recibe como parametro el identificador busca en la DB los datos.
186 * @param SAMURAI_DB &$db Objeto Conexion
187 * @param int $id Identificador del sistema
192 function SAMURAI_Sistema(&$db, $id = null) // ~X2C
197 $this->_obtenerDatosDb();
202 // +X2C Operation 244
204 * Devuelve el identificador del sistema.
209 function getId() // ~X2C
215 // +X2C Operation 245
217 * Devuelve el nombre del sistema.
222 function getNombre() // ~X2C
224 return $this->_nombre;
228 // +X2C Operation 246
230 * Devuelve la descrpcion del sistema.
235 function getDescripcion() // ~X2C
237 return $this->_descripcion;
241 // +X2C Operation 247
243 * Devuelve la fecha de inicio del sistema.
248 function &getFechaInicio() // ~X2C
250 if ($this->_fecha_inicio) {
251 return new Date ($this->_fecha_inicio.' 00:00:00');
259 // +X2C Operation 248
261 * Devuelve la fecha de finalizacion del sistema.
266 function &getFechaFin() // ~X2C
268 if ($this->_fecha_fin) {
269 return new Date ($this->_fecha_fin.' 00:00:00');
277 // +X2C Operation 249
279 * Devuelve la fecha de implementacion del sistema.
284 function &getFechaImplementacion() // ~X2C
286 if ($this->_fecha_implementacion) {
287 return new Date ($this->_fecha_implementacion.' 00:00:00');
295 // +X2C Operation 250
297 * Devuelve el contacto del sistema.
302 function getContacto() // ~X2C
304 return $this->_contacto;
308 // +X2C Operation 251
310 * Setea el nombre del sistema.
312 * @param string $nombre Nombre del sistema.
317 function setNombre($nombre = null) // ~X2C
319 $this->_nombre = $nombre;
323 // +X2C Operation 252
325 * Setea la descripcion del sistema.
327 * @param string $descripcion Descripcion del sistema.
332 function setDescripcion($descripcion = null) // ~X2C
334 $this->_descripcion = $descripcion;
338 // +X2C Operation 253
340 * Setea la fecha de inicio del sistema.
342 * @param date $fecha Fecha de inicio del sistema
347 function setFechaInicio($fecha = null) // ~X2C
349 if ($fecha && $fecha != '0000-00-00') {
350 $this->_fecha_inicio = $fecha;
353 $this->_fecha_inicio = null;
358 // +X2C Operation 254
360 * Setea la fecha de finalizacion del sistema.
362 * @param date $fecha Fecha de finalizacion del sistema.
367 function setFechaFin($fecha = null) // ~X2C
369 if ($fecha && $fecha != '0000-00-00') {
370 $this->_fecha_fin = $fecha;
373 $this->_fecha_fin = null;
378 // +X2C Operation 255
380 * Setea la fecha de implementacion del sistema.
382 * @param date $fecha Fecha de implementacion del sistema.
387 function setFechaImplementacion($fecha = null) // ~X2C
389 if ($fecha && $fecha != '0000-00-00') {
390 $this->_fecha_implementacion = $fecha;
393 $this->_fecha_implementacion = null;
399 // +X2C Operation 256
401 * Setea el contacto del sistema.
403 * @param string $contacto Texto con la informacion del contacto.
408 function setContacto($contacto = null) // ~X2C
410 $this->_contacto = $contacto;
414 // +X2C Operation 263
416 * Obtiene los datos del sistema de la DB.
421 function _obtenerDatosDb() // ~X2C
423 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
424 $tmp = $sql['obtener_datos_sistema'].$sql['obtener_datos_sistema2'];
425 $dbh = $this->_db->prepare($tmp);
426 $tmp = array ($this->getId());
427 $res = $this->_db->execute($dbh,$tmp);
429 if ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
430 if (isset($re['nombre_sistema'])) {
431 $this->setNombre($re['nombre_sistema']);
433 if (isset($re['desc_sistema'])) {
434 $this->setDescripcion($re['desc_sistema']);
436 if (isset($re['fecha_inicio'])) {
437 $this->setFechaInicio($re['fecha_inicio']);
439 if (isset($re['fecha_fin'])) {
440 $this->setFechaFin($re['fecha_fin']);
442 if (isset($re['fecha_implementacion'])) {
443 $this->setFechaImplementacion($re['fecha_implementacion']);
445 if (isset($re['contacto'])) {
446 $this->setContacto($re['contacto']);
448 if (isset($re['responsable'])) {
449 $this->setResponsable($re['responsable']);
451 if (isset($re['estado'])) {
452 $this->setEstado($re['estado']);
455 $tmp = $sql['obtener_permisos'];
456 $tmp.= $sql['borrar_permisos2'];
457 $dbh = $this->_db->prepare($tmp);
458 $tmp = array ($this->getId(),'');
459 $res = $this->_db->execute($dbh,$tmp);
462 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
466 $this->_permisos = $tmp;
467 $tmp = $sql['obtener_permisos'];
468 $tmp.= $sql['obtener_permisos2'];
469 $dbh = $this->_db->prepare($tmp);
470 $tmp = array ($this->getId());
471 $res = $this->_db->execute($dbh,$tmp);
474 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
475 $tmp[$i]['id'] = $re['0'];
476 $tmp[$i]['obs'] = $re['1'];
477 $tmp[$i]['desc'] = $re['2'];
480 $this->_asociaciones = $tmp;
484 // +X2C Operation 288
486 * Guarda la informacion del sistema en la base.
488 * @param string $accion Accion a realizar. Grabar, modificar o eliminar
493 function guardarDatos($accion = grabar) // ~X2C
495 $accion = strtolower($accion);
498 $res = $this->_grabarDb();
501 $res = $this->_modificarDb();
504 $res = $this->_borrarDb();
511 // +X2C Operation 290
513 * Devuelve el login del responsable de los ultimos cambios
518 function getResponsable() // ~X2C
520 return $this->_responsable;
524 // +X2C Operation 291
526 * Setea el login del responsable de los ultimos cambios del sistema
528 * @param string $responsable String con el login del responsable del cambio
533 function setResponsable($responsable = null) // ~X2C
535 $this->_responsable = $responsable;
539 // +X2C Operation 301
541 * Devuelve un array asociativo con los identificadores de los permisos
546 function getIdPermisos() // ~X2C
548 return $this->_permisos;
552 // +X2C Operation 302
554 * Setea los permisos de un sistema
556 * @param int $permisos Array asociativo con los permisos
561 function setPermisos($permisos = null) // ~X2C
563 $this->_permisos = $permisos;
567 // +X2C Operation 303
572 function getMaxIdSistema() // ~X2C
574 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
575 $dbh = $this->_db->prepare($sql['obtener_max_id_sistemas']);
576 $res = $this->_db->execute($dbh);
577 $re = $res->fetchrow(DB_FETCHMODE_ASSOC);
579 return $re['id_sistema'];
583 // +X2C Operation 304
585 * Graba los datos en la Base de Datos
590 function _grabarDb() // ~X2C
592 $idSistema = $this->_db->nextId('sistema');
593 $fecha_inicio = $this->getFechaInicio();
594 $fecha_fin = $this->getFechaFin();
595 $fecha_implementacion = $this->getFechaImplementacion();
596 //USO SECUENCIAS Y AUTOEXECUTE
599 'id_sistema' => $idSistema,
600 'nombre_sistema' => $this->getNombre(),
601 'desc_sistema' => $this->getDescripcion(),
602 'fecha_inicio' => $fecha_inicio ? $fecha_inicio->format("%Y-%m-%d") : null,
603 'fecha_fin' => $fecha_fin ? $fecha_fin->format("%Y-%m-%d") : null,
604 'fecha_implementacion' => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
605 'contacto' => $this->getContacto(),
606 'responsable' => $this->getResponsable(),
607 'estado' => $this->getEstado()
609 $res = $this->_db->autoExecute('samurai.sistema', $datos, DB_AUTOQUERY_INSERT);
611 if (PEAR::isError($res)) {
615 $res = $this->_grabarPermisosDb($idSistema);
616 if (PEAR::isError($res)) {
619 $this->_id = $idSistema;
623 // +X2C Operation 305
625 * Borra los datos de la base de datos
630 function _borrarDb() // ~X2C
632 $idSistema = $this->getId();
633 $responsable = $this->getResponsable();
634 //Cambio el estado al sistema
635 $datos = array( 'responsable' => $responsable,
638 $res = $this->_db->autoExecute('samurai.sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
639 if (PEAR::isError($res)) {
643 if ($idSistema == @$_SESSION['samurai']['id_sistema']){
644 $_SESSION['samurai']['id_sistema'] = '';
649 // +X2C Operation 306
651 * Modifica los datos en base
656 function _modificarDb() // ~X2C
658 //Grabo las modificaciones al sistema
659 $idSistema = $this->getId();
660 $fecha_inicio = $this->getFechaInicio();
661 $fecha_fin = $this->getFechaFin();
662 $fecha_implementacion = $this->getFechaImplementacion();
663 //USO SECUENCIAS Y AUTOEXECUTE
666 'nombre_sistema' => $this->getNombre(),
667 'desc_sistema' => $this->getDescripcion(),
668 'fecha_inicio' => $fecha_inicio ? $fecha_inicio->format("%Y-%m-%d") : null,
669 'fecha_fin' => $fecha_fin ? $fecha_fin->format("%Y-%m-%d") : null,
670 'fecha_implementacion' => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
671 'contacto' => $this->getContacto(),
672 'responsable' => $this->getResponsable(),
673 'estado' => $this->getEstado()
675 $res = $this->_db->autoExecute('samurai.sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
676 if (PEAR::isError($res)) {
679 //Borro los permisos que no tengan observaciones
680 $res = $this->_borrarPermisosDb($idSistema, '');
681 if (PEAR::isError($res)) {
684 //Grabo los permisos que selecciono
685 $res = $this->_grabarPermisosDb($idSistema);
686 if (PEAR::isError($res)) {
693 // +X2C Operation 308
695 * Graba los permisos del sistema en perm_sist
697 * @param int $idSistema Identificador del sistema
702 function _grabarPermisosDb($idSistema) // ~X2C
704 $datos = array ('id_permiso','id_sistema','responsable');
705 $re = $this->_db->autoPrepare('samurai.perm_sist', $datos, DB_AUTOQUERY_INSERT);
706 if (isset($this->_permisos)) {
707 foreach ($this->_permisos as $permiso) {
708 $datos = array ($permiso, $idSistema, $this->getResponsable());
709 $res = $this->_db->execute($re, $datos);
710 if (PEAR::isError($res)) {
719 // +X2C Operation 309
721 * Borra los permisos que tenga asociado el sistema segun el criterio de observaciones
723 * @param int $idSistema Identificador del sistema
724 * @param bool $observaciones Null u observacion de la asociacion a borrar
725 * @param int $idPermiso Identificador del permiso a borrar
730 function _borrarPermisosDb($idSistema, $observaciones = null, $idPermiso = null) // ~X2C
732 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
733 $datos[] = $idSistema;
734 $tmp = $sql['borrar_permisos'];
735 if (isset($observaciones)) {
736 $tmp.= $sql['borrar_permisos2'];
737 $datos[] = $observaciones;
739 if (isset($idPermiso)) {
740 $tmp.= $sql['borrar_permisos3'];
741 $datos[] = $idPermiso;
743 $dbh = $this->_db->prepare($tmp);
744 $res = $this->_db->execute($dbh, $datos);
745 if (PEAR::isError($res)) {
752 // +X2C Operation 312
754 * Guarda en base las nuevas asociaciones que se van cargando y actualiza los datos del sistema.
756 * @param int $idPermiso Identificador del Permiso
757 * @param string $observacion Observacion a agregar
762 function guardarAsociacion($idPermiso, $observacion = '') // ~X2C
764 if (!$this->_existeAsociacion($idPermiso, $observacion)) {
765 //Guardo la asociacion
768 'id_permiso' => $idPermiso,
769 'id_sistema' => $this->getId(),
770 'observaciones' => $observacion,
771 'responsable' => $this->getResponsable(),
773 $res = $this->_db->autoExecute('samurai.perm_sist', $datos, DB_AUTOQUERY_INSERT);
774 //Recargo los datos del sistema
775 $this->_obtenerDatosDb();
779 return new PEAR_Error('La Asociacion ya existe.');
784 // +X2C Operation 313
786 * Elimina una asociacion de la base, y actualiza los datos del sistema.
788 * @param int $idPermiso Identificador del permiso a borrar
789 * @param string $observacion Observacion de la asociacion a borrar (Puede ser vacia)
794 function eliminarAsociacion($idPermiso, $observacion = '') // ~X2C
796 //TODO Arreglar el asco este
797 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
799 //Obtengo los id de los perfiles del permiso en el sistema
800 $tmp = $sql['ea_obt_idperfil'];
801 $dbh = $this->_db->prepare($tmp);
802 $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
803 if (PEAR::isError($res)) {
808 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
813 //Borro el permiso de los perfiles del sistema
814 $tmp = $sql['ea_del_perm_perfil_sist'];
815 $dbh = $this->_db->prepare($tmp);
816 $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
817 if (PEAR::isError($res)) {
820 //Verifico si era el unico permiso de cada uno de los perfiles en los que estaba asignado
822 foreach ($PERFILES as $perfil) {
824 $tmp = $sql['ea_obt_cuenta_perfil'];
825 $dbh = $this->_db->prepare($tmp);
826 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
827 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0) {
829 $tmp = $sql['ea_del_perfil_sist'];
830 $dbh = $this->_db->prepare($tmp);
831 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
832 if (PEAR::isError($res)) {
835 //Borro perfil_sist_usuario
836 $tmp = $sql['ea_del_perfil_sist_usuario'];
837 $dbh = $this->_db->prepare($tmp);
838 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
839 if (PEAR::isError($res)) {
842 //Verifico si hay otro sistema usando este perfil
843 $tmp = $sql['ea_obt_cuenta_perfil_sist'];
844 $dbh = $this->_db->prepare($tmp);
845 $res = $this->_db->execute($dbh, array ($perfil));
846 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0){
847 $tmp = $sql['ea_del_perfil'];
848 $dbh = $this->_db->prepare($tmp);
849 $res = $this->_db->execute($dbh, array ($perfil));
850 if (PEAR::isError($res)) {
857 //Borro la asociacion perm_sist
858 $res = $this->_borrarPermisosDb($this->getId(), $observacion, $idPermiso);
859 if (PEAR::isError($res)) {
862 //Recargo los datos del sistema
863 $this->_obtenerDatosDb();
867 // +X2C Operation 314
869 * Actualiza los datos de la asociacion en la base de datos.
871 * @param int $idPermiso Identificador del permiso
872 * @param string $observacion Observacion a insertar
873 * @param string $obs_ant Observacion anterior
878 function modificarAsociacion($idPermiso, $observacion = '', $obs_ant = '') // ~X2C
880 //Busco la nueva asociacion
881 if (!$this->_existeAsociacion($idPermiso, $observacion)) {
882 //Actualizo la asociacion
884 'id_permiso' => $idPermiso,
885 'id_sistema' => $this->getId(),
886 'observaciones' => $observacion,
887 'responsable' => $this->getResponsable(),
889 $this->_db->autoExecute('samurai.perm_sist',
892 'id_sistema = '.$this->getId().' AND id_permiso = '.$idPermiso.' AND observaciones =\''.$obs_ant.'\'');
894 //Recargo los datos del sistema
895 $this->_obtenerDatosDb();
899 return new PEAR_Error('La Asociacion ya existe.');
904 // +X2C Operation 315
906 * Chequea si existe la asociacion
908 * @param int $idPermiso Id del permiso a chequear
909 * @param string $observacion Observacion a chequear
914 function _existeAsociacion($idPermiso, $observacion) // ~X2C
916 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
917 $tmp = $sql['obtener_permisos'].$sql['obtener_permisos3'].$sql['obtener_permisos4'];
918 $dbh = $this->_db->prepare($tmp);
919 $tmp = array ($this->getId(),$idPermiso,$observacion);
920 $res = $this->_db->execute($dbh,$tmp);
921 $re = $res->fetchRow();
932 // +X2C Operation 341
934 * Devuelve el array de sistemas
936 * @param SAMURAI_DB &$db Base de Datos
937 * @param bool $activos Indica si se deben buscar solamente los sistemas activos
939 * @return array(Sistema)
943 function getSistemas(&$db, $activos = true) // ~X2C
946 foreach (SAMURAI_Sistema::_getIdSistemas($db, $activos) as $id) {
947 $tmp = new SAMURAI_Sistema($db,$id);
948 array_push($rta, $tmp);
954 // +X2C Operation 342
956 * Devuleve un array con los identificadores de todos los sistemas.
958 * @param SAMURAI_DB &$db Base de Datos
959 * @param bool $activos Indica si se deben buscar solamente los sistemas activos
965 function _getIdSistemas(&$db, $activos = true) // ~X2C
967 //OBTENGO LOS ID DE LA BASE
969 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
970 $consulta = $sql['obtener_datos_sistema'];
972 $consulta.= $sql['obtener_datos_sistema3'];
974 $consulta.= $sql['obtener_datos_sistema4'];
975 $dbh = $db->prepare($consulta);
976 $res = $db->execute($dbh);
977 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
978 array_push($rta,$re['id_sistema']);
985 // +X2C Operation 343
987 * Devuelve un array asociativo en donde la clave es el identificador y el valor es el nombre del sistema
989 * @param SAMURAI_DB &$db Base de Datos
990 * @param bool $activos Indica si se deben buscar solamente los sistemas activos
996 function getArraySistemas(&$db, $activos = true) // ~X2C
999 foreach (SAMURAI_Sistema::getSistemas($db, $activos) as $sistema) {
1000 $rta[$sistema->getId()] = $sistema->getNombre();
1006 // +X2C Operation 397
1008 * Devuelve un array asociativo en donde la clave es el identificador y el valor es el nombre del sistema. Solo devuelve aquellos sistemas en los cuales el usuario tiene permisos.
1010 * @param DB &$DB Conexion a la base de datos
1015 function getArraySistemasSeleccionar(&$DB) // ~X2C
1018 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
1019 //Verifico si tiene permiso developer en samurai
1020 $consulta = $sql['sistemas_seleccionar2'];
1021 $dbh = $DB->prepare($consulta);
1022 $res = $DB->execute($dbh, array(SAMURAI_PERM, $_SESSION['usuario'],
1023 SAMURAI_PERM_DEVELOPER));
1024 $re = $res->fetchrow(DB_FETCHMODE_ASSOC);
1025 if ($re['cuenta']) {
1026 $consulta = $sql['obtener_datos_sistema'];
1027 $consulta.= $sql['obtener_datos_sistema3'];
1028 $consulta.= $sql['obtener_datos_sistema4'];
1029 $dbh = $DB->prepare($consulta);
1030 $res = $DB->execute($dbh);
1031 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
1032 $rta[$re['id_sistema']] = $re['nombre_sistema'];
1037 //Si no tiene permiso developer en samurai le muestro solo aquellos
1038 //sistemas en los cuales puede trabajar
1039 $consulta = $sql['sistemas_seleccionar'];
1040 $dbh = $DB->prepare($consulta);
1041 $res = $DB->execute($dbh, array($_SESSION['usuario'],
1042 SAMURAI_PERM_PERFIL_ALTA, SAMURAI_PERM_PERFIL_BAJA,
1043 SAMURAI_PERM_PERFIL_MODIF, SAMURAI_PERM_USUARIO_ALTA,
1044 SAMURAI_PERM_USUARIO_BAJA, SAMURAI_PERM_USUARIO_MODIF));
1045 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
1046 $rta[$re['id_sistema']] = $re['nombre_sistema'];
1055 } // -X2C Class :SAMURAI_Sistema