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 * @var array $asociaciones
126 // +X2C Operation 243
128 * Constructor. Si recibe como parametro el identificador busca en la DB los datos.
130 * @param SAMURAI_DB &$db Objeto Conexion
131 * @param int $id Identificador del sistema
136 function SAMURAI_Sistema(&$db, $id = null) // ~X2C
141 $this->_obtenerDatosDb();
145 $this->setDescripcion();
146 $this->setFechaInicio();
147 $this->setFechaFin();
148 $this->setFechaImplementacion();
149 $this->setContacto();
150 $this->setResponsable();
151 $this->setPermisos();
156 // +X2C Operation 244
158 * Devuelve el identificador del sistema.
163 function getId() // ~X2C
169 // +X2C Operation 245
171 * Devuelve el nombre del sistema.
176 function getNombre() // ~X2C
178 return $this->_nombre;
182 // +X2C Operation 246
184 * Devuelve la descrpcion del sistema.
189 function getDescripcion() // ~X2C
191 return $this->_descripcion;
195 // +X2C Operation 247
197 * Devuelve la fecha de inicio del sistema.
202 function &getFechaInicio() // ~X2C
204 if ($this->_fecha_inicio) {
205 return new Date ($this->_fecha_inicio.' 00:00:00');
213 // +X2C Operation 248
215 * Devuelve la fecha de finalizacion del sistema.
220 function &getFechaFin() // ~X2C
222 if ($this->_fecha_fin) {
223 return new Date ($this->_fecha_fin.' 00:00:00');
231 // +X2C Operation 249
233 * Devuelve la fecha de implementacion del sistema.
238 function &getFechaImplementacion() // ~X2C
240 if ($this->_fecha_implementacion) {
241 return new Date ($this->_fecha_implementacion.' 00:00:00');
249 // +X2C Operation 250
251 * Devuelve el contacto del sistema.
256 function getContacto() // ~X2C
258 return $this->_contacto;
262 // +X2C Operation 251
264 * Setea el nombre del sistema.
266 * @param string $nombre Nombre del sistema.
271 function setNombre($nombre = null) // ~X2C
273 $this->_nombre = $nombre;
277 // +X2C Operation 252
279 * Setea la descripcion del sistema.
281 * @param string $descripcion Descripcion del sistema.
286 function setDescripcion($descripcion = null) // ~X2C
288 $this->_descripcion = $descripcion;
292 // +X2C Operation 253
294 * Setea la fecha de inicio del sistema.
296 * @param date $fecha Fecha de inicio del sistema
301 function setFechaInicio($fecha = null) // ~X2C
303 if ($fecha && $fecha != '0000-00-00') {
304 $this->_fecha_inicio = $fecha;
307 $this->_fecha_inicio = null;
312 // +X2C Operation 254
314 * Setea la fecha de finalizacion del sistema.
316 * @param date $fecha Fecha de finalizacion del sistema.
321 function setFechaFin($fecha = null) // ~X2C
323 if ($fecha && $fecha != '0000-00-00') {
324 $this->_fecha_fin = $fecha;
327 $this->_fecha_fin = null;
332 // +X2C Operation 255
334 * Setea la fecha de implementacion del sistema.
336 * @param date $fecha Fecha de implementacion del sistema.
341 function setFechaImplementacion($fecha = null) // ~X2C
343 if ($fecha && $fecha != '0000-00-00') {
344 $this->_fecha_implementacion = $fecha;
347 $this->_fecha_implementacion = null;
353 // +X2C Operation 256
355 * Setea el contacto del sistema.
357 * @param string $contacto Texto con la informacion del contacto.
362 function setContacto($contacto = null) // ~X2C
364 $this->_contacto = $contacto;
368 // +X2C Operation 263
370 * Obtiene los datos del sistema de la DB.
375 function _obtenerDatosDb() // ~X2C
377 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
378 $tmp = $sql['obtener_datos_sistema'].$sql['obtener_datos_sistema2'];
379 $dbh = $this->_db->prepare($tmp);
380 $tmp = array ($this->getId());
381 $res = $this->_db->execute($dbh,$tmp);
383 if ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
384 if (isset($re['nombre_sistema'])) {
385 $this->setNombre($re['nombre_sistema']);
390 if (isset($re['desc_sistema'])) {
391 $this->setDescripcion($re['desc_sistema']);
394 $this->setDescripcion();
396 if (isset($re['fecha_inicio'])) {
397 $this->setFechaInicio($re['fecha_inicio']);
400 $this->setFechaInicio();
402 if (isset($re['fecha_fin'])) {
403 $this->setFechaFin($re['fecha_fin']);
406 $this->setFechaFin();
408 if (isset($re['fecha_implementacion'])) {
409 $this->setFechaImplementacion($re['fecha_implementacion']);
412 $this->setFechaImplementacion();
414 if (isset($re['contacto'])) {
415 $this->setContacto($re['contacto']);
418 $this->setContacto();
420 if (isset($re['responsable'])) {
421 $this->setResponsable($re['responsable']);
424 $this->setResponsable();
427 $tmp = $sql['obtener_permisos'];
428 $tmp.= $sql['borrar_permisos2'];
429 $dbh = $this->_db->prepare($tmp);
430 $tmp = array ($this->getId(),'');
431 $res = $this->_db->execute($dbh,$tmp);
434 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
438 $this->_permisos = $tmp;
439 $tmp = $sql['obtener_permisos'];
440 $tmp.= $sql['obtener_permisos2'];
441 $dbh = $this->_db->prepare($tmp);
442 $tmp = array ($this->getId());
443 $res = $this->_db->execute($dbh,$tmp);
446 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
447 $tmp[$i]['id'] = $re['0'];
448 $tmp[$i]['obs'] = $re['1'];
449 $tmp[$i]['desc'] = $re['2'];
452 $this->_asociaciones = $tmp;
456 // +X2C Operation 288
458 * Guarda la informacion del sistema en la base.
460 * @param string $accion Accion a realizar. Grabar, modificar o eliminar
465 function guardarDatos($accion = grabar) // ~X2C
467 $accion = strtolower($accion);
470 $res = $this->_grabarDb();
473 $res = $this->_modificarDb();
476 $res = $this->_borrarDb();
483 // +X2C Operation 290
485 * Devuelve el login del responsable de los ultimos cambios
490 function getResponsable() // ~X2C
492 return $this->_responsable;
496 // +X2C Operation 291
498 * Setea el login del responsable de los ultimos cambios del sistema
500 * @param string $responsable String con el login del responsable del cambio
505 function setResponsable($responsable = null) // ~X2C
507 $this->_responsable = $responsable;
511 // +X2C Operation 301
513 * Devuelve un array asociativo con los identificadores de los permisos
518 function getIdPermisos() // ~X2C
520 return $this->_permisos;
524 // +X2C Operation 302
526 * Setea los permisos de un sistema
528 * @param int $permisos Array asociativo con los permisos
533 function setPermisos($permisos = null) // ~X2C
535 $this->_permisos = $permisos;
539 // +X2C Operation 303
544 function getMaxIdSistema() // ~X2C
546 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
547 $dbh = $this->_db->prepare($sql['obtener_max_id_sistemas']);
548 $res = $this->_db->execute($dbh);
549 $re = $res->fetchrow(DB_FETCHMODE_ASSOC);
551 return $re['id_sistema'];
555 // +X2C Operation 304
557 * Graba los datos en la Base de Datos
562 function _grabarDb() // ~X2C
564 $idSistema = $this->_db->nextId('sistema');
565 $fecha_inicio = $this->getFechaInicio();
566 $fecha_fin = $this->getFechaFin();
567 $fecha_implementacion = $this->getFechaImplementacion();
568 //USO SECUENCIAS Y AUTOEXECUTE
571 'id_sistema' => $idSistema,
572 'nombre_sistema' => $this->getNombre(),
573 'desc_sistema' => $this->getDescripcion(),
574 'fecha_inicio' => $fecha_inicio ? $fecha_inicio->format("%Y-%m-%d") : null,
575 'fecha_fin' => $fecha_fin ? $fecha_fin->format("%Y-%m-%d") : null,
576 'fecha_implementacion' => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
577 'contacto' => $this->getContacto(),
578 'responsable' => $this->getResponsable(),
581 $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_INSERT);
583 if (PEAR::isError($res)) {
587 $res = $this->_grabarPermisosDb($idSistema);
588 if (PEAR::isError($res)) {
591 $this->_id = $idSistema;
595 // +X2C Operation 305
597 * Borra los datos de la base de datos
602 function _borrarDb() // ~X2C
604 $idSistema = $this->getId();
605 $responsable = $this->getResponsable();
606 //Cambio el estado al sistema
607 $datos = array( 'responsable' => $responsable,
610 $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
611 if (PEAR::isError($res)) {
615 if ($idSistema == @$_SESSION['samurai']['id_sistema']){
616 $_SESSION['samurai']['id_sistema'] = '';
621 // +X2C Operation 306
623 * Modifica los datos en base
628 function _modificarDb() // ~X2C
630 //Grabo las modificaciones al sistema
631 $idSistema = $this->getId();
632 $fecha_inicio = $this->getFechaInicio();
633 $fecha_fin = $this->getFechaFin();
634 $fecha_implementacion = $this->getFechaImplementacion();
635 //USO SECUENCIAS Y AUTOEXECUTE
638 'nombre_sistema' => $this->getNombre(),
639 'desc_sistema' => $this->getDescripcion(),
640 'fecha_inicio' => $fecha_inicio ? $fecha_inicio->format("%Y-%m-%d") : null,
641 'fecha_fin' => $fecha_fin ? $fecha_fin->format("%Y-%m-%d") : null,
642 'fecha_implementacion' => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
643 'contacto' => $this->getContacto(),
644 'responsable' => $this->getResponsable(),
646 $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
647 if (PEAR::isError($res)) {
650 //Borro los permisos que no tengan observaciones
651 $res = $this->_borrarPermisosDb($idSistema, '');
652 if (PEAR::isError($res)) {
655 //Grabo los permisos que selecciono
656 $res = $this->_grabarPermisosDb($idSistema);
657 if (PEAR::isError($res)) {
664 // +X2C Operation 308
666 * Graba los permisos del sistema en perm_sist
668 * @param int $idSistema Identificador del sistema
673 function _grabarPermisosDb($idSistema) // ~X2C
675 $datos = array ('id_permiso','id_sistema','responsable');
676 $re = $this->_db->autoPrepare('perm_sist', $datos, DB_AUTOQUERY_INSERT);
677 if (isset($this->_permisos)) {
678 foreach ($this->_permisos as $permiso) {
679 $datos = array ($permiso, $idSistema, $this->getResponsable());
680 $res = $this->_db->execute($re, $datos);
681 if (PEAR::isError($res)) {
690 // +X2C Operation 309
692 * Borra los permisos que tenga asociado el sistema segun el criterio de observaciones
694 * @param int $idSistema Identificador del sistema
695 * @param bool $observaciones Null u observacion de la asociacion a borrar
696 * @param int $idPermiso Identificador del permiso a borrar
701 function _borrarPermisosDb($idSistema, $observaciones = null, $idPermiso = null) // ~X2C
703 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
704 $datos[] = $idSistema;
705 $tmp = $sql['borrar_permisos'];
706 if (isset($observaciones)) {
707 $tmp.= $sql['borrar_permisos2'];
708 $datos[] = $observaciones;
710 if (isset($idPermiso)) {
711 $tmp.= $sql['borrar_permisos3'];
712 $datos[] = $idPermiso;
714 $dbh = $this->_db->prepare($tmp);
715 $res = $this->_db->execute($dbh, $datos);
716 if (PEAR::isError($res)) {
723 // +X2C Operation 312
725 * Guarda en base las nuevas asociaciones que se van cargando y actualiza los datos del sistema.
727 * @param int $idPermiso Identificador del Permiso
728 * @param string $observacion Observacion a agregar
733 function guardarAsociacion($idPermiso, $observacion = '') // ~X2C
735 if (!$this->_existeAsociacion($idPermiso, $observacion)) {
736 //Guardo la asociacion
739 'id_permiso' => $idPermiso,
740 'id_sistema' => $this->getId(),
741 'observaciones' => $observacion,
742 'responsable' => $this->getResponsable(),
744 $res = $this->_db->autoExecute('perm_sist', $datos, DB_AUTOQUERY_INSERT);
745 //Recargo los datos del sistema
746 $this->_obtenerDatosDb();
750 return new PEAR_Error('La Asociacion ya existe.');
755 // +X2C Operation 313
757 * Elimina una asociacion de la base, y actualiza los datos del sistema.
759 * @param int $idPermiso Identificador del permiso a borrar
760 * @param string $observacion Observacion de la asociacion a borrar (Puede ser vacia)
765 function eliminarAsociacion($idPermiso, $observacion = '') // ~X2C
767 //TODO Arreglar el asco este
768 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
770 //Obtengo los id de los perfiles del permiso en el sistema
771 $tmp = $sql['ea_obt_idperfil'];
772 $dbh = $this->_db->prepare($tmp);
773 $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
774 if (PEAR::isError($res)) {
779 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
784 //Borro el permiso de los perfiles del sistema
785 $tmp = $sql['ea_del_perm_perfil_sist'];
786 $dbh = $this->_db->prepare($tmp);
787 $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
788 if (PEAR::isError($res)) {
791 //Verifico si era el unico permiso de cada uno de los perfiles en los que estaba asignado
793 foreach ($PERFILES as $perfil) {
795 $tmp = $sql['ea_obt_cuenta_perfil'];
796 $dbh = $this->_db->prepare($tmp);
797 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
798 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0) {
800 $tmp = $sql['ea_del_perfil_sist'];
801 $dbh = $this->_db->prepare($tmp);
802 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
803 if (PEAR::isError($res)) {
806 //Borro perfil_sist_usuario
807 $tmp = $sql['ea_del_perfil_sist_usuario'];
808 $dbh = $this->_db->prepare($tmp);
809 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
810 if (PEAR::isError($res)) {
813 //Verifico si hay otro sistema usando este perfil
814 $tmp = $sql['ea_obt_cuenta_perfil_sist'];
815 $dbh = $this->_db->prepare($tmp);
816 $res = $this->_db->execute($dbh, array ($perfil));
817 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0){
818 $tmp = $sql['ea_del_perfil'];
819 $dbh = $this->_db->prepare($tmp);
820 $res = $this->_db->execute($dbh, array ($perfil));
821 if (PEAR::isError($res)) {
828 //Borro la asociacion perm_sist
829 $res = $this->_borrarPermisosDb($this->getId(), $observacion, $idPermiso);
830 if (PEAR::isError($res)) {
833 //Recargo los datos del sistema
834 $this->_obtenerDatosDb();
838 // +X2C Operation 314
840 * Actualiza los datos de la asociacion en la base de datos.
842 * @param int $idPermiso Identificador del permiso
843 * @param string $observacion Observacion a insertar
844 * @param string $obs_ant Observacion anterior
849 function modificarAsociacion($idPermiso, $observacion = '', $obs_ant = '') // ~X2C
851 //Busco la nueva asociacion
852 if (!$this->_existeAsociacion($idPermiso, $observacion)) {
853 //Actualizo la asociacion
855 'id_permiso' => $idPermiso,
856 'id_sistema' => $this->getId(),
857 'observaciones' => $observacion,
858 'responsable' => $this->getResponsable(),
860 $this->_db->autoExecute('perm_sist',
863 'id_sistema = '.$this->getId().' AND id_permiso = '.$idPermiso.' AND observaciones =\''.$obs_ant.'\'');
865 //Recargo los datos del sistema
866 $this->_obtenerDatosDb();
870 return new PEAR_Error('La Asociacion ya existe.');
875 // +X2C Operation 315
877 * Chequea si existe la asociacion
879 * @param int $idPermiso Id del permiso a chequear
880 * @param string $observacion Observacion a chequear
885 function _existeAsociacion($idPermiso, $observacion) // ~X2C
887 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
888 $tmp = $sql['obtener_permisos'].$sql['obtener_permisos3'].$sql['obtener_permisos4'];
889 $dbh = $this->_db->prepare($tmp);
890 $tmp = array ($this->getId(),$idPermiso,$observacion);
891 $res = $this->_db->execute($dbh,$tmp);
892 $re = $res->fetchRow();
903 // +X2C Operation 341
905 * Devuelve el array de sistemas
907 * @param SAMURAI_DB &$db Base de Datos
909 * @return array(Sistema)
913 function getSistemas(&$db) // ~X2C
916 foreach (SAMURAI_Sistema::_getIdSistemas($db) as $id) {
917 $tmp = new SAMURAI_Sistema($db,$id);
918 array_push($rta, $tmp);
924 // +X2C Operation 342
926 * Devuleve un array con los identificadores de todos los sistemas.
928 * @param SAMURAI_DB &$db Base de Datos
934 function _getIdSistemas(&$db) // ~X2C
936 //OBTENGO LOS ID DE LA BASE
938 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
939 $dbh = $db->prepare($sql['obtener_datos_sistema'].$sql['obtener_datos_sistema3'].$sql['obtener_datos_sistema4']);
940 $res = $db->execute($dbh);
941 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
942 array_push($rta,$re['id_sistema']);
949 // +X2C Operation 343
951 * Devuelve un array asociativo en donde la clave es el identificador y el valor es el nombre del sistema
953 * @param SAMURAI_DB &$db Base de Datos
959 function getArraySistemas(&$db) // ~X2C
962 foreach (SAMURAI_Sistema::getSistemas($db) as $sistema) {
963 $rta[$sistema->getId()] = $sistema->getNombre();
969 } // -X2C Class :SAMURAI_Sistema