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; |
484 |
$ancien_ref_parc = ""; |
$ancien_ref_parc = ""; |
485 |
for ($i=2; $i < count($reference_tab); $i+=2) { |
for ($i=2; $i < count($reference_tab); $i+=2) { |
486 |
$parc["quartier"] = $quartier; |
$parc["quartier"] = $quartier; |
487 |
$parc["section"] = $sect; |
// Met en majuscule si besoin |
488 |
|
$parc["section"] = strtoupper($sect); |
489 |
if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") { |
if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") { |
490 |
// 1ere parcelle ou parcelle individuelle |
// 1ere parcelle ou parcelle individuelle |
491 |
$parc["parcelle"] = $reference_tab[$i]; |
// Compléte par des "0" le début de la chaîne si besoin |
492 |
|
$parc["parcelle"] = str_pad($reference_tab[$i], 4, "0", STR_PAD_LEFT); |
493 |
// Ajout d'une parcelle à la liste |
// Ajout d'une parcelle à la liste |
494 |
$liste_parcelles[] = $parc; |
$liste_parcelles[] = $parc; |
495 |
} elseif ($reference_tab[$i-1] == "A") { |
} elseif ($reference_tab[$i-1] == "A") { |
522 |
function formatParcelleToSend($liste_parcelles) { |
function formatParcelleToSend($liste_parcelles) { |
523 |
|
|
524 |
// |
// |
525 |
$wParcelle = ""; |
$wParcelle = array(); |
526 |
|
|
527 |
//Formatage des références cadastrales pour l'envoi |
//Formatage des références cadastrales pour l'envoi |
528 |
foreach ($liste_parcelles as $value) { |
foreach ($liste_parcelles as $value) { |
529 |
|
|
530 |
// On ajoute les données dans le tableau que si quartier + section + parcelle |
// On ajoute les données dans le tableau que si quartier + section + parcelle |
531 |
// a été fourni |
// a été fourni |
532 |
if ($value["quartier"]!==""&&$value["section"]!==""&&$value["parcelle"]!==""){ |
if ($value["quartier"] !== "" |
533 |
|
&& $value["section"] !== "" |
534 |
|
&& $value["parcelle"] !== ""){ |
535 |
|
|
536 |
//On récupère le code impôt de l'arrondissement |
//On récupère le code impôt de l'arrondissement |
537 |
$arrondissement = $this->getCodeImpotByQuartier($value["quartier"]); |
$arrondissement = $this->getCodeImpotByQuartier($value["quartier"]); |
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"].";"; |
$value["section"].$value["parcelle"]; |
544 |
|
|
545 |
} |
} |
546 |
} |
} |
582 |
return $arrondissement; |
return $arrondissement; |
583 |
} |
} |
584 |
|
|
585 |
|
/** |
586 |
|
* Vérification des paramètres |
587 |
|
*/ |
588 |
|
function checkParams() { |
589 |
|
parent::checkParams(); |
590 |
|
|
591 |
|
(isset($this->config['path_scan']) ? "" : $this->config['path_scan'] = '../trs/numerisation/'); |
592 |
|
|
593 |
|
$default_sig_elyx = array( |
594 |
|
'wsdl' => '../tests/wsurbanisme.wsdl', |
595 |
|
'login' => 'sig', |
596 |
|
'password' => 'sig', |
597 |
|
); |
598 |
|
(isset($this->config['sig_elyx']) ? "" : $this->config['sig_elyx'] = $default_sig_elyx); |
599 |
|
} |
600 |
|
|
601 |
|
/** |
602 |
|
* Retourne true si tous les paramètres du SIG externe ont bien été définis |
603 |
|
* @return bool true/false |
604 |
|
*/ |
605 |
|
public function issetSIGParameter() { |
606 |
|
if($this->getParameter("sig_web_server") != NULL AND |
607 |
|
$this->getParameter("sig_web_server") != "" AND |
608 |
|
$this->getParameter("sig_couche_emprise_dossier") != NULL AND |
609 |
|
$this->getParameter("sig_couche_emprise_dossier") != "" AND |
610 |
|
$this->getParameter("sig_couche_affichage_dossier") != NULL AND |
611 |
|
$this->getParameter("sig_couche_affichage_dossier") != "" AND |
612 |
|
$this->getParameter("sig_couche_affichage_parcelle") != NULL AND |
613 |
|
$this->getParameter("sig_couche_affichage_parcelle") != "") { |
614 |
|
return true; |
615 |
|
} else { |
616 |
|
return false; |
617 |
|
} |
618 |
|
} |
619 |
|
|
620 |
|
/** |
621 |
|
* Permet de vérifier que des champs existe dans une table |
622 |
|
* @param array $list_fields Liste des champs à tester |
623 |
|
* @param string $table Table où les champs doivent exister |
624 |
|
* @return mixed Retourne les champs qui n'existent pas |
625 |
|
* ou true |
626 |
|
*/ |
627 |
|
public function check_field_exist($list_fields, $table) { |
628 |
|
|
629 |
|
// Instance de la classe en paramètre |
630 |
|
require_once "../obj/".$table.".class.php"; |
631 |
|
$object = new $table("]", $this->db, DEBUG); |
632 |
|
|
633 |
|
// Récupère les champs de la table |
634 |
|
foreach ($object->champs as $champ) { |
635 |
|
$list_column[] = $champ; |
636 |
|
} |
637 |
|
|
638 |
|
// Tableau des champs en erreur |
639 |
|
$error_fields = array(); |
640 |
|
|
641 |
|
// Pour chaque champ à tester |
642 |
|
foreach ($list_fields as $value) { |
643 |
|
|
644 |
|
// S'il n'apparaît pas dans la liste des champs possible |
645 |
|
if (!in_array($value, $list_column)) { |
646 |
|
|
647 |
|
// Alors le champ est ajouté au tableau des erreurs |
648 |
|
$error_fields[] = $value; |
649 |
|
} |
650 |
|
} |
651 |
|
|
652 |
|
// Si le tableau des erreurs n'est pas vide on le retourne |
653 |
|
if (count($error_fields) > 0) { |
654 |
|
return $error_fields; |
655 |
|
} |
656 |
|
|
657 |
|
// Sinon on retourne le booléen true |
658 |
|
return true; |
659 |
|
|
660 |
|
} |
661 |
|
|
662 |
|
/* |
663 |
|
* |
664 |
|
*/ |
665 |
|
/** |
666 |
|
* Récupère la lettre type lié à un événement |
667 |
|
* @param integer $evenement L'identifiant de l'événement |
668 |
|
* @return integer Retourne l'idenfiant de la lettre-type ou true |
669 |
|
*/ |
670 |
|
function getLettreType($evenement){ |
671 |
|
|
672 |
|
$lettretype = NULL; |
673 |
|
|
674 |
|
$sql = |
675 |
|
"SELECT |
676 |
|
lettretype |
677 |
|
FROM |
678 |
|
".DB_PREFIXE."evenement |
679 |
|
WHERE |
680 |
|
evenement = $evenement"; |
681 |
|
|
682 |
|
$this->addToLog("getLettreType() : db->query(\"".$sql."\")", VERBOSE_MODE); |
683 |
|
$res = $this->db->query($sql); |
684 |
|
if ( database::isError($res)){ |
685 |
|
die(); |
686 |
|
} |
687 |
|
|
688 |
|
if ( $res->numrows() > 0 ){ |
689 |
|
|
690 |
|
$row=& $res->fetchRow(DB_FETCHMODE_ASSOC); |
691 |
|
$lettretype = $row['lettretype']; |
692 |
|
} |
693 |
|
|
694 |
|
return $lettretype; |
695 |
|
} |
696 |
|
|
697 |
|
/** |
698 |
|
* Retourne le type de dossier d'autorisation du dossier courant : |
699 |
|
* @param $idxDossier Le numéro du dossier d'instruction |
700 |
|
* @return le code du type détaillée de dossier d'autorisation |
701 |
|
**/ |
702 |
|
function getDATDCode($idxDossier) { |
703 |
|
$sql = "SELECT dossier_autorisation_type_detaille.code |
704 |
|
FROM ".DB_PREFIXE."dossier_autorisation_type_detaille |
705 |
|
INNER JOIN ".DB_PREFIXE."dossier_autorisation |
706 |
|
ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = |
707 |
|
dossier_autorisation.dossier_autorisation_type_detaille |
708 |
|
INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation |
709 |
|
WHERE dossier.dossier = '".$idxDossier."'"; |
710 |
|
$res = $this->db->getOne($sql); |
711 |
|
$this->addToLog("getDATDCode() : db->getOne(\"".$sql."\")", VERBOSE_MODE); |
712 |
|
if ( database::isError($res)){ |
713 |
|
die(); |
714 |
|
} |
715 |
|
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, "copier")) { |
759 |
|
// Traitement sur les valeurs du duplicata |
760 |
|
$valF = $clone_obj->copier($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 |
|
while ($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, "copier")) { |
812 |
|
// Traitement sur les valeurs du duplicata |
813 |
|
$valF = $clone_objsf->copier($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 |
|
// |
842 |
|
} else { |
843 |
|
|
844 |
|
// Message d'erreur récupéré depuis la classe |
845 |
|
$message .= $clone_obj->msg; |
846 |
|
// Type du message |
847 |
|
$message_type = "error"; |
848 |
|
} |
849 |
|
|
850 |
|
// Ajout du message au tableau des résultats |
851 |
|
$resArray['message'] = $message; |
852 |
|
// Ajout du type de message au tableau des résultats |
853 |
|
$resArray['message_type'] = $message_type; |
854 |
|
|
855 |
|
// Retourne le tableau des résultats |
856 |
|
return $resArray; |
857 |
|
} |
858 |
|
|
859 |
|
/** |
860 |
|
* Permet de détailler les conditions pour l'affichage des contraintes dans |
861 |
|
* une édition. |
862 |
|
* @param string $contraintes_param Chaine des conditions |
863 |
|
* |
864 |
|
* @return array Conditions |
865 |
|
*/ |
866 |
|
function explodeConditionContrainte($contraintes_param) { |
867 |
|
|
868 |
|
// Initialisation des variables |
869 |
|
$return = array(); |
870 |
|
$listGroupes = ""; |
871 |
|
$listSousgroupes = ""; |
872 |
|
$service_consulte = ""; |
873 |
|
|
874 |
|
// Coupe la condition au ";" |
875 |
|
// Doit séparer groupe et sous-groupe |
876 |
|
$contraintes_params = explode(";", $contraintes_param); |
877 |
|
|
878 |
|
// Pour chaque paramètres |
879 |
|
foreach ($contraintes_params as $value) { |
880 |
|
// Si le mot-clés "liste_groupe=" |
881 |
|
if (strstr($value, "liste_groupe=")) { |
882 |
|
// On enlève le mots-clés "liste_groupe=" |
883 |
|
$listGroupes = str_replace("liste_groupe=", "", $value); |
884 |
|
} |
885 |
|
// Si le mot-clés "liste_ssgroupe=" |
886 |
|
if (strstr($value, "liste_ssgroupe=")) { |
887 |
|
// On enlève le mots-clés "liste_ssgroupe=" |
888 |
|
$listSousgroupes = str_replace("liste_ssgroupe=", "", $value); |
889 |
|
} |
890 |
|
// Si le mot-clés "service_consulte=" |
891 |
|
if (strstr($value, "service_consulte=")) { |
892 |
|
// On enlève le mots-clés "service_consulte=" |
893 |
|
$service_consulte = str_replace("service_consulte=", "", $value); |
894 |
|
} |
895 |
|
} |
896 |
|
|
897 |
|
// Récupère la liste des groupes et sous-groupes qui doivent |
898 |
|
// être utilisés pour la condition |
899 |
|
if ($listGroupes != "") { |
900 |
|
$listGroupes = explode(",", $listGroupes); |
901 |
|
} |
902 |
|
if ($listSousgroupes != "") { |
903 |
|
$listSousgroupes = explode(",", $listSousgroupes); |
904 |
|
} |
905 |
|
|
906 |
|
// Tableau à retourner |
907 |
|
$return['groupes'] = $listGroupes; |
908 |
|
$return['sousgroupes'] = $listSousgroupes; |
909 |
|
$return['service_consulte'] = $service_consulte; |
910 |
|
|
911 |
|
// |
912 |
|
return $return; |
913 |
|
} |
914 |
|
|
915 |
|
/** |
916 |
|
* Traitement pour créer la condition sur les contraintes dans les éditions. |
917 |
|
* @param string $part SQL et parti du pdf (sql, titre ou corps) |
918 |
|
* |
919 |
|
* @return string Condition pour la requête sur les contraintes |
920 |
|
*/ |
921 |
|
function traitement_condition_contrainte($part) { |
922 |
|
|
923 |
|
// Initialisationd de la condition |
924 |
|
$whereContraintes = ""; |
925 |
|
|
926 |
|
// Détaille la condtion |
927 |
|
$explodeConditionContrainte = $this->explodeConditionContrainte($part); |
928 |
|
|
929 |
|
// Récupère les groupes, sous-groupes et service_consulte pour la condition |
930 |
|
$groupes = $explodeConditionContrainte['groupes']; |
931 |
|
$sousgroupes = $explodeConditionContrainte['sousgroupes']; |
932 |
|
$service_consulte = $explodeConditionContrainte['service_consulte']; |
933 |
|
|
934 |
|
// Pour chaque groupe |
935 |
|
if ($groupes != "") { |
936 |
|
foreach ($groupes as $key => $groupe) { |
937 |
|
// Si le groupe n'est pas vide |
938 |
|
if (!empty($groupe)) { |
939 |
|
// Choisit l'opérateur logique |
940 |
|
$op_logique = $key > 0 ? 'OR' : 'AND ('; |
941 |
|
// Ajoute la condition |
942 |
|
$whereContraintes .= " ".$op_logique." lower(contrainte.groupe) = lower('" |
943 |
|
.pg_escape_string($groupe)."')"; |
944 |
|
} |
945 |
|
} |
946 |
|
// S'il y a des valeurs dans groupe |
947 |
|
if (count($groupe) > 0) { |
948 |
|
// Ferme la parenthèse |
949 |
|
$whereContraintes .= " ) "; |
950 |
|
} |
951 |
|
} |
952 |
|
|
953 |
|
// Pour chaque sous-groupe |
954 |
|
if ($sousgroupes != "") { |
955 |
|
foreach ($sousgroupes as $key => $sousgroupe) { |
956 |
|
// Si le sous-groupe n'est pas vide |
957 |
|
if (!empty($sousgroupe)) { |
958 |
|
// Choisit l'opérateur logique |
959 |
|
$op_logique = $key > 0 ? 'OR' : 'AND ('; |
960 |
|
// Ajoute la condition |
961 |
|
$whereContraintes .= " ".$op_logique." lower(contrainte.sousgroupe) = lower('" |
962 |
|
.pg_escape_string($sousgroupe)."')"; |
963 |
|
} |
964 |
|
} |
965 |
|
// S'il y a des valeurs dans sous-groupe |
966 |
|
if (count($sousgroupes) > 0) { |
967 |
|
// Ferme la parenthèse |
968 |
|
$whereContraintes .= " ) "; |
969 |
|
} |
970 |
|
} |
971 |
|
|
972 |
|
// Si l'option service_consulte n'est pas vide |
973 |
|
if ($service_consulte != "") { |
974 |
|
// Ajoute la condition |
975 |
|
$whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) "; |
976 |
|
} |
977 |
|
|
978 |
|
// Condition retournée |
979 |
|
return $whereContraintes; |
980 |
|
} |
981 |
|
|
982 |
|
/** |
983 |
|
* Calcule une date par l'ajout ou la soustraction de mois |
984 |
|
* @param date $date Date de base |
985 |
|
* @param integer $delay Délais à ajouter (en mois) |
986 |
|
* @param string $operator Opérateur pour le calcul ("-" ou "+") |
987 |
|
* |
988 |
|
* @return date Date calculée |
989 |
|
*/ |
990 |
|
function mois_date($date, $delay, $operator = "+") { |
991 |
|
|
992 |
|
// Découpage de la date |
993 |
|
$temp = explode("-", $date); |
994 |
|
$day = (int) $temp[2]; |
995 |
|
$month = (int) $temp[1]; |
996 |
|
$year = (int) $temp[0]; |
997 |
|
|
998 |
|
// Si c'est une addition |
999 |
|
if ($operator == '+') { |
1000 |
|
// Année à ajouter |
1001 |
|
$year += floor($delay / 12); |
1002 |
|
// Mois restant |
1003 |
|
$nb_month = ($delay % 12); |
1004 |
|
// S'il y a des mois restant |
1005 |
|
if ($nb_month != 0) { |
1006 |
|
// Ajout des mois restant |
1007 |
|
$month += $nb_month; |
1008 |
|
// Si ça dépasse le mois 12 (décembre) |
1009 |
|
if ($month > 12) { |
1010 |
|
// Soustrait 12 au mois |
1011 |
|
$month -= 12; |
1012 |
|
// Ajoute 1 à l'année |
1013 |
|
$year += 1; |
1014 |
|
} |
1015 |
|
} |
1016 |
|
} |
1017 |
|
|
1018 |
|
// Si c'est une soustraction |
1019 |
|
if ($operator == "-") { |
1020 |
|
// Année à soustraire |
1021 |
|
$year -= floor($delay / 12); |
1022 |
|
// Mois restant |
1023 |
|
$nb_month = ($delay % 12); |
1024 |
|
// S'il y a des mois restant |
1025 |
|
if ($nb_month != 0) { |
1026 |
|
// Soustrait le délais |
1027 |
|
$month -= $nb_month; |
1028 |
|
// Si ça dépasse le mois 1 (janvier) |
1029 |
|
if ($month < 1) { |
1030 |
|
// Soustrait 12 au mois |
1031 |
|
$month += 12; |
1032 |
|
// Ajoute 1 à l'année |
1033 |
|
$year -= 1; |
1034 |
|
} |
1035 |
|
} |
1036 |
|
} |
1037 |
|
|
1038 |
|
// Calcul du nombre de jours dans le mois sélectionné |
1039 |
|
switch($month) { |
1040 |
|
// Mois de février |
1041 |
|
case "2": |
1042 |
|
if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) { |
1043 |
|
$day_max = 29; |
1044 |
|
} else { |
1045 |
|
$day_max = 28; |
1046 |
|
} |
1047 |
|
break; |
1048 |
|
// Mois d'avril, juin, septembre et novembre |
1049 |
|
case "4": |
1050 |
|
case "6": |
1051 |
|
case "9": |
1052 |
|
case "11": |
1053 |
|
$day_max = 30; |
1054 |
|
break; |
1055 |
|
// Mois de janvier, mars, mai, juillet, août, octobre et décembre |
1056 |
|
default: |
1057 |
|
$day_max = 31; |
1058 |
|
} |
1059 |
|
|
1060 |
|
// Si le jour est supérieur au jour maximum du mois |
1061 |
|
if ($day > $day_max) { |
1062 |
|
// Le jour devient le jour maximum |
1063 |
|
$day = $day_max; |
1064 |
|
} |
1065 |
|
|
1066 |
|
// Compléte le mois et le jour par un 0 à gauche si c'est un chiffre |
1067 |
|
$month = str_pad($month, 2, "0", STR_PAD_LEFT); |
1068 |
|
$day = str_pad($day, 2, "0", STR_PAD_LEFT); |
1069 |
|
|
1070 |
|
// Retourne la date calculée |
1071 |
|
return $year."-".$month."-".$day ; |
1072 |
|
} |
1073 |
|
|
1074 |
|
/** |
1075 |
|
* Vérifie la valididité d'une date. |
1076 |
|
* @param string $pDate Date à vérifier |
1077 |
|
* |
1078 |
|
* @return boolean |
1079 |
|
*/ |
1080 |
|
function check_date($pDate) { |
1081 |
|
|
1082 |
|
// Vérifie si c'est une date valide |
1083 |
|
if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $pDate, $date) |
1084 |
|
&& checkdate($date[2], $date[3], $date[1]) |
1085 |
|
&& $date[1] >= 1900) { |
1086 |
|
// |
1087 |
|
return true; |
1088 |
|
} |
1089 |
|
|
1090 |
|
// |
1091 |
|
return false; |
1092 |
|
} |
1093 |
|
|
1094 |
} |
} |
1095 |
|
|
1096 |
?> |
?> |