/[openfoncier]/branches/old-trunk/obj/dossier_instruction.class.php
ViewVC logotype

Diff of /branches/old-trunk/obj/dossier_instruction.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 896 by mlimic, Thu Nov 29 11:14:21 2012 UTC revision 3445 by softime, Thu Apr 30 14:13:40 2015 UTC
# Line 8  class dossier_instruction extends dossie Line 8  class dossier_instruction extends dossie
8    
9      function dossier_instruction($id, &$db, $DEBUG) {      function dossier_instruction($id, &$db, $DEBUG) {
10          //          //
11          $this->constructeur($id, $db, $DEBUG);          //$this->constructeur($id, $db, $DEBUG);
12            $this->dossier($id, $db, $DEBUG);
13      }      }
14    
15        /**
16         * Définition des actions disponibles sur la classe.
17         *
18         * @return void
19         */
20        function init_class_actions() {
21            //
22            parent::init_class_actions();
23    
24            // ACTION - 001 - modifier
25            //
26            $this->class_actions[1]["portlet"]["libelle"] = _("Modifier");
27            $this->class_actions[1]["condition"] = "is_editable";
28    
29            // ACTION - 002 - supprimer
30            //
31            $this->class_actions[2]["portlet"]["libelle"] = _("Supprimer");
32            $this->class_actions[2]["portlet"]["order"] = 125;
33    
34            // ACTION - 100 - donnees_techniques
35            // Affiche dans un overlay les données techniques
36            $this->class_actions[100] = array(
37                "identifier" => "donnees_techniques",
38                "portlet" => array(
39                    "type" => "action-self",
40                    "libelle" => _("Données techniques"),
41                    "order" => 100,
42                    "class" => "rediger-16",
43                ),
44                "view" => "view_donnees_techniques",
45                "permission_suffix" => "donnees_techniques_consulter",
46                "condition" => "can_open_donnees_techniques",
47            );
48    
49            // ACTION - 110 - rapport_instruction
50            // Affiche dans un overlay le rapport d'instruction
51            $this->class_actions[110] = array(
52                "identifier" => "rapport_instruction",
53                "portlet" => array(
54                    "type" => "action-self",
55                    "libelle" => _("Rapport d'instruction"),
56                    "order" => 110,
57                    "class" => "rediger-16",
58                ),
59                "view" => "view_rapport_instruction",
60                "permission_suffix" => "rapport_instruction_rediger",
61                "condition" => "can_open_rapport_instruction",
62            );
63    
64            // ACTION - 120 - geolocalisation
65            // Affiche dans un overlay la géolocalisation
66            $this->class_actions[120] = array(
67                "identifier" => "geolocalisation",
68                "portlet" => array(
69                    "type" => "action-self",
70                    "libelle" => _("Geolocalisation"),
71                    "order" => 120,
72                    "class" => "rediger-16",
73                ),
74                "view" => "view_geolocalisation",
75                "permission_suffix" => "geolocalisation_consulter",
76                "condition" => "can_open_geolocalisation",
77            );
78    
79            // ACTION - 130 - edition
80            // Affiche l'édition
81            $this->class_actions[130] = array(
82                "identifier" => "edition",
83                "portlet" => array(
84                    "type" => "action-blank",
85                    "libelle" => _("Recapitulatif"),
86                    "order" => 130,
87                    "class" => "pdf-16",
88                ),
89                "view" => "view_edition",
90                "permission_suffix" => "consulter",
91            );
92        }
93    
94        /**
95         * Vérifie la division de l'instructeur et l'état du dossier.
96         *
97         * @return boolean
98         */
99        function check_instructeur_division_and_di_state() {
100    
101            // Si l'utilisateur est un intructeur qui ne correspond pas à la
102            // division du dossier
103            if ($this->f->isUserInstructeur()
104                && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
105    
106                //
107                return false;
108            }
109    
110            // Si l'utilisateur est un instructeur et que le dossier est cloturé
111            if ($this->f->isUserInstructeur()
112                && $this->getStatut() == "cloture") {
113    
114                //
115                return false;
116            }
117    
118            //
119            return true;
120        }
121    
122        /**
123         * CONDITION - is_editable.
124         *
125         * Condition pour la modification.
126         *
127         * @return boolean
128         */
129        function is_editable() {
130    
131            // Contrôle si l'utilisateur possède un bypass
132            $bypass = $this->f->isAccredited(get_class()."_modifier_bypass");
133            //
134            if ($bypass == true) {
135    
136                //
137                return true;
138            }
139    
140            // Contrôle le droit de l'instruction
141            if ($this->check_instructeur_division_and_di_state() == false) {
142    
143                //
144                return false;
145            }
146    
147            //
148            return true;
149        }
150    
151        /**
152         * CONDITION - can_open_donnees_techniques.
153         *
154         * Condition pour afficher les données techniques.
155         *
156         * @return boolean
157         */
158        function can_open_donnees_techniques() {
159    
160            // Contrôle si l'utilisateur possède un bypass
161            $bypass = $this->f->isAccredited(get_class()."_donnees_techniques_consulter_bypass");
162            //
163            if ($bypass == true) {
164    
165                //
166                return true;
167            }
168    
169            //
170            return true;
171        }
172    
173        /**
174         * CONDITION - can_open_rapport_instruction.
175         *
176         * Condition pour afficher le rapport d'instruction en overlay.
177         *
178         * @return boolean
179         */
180        function can_open_rapport_instruction() {
181    
182            // Contrôle si l'utilisateur possède un bypass
183            $bypass = $this->f->isAccredited(get_class()."_rapport_instruction_rediger_bypass");
184            //
185            if ($bypass == true) {
186    
187                //
188                return true;
189            }
190    
191            // Si l'utilisateur est un instructeur et que le dossier est cloturé
192            if ($this->f->isUserInstructeur()
193                && $this->getStatut() == "cloture") {
194    
195                // Cache le lien du rapport d'instruction, si aucun n'est lié
196                if ($this->getRapportInstruction() == '') {
197    
198                    //
199                    return false;
200                }
201            }
202    
203            //
204            return true;
205        }
206    
207        /**
208         * CONDITION - can_open_geolocalisation.
209         *
210         * Condition pour afficher la géolocalisation en overlay.
211         *
212         * @return boolean
213         */
214        function can_open_geolocalisation() {
215    
216            // Si l'option sig n'est pas réglé sur 'sig_externe',
217            // l'action géolocalisation n'est pas affiché
218            if ($this->f->getParameter('option_sig') != 'sig_externe') {
219    
220                //
221                return false;
222            }
223    
224            // Contrôle si l'utilisateur possède un bypass
225            $bypass = $this->f->isAccredited(get_class()."_geolocalisation_consulter_bypass");
226            //
227            if ($bypass == true) {
228    
229                //
230                return true;
231            }
232    
233            // Contrôle le droit de l'instruction
234            if ($this->check_instructeur_division_and_di_state() == false) {
235    
236                //
237                return false;
238            }
239    
240            //
241            return true;
242        }
243    
244        /**
245         * VIEW - view_edition.
246         *
247         * Affiche le récapitulatif du dossier d'instruction.
248         *
249         * @return void
250         */
251        function view_edition() {
252    
253            // Identifiant du dossier
254            $idx = $this->getVal($this->clePrimaire);
255    
256            // Redirection vers le script d'édition pdf avec les bons paramètres
257            header("Location: ../pdf/pdfetat.php?idx=".$idx."&obj=".$this->table);
258            exit();
259        }
260    
261        /**
262         * VIEW - view_donnees_techniques.
263         *
264         * Redirige pour ouvrir le formulaire en ajaxIt dans un overlay.
265         * Cette action est bindée pour utiliser la fonction popUpIt.
266         *
267         * @return void
268         */
269        function view_donnees_techniques() {
270    
271            // Vérification de l'accessibilité sur l'élément
272            $this->checkAccessibility();
273    
274            //
275            $idx = $this->getVal($this->clePrimaire);
276            $obj = "donnees_techniques";
277    
278            //
279            $this->redirect_onglet($idx, $obj);
280        }
281    
282        /**
283         * VIEW - view_rapport_instruction.
284         *
285         * Redirige pour ouvrir le formulaire en ajaxIt dans un overlay.
286         * Cette action est bindée pour utiliser la fonction popUpIt.
287         *
288         * @return void
289         */
290        function view_rapport_instruction() {
291    
292            // Vérification de l'accessibilité sur l'élément
293            $this->checkAccessibility();
294    
295            //
296            $idx = $this->getVal($this->clePrimaire);
297            $obj = "rapport_instruction";
298    
299            //
300            $this->redirect_onglet($idx, $obj);
301        }
302    
303        /**
304         * Redirige vers un sousform.
305         *
306         * @return void
307         */
308        function redirect_onglet($idx = "", $obj = "", $sousform = "") {
309            //
310            $this->f->disableLog();
311    
312            // Seulement si le numéro de dossier est fourni
313            if ($this->f->isAccredited($obj) != false
314                && isset($idx) && !is_null($idx)
315                && isset($obj) && !is_null($obj)){
316    
317                // Vérifie que l'objet n'existe pas
318                $sql = "SELECT
319                            ".$obj."
320                        FROM
321                            ".DB_PREFIXE.$obj."
322                        where
323                            dossier_instruction = '$idx'";
324                // Ajout au log
325                $this->f->addToLog($obj.".php: db->query(\"".$sql."\");", VERBOSE_MODE);
326                // Exécution de la requête
327                $res = $this->f->db->query($sql);
328                $this->f->isDatabaseError($res);
329    
330                // S'il n'y en a pas, afficher le formulaire d'ajout
331                if ( $res->numrows() == 0 ){
332                    //
333                    echo '
334                        <script type="text/javascript" >
335                            overlayIt(\''.$obj.'\',\'../scr/sousform.php?objsf='.$obj.'&obj='.$obj.'&action=0&retourformulaire=dossier_instruction&idxformulaire='.$idx.'\', 1);
336                        </script>
337                    ';
338                }
339                // Sinon afficher l'objet en consultation
340                elseif ( $res->numrows() > 0 && $sousform != "dossier_autorisation" ){
341                    //
342                    $row = & $res->fetchRow(DB_FETCHMODE_ASSOC);
343                    //
344                    echo '
345                        <script type="text/javascript" >
346                            overlayIt(\''.$obj.'\',\'../scr/sousform.php?objsf='.$obj.'&idxformulaire='.$idx.'&retourformulaire='.$obj.'&obj='.$obj.'&action=3&idx='.$row[$obj].'\', 1);
347                        </script>
348                    ';
349                }
350                elseif ( $res->numrows() > 0 && $sousform == "dossier_autorisation" ){
351                    //
352                    $row = & $res->fetchRow(DB_FETCHMODE_ASSOC);
353                    //
354                    echo '
355                        <script type="text/javascript" >
356                            overlayIt(\''.$obj.'\',\'../scr/sousform.php?objsf='.$obj.'&idxformulaire='.$idx.'&retourformulaire='.$obj.'&obj='.$obj.'&action=3&idx='.$row[$obj].'&visualisation=dossier_autorisation\', 1);
357                        </script>
358                    ';
359                }
360            }
361        }
362    
363        /**
364         * VIEW - view_geolocalisation.
365         *
366         * Redirige pour ouvrir le formulaire en ajaxIt dans un overlay.
367         * Cette action est bindée pour utiliser la fonction popUpIt.
368         *
369         * @return void
370         */
371        function view_geolocalisation() {
372    
373            // Vérification de l'accessibilité sur l'élément
374            $this->checkAccessibility();
375    
376            //
377            $idx = $this->getVal($this->clePrimaire);
378    
379            // Récupération des données de sig_elyx
380            $sqlDonneesSIG = "SELECT *
381                    FROM ".DB_PREFIXE."sig_elyx
382                    WHERE dossier = '$idx'";
383            $resDonneesSIG = $this->f->db->query($sqlDonneesSIG);
384            $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesSIG."\")", VERBOSE_MODE);
385            $this->f->isDatabaseError($resDonneesSIG);
386            $rowDonneesSIG = &$resDonneesSIG->fetchRow(DB_FETCHMODE_ASSOC);
387    
388            // Récupération des données du dossier d'instruction
389            $sqlDonneesDI = "SELECT dossier, geom, dossier_libelle,
390                    terrain_references_cadastrales, terrain_adresse_voie_numero,
391                    terrain_adresse_voie, terrain_adresse_lieu_dit, terrain_adresse_localite,
392                    terrain_adresse_code_postal, terrain_adresse_bp, terrain_adresse_cedex
393                    FROM ".DB_PREFIXE."dossier
394                    WHERE dossier = '$idx'";
395            $resDonneesDI = $this->f->db->query($sqlDonneesDI);
396            $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesDI."\")", VERBOSE_MODE);
397            $this->f->isDatabaseError($resDonneesDI);
398            $rowDonneesDI = &$resDonneesDI->fetchRow(DB_FETCHMODE_ASSOC);
399    
400            // Récupération des contraintes liées au DI
401            $sqlDossierContrainte = "SELECT dossier_contrainte, reference
402                    FROM ".DB_PREFIXE." dossier_contrainte
403                    WHERE dossier = '".$idx."'";
404            $resDossierContrainte = $this->f->db->query($sqlDossierContrainte);
405            $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDossierContrainte."\")", VERBOSE_MODE);
406            $this->f->isDatabaseError($resDossierContrainte);
407    
408            //
409            $geom = "";
410            //
411            if (isset($rowDonneesDI) && $rowDonneesDI['geom'] != '') {
412                //
413                $sqlGEOM = "SELECT public.ST_AsText('".$rowDonneesDI['geom']."'::geometry)";
414                $geom = $this->f->db->getOne($sqlGEOM);
415                $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sqlGEOM."\")", VERBOSE_MODE);
416            }
417    
418            // Compteurs de contrainte manuelle et automatique
419            $nb_conrainte_man = 0;
420            $nb_conrainte_sig = 0;
421            // Nombre de contrainte du DI
422            while ($rowDossierContrainte = &$resDossierContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
423                //
424                if ($rowDossierContrainte['reference'] == 'f') {
425                    $nb_conrainte_man++;
426                } else {
427                    $nb_conrainte_sig++;
428                }
429            }
430            // Modifie les messages en fonction du nombre de contrainte
431            if ($nb_conrainte_man == 0) {
432                $msg_contrainte_man = _("Aucune contraintes ajoutees depuis l'application");
433            } else {
434                $msg_contrainte_man = $nb_conrainte_man." "._("contrainte(s) ajoutee(s) depuis l'application");
435            }
436            if ($nb_conrainte_sig == 0) {
437                $msg_contrainte_sig = _("Aucune contraintes ajoutees depuis le SIG");
438            } else {
439                $msg_contrainte_sig = $nb_conrainte_sig." "._("contrainte(s) ajoutee(s) depuis le SIG");
440            }
441            $contrainte_val = "<span id='msg_contrainte_man'>".$msg_contrainte_man."</span>"."<br />".
442                "<span id='msg_contrainte_sig'>".$msg_contrainte_sig."</span>";
443    
444            // Affichage du fil d'Ariane
445            $this->f->displaySubTitle(_("Geolocalisation") . "->" . $rowDonneesDI["dossier_libelle"]);
446            $this->f->display();
447    
448            // Message affiché
449            $message_field = '<div class="message ui-widget ui-corner-all ui-state-highlight ui-state-%s" id="%s">
450                <p>
451                    <span class="ui-icon ui-icon-info"></span>
452                    <span class="text">%s<br></span>
453                </p>
454            </div>';
455    
456            // Message d'erreur si les références cadastrales ont été modifiées
457            // dans le dossier d'instruction
458            if (isset($rowDonneesSIG["terrain_references_cadastrales_archive"]) &&
459                $rowDonneesSIG["terrain_references_cadastrales_archive"] != $rowDonneesDI["terrain_references_cadastrales"]) {
460                
461                $messageRefCadUtilisees = (is_null($rowDonneesSIG["terrain_references_cadastrales_archive"])&&
462                    $rowDonneesSIG["terrain_references_cadastrales_archive"]!="")?
463                        _("Les references cadastrales utilisees par le SIG")." : ".
464                        $rowDonneesSIG["terrain_references_cadastrales_archive"] :
465                        _("Aucune reference cadastrale n'est renseignee pour le SIG");
466                
467                printf($message_field, "error", "geolocalisation-message",
468                    "<p>"._("Les references cadastrales ont ete modifiees dans le dossier d'instruction.")."</p>".
469                    "<p>".$messageRefCadUtilisees."</p>");
470            }
471    
472            // Bouton retour
473            $button_return = '<div class="formControls">
474                <a id="retour-button" onclick="redirectPortletAction(1,\'main\'); refresh_page_return();" href="#" class="retour">Retour</a>
475            </div>';
476    
477            // Affiche le bouton de retour
478            printf($button_return);
479    
480            // Début du formulaire
481            printf("\n<!-- ########## START FORMULAIRE ########## -->\n");
482            printf("<div class=\"formEntete ui-corner-all\">\n");
483    
484            // Champ pour le bouton
485            $button_field = '<div class="field field-type-static">
486                <div class="form-libelle">
487                    <label id="lib-%1$s" class="libelle-%1$s" for="%1$s">
488                    %2$s
489                    </label>
490                </div>
491                <div class="form-content">
492                    <span id="%1$s" class="field_value">
493                        %3$s  
494                    </span>
495                </div>
496            </div>';
497    
498            // Boutons d'action sur la géolocalisation
499            $button = '<input type="submit" class="om-button ui-button ui-widget ui-state-default ui-corner-all" id="%s-button" value="%s" onclick="%s" role="button" aria-disabled="false">';
500    
501            // Affiche le bouton permettant de lancer tous les traitements
502            printf('<div class="alignBtnCenter">');
503            printf($button, "chance", "J'ai de la chance", "all_geolocalisation_treatments('$idx', '"._("Etes vous sur de vouloir recuperer les contraintes ?")."')");
504            printf('</div>');
505    
506            // Tableau pour afficher l'interface sur deux colonnes
507            printf("<div class='sousform-geolocalisation'><div class='list-buttons-geolocalisation'>");
508    
509            //Affichage des boutons
510            printf($button_field, 'verif_parcelle', sprintf($button, 'verif_parcelle', "Vérifier les parcelles", "geolocalisation_treatment('$idx', 'verif_parcelle', set_geolocalisation_message)"), $this->build_message('verif_parcelle', $message_field, $rowDonneesSIG, $this->f));
511    
512            printf($button_field, 'calcul_emprise', sprintf($button, 'calcul_emprise', "Calculer l'emprise", "geolocalisation_treatment('$idx', 'calcul_emprise', '')"), $this->build_message('calcul_emprise', $message_field, $rowDonneesSIG, $this->f));
513    
514            printf($button_field, 'dessin_emprise', sprintf($button, 'dessin_emprise', "Dessiner l'emprise", "geolocalisation_treatment('$idx', 'dessin_emprise', redirection_elyxweb)"), $this->build_message('dessin_emprise', $message_field, $rowDonneesSIG, $this->f));
515    
516            printf($button_field, 'calcul_centroide', sprintf($button, 'calcul_centroide', "Calculer le centroïde", "geolocalisation_treatment('$idx', 'calcul_centroide', set_geolocalisation_centroide)"), $this->build_message('calcul_centroide', $message_field, $rowDonneesSIG, $this->f));
517    
518            printf($button_field, 'recup_contrainte', sprintf($button, 'recup_contrainte', "Récupérer les contraintes", "geolocalisation_treatment('$idx', 'recup_contrainte', set_geolocalisation_contrainte, '"._("Etes vous sur de vouloir recuperer les contraintes ?")."')"), $this->build_message('recup_contrainte', $message_field, $rowDonneesSIG, $this->f));
519    
520            //
521            printf("</div>");
522    
523            // Le formulaire n'a pas été validé
524            $validation = 1;
525            // Le formulaire est en mode consultation
526            $maj = 3;
527    
528            // Champs du formulaire
529            $champs = array("centroide", "contrainte", "adresse", "references_cadastrales");
530    
531            // Création d'un nouvel objet de type formulaire
532            $form = new formulaire(NULL, $validation, $maj, $champs);
533    
534            // Configuration des types de champs
535            foreach ($champs as $key) {
536                $form->setType($key, 'static');
537            }
538            $form->setType("references_cadastrales", "referencescadastralesstatic");
539    
540            // Configuration des libellés
541            $form->setLib("references_cadastrales", _("terrain_references_cadastrales"));
542            $form->setLib("adresse", _("adresse"));
543            $form->setLib("centroide", _("centroide"));
544            $form->setLib("contrainte", _("contrainte"));
545    
546            // Configuration des données
547            $form->setVal("references_cadastrales", $rowDonneesDI["terrain_references_cadastrales"]);
548            $form->setVal("adresse", $rowDonneesDI["terrain_adresse_voie_numero"]." ".$rowDonneesDI["terrain_adresse_voie"]." ".$rowDonneesDI["terrain_adresse_lieu_dit"]." ".$rowDonneesDI["terrain_adresse_code_postal"]." ".$rowDonneesDI["terrain_adresse_localite"]." ".$rowDonneesDI["terrain_adresse_bp"]." ".$rowDonneesDI["terrain_adresse_cedex"]);
549            if($geom != "") {
550                $form->setVal('centroide',
551                    "<a id='action-form-localiser'".
552                    " target='_SIG' href='../app/redirect_plan_sig.php?idx=".$rowDonneesDI["dossier"]."'>".
553                    "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
554                    $geom.
555                    " </a>");
556            } else {
557                $form->setVal('centroide', $geom);
558            }
559            $form->setVal("contrainte", $contrainte_val);
560    
561            // Affichage des champs
562            $form->setBloc("centroide", "D", _("Donnees du dossier d'instruction"), "alignForm col_12");
563                $form->setBloc("centroide", "DF", "", "geoloc_form alignForm col_12");
564                $form->setBloc("contrainte", "DF", "", "geoloc_form alignForm col_12");
565                $form->setBloc("adresse", "DF", "", "geoloc_form alignForm col_12");
566                $form->setBloc("references_cadastrales", "DF", "", "geoloc_form alignForm col_12");
567            $form->setBloc("references_cadastrales", "F");
568    
569            $form->afficher($champs, $validation, false, false);
570            // Ferme le tableau pour l'affichage sur deux colonnes
571            printf("</div></div>");
572    
573            //Ajout d'un div vide pour éviter les superspositions des div
574            printf("<div class=\"both\"></div>");
575    
576            // Fin du formulaire
577            printf("</div></div>");
578    
579            // Affiche le bouton de retour
580            printf($button_return);
581        }
582    
583        /**
584         * Compose le message affiché à l'utilisateur
585         * @param  string $field_name    Nom du champ
586         * @param  string $message_field Code html du message
587         * @param  array $rowDonneesSIG  Tableau des données
588         * @param  object $f             Instance de la classe utils
589         * @return string                Message
590         */
591        function build_message($field_name, $message_field, $rowDonneesSIG, $f) {
592    
593            // Récupération des infos
594            $date = (isset($rowDonneesSIG["date_".$field_name])) ? $this->f->formatTimestamp($rowDonneesSIG["date_".$field_name]) : "";
595            $etat = (isset($rowDonneesSIG["etat_".$field_name])) ? $rowDonneesSIG["etat_".$field_name] : "";;
596            $text = (isset($rowDonneesSIG["message_".$field_name])) ? $rowDonneesSIG["message_".$field_name] : "";;
597    
598            // id du message
599            $id_message = $field_name."-message";
600    
601            // Définit le type du message "empty", "valid" ou "error"
602            // empty : message grisé
603            // valid : message de validation
604            // error : message d'erreur
605            $type_message = "empty";
606            if ($etat != "") {
607                //
608                $type_message = "valid";
609                if ($etat == 'f') {
610                    $type_message = "error";
611                }
612            }
613    
614            // Si il y a une date, un message est ajouté en debut
615            if ($date != "") {
616                //
617                $date = sprintf(_("Dernier traitement effectue le %s."), $date);
618            }
619            
620            // Si aucun message alors l'action n'a jamais été effectuée
621            if ($text == "") {
622                //
623                $text = _("Action non effectuee.");
624                //
625                $type_message = "empty";
626            }
627    
628            // Compose le message
629            $message = sprintf($message_field, $type_message, $id_message, $date." ".$text);
630    
631            // retour
632            return $message;
633        }
634  }  }
635    
636  ?>  ?>

Legend:
Removed from v.896  
changed lines
  Added in v.3445

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26