/[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

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26