]> git.llucax.com Git - mecon/samurai.git/blob - sistema/local_lib/Sistema.php
ABM de sistemas listo. Falta agregar las observaciones a la asociacion de permisos...
[mecon/samurai.git] / sistema / local_lib / Sistema.php
1 <?php
2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
3 // +----------------------------------------------------------------------+
4 // | PHP Version 4                                                        |
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 // +----------------------------------------------------------------------+
19 //
20 // $Id$
21 // $Author$
22 // $URL$
23 // $Date$
24 // $Rev$
25 //
26
27 #require_once 'PEAR.php';
28 require_once 'Samurai_DB.php';
29 require_once 'Date.php';
30
31 // +X2C Class 209 :Sistema
32 /**
33  * Clase para el manejo de los sistemas.
34  *
35  * @access public
36  */
37 class Sistema {
38     /**
39      * Identificador del sistema.
40      *
41      * @var    int $id
42      * @access private
43      */
44     var $_id;
45
46     /**
47      * Nombre del sistema.
48      *
49      * @var    string $nombre
50      * @access private
51      */
52     var $_nombre;
53
54     /**
55      * Descripcion del sistema.
56      *
57      * @var    string $descripcion
58      * @access private
59      */
60     var $_descripcion;
61
62     /**
63      * Fecha en la cual se inicio el sistema.
64      *
65      * @var    date $fecha_inicio
66      * @access private
67      */
68     var $_fecha_inicio;
69
70     /**
71      * Fecha en la cual se dio por terminado el desarrollo del sistema.
72      *
73      * @var    date $fecha_fin
74      * @access private
75      */
76     var $_fecha_fin;
77
78     /**
79      * Fecha de implementacion del sistema.
80      *
81      * @var    date $fecha_implementacion
82      * @access private
83      */
84     var $_fecha_implementacion;
85
86     /**
87      * Texto con los datos del o de los contacto/s en el area usuario.
88      *
89      * @var    string $contacto
90      * @access private
91      */
92     var $_contacto;
93
94     /**
95      * Objeto Samurai_DB
96      *
97      * @var    Samurai_DB $db
98      * @access private
99      */
100     var $_db;
101
102     /**
103      * Login del responsable de los ultimos cambios del sistema.
104      *
105      * @var    string $responsable
106      * @access private
107      */
108     var $_responsable;
109
110     /**
111      * Array asociativo (id - descripcion) con los permisos asociados al sistema.
112      *
113      * @var    array $permisos
114      * @access private
115      */
116     var $_permisos;
117
118     // ~X2C
119
120     // +X2C Operation 243
121     /**
122      * Constructor. Si recibe como parametro el identificador busca en la DB los datos.
123      *
124      * @param  Samurai_DB &$db Objeto Conexion
125      * @param  int $id Identificador del sistema
126      *
127      * @return void
128      * @access public
129      */
130     function Sistema(&$db, $id = null)// ~X2C
131     {
132         $this->_db =& $db;
133         $this->_id = $id;
134         if (!is_null($id)) {
135             $this->_obtenerDatosDb();
136         }
137         else {
138             $this->setNombre();
139             $this->setDescripcion(); 
140             $this->setFechaInicio();
141             $this->setFechaFin();
142             $this->setFechaImplementacion();
143             $this->setContacto();
144             $this->setResponsable();
145             $this->setPermisos();
146         }
147     }
148     // -X2C
149
150     // +X2C Operation 244
151     /**
152      * Devuelve el identificador del sistema.
153      *
154      * @return int
155      * @access public
156      */
157     function getId()// ~X2C
158     {
159         return $this->_id;
160     }
161     // -X2C
162
163     // +X2C Operation 245
164     /**
165      * Devuelve el nombre del sistema.
166      *
167      * @return string
168      * @access public
169      */
170     function getNombre()// ~X2C
171     {
172         return $this->_nombre;
173     }
174     // -X2C
175
176     // +X2C Operation 246
177     /**
178      * Devuelve la descrpcion del sistema.
179      *
180      * @return string
181      * @access public
182      */
183     function getDescripcion()// ~X2C
184     {
185         return $this->_descripcion;
186     }
187     // -X2C
188
189     // +X2C Operation 247
190     /**
191      * Devuelve la fecha de inicio del sistema.
192      *
193      * @return &date
194      * @access public
195      */
196     function &getFechaInicio()// ~X2C
197     {        
198         if ($this->_fecha_inicio) {
199             return new Date ($this->_fecha_inicio.' 00:00:00');
200         }
201         else {
202             return null;
203         }
204     }
205     // -X2C
206
207     // +X2C Operation 248
208     /**
209      * Devuelve la fecha de finalizacion del sistema.
210      *
211      * @return &date
212      * @access public
213      */
214     function &getFechaFin()// ~X2C
215     {
216         if ($this->_fecha_fin) {
217             return new Date ($this->_fecha_fin.' 00:00:00');
218         }
219         else {
220             return null;
221         }
222     }
223     // -X2C
224
225     // +X2C Operation 249
226     /**
227      * Devuelve la fecha de implementacion del sistema.
228      *
229      * @return &date
230      * @access public
231      */
232     function &getFechaImplementacion()// ~X2C
233     {
234         if ($this->_fecha_implementacion) {
235             return new Date ($this->_fecha_implementacion.' 00:00:00');
236         }
237         else {
238             return null;
239         }
240     }
241     // -X2C
242
243     // +X2C Operation 250
244     /**
245      * Devuelve el contacto del sistema.
246      *
247      * @return string
248      * @access public
249      */
250     function getContacto()// ~X2C
251     {
252         return $this->_contacto;
253     }
254     // -X2C
255
256     // +X2C Operation 251
257     /**
258      * Setea el nombre del sistema.
259      *
260      * @param  string $nombre Nombre del sistema.
261      *
262      * @return void
263      * @access public
264      */
265     function setNombre($nombre = null)// ~X2C
266     {
267         $this->_nombre = $nombre;
268     }
269     // -X2C
270
271     // +X2C Operation 252
272     /**
273      * Setea la descripcion del sistema.
274      *
275      * @param  string $descripcion Descripcion del sistema.
276      *
277      * @return void
278      * @access public
279      */
280     function setDescripcion($descripcion = null)// ~X2C
281     {
282         $this->_descripcion = $descripcion;
283     }
284     // -X2C
285
286     // +X2C Operation 253
287     /**
288      * Setea la fecha de inicio del sistema.
289      *
290      * @param  date $fecha Fecha de inicio del sistema
291      *
292      * @return void
293      * @access public
294      */
295     function setFechaInicio($fecha = null)// ~X2C
296     {
297         if ($fecha && $fecha != '0000-00-00') {
298             $this->_fecha_inicio = $fecha;
299         }
300         else {
301             $this->_fecha_inicio = null;
302         }
303     }
304     // -X2C
305
306     // +X2C Operation 254
307     /**
308      * Setea la fecha de finalizacion del sistema.
309      *
310      * @param  date $fecha Fecha de finalizacion del sistema.
311      *
312      * @return void
313      * @access public
314      */
315     function setFechaFin($fecha = null)// ~X2C
316     {
317         if ($fecha && $fecha != '0000-00-00') {
318             $this->_fecha_fin = $fecha;
319         }
320         else {
321             $this->_fecha_fin = null;
322         }
323     }
324     // -X2C
325
326     // +X2C Operation 255
327     /**
328      * Setea la fecha de implementacion del sistema.
329      *
330      * @param  date $fecha Fecha de implementacion del sistema.
331      *
332      * @return void
333      * @access public
334      */
335     function setFechaImplementacion($fecha = null)// ~X2C
336     {
337         if ($fecha && $fecha != '0000-00-00') {
338             $this->_fecha_implementacion = $fecha;
339         }
340         else {
341             $this->_fecha_implementacion = null;
342         }
343
344     }
345     // -X2C
346
347     // +X2C Operation 256
348     /**
349      * Setea el contacto del sistema.
350      *
351      * @param  string $contacto Texto con la informacion del contacto.
352      *
353      * @return void
354      * @access public
355      */
356     function setContacto($contacto = null)// ~X2C
357     {
358         $this->_contacto = $contacto;
359     }
360     // -X2C
361
362     // +X2C Operation 263
363     /**
364      * Obtiene los datos del sistema de la DB.
365      *
366      * @return void
367      * @access private
368      */
369     function _obtenerDatosDb()// ~X2C
370     {
371         $sql = include 'Sistema/consultas.php'; //Incluyo las consultas de este objeto nada mas.
372         $tmp = $sql['obtener_datos_sistema'].$sql['obtener_datos_sistema2'];
373         $dbh = $this->_db->prepare($tmp);
374         $tmp = array ($this->getId());
375         $res = $this->_db->execute($dbh,$tmp);        
376
377         if ($re  = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
378             if (isset($re['nombre_sistema'])) {
379                 $this->setNombre($re['nombre_sistema']);
380             }
381             else {
382                 $this->setNombre();
383             }
384             if (isset($re['desc_sistema'])) {
385                $this->setDescripcion($re['desc_sistema']);
386             }
387             else {
388                 $this->setDescripcion();
389             }
390             if (isset($re['fecha_inicio'])) {
391                 $this->setFechaInicio($re['fecha_inicio']);
392             }
393             else {
394                 $this->setFechaInicio();
395             }
396             if (isset($re['fecha_fin'])) {
397                 $this->setFechaFin($re['fecha_fin']);
398             }
399             else {
400                 $this->setFechaFin();
401             }
402             if (isset($re['fecha_implementacion'])) {
403                 $this->setFechaImplementacion($re['fecha_implementacion']);
404             }
405             else {
406                 $this->setFechaImplementacion();
407             }
408             if (isset($re['contacto'])) {
409                 $this->setContacto($re['contacto']);
410             }
411             else {
412                 $this->setContacto();
413             }
414             if (isset($re['responsable'])) {
415                 $this->setResponsable($re['responsable']);
416             }
417             else {
418                 $this->setResponsable();
419             }
420         }
421         $tmp = $sql['obtener_permisos'];
422         $dbh = $this->_db->prepare($tmp);
423         $tmp = array ($this->getId());
424         $res = $this->_db->execute($dbh,$tmp);        
425         $tmp = array();
426         while ($re = $res->fetchRow(DB_FETCHMODE_ORDERED)) {
427             $tmp[] = $re['0'];
428         }
429         $this->_permisos = $tmp;
430     }
431     // -X2C
432
433     // +X2C Operation 288
434     /**
435      * Guarda la informacion del sistema en la base.
436      *
437      * @param  string $accion Accion a realizar. Grabar, modificar o eliminar
438      *
439      * @return void
440      * @access public
441      */
442     function guardarDatos($accion = grabar)// ~X2C
443     {
444         $accion = strtolower($accion);
445         switch ($accion)  {
446             case 'grabar':
447                 $this->_grabarDb();        
448                 break; 
449             case 'modificar':
450                 $this->_modificarDb();
451                 break;
452             case 'eliminar':
453                 $this->_borrarDb();
454                 break;
455         }
456     }
457     // -X2C
458
459     // +X2C Operation 290
460     /**
461      * Devuelve el login del responsable de los ultimos cambios
462      *
463      * @return string
464      * @access public
465      */
466     function getResponsable()// ~X2C
467     {
468         return $this->_responsable;
469     }
470     // -X2C
471
472     // +X2C Operation 291
473     /**
474      * Setea el login del responsable de los ultimos cambios del sistema
475      *
476      * @param  string $responsable String con el login del responsable del cambio
477      *
478      * @return void
479      * @access public
480      */
481     function setResponsable($responsable = null)// ~X2C
482     {
483         $this->_responsable = $responsable;
484     }
485     // -X2C
486
487     // +X2C Operation 301
488     /**
489      * Devuelve un array asociativo con los identificadores de los permisos
490      *
491      * @return array
492      * @access public
493      */
494     function getIdPermisos()// ~X2C
495     {
496         return $this->_permisos;
497     }
498     // -X2C
499
500     // +X2C Operation 302
501     /**
502      * Setea los permisos de un sistema
503      *
504      * @param  int $permisos Array asociativo con los permisos
505      *
506      * @return void
507      * @access public
508      */
509     function setPermisos($permisos = null)// ~X2C
510     {
511         $this->_permisos = $permisos;
512     }
513     // -X2C
514
515     // +X2C Operation 303
516     /**
517      * @return int
518      * @access public
519      */
520     function getMaxIdSistema()// ~X2C
521     {
522         $sql = include 'Sistema/consultas.php';
523         $dbh = $this->_db->prepare($sql['obtener_max_id_sistemas']);
524         $res = $this->_db->execute($dbh);
525         $re = $res->fetchrow(DB_FETCHMODE_ASSOC);
526         $res->free();
527         return $re['id_sistema']; 
528     }
529     // -X2C
530
531     // +X2C Operation 304
532     /**
533      * Graba los datos en la Base de Datos
534      *
535      * @return void
536      * @access private
537      */
538     function _grabarDb()// ~X2C
539     {
540         $idSistema = $this->_db->nextId('sistema');
541         $fecha_inicio         = $this->getFechaInicio();
542         $fecha_fin            = $this->getFechaFin();
543         $fecha_implementacion = $this->getFechaImplementacion();
544         //USO SECUENCIAS Y AUTOEXECUTE
545         //Grabo el sistema        
546         $datos = array(  
547                     'id_sistema'            => $idSistema,
548                     'nombre_sistema'        => $this->getNombre(),
549                     'desc_sistema'          => $this->getDescripcion(),
550                     'fecha_inicio'          => $fecha_inicio         ? $fecha_inicio->format("%Y-%m-%d")         : null, 
551                     'fecha_fin'             => $fecha_fin            ? $fecha_fin->format("%Y-%m-%d")            : null, 
552                     'fecha_implementacion'  => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
553                     'contacto'              => $this->getContacto(),
554                     'responsable'           => $this->getResponsable(),
555                     'estado'                => 1
556                 );                
557         $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_INSERT);
558
559         if (DB::isError($res)) {
560             trigger_error('Error al tratar de insertar el sistema -> '.$res, E_USER_ERROR);
561         }
562         
563         //Grabo los permisos
564         $this->_grabarPermisosDb($idSistema);
565     }
566     // -X2C
567
568     // +X2C Operation 305
569     /**
570      * Borra los datos de la base de datos
571      *
572      * @return void
573      * @access private
574      */
575     function _borrarDb()// ~X2C
576     {
577         $idSistema   = $this->getId();
578         $responsable = $this->getResponsable();
579         //Cambio el estado al sistema
580         $datos = array( 'responsable' => $responsable,
581                         'estado'      => 0
582                 );                
583
584         $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
585         if (DB::isError($res)) {
586             trigger_error('Error en sistema -> '.$res, E_USER_ERROR);
587         }
588         
589         //Borro los permisos que tiene asignado el sistema
590         //Borro absolutamente todos los permisos que tiene asociado -> No hay vuelta a atras
591         $this->_borrarPermisosDb($idSistema, false);
592     }
593     // -X2C
594
595     // +X2C Operation 306
596     /**
597      * Modifica los datos en base
598      *
599      * @return void
600      * @access private
601      */
602     function _modificarDb()// ~X2C
603     {
604         //Grabo las modificaciones al sistema
605         $idSistema            = $this->getId();
606         $fecha_inicio         = $this->getFechaInicio();
607         $fecha_fin            = $this->getFechaFin();
608         $fecha_implementacion = $this->getFechaImplementacion();
609         //USO SECUENCIAS Y AUTOEXECUTE
610         //Grabo el sistema        
611         $datos = array(  
612                     'nombre_sistema'        => $this->getNombre(),
613                     'desc_sistema'          => $this->getDescripcion(),
614                     'fecha_inicio'          => $fecha_inicio         ? $fecha_inicio->format("%Y-%m-%d")         : null, 
615                     'fecha_fin'             => $fecha_fin            ? $fecha_fin->format("%Y-%m-%d")            : null, 
616                     'fecha_implementacion'  => $fecha_implementacion ? $fecha_implementacion->format("%Y-%m-%d") : null,
617                     'contacto'              => $this->getContacto(),
618                     'responsable'           => $this->getResponsable(),
619                 );                
620         $res = $this->_db->autoExecute('sistema', $datos, DB_AUTOQUERY_UPDATE, 'id_sistema = '.$idSistema);
621
622         if (DB::isError($res)) {
623             trigger_error('Error al tratar de insertar el sistema -> '.var_dump($res), E_USER_ERROR);
624         }
625         //Borro los permisos que no tengan observaciones
626         $this->_borrarPermisosDb($idSistema, true);
627         //Grabo los permisos que selecciono
628         $this->_grabarPermisosDb($idSistema);
629     }
630     // -X2C
631
632
633     // +X2C Operation 308
634     /**
635      * Graba los permisos del sistema en perm_sist
636      *
637      * @param  int $idSistema Identificador del sistema
638      *
639      * @return void
640      * @access private
641      */
642     function _grabarPermisosDb($idSistema)// ~X2C
643     {
644         $datos = array ('id_permiso','id_sistema','responsable');
645         $re = $this->_db->autoPrepare('perm_sist', $datos, DB_AUTOQUERY_INSERT);
646         if (isset($this->_permisos)) {
647             foreach ($this->_permisos as $permiso) {
648                 $datos = array ($permiso['0'], $idSistema, $this->getResponsable());
649                 $res = $this->_db->execute($re, $datos);
650                 if (DB::isError($res)) {
651                     trigger_error('Error en perm_sist -> '.$res, E_USER_ERROR);
652                 }
653             }
654         }
655         
656     }
657     // -X2C
658
659     // +X2C Operation 309
660     /**
661      * Borra los permisos que tenga asociado el sistema segun el criterio de observaciones
662      *
663      * @param  int $idSistema Identificador del sistema
664      * @param  bool $observaciones Si es false borra todas las asociaciones que tenga el sistema. Si es true borra solo aquellas que tengan observaciones = ''
665      *
666      * @return void
667      * @access private
668      */
669     function _borrarPermisosDb($idSistema, $observaciones)// ~X2C
670     {
671         $sql = include 'Sistema/consultas.php';
672         $datos[] = $idSistema;
673         $tmp = $sql['borrar_permisos']; 
674         if ($observaciones) {
675             $tmp.= $sql['borrar_permisos2'];
676             $datos[] = '';
677         }
678         $dbh = $this->_db->prepare($tmp);
679         $res = $this->_db->execute($dbh, $datos);
680     }
681     // -X2C
682
683 } // -X2C Class :Sistema
684
685 ?>