/[openfoncier]/branches/3.14.0-b13/obj/utils.class.php
ViewVC logotype

Diff of /branches/3.14.0-b13/obj/utils.class.php

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

revision 2450 by vpihour, Thu Nov 7 18:56:52 2013 UTC revision 3241 by nhaye, Mon Jan 12 15:48:15 2015 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        /**
41         * Cette methode permet d'affecter des parametres dans un attribut de
42         * l'objet.
43         *
44         * @return void
45         */
46        function setMoreParams() {
47            parent::setMoreParams();
48            $this->set_submitted_value();
49        }
50    
51        function set_submitted_value() {
52            if(isset($_GET) and !empty($_GET)) {
53                foreach ($_GET as $key => $value) {
54                    $this->submitted_get_value[$key]=$this->clean_break($value);
55                }
56            }
57            if(isset($_POST) and !empty($_POST)) {
58                foreach ($_POST as $key => $value) {
59                    $this->submitted_post_value[$key]=$this->clean_break($value);
60                }
61            }
62        }
63    
64      // {{{      // {{{
65            
66      /**      /**
# Line 96  class utils extends application { Line 120  class utils extends application {
120              $this->om_utilisateur["libelle_profil"] = $resProfil;              $this->om_utilisateur["libelle_profil"] = $resProfil;
121    
122              // si c'est un administrateur technique              // si c'est un administrateur technique
123              if ($resProfil == "ADMINISTRATEUR TECHNIQUE") {              // XXX Mauvaise méthode, il faut utiliser isAccredited
124                if ($resProfil == "ADMINISTRATEUR TECHNIQUE"
125                    || $resProfil == "ADMINISTRATEUR FONCTIONNEL") {
126                  $this->user_is_admin = true;                  $this->user_is_admin = true;
127              } else {              } else {
128                  $this->user_is_admin = false;                  $this->user_is_admin = false;
# Line 537  class utils extends application { Line 563  class utils extends application {
563                  //On ajoute la parcelle, si un arrondissement a été trouvé                  //On ajoute la parcelle, si un arrondissement a été trouvé
564                  if ($arrondissement!=="") {                  if ($arrondissement!=="") {
565                      //                      //
566                      $wParcelle[] = $arrondissement.$value["quartier"]." ".                      $wParcelle[] = $arrondissement.$value["quartier"].
567                          $value["section"].$value["parcelle"];                          str_pad($value["section"], 2, " ", STR_PAD_LEFT).
568                            $value["parcelle"];
569                  }                  }
570              }              }
571          }          }
# Line 624  class utils extends application { Line 650  class utils extends application {
650       */       */
651      public function check_field_exist($list_fields, $table) {      public function check_field_exist($list_fields, $table) {
652    
653          // Requête SQL pour récupérer le nom des colonnes          // Instance de la classe en paramètre
654          $sql = "SELECT column_name          require_once "../obj/".$table.".class.php";
655                  FROM information_schema.columns          $object = new $table("]", $this->db, DEBUG);
656                  WHERE table_schema = '".substr(DB_PREFIXE, 0, -1)."'  
657                  AND table_name = '".$table."'          // Récupère les champs de la table
658                  ORDER BY ordinal_position";          foreach ($object->champs as $champ) {
659          $this->addToLog("check_field_exist() : db->query(\"".$sql."\")", VERBOSE_MODE);              $list_column[] = $champ;
         $res = $this->db->query($sql);  
         $this->isDatabaseError($res);  
   
         // Tant qu'il y a un résultat  
         while ($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {  
               
             // Le nom de la colonne est mise dans un tableau  
             $list_column[] = $row['column_name'];  
660          }          }
661    
662          // Tableau des champs en erreur          // Tableau des champs en erreur
# Line 720  class utils extends application { Line 738  class utils extends application {
738          }          }
739          return $res;          return $res;
740      }      }
741    
742        /**
743         * Permet de copier un enregistrement
744         * @param  mixed $idx   Identifiant de l'enregistrment
745         * @param  string $obj   Objet de l'enregistrment
746         * @param  string $objsf Objets associés
747         * @return array        Tableau des nouveaux id et du message
748         */
749        function copier($idx, $obj, $objsf) {
750    
751            // Tableau de résultat
752            $resArray = array();
753            // Message retourné à l'utilisateur
754            $message = "";
755            // Type du message (valid ou error)
756            $message_type = "valid";
757    
758            // Requête SQL permettant de récupérer les informations sur l'objet métier
759            $sql = "SELECT *
760                    FROM ".DB_PREFIXE.$obj."
761                    WHERE ".$obj." = ".$idx;
762            $res = $this->db->query($sql);
763            $this->isDatabaseError($res);
764    
765            // Valeurs clonées
766            $valF = array();
767            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
768                // Recupère la valeur
769                $valF = $row;
770            }
771    
772            // Valeurs non clonées
773            // Identifiant modifié pour que ça soit un ajout
774            $valF[$obj] = "]";
775    
776            // Inclus la classe de l'objet métier
777            require_once "../obj/".$obj.".class.php";
778    
779            // Instance de l'objet métier
780            $clone_obj = new $obj("]", $this->db, DEBUG);
781            // Si dans l'objet métier la fonction "copier" existe
782            if (method_exists($clone_obj, "copier")) {
783                // Traitement sur les valeurs du duplicata
784                $valF = $clone_obj->copier($valF, $objsf, DEBUG);
785                // Recupère les messages retourné par la fonction
786                $message .= $valF['message'];
787                // Supprime les messages de la liste des valeurs
788                unset($valF['message']);
789            }
790            // Ajoute le duplicata
791            $clone_obj->ajouter($valF, $this->db, DEBUG);
792            // Si aucune erreur se produit dans la classe instanciée
793            if ($clone_obj->correct === true) {
794                // Récupère l'identifiant de l'objet créé
795                $clone_obj_id = $clone_obj->valF[$obj];
796    
797                // Message
798                $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 />";
799    
800                // Ajout de l'identifant au tableau des résultat
801                $resArray[$obj.'_'.$idx] = $clone_obj_id;
802    
803                // S'il y a au moins un objet metier associé
804                if ($objsf != "") {
805                    // Liste des objet métier associés
806                    $list_objsf = explode(",", $objsf);
807                    // Pour chaque objet associé
808                    foreach ($list_objsf as $key => $objsf) {
809                        // Inclus la classe de l'objet métier associé
810                        require_once "../obj/".$objsf.".class.php";
811    
812                        // Requête SQL permettant de récupérer les informations sur
813                        // l'objet métier associé
814                        $sql = "SELECT *
815                                FROM ".DB_PREFIXE.$objsf."
816                                WHERE ".$obj." = ".$idx;
817                        $res = $this->db->query($sql);
818                        $this->isDatabaseError($res);                    
819    
820                        // Pour chaque élément associé
821                        while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
822                            // Identifiant de l'objet associé à copier
823                            $idxsf = $row[$objsf];
824    
825                            // Valeurs clonées
826                            $valF = $row;
827                            // Valeurs non clonées
828                            $valF[$obj] = $clone_obj_id;
829                            // Identifiant modifié pour que ça soit un ajout
830                            $valF[$objsf] = "]";
831                            // Instance de l'objet métier associé
832                            $clone_objsf = new $objsf("]", $this->db, DEBUG);
833                            // Si dans l'objet métier associé
834                            // la fonction "copier" existe
835                            if (method_exists($clone_objsf, "copier")) {
836                                // Traitement sur les valeurs du duplicata
837                                $valF = $clone_objsf->copier($valF, $objsf, DEBUG);
838                                // Recupère les messages retourné par la fonction
839                                $message .= $valF['message'];
840                                // Supprime les messages de la liste des valeurs
841                                unset($valF['message']);
842                            }
843                            // Ajoute le duplicata
844                            $clone_objsf->ajouter($valF, $this->db, DEBUG);
845                            // Si aucune erreur se produit dans la classe instanciée
846                            if ($clone_objsf->correct === true) {
847                                // Récupère l'identifiant de l'objet créé
848                                $clone_objsf_id = $clone_objsf->valF[$objsf];
849    
850                                // Message
851                                $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 />";
852    
853                                // Ajout de l'identifant au tableau des résultat
854                                $resArray[$objsf.'_'.$row[$objsf]] = $clone_objsf_id;
855                            } else {
856    
857                                // Message d'erreur récupéré depuis la classe
858                                $message .= $clone_objsf->msg;
859                                // Type du message
860                                $message_type = "error";
861                            }
862                        }
863                    }
864                }
865            //    
866            } else {
867    
868                // Message d'erreur récupéré depuis la classe
869                $message .= $clone_obj->msg;
870                // Type du message
871                $message_type = "error";
872            }
873    
874            // Ajout du message au tableau des résultats
875            $resArray['message'] = $message;
876            // Ajout du type de message au tableau des résultats
877            $resArray['message_type'] = $message_type;
878    
879            // Retourne le tableau des résultats
880            return $resArray;
881        }
882    
883        /**
884         * Permet de détailler les conditions pour l'affichage des contraintes dans
885         * une édition.
886         * @param string $contraintes_param    Chaine des conditions
887         *
888         * @return array                        Conditions
889         */
890        function explodeConditionContrainte($contraintes_param) {
891    
892            // Initialisation des variables
893            $return = array();
894            $listGroupes = "";
895            $listSousgroupes = "";
896            $service_consulte = "";
897    
898            // Coupe la condition au ";"
899            // Doit séparer groupe et sous-groupe
900            $contraintes_params = explode(";", $contraintes_param);
901            
902            // Pour chaque paramètres
903            foreach ($contraintes_params as $value) {
904                // Si le mot-clés "liste_groupe="
905                if (strstr($value, "liste_groupe=")) {
906                    // On enlève le mots-clés "liste_groupe="
907                    $listGroupes = str_replace("liste_groupe=", "", $value);
908                }
909                // Si le mot-clés "liste_ssgroupe="
910                if (strstr($value, "liste_ssgroupe=")) {
911                    // On enlève le mots-clés "liste_ssgroupe="
912                    $listSousgroupes = str_replace("liste_ssgroupe=", "", $value);
913                }
914                // Si le mot-clés "service_consulte="
915                if (strstr($value, "service_consulte=")) {
916                    // On enlève le mots-clés "service_consulte="
917                    $service_consulte = str_replace("service_consulte=", "", $value);
918                }
919            }
920    
921            // Récupère la liste des groupes et sous-groupes qui doivent
922            // être utilisés pour la condition
923            if ($listGroupes != "") {
924                $listGroupes = explode(",", $listGroupes);
925            }
926            if ($listSousgroupes != "") {
927                $listSousgroupes = explode(",", $listSousgroupes);
928            }
929    
930            // Tableau à retourner
931            $return['groupes'] = $listGroupes;
932            $return['sousgroupes'] = $listSousgroupes;
933            $return['service_consulte'] = $service_consulte;
934    
935            //
936            return $return;
937        }
938    
939        /**
940         * Traitement pour créer la condition sur les contraintes dans les éditions.
941         * @param string $part SQL et parti du pdf (sql, titre ou corps)
942         *
943         * @return string      Condition pour la requête sur les contraintes
944         */
945        function traitement_condition_contrainte($part) {
946    
947            // Initialisationd de la condition
948            $whereContraintes = "";
949    
950            // Détaille la condtion
951            $explodeConditionContrainte = $this->explodeConditionContrainte($part);
952    
953            // Récupère les groupes, sous-groupes et service_consulte pour la condition
954            $groupes = $explodeConditionContrainte['groupes'];
955            $sousgroupes = $explodeConditionContrainte['sousgroupes'];
956            $service_consulte = $explodeConditionContrainte['service_consulte'];
957    
958            // Pour chaque groupe
959            if ($groupes != "") {
960                foreach ($groupes as $key => $groupe) {
961                    // Si le groupe n'est pas vide
962                    if (!empty($groupe)) {
963                        // Choisit l'opérateur logique
964                        $op_logique = $key > 0 ? 'OR' : 'AND (';
965                        // Ajoute la condition
966                        $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.groupe)) = lower('"
967                            .pg_escape_string($groupe)."')";
968                    }
969                }
970                // S'il y a des valeurs dans groupe
971                if (count($groupe) > 0) {
972                    // Ferme la parenthèse
973                    $whereContraintes .= " ) ";
974                }
975            }
976    
977            // Pour chaque sous-groupe
978            if ($sousgroupes != "") {
979                foreach ($sousgroupes as $key => $sousgroupe) {
980                    // Si le sous-groupe n'est pas vide
981                    if (!empty($sousgroupe)) {
982                        // Choisit l'opérateur logique
983                        $op_logique = $key > 0 ? 'OR' : 'AND (';
984                        // Ajoute la condition
985                        $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.sousgroupe)) = lower('"
986                            .pg_escape_string($sousgroupe)."')";
987                    }
988                }
989                // S'il y a des valeurs dans sous-groupe
990                if (count($sousgroupes) > 0) {
991                    // Ferme la parenthèse
992                    $whereContraintes .= " ) ";
993                }
994            }
995    
996            // Si l'option service_consulte n'est pas vide
997            if ($service_consulte != "") {
998                // Ajoute la condition
999                $whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) ";
1000            }
1001    
1002            // Condition retournée
1003            return $whereContraintes;
1004        }
1005    
1006        /**
1007         * Calcule une date par l'ajout ou la soustraction de mois
1008         * @param date    $date     Date de base
1009         * @param integer $delay    Délais à ajouter (en mois)
1010         * @param string  $operator Opérateur pour le calcul ("-" ou "+")
1011         *
1012         * @return date             Date calculée
1013         */
1014        function mois_date($date, $delay, $operator = "+") {
1015                
1016            // Si aucune date n'a été fournie ou si ce n'est pas une date correctement formatée
1017            if ( is_null($date) || $date == "" ||
1018                preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}/', $date) == 0 ){
1019                return null;
1020            }
1021    
1022            // Découpage de la date
1023            $temp = explode("-", $date);
1024            $day = (int) $temp[2];
1025            $month = (int) $temp[1];
1026            $year = (int) $temp[0];
1027    
1028            // Si c'est une addition
1029            if ($operator == '+') {
1030                // Année à ajouter
1031                $year += floor($delay / 12);
1032                // Mois restant
1033                $nb_month = ($delay % 12);
1034                // S'il y a des mois restant
1035                if ($nb_month != 0) {
1036                    // Ajout des mois restant
1037                    $month += $nb_month;
1038                    // Si ça dépasse le mois 12 (décembre)
1039                    if ($month > 12) {
1040                        // Soustrait 12 au mois
1041                        $month -= 12;
1042                        // Ajoute 1 à l'année
1043                        $year += 1;
1044                    }
1045                }
1046            }
1047    
1048            // Si c'est une soustraction
1049            if ($operator == "-") {
1050                // Année à soustraire
1051                $year -= floor($delay / 12);
1052                // Mois restant
1053                $nb_month = ($delay % 12);
1054                // S'il y a des mois restant
1055                if ($nb_month != 0) {
1056                    // Soustrait le délais
1057                    $month -= $nb_month;
1058                    // Si ça dépasse le mois 1 (janvier)
1059                    if ($month < 1) {
1060                        // Soustrait 12 au mois
1061                        $month += 12;
1062                        // Ajoute 1 à l'année
1063                        $year -= 1;
1064                    }
1065                }
1066            }
1067    
1068            // Calcul du nombre de jours dans le mois sélectionné
1069            switch($month) {
1070                // Mois de février
1071                case "2":
1072                    if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
1073                        $day_max = 29;
1074                    } else {
1075                        $day_max = 28;
1076                    }
1077                break;
1078                // Mois d'avril, juin, septembre et novembre
1079                case "4":
1080                case "6":
1081                case "9":
1082                case "11":
1083                    $day_max = 30;
1084                break;
1085                // Mois de janvier, mars, mai, juillet, août, octobre et décembre
1086                default:
1087                    $day_max = 31;
1088            }
1089    
1090            // Si le jour est supérieur au jour maximum du mois
1091            if ($day > $day_max) {
1092                // Le jour devient le jour maximum
1093                $day = $day_max;
1094            }
1095    
1096            // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
1097            $month = str_pad($month, 2, "0", STR_PAD_LEFT);
1098            $day = str_pad($day, 2, "0", STR_PAD_LEFT);
1099    
1100            // Retourne la date calculée
1101            return $year."-".$month."-".$day ;
1102        }
1103    
1104        /**
1105         * Vérifie la valididité d'une date.
1106         *
1107         * @param string $pDate Date à vérifier
1108         *
1109         * @return boolean
1110         */
1111        function check_date($pDate) {
1112    
1113            // Vérifie si c'est une date valide
1114            if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $pDate, $date)
1115                && checkdate($date[2], $date[3], $date[1])
1116                && $date[1] >= 1900) {
1117                //
1118                return true;
1119            }
1120    
1121            //
1122            return false;
1123        }
1124  }  }
1125    
1126  ?>  ?>

Legend:
Removed from v.2450  
changed lines
  Added in v.3241

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26