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
63 * Fecha en la cual se inicio el sistema.
65 * @var date $fecha_inicio
71 * Fecha en la cual se dio por terminado el desarrollo del sistema.
73 * @var date $fecha_fin
79 * Fecha de implementacion del sistema.
81 * @var date $fecha_implementacion
84 var $_fecha_implementacion;
87 * Texto con los datos del o de los contacto/s en el area usuario.
89 * @var string $contacto
103 * Login del responsable de los ultimos cambios del sistema.
105 * @var string $responsable
111 * Array asociativo (id - descripcion) con los permisos asociados al sistema.
113 * @var array $permisos
119 * Array con los permisos asociados al sistema
121 * @var array $asociaciones
132 function getAsociaciones()
134 return $this->_asociaciones;
139 * @param array $asociaciones Asociaciones.
144 function setAsociaciones($asociaciones)
146 $this->_asociaciones = $asociaciones;
151 // +X2C Operation 243
153 * Constructor. Si recibe como parametro el identificador busca en la DB los datos.
155 * @param SAMURAI_DB &$db Objeto Conexion
156 * @param int $id Identificador del sistema
161 function SAMURAI_Sistema(&$db, $id = null) // ~X2C
166 $this->_obtenerDatosDb();
170 $this->setDescripcion();
171 $this->setFechaInicio();
172 $this->setFechaFin();
173 $this->setFechaImplementacion();
174 $this->setContacto();
175 $this->setResponsable();
176 $this->setPermisos();
181 // +X2C Operation 244
183 * Devuelve el identificador del sistema.
188 function getId() // ~X2C
194 // +X2C Operation 245
196 * Devuelve el nombre del sistema.
201 function getNombre() // ~X2C
203 return $this->_nombre;
207 // +X2C Operation 246
209 * Devuelve la descrpcion del sistema.
214 function getDescripcion() // ~X2C
216 return $this->_descripcion;
220 // +X2C Operation 247
222 * Devuelve la fecha de inicio del sistema.
227 function &getFechaInicio() // ~X2C
229 if ($this->_fecha_inicio) {
230 return new Date ($this->_fecha_inicio.' 00:00:00');
238 // +X2C Operation 248
240 * Devuelve la fecha de finalizacion del sistema.
245 function &getFechaFin() // ~X2C
247 if ($this->_fecha_fin) {
248 return new Date ($this->_fecha_fin.' 00:00:00');
256 // +X2C Operation 249
258 * Devuelve la fecha de implementacion del sistema.
263 function &getFechaImplementacion() // ~X2C
265 if ($this->_fecha_implementacion) {
266 return new Date ($this->_fecha_implementacion.' 00:00:00');
274 // +X2C Operation 250
276 * Devuelve el contacto del sistema.
281 function getContacto() // ~X2C
283 return $this->_contacto;
287 // +X2C Operation 251
289 * Setea el nombre del sistema.
291 * @param string $nombre Nombre del sistema.
296 function setNombre($nombre = null) // ~X2C
298 $this->_nombre = $nombre;
302 // +X2C Operation 252
304 * Setea la descripcion del sistema.
306 * @param string $descripcion Descripcion del sistema.
311 function setDescripcion($descripcion = null) // ~X2C
313 $this->_descripcion = $descripcion;
317 // +X2C Operation 253
319 * Setea la fecha de inicio del sistema.
321 * @param date $fecha Fecha de inicio del sistema
326 function setFechaInicio($fecha = null) // ~X2C
328 if ($fecha && $fecha != '0000-00-00') {
329 $this->_fecha_inicio = $fecha;
332 $this->_fecha_inicio = null;
337 // +X2C Operation 254
339 * Setea la fecha de finalizacion del sistema.
341 * @param date $fecha Fecha de finalizacion del sistema.
346 function setFechaFin($fecha = null) // ~X2C
348 if ($fecha && $fecha != '0000-00-00') {
349 $this->_fecha_fin = $fecha;
352 $this->_fecha_fin = null;
357 // +X2C Operation 255
359 * Setea la fecha de implementacion del sistema.
361 * @param date $fecha Fecha de implementacion del sistema.
366 function setFechaImplementacion($fecha = null) // ~X2C
368 if ($fecha && $fecha != '0000-00-00') {
369 $this->_fecha_implementacion = $fecha;
372 $this->_fecha_implementacion = null;
378 // +X2C Operation 256
380 * Setea el contacto del sistema.
382 * @param string $contacto Texto con la informacion del contacto.
387 function setContacto($contacto = null) // ~X2C
389 $this->_contacto = $contacto;
393 // +X2C Operation 263
395 * Obtiene los datos del sistema de la DB.
400 function _obtenerDatosDb() // ~X2C
402 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
403 $tmp = $sql['obtener_datos_sistema'].$sql['obtener_datos_sistema2'];
404 $dbh = $this->_db->prepare($tmp);
405 $tmp = array ($this->getId());
406 $res = $this->_db->execute($dbh,$tmp);
408 if ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
409 if (isset($re['nombre_sistema'])) {
410 $this->setNombre($re['nombre_sistema']);
415 if (isset($re['desc_sistema'])) {
416 $this->setDescripcion($re['desc_sistema']);
419 $this->setDescripcion();
421 if (isset($re['fecha_inicio'])) {
422 $this->setFechaInicio($re['fecha_inicio']);
425 $this->setFechaInicio();
427 if (isset($re['fecha_fin'])) {
428 $this->setFechaFin($re['fecha_fin']);
431 $this->setFechaFin();
433 if (isset($re['fecha_implementacion'])) {
434 $this->setFechaImplementacion($re['fecha_implementacion']);
437 $this->setFechaImplementacion();
439 if (isset($re['contacto'])) {
440 $this->setContacto($re['contacto']);
443 $this->setContacto();
445 if (isset($re['responsable'])) {
446 $this->setResponsable($re['responsable']);
449 $this->setResponsable();
452 $tmp = $sql['obtener_permisos'];
453 $tmp.= $sql['borrar_permisos2'];
454 $dbh = $this->_db->prepare($tmp);
455 $tmp = array ($this->getId(),'');
456 $res = $this->_db->execute($dbh,$tmp);
459 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
463 $this->_permisos = $tmp;
464 $tmp = $sql['obtener_permisos'];
465 $tmp.= $sql['obtener_permisos2'];
466 $dbh = $this->_db->prepare($tmp);
467 $tmp = array ($this->getId());
468 $res = $this->_db->execute($dbh,$tmp);
471 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
472 $tmp[$i]['id'] = $re['0'];
473 $tmp[$i]['obs'] = $re['1'];
474 $tmp[$i]['desc'] = $re['2'];
477 $this->_asociaciones = $tmp;
481 // +X2C Operation 288
483 * Guarda la informacion del sistema en la base.
485 * @param string $accion Accion a realizar. Grabar, modificar o eliminar
490 function guardarDatos($accion = grabar) // ~X2C
492 $accion = strtolower($accion);
495 $res = $this->_grabarDb();
498 $res = $this->_modificarDb();
501 $res = $this->_borrarDb();
508 // +X2C Operation 290
510 * Devuelve el login del responsable de los ultimos cambios
515 function getResponsable() // ~X2C
517 return $this->_responsable;
521 // +X2C Operation 291
523 * Setea el login del responsable de los ultimos cambios del sistema
525 * @param string $responsable String con el login del responsable del cambio
530 function setResponsable($responsable = null) // ~X2C
532 $this->_responsable = $responsable;
536 // +X2C Operation 301
538 * Devuelve un array asociativo con los identificadores de los permisos
543 function getIdPermisos() // ~X2C
545 return $this->_permisos;
549 // +X2C Operation 302
551 * Setea los permisos de un sistema
553 * @param int $permisos Array asociativo con los permisos
558 function setPermisos($permisos = null) // ~X2C
560 $this->_permisos = $permisos;
564 // +X2C Operation 303
569 function getMaxIdSistema() // ~X2C
571 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
572 $dbh = $this->_db->prepare($sql['obtener_max_id_sistemas']);
573 $res = $this->_db->execute($dbh);
574 $re = $res->fetchrow(DB_FETCHMODE_ASSOC);
576 return $re['id_sistema'];
580 // +X2C Operation 304
582 * Graba los datos en la Base de Datos
587 function _grabarDb() // ~X2C
589 $idSistema = $this->_db->nextId('sistema');
590 $fecha_inicio = $this->getFechaInicio();
591 $fecha_fin = $this->getFechaFin();
592 $fecha_implementacion = $this->getFechaImplementacion();
593 //USO SECUENCIAS Y AUTOEXECUTE
596 'id_sistema' => $idSistema,
597 'nombre_sistema' => $this->getNombre(),
598 'desc_sistema' => $this->getDescripcion(),
599 'fecha_inicio' => $fecha_inicio ? $fecha_inicio->format("%Y-%m-%d") : null,
600 'fecha_fin' => $fecha_fin ? $fecha_fin->format("%Y-%m-%d") : null,
601 'fecha_implementacion' => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
602 'contacto' => $this->getContacto(),
603 'responsable' => $this->getResponsable(),
606 $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_INSERT);
608 if (PEAR::isError($res)) {
612 $res = $this->_grabarPermisosDb($idSistema);
613 if (PEAR::isError($res)) {
616 $this->_id = $idSistema;
620 // +X2C Operation 305
622 * Borra los datos de la base de datos
627 function _borrarDb() // ~X2C
629 $idSistema = $this->getId();
630 $responsable = $this->getResponsable();
631 //Cambio el estado al sistema
632 $datos = array( 'responsable' => $responsable,
635 $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
636 if (PEAR::isError($res)) {
640 if ($idSistema == $_SESSION['samurai']['id_sistema']){
641 $_SESSION['samurai']['id_sistema'] = '';
646 // +X2C Operation 306
648 * Modifica los datos en base
653 function _modificarDb() // ~X2C
655 //Grabo las modificaciones al sistema
656 $idSistema = $this->getId();
657 $fecha_inicio = $this->getFechaInicio();
658 $fecha_fin = $this->getFechaFin();
659 $fecha_implementacion = $this->getFechaImplementacion();
660 //USO SECUENCIAS Y AUTOEXECUTE
663 'nombre_sistema' => $this->getNombre(),
664 'desc_sistema' => $this->getDescripcion(),
665 'fecha_inicio' => $fecha_inicio ? $fecha_inicio->format("%Y-%m-%d") : null,
666 'fecha_fin' => $fecha_fin ? $fecha_fin->format("%Y-%m-%d") : null,
667 'fecha_implementacion' => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
668 'contacto' => $this->getContacto(),
669 'responsable' => $this->getResponsable(),
671 $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
672 if (PEAR::isError($res)) {
675 //Borro los permisos que no tengan observaciones
676 $res = $this->_borrarPermisosDb($idSistema, '');
677 if (PEAR::isError($res)) {
680 //Grabo los permisos que selecciono
681 $res = $this->_grabarPermisosDb($idSistema);
682 if (PEAR::isError($res)) {
689 // +X2C Operation 308
691 * Graba los permisos del sistema en perm_sist
693 * @param int $idSistema Identificador del sistema
698 function _grabarPermisosDb($idSistema) // ~X2C
700 $datos = array ('id_permiso','id_sistema','responsable');
701 $re = $this->_db->autoPrepare('perm_sist', $datos, DB_AUTOQUERY_INSERT);
702 if (isset($this->_permisos)) {
703 foreach ($this->_permisos as $permiso) {
704 $datos = array ($permiso, $idSistema, $this->getResponsable());
705 $res = $this->_db->execute($re, $datos);
706 if (PEAR::isError($res)) {
715 // +X2C Operation 309
717 * Borra los permisos que tenga asociado el sistema segun el criterio de observaciones
719 * @param int $idSistema Identificador del sistema
720 * @param bool $observaciones Null u observacion de la asociacion a borrar
721 * @param int $idPermiso Identificador del permiso a borrar
726 function _borrarPermisosDb($idSistema, $observaciones = null, $idPermiso = null) // ~X2C
728 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
729 $datos[] = $idSistema;
730 $tmp = $sql['borrar_permisos'];
731 if (isset($observaciones)) {
732 $tmp.= $sql['borrar_permisos2'];
733 $datos[] = $observaciones;
735 if (isset($idPermiso)) {
736 $tmp.= $sql['borrar_permisos3'];
737 $datos[] = $idPermiso;
739 $dbh = $this->_db->prepare($tmp);
740 $res = $this->_db->execute($dbh, $datos);
741 if (PEAR::isError($res)) {
748 // +X2C Operation 312
750 * Guarda en base las nuevas asociaciones que se van cargando y actualiza los datos del sistema.
752 * @param int $idPermiso Identificador del Permiso
753 * @param string $observacion Observacion a agregar
758 function guardarAsociacion($idPermiso, $observacion = '') // ~X2C
760 if (!$this->_existeAsociacion($idPermiso, $observacion)) {
761 //Guardo la asociacion
764 'id_permiso' => $idPermiso,
765 'id_sistema' => $this->getId(),
766 'observaciones' => $observacion,
767 'responsable' => $this->getResponsable(),
769 $res = $this->_db->autoExecute('perm_sist', $datos, DB_AUTOQUERY_INSERT);
770 //Recargo los datos del sistema
771 $this->_obtenerDatosDb();
775 return new PEAR_Error('La Asociacion ya existe.');
780 // +X2C Operation 313
782 * Elimina una asociacion de la base, y actualiza los datos del sistema.
784 * @param int $idPermiso Identificador del permiso a borrar
785 * @param string $observacion Observacion de la asociacion a borrar (Puede ser vacia)
790 function eliminarAsociacion($idPermiso, $observacion = '') // ~X2C
792 //TODO Arreglar el asco este
793 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
795 //Obtengo los id de los perfiles del permiso en el sistema
796 $tmp = $sql['ea_obt_idperfil'];
797 $dbh = $this->_db->prepare($tmp);
798 $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
799 if (PEAR::isError($res)) {
804 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
809 //Borro el permiso de los perfiles del sistema
810 $tmp = $sql['ea_del_perm_perfil_sist'];
811 $dbh = $this->_db->prepare($tmp);
812 $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
813 if (PEAR::isError($res)) {
816 //Verifico si era el unico permiso de cada uno de los perfiles en los que estaba asignado
818 foreach ($PERFILES as $perfil) {
820 $tmp = $sql['ea_obt_cuenta_perfil'];
821 $dbh = $this->_db->prepare($tmp);
822 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
823 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0) {
825 $tmp = $sql['ea_del_perfil_sist'];
826 $dbh = $this->_db->prepare($tmp);
827 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
828 if (PEAR::isError($res)) {
831 //Borro perfil_sist_usuario
832 $tmp = $sql['ea_del_perfil_sist_usuario'];
833 $dbh = $this->_db->prepare($tmp);
834 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
835 if (PEAR::isError($res)) {
838 //Verifico si hay otro sistema usando este perfil
839 $tmp = $sql['ea_obt_cuenta_perfil_sist'];
840 $dbh = $this->_db->prepare($tmp);
841 $res = $this->_db->execute($dbh, array ($perfil));
842 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0){
843 $tmp = $sql['ea_del_perfil'];
844 $dbh = $this->_db->prepare($tmp);
845 $res = $this->_db->execute($dbh, array ($perfil));
846 if (PEAR::isError($res)) {
853 //Borro la asociacion perm_sist
854 $res = $this->_borrarPermisosDb($this->getId(), $observacion, $idPermiso);
855 if (PEAR::isError($res)) {
858 //Recargo los datos del sistema
859 $this->_obtenerDatosDb();
863 // +X2C Operation 314
865 * Actualiza los datos de la asociacion en la base de datos.
867 * @param int $idPermiso Identificador del permiso
868 * @param string $observacion Observacion a insertar
869 * @param string $obs_ant Observacion anterior
874 function modificarAsociacion($idPermiso, $observacion = '', $obs_ant = '') // ~X2C
876 //Busco la nueva asociacion
877 if (!$this->_existeAsociacion($idPermiso, $observacion)) {
878 //Actualizo la asociacion
880 'id_permiso' => $idPermiso,
881 'id_sistema' => $this->getId(),
882 'observaciones' => $observacion,
883 'responsable' => $this->getResponsable(),
885 $this->_db->autoExecute('perm_sist',
888 'id_sistema = '.$this->getId().' AND id_permiso = '.$idPermiso.' AND observaciones =\''.$obs_ant.'\'');
890 //Recargo los datos del sistema
891 $this->_obtenerDatosDb();
895 return new PEAR_Error('La Asociacion ya existe.');
900 // +X2C Operation 315
902 * Chequea si existe la asociacion
904 * @param int $idPermiso Id del permiso a chequear
905 * @param string $observacion Observacion a chequear
910 function _existeAsociacion($idPermiso, $observacion) // ~X2C
912 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
913 $tmp = $sql['obtener_permisos'].$sql['obtener_permisos3'].$sql['obtener_permisos4'];
914 $dbh = $this->_db->prepare($tmp);
915 $tmp = array ($this->getId(),$idPermiso,$observacion);
916 $res = $this->_db->execute($dbh,$tmp);
917 $re = $res->fetchRow();
928 // +X2C Operation 341
930 * Devuelve el array de sistemas
932 * @param SAMURAI_DB &$db Base de Datos
934 * @return array(Sistema)
938 function getSistemas(&$db) // ~X2C
941 foreach (SAMURAI_Sistema::_getIdSistemas($db) as $id) {
942 $tmp = new SAMURAI_Sistema($db,$id);
943 array_push($rta, $tmp);
949 // +X2C Operation 342
951 * Devuleve un array con los identificadores de todos los sistemas.
953 * @param SAMURAI_DB &$db Base de Datos
959 function _getIdSistemas(&$db) // ~X2C
961 //OBTENGO LOS ID DE LA BASE
963 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
964 $dbh = $db->prepare($sql['obtener_datos_sistema'].$sql['obtener_datos_sistema3'].$sql['obtener_datos_sistema4']);
965 $res = $db->execute($dbh);
966 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
967 array_push($rta,$re['id_sistema']);
974 // +X2C Operation 343
976 * Devuelve un array asociativo en donde la clave es el identificador y el valor es el nombre del sistema
978 * @param SAMURAI_DB &$db Base de Datos
984 function getArraySistemas(&$db) // ~X2C
987 foreach (SAMURAI_Sistema::getSistemas($db) as $sistema) {
988 $rta[$sistema->getId()] = $sistema->getNombre();
994 } // -X2C Class :SAMURAI_Sistema