Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 602 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

class BaseflorVerif extends VerificateurDonnees {

 
        private $type_bio = array();
        private $ss_type_bio = array();
        private $signes_seuls = array();// basés sur valeurs trouvées (--> pas de légende !)
        private $signes_nn_seuls = array();// basés sur valeurs trouvées (--> pas de légende !)
        private $intervalles = array();
        private $motifs = array();
        

        //obligatoire
        public function definirTraitementsColonnes() {
                $this->initialiserParametresVerif() ;
                if (( $this->colonne_num > 0 && $this->colonne_num < 15 )
                || $this->colonne_num == 16
                || ($this->colonne_num > 18 && $this->colonne_num < 23)
                || $this->colonne_num > 39) {
                        $this->verifierColonne();
                } elseif ($this->colonne_num == 15) {
                        $this->verifierTypeBio();
                } elseif ($this->colonne_num >= 23 && $this->colonne_num <= 32) {
                        $this->verifierIntervalles($this->colonne_valeur);
                } elseif ($this->colonne_num >= 33 && $this->colonne_num < 41) {
                        $this->verifierValeursIndic();
                }
        }
        
        
        
        private function initialiserParametresVerif() {
                $this->type_bio = $this->getParametreTableau('Parametres.typesBio');
                $this->ss_type_bio = $this->getParametreTableau('Parametres.sousTypesBio');
                $this->signes_seuls = $this->getParametreTableau('Parametres.signesSeuls');
                $this->signes_nn_seuls = $this->getParametreTableau('Parametres.signesNonSeuls');
                $this->intervalles = $this->inverserTableau($this->getParametreTableau('Parametres.intervalles'));
                $this->motifs = $this->inverserTableau($this->getParametreTableau('Parametres.motifs'));
                
        }
        
        //++---------------------------------traitements des colonnes baseflor------------------------------------++
        
        
        private function verifierColonne(){
                $motif = $this->motifs[$this->colonne_num];
                if (preg_match($motif, $this->colonne_valeur) == 0 && $this->verifierSiVide() == false){
                        $this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
                }
        }

        private function verifierSiVide(){
                $vide = ($this->colonne_valeur  == '') ? true : false;
                return $vide;
        }

        private function verifierTypeBio(){
                if (preg_match("/(.+)\((.+)\)$/", $this->colonne_valeur, $retour) == 1) {
                        $this->verifierTypeEtSsType($retour[1]);
                        $this->verifierTypeEtSsType($retour[2]);
                } else {
                        $this->verifierTypeEtSsType($this->colonne_valeur);
                }
        }

        private function verifierTypeEtSsType($chaine_a_verif){
                if (preg_match("/^([a-zA-Zé]+)\-(.+)$|^([a-zA-Zé]+[^\-])$/", $chaine_a_verif, $retour) == 1) {
                        $type = (isset($retour[3])) ? $retour[3] : $retour[1];
                        $this->verifierType($type);

                        $sousType = $retour[2];
                        $this->verifierSousType($sousType);
                }
        }

        private function verifierType($type) {
                if (in_array($type, $this->type_bio) == false) {
                        $this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
                }
        }

        private function verifierSousType($sousType) {
                if ($sousType != ''){
                        $ss_type = explode('-', $sousType);
                        foreach ($ss_type as $sst) {
                                if (in_array($sst, $this->ss_type_bio) == false) {
                                        $this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
                                }
                        }
                }
        }

        private function verifierIntervalles($valeur){
                if ($valeur != '') {
                        list($min, $max) = explode('-', $this->intervalles[$this->colonne_num]);
                        if ($valeur < $min || $valeur > $max){
                                $this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
                        }
                }
        }

        private function verifierValeursIndic(){
                if (preg_match("/^([^0-9])*([0-9]+)([^0-9])*$/", $this->colonne_valeur, $retour) == 1){
                        $this->verifierIntervalles($retour[2]);
                        if (isset($retour[3]) && in_array($retour[3], $this->signes_nn_seuls) == false){
                                $this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
                        }
                        if ($retour[1] != '-' && $retour[1] != ''){
                                $this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
                        }
                } elseif (in_array( $this->colonne_valeur, $this->signes_seuls) == false && $this->verifierSiVide() == false) {
                        $this->erreurs_ligne[$this->colonne_num] = $this->colonne_valeur;
                }
        }
        
        /*--------------------------------------------OUtils-------------------------------------------*/
        
        private function getParametreTableau($cle) {
                $tableau = array();
                $parametre = Config::get($cle);
                if (empty($parametre) === false) {
                        $tableauPartiel = explode(',', $parametre);
                        $tableauPartiel = array_map('trim', $tableauPartiel);
                        foreach ($tableauPartiel as $champ) {
                                if (strpos($champ, '=') !== false && strlen($champ) >= 3) {
                                        list($cle, $val) = explode('=', $champ);
                                        $tableau[trim($cle)] = trim($val);
                                } else {
                                        $tableau[] = trim($champ);
                                }
                        }
                }
                return $tableau;
        }

        private function inverserTableau($tableau) {
                $inverse = array();
                foreach ($tableau as $cle => $valeurs) {
                        $valeurs = explode(';', $valeurs);
                        foreach ($valeurs as $valeur) {
                                $inverse[$valeur] = $cle;
                        }
                }
                return $inverse;
        }
}

?>