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';
32 * Clase para el manejo de los sistemas.
36 class SAMURAI_Sistema {
38 * Identificador del sistema.
54 * Descripcion del sistema.
56 * @var string $descripcion
59 var $_descripcion = null;
62 * Fecha en la cual se inicio el sistema.
64 * @var date $fecha_inicio
67 var $_fecha_inicio = null;
70 * Fecha en la cual se dio por terminado el desarrollo del sistema.
72 * @var date $fecha_fin
75 var $_fecha_fin = null;
78 * Fecha de implementacion del sistema.
80 * @var date $fecha_implementacion
83 var $_fecha_implementacion = null;
86 * Texto con los datos del o de los contacto/s en el area usuario.
88 * @var string $contacto
91 var $_contacto = null;
102 * Login del responsable de los ultimos cambios del sistema.
104 * @var string $responsable
107 var $_responsable = null;
110 * Array asociativo (id - descripcion) con los permisos asociados al sistema.
112 * @var array $permisos
115 var $_permisos = null;
118 * Array con los permisos asociados al sistema
120 * @var array $asociaciones
123 var $_asociaciones = null;
126 * indica si el sistema esta activo o no.
139 function getAsociaciones()
141 return $this->_asociaciones;
147 * @param array $asociaciones Asociaciones.
152 function setAsociaciones($asociaciones)
154 $this->_asociaciones = $asociaciones;
165 return $this->_estado;
171 * @param int $estado Estado.
176 function setEstado($estado)
178 $this->_estado = $estado;
182 * Constructor. Si recibe como parametro el identificador busca en la DB los datos.
184 * @param SAMURAI_DB &$db Objeto Conexion
185 * @param int $id Identificador del sistema
190 function SAMURAI_Sistema(&$db, $id = null)
195 $this->_obtenerDatosDb();
200 * Devuelve el identificador del sistema.
211 * Devuelve el nombre del sistema.
218 return $this->_nombre;
222 * Devuelve la descrpcion del sistema.
227 function getDescripcion()
229 return $this->_descripcion;
233 * Devuelve la fecha de inicio del sistema.
238 function &getFechaInicio()
240 if ($this->_fecha_inicio) {
241 return new Date ($this->_fecha_inicio.' 00:00:00');
249 * Devuelve la fecha de finalizacion del sistema.
254 function &getFechaFin()
256 if ($this->_fecha_fin) {
257 return new Date ($this->_fecha_fin.' 00:00:00');
265 * Devuelve la fecha de implementacion del sistema.
270 function &getFechaImplementacion()
272 if ($this->_fecha_implementacion) {
273 return new Date ($this->_fecha_implementacion.' 00:00:00');
281 * Devuelve el contacto del sistema.
286 function getContacto()
288 return $this->_contacto;
292 * Setea el nombre del sistema.
294 * @param string $nombre Nombre del sistema.
299 function setNombre($nombre = null)
301 $this->_nombre = $nombre;
305 * Setea la descripcion del sistema.
307 * @param string $descripcion Descripcion del sistema.
312 function setDescripcion($descripcion = null)
314 $this->_descripcion = $descripcion;
318 * Setea la fecha de inicio del sistema.
320 * @param date $fecha Fecha de inicio del sistema
325 function setFechaInicio($fecha = null)
327 if ($fecha && $fecha != '0000-00-00') {
328 $this->_fecha_inicio = $fecha;
331 $this->_fecha_inicio = null;
336 * Setea la fecha de finalizacion del sistema.
338 * @param date $fecha Fecha de finalizacion del sistema.
343 function setFechaFin($fecha = null)
345 if ($fecha && $fecha != '0000-00-00') {
346 $this->_fecha_fin = $fecha;
349 $this->_fecha_fin = null;
354 * Setea la fecha de implementacion del sistema.
356 * @param date $fecha Fecha de implementacion del sistema.
361 function setFechaImplementacion($fecha = null)
363 if ($fecha && $fecha != '0000-00-00') {
364 $this->_fecha_implementacion = $fecha;
367 $this->_fecha_implementacion = null;
373 * Setea el contacto del sistema.
375 * @param string $contacto Texto con la informacion del contacto.
380 function setContacto($contacto = null)
382 $this->_contacto = $contacto;
386 * Obtiene los datos del sistema de la DB.
391 function _obtenerDatosDb()
393 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
394 $tmp = $sql['obtener_datos_sistema'].$sql['obtener_datos_sistema2'];
395 $dbh = $this->_db->prepare($tmp);
396 $tmp = array ($this->getId());
397 $res = $this->_db->execute($dbh,$tmp);
399 if ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
400 if (isset($re['nombre_sistema'])) {
401 $this->setNombre($re['nombre_sistema']);
403 if (isset($re['desc_sistema'])) {
404 $this->setDescripcion($re['desc_sistema']);
406 if (isset($re['fecha_inicio'])) {
407 $this->setFechaInicio($re['fecha_inicio']);
409 if (isset($re['fecha_fin'])) {
410 $this->setFechaFin($re['fecha_fin']);
412 if (isset($re['fecha_implementacion'])) {
413 $this->setFechaImplementacion($re['fecha_implementacion']);
415 if (isset($re['contacto'])) {
416 $this->setContacto($re['contacto']);
418 if (isset($re['responsable'])) {
419 $this->setResponsable($re['responsable']);
421 if (isset($re['estado'])) {
422 $this->setEstado($re['estado']);
425 $tmp = $sql['obtener_permisos'];
426 $tmp.= $sql['borrar_permisos2'];
427 $dbh = $this->_db->prepare($tmp);
428 $tmp = array ($this->getId(),'');
429 $res = $this->_db->execute($dbh,$tmp);
432 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
436 $this->_permisos = $tmp;
437 $tmp = $sql['obtener_permisos'];
438 $tmp.= $sql['obtener_permisos2'];
439 $dbh = $this->_db->prepare($tmp);
440 $tmp = array ($this->getId());
441 $res = $this->_db->execute($dbh,$tmp);
444 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
445 $tmp[$i]['id'] = $re['0'];
446 $tmp[$i]['obs'] = $re['1'];
447 $tmp[$i]['desc'] = $re['2'];
450 $this->_asociaciones = $tmp;
454 * Guarda la informacion del sistema en la base.
456 * @param string $accion Accion a realizar. Grabar, modificar o eliminar
461 function guardarDatos($accion = 'grabar')
463 $accion = strtolower($accion);
466 $res = $this->_grabarDb();
469 $res = $this->_modificarDb();
472 $res = $this->_borrarDb();
479 * Devuelve el login del responsable de los ultimos cambios
484 function getResponsable()
486 return $this->_responsable;
490 * Setea el login del responsable de los ultimos cambios del sistema
492 * @param string $responsable String con el login del responsable del cambio
497 function setResponsable($responsable = null)
499 $this->_responsable = $responsable;
503 * Devuelve un array asociativo con los identificadores de los permisos
508 function getIdPermisos()
510 return $this->_permisos;
514 * Setea los permisos de un sistema
516 * @param int $permisos Array asociativo con los permisos
521 function setPermisos($permisos = null)
523 $this->_permisos = $permisos;
530 function getMaxIdSistema()
532 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
533 $dbh = $this->_db->prepare($sql['obtener_max_id_sistemas']);
534 $res = $this->_db->execute($dbh);
535 $re = $res->fetchrow(DB_FETCHMODE_ASSOC);
537 return $re['id_sistema'];
541 * Graba los datos en la Base de Datos
548 $idSistema = $this->_db->nextId('sistema');
549 $fecha_inicio = $this->getFechaInicio();
550 $fecha_fin = $this->getFechaFin();
551 $fecha_implementacion = $this->getFechaImplementacion();
552 //USO SECUENCIAS Y AUTOEXECUTE
555 'id_sistema' => $idSistema,
556 'nombre_sistema' => $this->getNombre(),
557 'desc_sistema' => $this->getDescripcion(),
558 'fecha_inicio' => $fecha_inicio ? $fecha_inicio->format("%Y-%m-%d") : null,
559 'fecha_fin' => $fecha_fin ? $fecha_fin->format("%Y-%m-%d") : null,
560 'fecha_implementacion' => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
561 'contacto' => $this->getContacto(),
562 'responsable' => $this->getResponsable(),
563 'estado' => $this->getEstado()
565 $res = $this->_db->autoExecute('samurai.sistema', $datos, DB_AUTOQUERY_INSERT);
567 if (PEAR::isError($res)) {
571 $res = $this->_grabarPermisosDb($idSistema);
572 if (PEAR::isError($res)) {
575 $this->_id = $idSistema;
579 * Borra los datos de la base de datos
586 $idSistema = $this->getId();
587 $responsable = $this->getResponsable();
588 //Cambio el estado al sistema
589 $datos = array( 'responsable' => $responsable,
592 $res = $this->_db->autoExecute('samurai.sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
593 if (PEAR::isError($res)) {
597 if ($idSistema == @$_SESSION['samurai']['id_sistema']){
598 $_SESSION['samurai']['id_sistema'] = '';
603 * Modifica los datos en base
608 function _modificarDb()
610 //Grabo las modificaciones al sistema
611 $idSistema = $this->getId();
612 $fecha_inicio = $this->getFechaInicio();
613 $fecha_fin = $this->getFechaFin();
614 $fecha_implementacion = $this->getFechaImplementacion();
615 //USO SECUENCIAS Y AUTOEXECUTE
618 'nombre_sistema' => $this->getNombre(),
619 'desc_sistema' => $this->getDescripcion(),
620 'fecha_inicio' => $fecha_inicio ? $fecha_inicio->format("%Y-%m-%d") : null,
621 'fecha_fin' => $fecha_fin ? $fecha_fin->format("%Y-%m-%d") : null,
622 'fecha_implementacion' => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
623 'contacto' => $this->getContacto(),
624 'responsable' => $this->getResponsable(),
625 'estado' => $this->getEstado()
627 $res = $this->_db->autoExecute('samurai.sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
628 if (PEAR::isError($res)) {
631 //Borro los permisos que no tengan observaciones
632 $res = $this->_borrarPermisosDb($idSistema, '');
633 if (PEAR::isError($res)) {
636 //Grabo los permisos que selecciono
637 $res = $this->_grabarPermisosDb($idSistema);
638 if (PEAR::isError($res)) {
644 * Graba los permisos del sistema en perm_sist
646 * @param int $idSistema Identificador del sistema
651 function _grabarPermisosDb($idSistema)
653 $datos = array ('id_permiso','id_sistema','responsable');
654 $re = $this->_db->autoPrepare('samurai.perm_sist', $datos, DB_AUTOQUERY_INSERT);
655 if (isset($this->_permisos)) {
656 foreach ($this->_permisos as $permiso) {
657 $datos = array ($permiso, $idSistema, $this->getResponsable());
658 $res = $this->_db->execute($re, $datos);
659 if (PEAR::isError($res)) {
668 * Borra los permisos que tenga asociado el sistema segun el criterio de observaciones
670 * @param int $idSistema Identificador del sistema
671 * @param bool $observaciones Null u observacion de la asociacion a borrar
672 * @param int $idPermiso Identificador del permiso a borrar
677 function _borrarPermisosDb($idSistema, $observaciones = null, $idPermiso = null)
679 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
680 $datos[] = $idSistema;
681 $tmp = $sql['borrar_permisos'];
682 if (isset($observaciones)) {
683 $tmp.= $sql['borrar_permisos2'];
684 $datos[] = $observaciones;
686 if (isset($idPermiso)) {
687 $tmp.= $sql['borrar_permisos3'];
688 $datos[] = $idPermiso;
690 $dbh = $this->_db->prepare($tmp);
691 $res = $this->_db->execute($dbh, $datos);
692 if (PEAR::isError($res)) {
698 * Guarda en base las nuevas asociaciones que se van cargando y actualiza los datos del sistema.
700 * @param int $idPermiso Identificador del Permiso
701 * @param string $observacion Observacion a agregar
706 function guardarAsociacion($idPermiso, $observacion = '')
708 if (!$this->_existeAsociacion($idPermiso, $observacion)) {
709 //Guardo la asociacion
712 'id_permiso' => $idPermiso,
713 'id_sistema' => $this->getId(),
714 'observaciones' => $observacion,
715 'responsable' => $this->getResponsable(),
717 $res = $this->_db->autoExecute('samurai.perm_sist', $datos, DB_AUTOQUERY_INSERT);
718 //Recargo los datos del sistema
719 $this->_obtenerDatosDb();
723 return new PEAR_Error('La Asociacion ya existe.');
728 * Elimina una asociacion de la base, y actualiza los datos del sistema.
730 * @param int $idPermiso Identificador del permiso a borrar
731 * @param string $observacion Observacion de la asociacion a borrar (Puede ser vacia)
736 function eliminarAsociacion($idPermiso, $observacion = '')
738 //TODO Arreglar el asco este
739 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
741 //Obtengo los id de los perfiles del permiso en el sistema
742 $tmp = $sql['ea_obt_idperfil'];
743 $dbh = $this->_db->prepare($tmp);
744 $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
745 if (PEAR::isError($res)) {
750 while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
755 //Borro el permiso de los perfiles del sistema
756 $tmp = $sql['ea_del_perm_perfil_sist'];
757 $dbh = $this->_db->prepare($tmp);
758 $res = $this->_db->execute($dbh, array ($idPermiso, $observacion, $this->getId()));
759 if (PEAR::isError($res)) {
762 //Verifico si era el unico permiso de cada uno de los perfiles en los que estaba asignado
764 foreach ($PERFILES as $perfil) {
766 $tmp = $sql['ea_obt_cuenta_perfil'];
767 $dbh = $this->_db->prepare($tmp);
768 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
769 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0) {
771 $tmp = $sql['ea_del_perfil_sist'];
772 $dbh = $this->_db->prepare($tmp);
773 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
774 if (PEAR::isError($res)) {
777 //Borro perfil_sist_usuario
778 $tmp = $sql['ea_del_perfil_sist_usuario'];
779 $dbh = $this->_db->prepare($tmp);
780 $res = $this->_db->execute($dbh, array ($perfil, $this->getId()));
781 if (PEAR::isError($res)) {
784 //Verifico si hay otro sistema usando este perfil
785 $tmp = $sql['ea_obt_cuenta_perfil_sist'];
786 $dbh = $this->_db->prepare($tmp);
787 $res = $this->_db->execute($dbh, array ($perfil));
788 if (($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) && $re['cuenta'] == 0){
789 $tmp = $sql['ea_del_perfil'];
790 $dbh = $this->_db->prepare($tmp);
791 $res = $this->_db->execute($dbh, array ($perfil));
792 if (PEAR::isError($res)) {
799 //Borro la asociacion perm_sist
800 $res = $this->_borrarPermisosDb($this->getId(), $observacion, $idPermiso);
801 if (PEAR::isError($res)) {
804 //Recargo los datos del sistema
805 $this->_obtenerDatosDb();
809 * Actualiza los datos de la asociacion en la base de datos.
811 * @param int $idPermiso Identificador del permiso
812 * @param string $observacion Observacion a insertar
813 * @param string $obs_ant Observacion anterior
818 function modificarAsociacion($idPermiso, $observacion = '', $obs_ant = '')
820 //Busco la nueva asociacion
821 if (!$this->_existeAsociacion($idPermiso, $observacion)) {
822 //Actualizo la asociacion
824 'id_permiso' => $idPermiso,
825 'id_sistema' => $this->getId(),
826 'observaciones' => $observacion,
827 'responsable' => $this->getResponsable(),
829 $this->_db->autoExecute('samurai.perm_sist',
832 'id_sistema = '.$this->getId().' AND id_permiso = '.$idPermiso.' AND observaciones =\''.$obs_ant.'\'');
834 //Recargo los datos del sistema
835 $this->_obtenerDatosDb();
839 return new PEAR_Error('La Asociacion ya existe.');
844 * Chequea si existe la asociacion
846 * @param int $idPermiso Id del permiso a chequear
847 * @param string $observacion Observacion a chequear
852 function _existeAsociacion($idPermiso, $observacion)
854 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
855 $tmp = $sql['obtener_permisos'].$sql['obtener_permisos3'].$sql['obtener_permisos4'];
856 $dbh = $this->_db->prepare($tmp);
857 $tmp = array ($this->getId(),$idPermiso,$observacion);
858 $res = $this->_db->execute($dbh,$tmp);
859 $re = $res->fetchRow();
870 * Devuelve el array de sistemas
872 * @param SAMURAI_DB &$db Base de Datos
873 * @param bool $activos Indica si se deben buscar solamente los sistemas activos
875 * @return array(Sistema)
879 function getSistemas(&$db, $activos = true)
882 foreach (SAMURAI_Sistema::_getIdSistemas($db, $activos) as $id) {
883 $tmp = new SAMURAI_Sistema($db,$id);
884 array_push($rta, $tmp);
890 * Devuleve un array con los identificadores de todos los sistemas.
892 * @param SAMURAI_DB &$db Base de Datos
893 * @param bool $activos Indica si se deben buscar solamente los sistemas activos
899 function _getIdSistemas(&$db, $activos = true)
901 //OBTENGO LOS ID DE LA BASE
903 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
904 $consulta = $sql['obtener_datos_sistema'];
906 $consulta.= $sql['obtener_datos_sistema3'];
908 $consulta.= $sql['obtener_datos_sistema4'];
909 $dbh = $db->prepare($consulta);
910 $res = $db->execute($dbh);
911 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
912 array_push($rta,$re['id_sistema']);
919 * Devuelve un array asociativo en donde la clave es el identificador y el valor es el nombre del sistema
921 * @param SAMURAI_DB &$db Base de Datos
922 * @param bool $activos Indica si se deben buscar solamente los sistemas activos
928 function getArraySistemas(&$db, $activos = true)
931 foreach (SAMURAI_Sistema::getSistemas($db, $activos) as $sistema) {
932 $rta[$sistema->getId()] = $sistema->getNombre();
938 * 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.
940 * @param DB &$DB Conexion a la base de datos
945 function getArraySistemasSeleccionar(&$DB)
948 $sql = parse_ini_file(dirname(__FILE__) . '/Sistema/consultas.ini', true);
949 //Verifico si tiene permiso developer en samurai
950 $consulta = $sql['sistemas_seleccionar2'];
951 $dbh = $DB->prepare($consulta);
952 $res = $DB->execute($dbh, array(SAMURAI_PERM, $_SESSION['usuario'],
953 SAMURAI_PERM_DEVELOPER));
954 $re = $res->fetchrow(DB_FETCHMODE_ASSOC);
956 $consulta = $sql['obtener_datos_sistema'];
957 $consulta.= $sql['obtener_datos_sistema3'];
958 $consulta.= $sql['obtener_datos_sistema4'];
959 $dbh = $DB->prepare($consulta);
960 $res = $DB->execute($dbh);
961 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
962 $rta[$re['id_sistema']] = $re['nombre_sistema'];
967 //Si no tiene permiso developer en samurai le muestro solo aquellos
968 //sistemas en los cuales puede trabajar
969 $consulta = $sql['sistemas_seleccionar'];
970 $dbh = $DB->prepare($consulta);
971 $res = $DB->execute($dbh, array($_SESSION['usuario'],
972 SAMURAI_PERM_PERFIL_ALTA, SAMURAI_PERM_PERFIL_BAJA,
973 SAMURAI_PERM_PERFIL_MODIF, SAMURAI_PERM_USUARIO_ALTA,
974 SAMURAI_PERM_USUARIO_BAJA, SAMURAI_PERM_USUARIO_MODIF));
975 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
976 $rta[$re['id_sistema']] = $re['nombre_sistema'];