/[openfoncier]/trunk/obj/utils.class.php
ViewVC logotype

Diff of /trunk/obj/utils.class.php

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

revision 2170 by softime, Tue Aug 27 11:03:59 2013 UTC revision 3225 by nhaye, Fri Dec 19 16:17:01 2014 UTC
# Line 37  require_once PATH_OPENMAIRIE."om_applica Line 37  require_once PATH_OPENMAIRIE."om_applica
37   */   */
38  class utils extends application {  class utils extends application {
39    
40        // Valeurs postées
41        var $submitted_post_value;
42    
43        // Valeurs passées à l'url
44        var $submitted_get_value;
45    
46        /**
47         * Cette méthode permet de renvoyer la valeur soumise par post.
48         *
49         * Si on ne trouve pas de paramètre correspondant alors on retourne chaîne vide
50         *
51         * @return null ou la valeur
52         */
53        function get_submitted_post_value($param = null) {
54            //
55            if ($param == null) {
56                return $this->submitted_post_value;
57            }
58            //
59            if (isset($this->submitted_post_value[$param])) {
60                //
61                return $this->submitted_post_value[$param];
62            }
63            //
64            return null;
65        }
66    
67        /**
68         * Cette méthode permet de renvoyer la valeur soumise par get.
69         *
70         * Si on ne trouve pas de paramètre correspondant alors on retourne chaîne vide
71         *
72         * @return null ou la valeur
73         */
74        function get_submitted_get_value($param = null) {
75            //
76            if ($param == null) {
77                return $this->submitted_get_value;
78            }
79            //
80            if (isset($this->submitted_get_value[$param])) {
81                //
82                return $this->submitted_get_value[$param];
83            }
84            //
85            return null;
86        }
87    
88    
89        /**
90         * Cette methode permet d'affecter des parametres dans un attribut de
91         * l'objet.
92         *
93         * @return void
94         */
95        function setMoreParams() {
96            parent::setMoreParams();
97            $this->set_submitted_value();
98        }
99    
100        function set_submitted_value() {
101            if(isset($_GET) and !empty($_GET)) {
102                foreach ($_GET as $key => $value) {
103                    $this->submitted_get_value[$key]=$this->clean_break($value);
104                }
105            }
106            if(isset($_POST) and !empty($_POST)) {
107                foreach ($_POST as $key => $value) {
108                    $this->submitted_post_value[$key]=$this->clean_break($value);
109                }
110            }
111        }
112    
113      // {{{      // {{{
114            
115      /**      /**
# Line 77  class utils extends application { Line 150  class utils extends application {
150                            
151              // Récupération des infos utilisateur              // Récupération des infos utilisateur
152              $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".              $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
153              "FROM ".DB_PREFIXE."om_utilisateur WHERE login = '".$_SESSION['login']."'";              "FROM ".DB_PREFIXE."om_utilisateur WHERE login = '".$this->clean_break($_SESSION['login'])."'";
154              $resUser=$this->db->query($sqlUser);              $resUser=$this->db->query($sqlUser);
155              $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);              $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
156              if ( database::isError($resUser)){              if ( database::isError($resUser)){
# Line 96  class utils extends application { Line 169  class utils extends application {
169              $this->om_utilisateur["libelle_profil"] = $resProfil;              $this->om_utilisateur["libelle_profil"] = $resProfil;
170    
171              // si c'est un administrateur technique              // si c'est un administrateur technique
172              if ($resProfil == "ADMINISTRATEUR TECHNIQUE") {              // XXX Mauvaise méthode, il faut utiliser isAccredited
173                if ($resProfil == "ADMINISTRATEUR TECHNIQUE"
174                    || $resProfil == "ADMINISTRATEUR FONCTIONNEL") {
175                  $this->user_is_admin = true;                  $this->user_is_admin = true;
176              } else {              } else {
177                  $this->user_is_admin = false;                  $this->user_is_admin = false;
# Line 434  class utils extends application { Line 509  class utils extends application {
509          return false;          return false;
510    
511      }      }
512    
513        /**
514         * Permet de calculer la liste des parcelles à partir de la chaîne passée en paramètre
515         * et la retourner sous forme d'un tableau associatif
516         *
517         * @param  string $strParcelles chaîne de la parcelles
518         * @return array (array(quartier, section, parcelle), ...)
519         */
520        function parseParcelles($strParcelles) {
521            
522            // Séparation des lignes
523            $references = explode(";", $strParcelles);
524            $liste_parcelles = array();
525            
526            // On boucle sur chaque ligne pour ajouter la liste des parcelles de chaque ligne
527            foreach ($references as $parcelles) {
528                
529                // On transforme la chaîne de la ligne de parcelles en tableau
530                $ref = str_split($parcelles);
531                // Les 1er caractères sont numériques
532                $num = true;
533                
534                // Tableau des champs de la ligne de références cadastrales
535                $reference_tab = array();
536                $temp = "";
537                foreach ($ref as $carac) {
538                    
539                    // Permet de tester si le caractère courant est de même type que le précédent
540                    if(is_numeric($carac) === $num) {
541                        $temp .= $carac;
542                    } else {
543                        // Bascule
544                        $num = !$num;
545                        // On stock le champ
546                        $reference_tab[] = $temp;
547                        // re-init de la valeur temporaire pour le champ suivant
548                        $temp = $carac;
549                    }
550                }
551                // Stockage du dernier champ sur lequel il n'y a pas eu de bascule
552                $reference_tab[] = $temp;
553                // Calcul des parcelles
554                $quartier = $reference_tab[0];
555                $sect = $reference_tab[1];
556    
557                $ancien_ref_parc = "";
558                for ($i=2; $i < count($reference_tab); $i+=2) {
559                    $parc["quartier"] = $quartier;
560                    // Met en majuscule si besoin
561                    $parc["section"] = strtoupper($sect);
562                    if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") {
563                        // 1ere parcelle ou parcelle individuelle
564                        // Compléte par des "0" le début de la chaîne si besoin
565                        $parc["parcelle"] = str_pad($reference_tab[$i], 4, "0", STR_PAD_LEFT);
566                        // Ajout d'une parcelle à la liste
567                        $liste_parcelles[] = $parc;
568                    } elseif ($reference_tab[$i-1] == "A") {
569                        // Interval de parcelles
570                        for ($j=$ancien_ref_parc+1; $j <= $reference_tab[$i]; $j++) {
571                            // Compléte par des "0" le début de la chaîne si besoin
572                            $parc["parcelle"] = str_pad($j, 4, "0", STR_PAD_LEFT);
573                            // Ajout d'une parcelle à la liste
574                            $liste_parcelles[] = $parc;
575                        }
576                    }
577                    //Gestion des erreurs
578                    else{
579                        
580                        echo _("Une erreur de formattage a ete detecte dans la reference cadastrale du dossier ").$this->row['dossier'];
581                    }
582                    // Sauvegarde de la référence courante de parcelle
583                    $ancien_ref_parc = $reference_tab[$i];
584                }
585            }
586    
587            return $liste_parcelles;
588        }
589    
590        /**
591         * Formate les parcelles en ajoutant le code impôt
592         * @param  array    $liste_parcelles   Tableau des parcelles
593         * @return string                      Liste des parcelles formatées
594         */
595        function formatParcelleToSend($liste_parcelles) {
596    
597            //
598            $wParcelle = array();
599    
600            //Formatage des références cadastrales pour l'envoi
601            foreach ($liste_parcelles as $value) {
602                    
603                // On ajoute les données dans le tableau que si quartier + section + parcelle
604                // a été fourni
605                if ($value["quartier"] !== ""
606                    && $value["section"] !== ""
607                    && $value["parcelle"] !== ""){
608                    
609                    //On récupère le code impôt de l'arrondissement
610                    $arrondissement = $this->getCodeImpotByQuartier($value["quartier"]);
611                    
612                    //On ajoute la parcelle, si un arrondissement a été trouvé
613                    if ($arrondissement!=="") {
614                        //
615                        $wParcelle[] = $arrondissement.$value["quartier"].
616                            str_pad($value["section"], 2, " ", STR_PAD_LEFT).
617                            $value["parcelle"];
618                    }
619                }
620            }
621    
622            //
623            return $wParcelle;
624        }
625    
626        /**
627         * Récupère le code impôt par rapport au quartier
628         * @param  string $quartier Numéro de quartier
629         * @return string           Code impôt
630         */
631        function getCodeImpotByQuartier($quartier) {
632    
633            $arrondissement = "";
634    
635            // Si le quartier fournis est correct
636            if ($quartier != "") {
637    
638                // Requête SQL
639                $sql = "SELECT
640                            arrondissement.code_impots
641                        FROM
642                            ".DB_PREFIXE."arrondissement
643                        LEFT JOIN
644                            ".DB_PREFIXE."quartier
645                            ON
646                                quartier.arrondissement = arrondissement.arrondissement
647                        WHERE
648                            quartier.code_impots = '".$quartier."'";
649                $this->addToLog("getCodeImpotByQuartier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
650                $arrondissement = $this->db->getOne($sql);
651                $this->isDatabaseError($arrondissement);
652            }
653    
654            // Retour
655            return $arrondissement;
656        }
657    
658        /**
659         * Vérification des paramètres
660         */
661        function checkParams() {
662            parent::checkParams();
663    
664            (isset($this->config['path_scan']) ? "" : $this->config['path_scan'] = '../trs/numerisation/');
665            
666            $default_sig_elyx = array(
667                'wsdl' => '../tests/wsurbanisme.wsdl',
668                'login' => 'sig',
669                'password' => 'sig',
670            );
671            (isset($this->config['sig_elyx']) ? "" : $this->config['sig_elyx'] = $default_sig_elyx);
672        }
673    
674        /**
675         * Retourne true si tous les paramètres du SIG externe ont bien été définis
676         * @return bool true/false
677         */
678        public function issetSIGParameter() {
679            if($this->getParameter("sig_web_server") != NULL AND
680                $this->getParameter("sig_web_server") != "" AND
681                $this->getParameter("sig_couche_emprise_dossier") != NULL AND
682                $this->getParameter("sig_couche_emprise_dossier") != "" AND
683                $this->getParameter("sig_couche_affichage_dossier") != NULL AND
684                $this->getParameter("sig_couche_affichage_dossier") != "" AND
685                $this->getParameter("sig_couche_affichage_parcelle") != NULL AND
686                $this->getParameter("sig_couche_affichage_parcelle") != "") {
687                return true;
688            } else {
689                return false;
690            }
691        }
692    
693        /**
694         * Permet de vérifier que des champs existe dans une table
695         * @param  array  $list_fields Liste des champs à tester
696         * @param  string $table       Table où les champs doivent exister
697         * @return mixed               Retourne les champs qui n'existent pas
698         *                             ou true
699         */
700        public function check_field_exist($list_fields, $table) {
701    
702            // Instance de la classe en paramètre
703            require_once "../obj/".$table.".class.php";
704            $object = new $table("]", $this->db, DEBUG);
705    
706            // Récupère les champs de la table
707            foreach ($object->champs as $champ) {
708                $list_column[] = $champ;
709            }
710    
711            // Tableau des champs en erreur
712            $error_fields = array();
713    
714            // Pour chaque champ à tester
715            foreach ($list_fields as $value) {
716                
717                // S'il n'apparaît pas dans la liste des champs possible
718                if (!in_array($value, $list_column)) {
719    
720                    // Alors le champ est ajouté au tableau des erreurs
721                    $error_fields[] = $value;
722                }
723            }
724    
725            // Si le tableau des erreurs n'est pas vide on le retourne
726            if (count($error_fields) > 0) {
727                return $error_fields;
728            }
729    
730            // Sinon on retourne le booléen true
731            return true;
732    
733        }
734    
735        /*
736         *
737         */
738        /**
739         * Récupère la lettre type lié à un événement
740         * @param  integer  $evenement L'identifiant de l'événement
741         * @return integer             Retourne l'idenfiant de la lettre-type                             ou true
742         */
743        function getLettreType($evenement){
744            
745             $lettretype = NULL;
746            
747             $sql =
748                "SELECT
749                    lettretype
750                FROM
751                    ".DB_PREFIXE."evenement
752                WHERE
753                    evenement = $evenement";
754                
755            $this->addToLog("getLettreType() : db->query(\"".$sql."\")", VERBOSE_MODE);
756            $res = $this->db->query($sql);
757            if ( database::isError($res)){
758                die();
759            }
760            
761            if ( $res->numrows() > 0 ){
762                    
763                $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
764                $lettretype = $row['lettretype'];
765            }
766          
767            return $lettretype;
768        }
769        
770        /**
771         * Retourne le type de dossier d'autorisation du dossier courant :
772         * @param $idxDossier Le numéro du dossier d'instruction
773         * @return le code du type détaillée de dossier d'autorisation
774         **/
775        function getDATDCode($idxDossier) {
776            $sql = "SELECT dossier_autorisation_type_detaille.code
777                    FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
778                    INNER JOIN ".DB_PREFIXE."dossier_autorisation
779                        ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille =
780                           dossier_autorisation.dossier_autorisation_type_detaille
781                    INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
782                    WHERE dossier.dossier = '".$idxDossier."'";
783            $res = $this->db->getOne($sql);
784            $this->addToLog("getDATDCode() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
785            if ( database::isError($res)){
786                die();
787            }
788            return $res;
789        }
790    
791        /**
792         * Permet de copier un enregistrement
793         * @param  mixed $idx   Identifiant de l'enregistrment
794         * @param  string $obj   Objet de l'enregistrment
795         * @param  string $objsf Objets associés
796         * @return array        Tableau des nouveaux id et du message
797         */
798        function copier($idx, $obj, $objsf) {
799    
800            // Tableau de résultat
801            $resArray = array();
802            // Message retourné à l'utilisateur
803            $message = "";
804            // Type du message (valid ou error)
805            $message_type = "valid";
806    
807            // Requête SQL permettant de récupérer les informations sur l'objet métier
808            $sql = "SELECT *
809                    FROM ".DB_PREFIXE.$obj."
810                    WHERE ".$obj." = ".$idx;
811            $res = $this->db->query($sql);
812            $this->isDatabaseError($res);
813    
814            // Valeurs clonées
815            $valF = array();
816            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
817                // Recupère la valeur
818                $valF = $row;
819            }
820    
821            // Valeurs non clonées
822            // Identifiant modifié pour que ça soit un ajout
823            $valF[$obj] = "]";
824    
825            // Inclus la classe de l'objet métier
826            require_once "../obj/".$obj.".class.php";
827    
828            // Instance de l'objet métier
829            $clone_obj = new $obj("]", $this->db, DEBUG);
830            // Si dans l'objet métier la fonction "copier" existe
831            if (method_exists($clone_obj, "copier")) {
832                // Traitement sur les valeurs du duplicata
833                $valF = $clone_obj->copier($valF, $objsf, DEBUG);
834                // Recupère les messages retourné par la fonction
835                $message .= $valF['message'];
836                // Supprime les messages de la liste des valeurs
837                unset($valF['message']);
838            }
839            // Ajoute le duplicata
840            $clone_obj->ajouter($valF, $this->db, DEBUG);
841            // Si aucune erreur se produit dans la classe instanciée
842            if ($clone_obj->correct === true) {
843                // Récupère l'identifiant de l'objet créé
844                $clone_obj_id = $clone_obj->valF[$obj];
845    
846                // Message
847                $message .= sprintf(_("La copie de l'enregistrement %s avec l'identifiant %s s'est effectuee avec succes"), "<span class='bold'>"._($obj)."</span>", "<span class='bold'>".$idx."</span>")."<br />";
848    
849                // Ajout de l'identifant au tableau des résultat
850                $resArray[$obj.'_'.$idx] = $clone_obj_id;
851    
852                // S'il y a au moins un objet metier associé
853                if ($objsf != "") {
854                    // Liste des objet métier associés
855                    $list_objsf = explode(",", $objsf);
856                    // Pour chaque objet associé
857                    foreach ($list_objsf as $key => $objsf) {
858                        // Inclus la classe de l'objet métier associé
859                        require_once "../obj/".$objsf.".class.php";
860    
861                        // Requête SQL permettant de récupérer les informations sur
862                        // l'objet métier associé
863                        $sql = "SELECT *
864                                FROM ".DB_PREFIXE.$objsf."
865                                WHERE ".$obj." = ".$idx;
866                        $res = $this->db->query($sql);
867                        $this->isDatabaseError($res);                    
868    
869                        // Pour chaque élément associé
870                        while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
871                            // Identifiant de l'objet associé à copier
872                            $idxsf = $row[$objsf];
873    
874                            // Valeurs clonées
875                            $valF = $row;
876                            // Valeurs non clonées
877                            $valF[$obj] = $clone_obj_id;
878                            // Identifiant modifié pour que ça soit un ajout
879                            $valF[$objsf] = "]";
880                            // Instance de l'objet métier associé
881                            $clone_objsf = new $objsf("]", $this->db, DEBUG);
882                            // Si dans l'objet métier associé
883                            // la fonction "copier" existe
884                            if (method_exists($clone_objsf, "copier")) {
885                                // Traitement sur les valeurs du duplicata
886                                $valF = $clone_objsf->copier($valF, $objsf, DEBUG);
887                                // Recupère les messages retourné par la fonction
888                                $message .= $valF['message'];
889                                // Supprime les messages de la liste des valeurs
890                                unset($valF['message']);
891                            }
892                            // Ajoute le duplicata
893                            $clone_objsf->ajouter($valF, $this->db, DEBUG);
894                            // Si aucune erreur se produit dans la classe instanciée
895                            if ($clone_objsf->correct === true) {
896                                // Récupère l'identifiant de l'objet créé
897                                $clone_objsf_id = $clone_objsf->valF[$objsf];
898    
899                                // Message
900                                $message .= sprintf(_("La copie de l'enregistrement %s avec l'identifiant %s s'est effectuee avec succes"), "<span class='bold'>"._($objsf)."</span>", "<span class='bold'>".$idxsf."</span>")."<br />";
901    
902                                // Ajout de l'identifant au tableau des résultat
903                                $resArray[$objsf.'_'.$row[$objsf]] = $clone_objsf_id;
904                            } else {
905    
906                                // Message d'erreur récupéré depuis la classe
907                                $message .= $clone_objsf->msg;
908                                // Type du message
909                                $message_type = "error";
910                            }
911                        }
912                    }
913                }
914            //    
915            } else {
916    
917                // Message d'erreur récupéré depuis la classe
918                $message .= $clone_obj->msg;
919                // Type du message
920                $message_type = "error";
921            }
922    
923            // Ajout du message au tableau des résultats
924            $resArray['message'] = $message;
925            // Ajout du type de message au tableau des résultats
926            $resArray['message_type'] = $message_type;
927    
928            // Retourne le tableau des résultats
929            return $resArray;
930        }
931    
932        /**
933         * Permet de détailler les conditions pour l'affichage des contraintes dans
934         * une édition.
935         * @param string $contraintes_param    Chaine des conditions
936         *
937         * @return array                        Conditions
938         */
939        function explodeConditionContrainte($contraintes_param) {
940    
941            // Initialisation des variables
942            $return = array();
943            $listGroupes = "";
944            $listSousgroupes = "";
945            $service_consulte = "";
946    
947            // Coupe la condition au ";"
948            // Doit séparer groupe et sous-groupe
949            $contraintes_params = explode(";", $contraintes_param);
950            
951            // Pour chaque paramètres
952            foreach ($contraintes_params as $value) {
953                // Si le mot-clés "liste_groupe="
954                if (strstr($value, "liste_groupe=")) {
955                    // On enlève le mots-clés "liste_groupe="
956                    $listGroupes = str_replace("liste_groupe=", "", $value);
957                }
958                // Si le mot-clés "liste_ssgroupe="
959                if (strstr($value, "liste_ssgroupe=")) {
960                    // On enlève le mots-clés "liste_ssgroupe="
961                    $listSousgroupes = str_replace("liste_ssgroupe=", "", $value);
962                }
963                // Si le mot-clés "service_consulte="
964                if (strstr($value, "service_consulte=")) {
965                    // On enlève le mots-clés "service_consulte="
966                    $service_consulte = str_replace("service_consulte=", "", $value);
967                }
968            }
969    
970            // Récupère la liste des groupes et sous-groupes qui doivent
971            // être utilisés pour la condition
972            if ($listGroupes != "") {
973                $listGroupes = explode(",", $listGroupes);
974            }
975            if ($listSousgroupes != "") {
976                $listSousgroupes = explode(",", $listSousgroupes);
977            }
978    
979            // Tableau à retourner
980            $return['groupes'] = $listGroupes;
981            $return['sousgroupes'] = $listSousgroupes;
982            $return['service_consulte'] = $service_consulte;
983    
984            //
985            return $return;
986        }
987    
988        /**
989         * Traitement pour créer la condition sur les contraintes dans les éditions.
990         * @param string $part SQL et parti du pdf (sql, titre ou corps)
991         *
992         * @return string      Condition pour la requête sur les contraintes
993         */
994        function traitement_condition_contrainte($part) {
995    
996            // Initialisationd de la condition
997            $whereContraintes = "";
998    
999            // Détaille la condtion
1000            $explodeConditionContrainte = $this->explodeConditionContrainte($part);
1001    
1002            // Récupère les groupes, sous-groupes et service_consulte pour la condition
1003            $groupes = $explodeConditionContrainte['groupes'];
1004            $sousgroupes = $explodeConditionContrainte['sousgroupes'];
1005            $service_consulte = $explodeConditionContrainte['service_consulte'];
1006    
1007            // Pour chaque groupe
1008            if ($groupes != "") {
1009                foreach ($groupes as $key => $groupe) {
1010                    // Si le groupe n'est pas vide
1011                    if (!empty($groupe)) {
1012                        // Choisit l'opérateur logique
1013                        $op_logique = $key > 0 ? 'OR' : 'AND (';
1014                        // Ajoute la condition
1015                        $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.groupe)) = lower('"
1016                            .pg_escape_string($groupe)."')";
1017                    }
1018                }
1019                // S'il y a des valeurs dans groupe
1020                if (count($groupe) > 0) {
1021                    // Ferme la parenthèse
1022                    $whereContraintes .= " ) ";
1023                }
1024            }
1025    
1026            // Pour chaque sous-groupe
1027            if ($sousgroupes != "") {
1028                foreach ($sousgroupes as $key => $sousgroupe) {
1029                    // Si le sous-groupe n'est pas vide
1030                    if (!empty($sousgroupe)) {
1031                        // Choisit l'opérateur logique
1032                        $op_logique = $key > 0 ? 'OR' : 'AND (';
1033                        // Ajoute la condition
1034                        $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.sousgroupe)) = lower('"
1035                            .pg_escape_string($sousgroupe)."')";
1036                    }
1037                }
1038                // S'il y a des valeurs dans sous-groupe
1039                if (count($sousgroupes) > 0) {
1040                    // Ferme la parenthèse
1041                    $whereContraintes .= " ) ";
1042                }
1043            }
1044    
1045            // Si l'option service_consulte n'est pas vide
1046            if ($service_consulte != "") {
1047                // Ajoute la condition
1048                $whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) ";
1049            }
1050    
1051            // Condition retournée
1052            return $whereContraintes;
1053        }
1054    
1055        /**
1056         * Calcule une date par l'ajout ou la soustraction de mois
1057         * @param date    $date     Date de base
1058         * @param integer $delay    Délais à ajouter (en mois)
1059         * @param string  $operator Opérateur pour le calcul ("-" ou "+")
1060         *
1061         * @return date             Date calculée
1062         */
1063        function mois_date($date, $delay, $operator = "+") {
1064                
1065            // Si aucune date n'a été fournie ou si ce n'est pas une date correctement formatée
1066            if ( is_null($date) || $date == "" ||
1067                preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}/', $date) == 0 ){
1068                return null;
1069            }
1070    
1071            // Découpage de la date
1072            $temp = explode("-", $date);
1073            $day = (int) $temp[2];
1074            $month = (int) $temp[1];
1075            $year = (int) $temp[0];
1076    
1077            // Si c'est une addition
1078            if ($operator == '+') {
1079                // Année à ajouter
1080                $year += floor($delay / 12);
1081                // Mois restant
1082                $nb_month = ($delay % 12);
1083                // S'il y a des mois restant
1084                if ($nb_month != 0) {
1085                    // Ajout des mois restant
1086                    $month += $nb_month;
1087                    // Si ça dépasse le mois 12 (décembre)
1088                    if ($month > 12) {
1089                        // Soustrait 12 au mois
1090                        $month -= 12;
1091                        // Ajoute 1 à l'année
1092                        $year += 1;
1093                    }
1094                }
1095            }
1096    
1097            // Si c'est une soustraction
1098            if ($operator == "-") {
1099                // Année à soustraire
1100                $year -= floor($delay / 12);
1101                // Mois restant
1102                $nb_month = ($delay % 12);
1103                // S'il y a des mois restant
1104                if ($nb_month != 0) {
1105                    // Soustrait le délais
1106                    $month -= $nb_month;
1107                    // Si ça dépasse le mois 1 (janvier)
1108                    if ($month < 1) {
1109                        // Soustrait 12 au mois
1110                        $month += 12;
1111                        // Ajoute 1 à l'année
1112                        $year -= 1;
1113                    }
1114                }
1115            }
1116    
1117            // Calcul du nombre de jours dans le mois sélectionné
1118            switch($month) {
1119                // Mois de février
1120                case "2":
1121                    if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
1122                        $day_max = 29;
1123                    } else {
1124                        $day_max = 28;
1125                    }
1126                break;
1127                // Mois d'avril, juin, septembre et novembre
1128                case "4":
1129                case "6":
1130                case "9":
1131                case "11":
1132                    $day_max = 30;
1133                break;
1134                // Mois de janvier, mars, mai, juillet, août, octobre et décembre
1135                default:
1136                    $day_max = 31;
1137            }
1138    
1139            // Si le jour est supérieur au jour maximum du mois
1140            if ($day > $day_max) {
1141                // Le jour devient le jour maximum
1142                $day = $day_max;
1143            }
1144    
1145            // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
1146            $month = str_pad($month, 2, "0", STR_PAD_LEFT);
1147            $day = str_pad($day, 2, "0", STR_PAD_LEFT);
1148    
1149            // Retourne la date calculée
1150            return $year."-".$month."-".$day ;
1151        }
1152    
1153        /**
1154         * Vérifie la valididité d'une date.
1155         * @param string $pDate  Date à vérifier
1156         *
1157         * @return boolean
1158         */
1159        function check_date($pDate) {
1160    
1161            // Vérifie si c'est une date valide
1162            if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $pDate, $date)
1163                && checkdate($date[2], $date[3], $date[1])
1164                && $date[1] >= 1900) {
1165                //
1166                return true;
1167            }
1168    
1169            //
1170            return false;
1171        }
1172        
1173        function clean_break($input) {
1174            //remove whitespace...
1175            $input = trim($input);
1176            //disable magic quotes...
1177            if(get_magic_quotes_gpc()) {
1178                stripslashes($input);
1179            }
1180            //prevent sql injection...
1181            if(is_numeric($input)) {
1182                $input = intval($input);
1183            } else {
1184                if(isset($this->db)) {
1185                    $this->db->escapeSimple($input);
1186                }
1187            }
1188            //prevent xss...
1189            $input = htmlentities($input);
1190            return $input;
1191        }
1192  }  }
1193    
1194  ?>  ?>

Legend:
Removed from v.2170  
changed lines
  Added in v.3225

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26