abstractSearch dans une chaine, sans tenir compte de la casse.
519501
def in_string(objet, pattern):
        
        return bool(re.search(pattern, str(objet), flags=re.I)) if objet else False
38189
private function hpkp(): array
    {
        // TODO : lever une exception si les champs hashes et max-age sont vide, car ils doivent tous les deux avoir une valeur chacun (cad un hash au minimum + un maxage)
        $values = [];
        foreach ($this->security['hpkp']['hashes'] as $hash) {
            $values[] = sprintf('pin-sha256="%s"', $hash);
        }
        $values[] = sprintf('max-age=%d', $this->security['hpkp']['max-age']);
        if ($this->security['hpkp']['include-sub-domains']) {
            $values[] = 'includeSubDomains';
        }
        if (! empty($this->security['hpkp']['report-uri'])) {
            $values[] = sprintf('report-uri="%s"', $this->security['hpkp']['report-uri']);
        }
        $header = $this->security['hpkp']['report-only']
            ? 'Public-Key-Pins-Report-Only'
            : 'Public-Key-Pins';

        return [$header => implode('; ', $values)];
    }
808337
private Group getNextGroup(int tmp_model,int tmp_chain,int tmp_group)
	throws NoSuchElementException
	{

		if ( tmp_model >= structure.nrModels()){
			throw new NoSuchElementException("arrived at end of structure!");
		}

		List<Chain> model = structure.getModel(tmp_model);

		if ( tmp_chain >= model.size() ){
			if(fixed_model)
				throw new NoSuchElementException("arrived at end of model!");
			return getNextGroup(tmp_model+1,0,0);
		}

		Chain     chain = model.get(tmp_chain);

		if (tmp_group  >= chain.getAtomLength()){
			// start search at beginning of next chain.
			return getNextGroup(tmp_model,tmp_chain+1,0);
		} else {
			current_model_pos = tmp_model;
			current_chain_pos = tmp_chain;
			current_group_pos = tmp_group;
			return chain.getAtomGroup(current_group_pos);
		}

	}
1167514
function (chain) {
        if (chain.readable) {
            chain.chainAfter = chain.chainAfter || Pipe.Chain.prototype.chainAfter;
            chain.nextChain = chain.nextChain || Pipe.Chain.prototype.nextChain;
        }
        if (chain.writable) { // Duplex
            chain.chainBefore = chain.chainBefore || Pipe.Chain.prototype.chainBefore;
            chain.previousChain = chain.previousChain || Pipe.Chain.prototype.previousChain;
        }

        chain.autoEnhance = true;

        chain.enhanceForeignStream = chain.enhanceForeignStream || Pipe.Chain.prototype.enhanceForeignStream;

    }
1307982
private function chainB()
    {
        $length = count($this->b);
        $this->b2j = [];
        $popularDict = [];

        for ($i = 0; $i < $length; ++$i) {
            $char = $this->b[$i];

            if (isset($this->b2j[$char])) {
                if ($length >= 200 && count($this->b2j[$char]) * 100 > $length) {
                    $popularDict[$char] = 1;
                    unset($this->b2j[$char]);
                } else {
                    $this->b2j[$char][] = $i;
                }
            } else {
                $this->b2j[$char] = [$i];
            }
        }

        // Remove leftovers
        foreach (array_keys($popularDict) as $char) {
            unset($this->b2j[$char]);
        }
    }
416533
public function saveInterest(){
		$t = new Template($this->getCheminPhysique().$this->cheminTemplates."interest/");
		$t->set_filenames(array('confirm'=>'confirm.tpl'));
		
		$urlBack = $this->creerUrl('', 'mesInterets', array());
		$txtLink = "Revenir à la liste de mes intérêts";
		
		if(isset($this->variablesPost) && !empty($this->variablesPost)){
			$interets = $this->variablesPost;
		}
		elseif (isset($this->variablesGet) && !empty($this->variablesGet)){
			$interets = $this->variablesGet;
		}
		
		
		
		/*
		 * Initially, it was adding related nesting element in the interests of the user
		 * Client asked to add only the smallest element in interest (if neighborhood selected, don't add the city and the country)
		 * Little array handling to satified the client need, to revert, delete the two following loops 
		 */
		foreach ($interets as $key => $int){
			if($int== 0){
				unset($interets[$key]);
			}
		}
		while(count($interets)>1){
			array_shift($interets);
		}
		
		
		$requestParameters = array();
		if($interets['rue']!=0){
			$requestParameters[]=array('table'=>'_interetRue','fieldName1'=>'idUtilisateur','fieldName2'=>'idRue','idInteret'=>$interets['rue'],'userId'=>$this->userId);
		}
		if($interets['sousQuartier']!=0){
			$requestParameters[]=array('table'=>'_interetSousQuartier','fieldName1'=>'idUtilisateur','fieldName2'=>'idSousQuartier','idInteret'=>$interets['sousQuartier'],'userId'=>$this->userId);
		}
		if($interets['quartier']!=0){
			$requestParameters[]=array('table'=>'_interetQuartier','fieldName1'=>'idUtilisateur','fieldName2'=>'idQuartier','idInteret'=>$interets['quartier'],'userId'=>$this->userId);
		}
		if($interets['ville']!=0){
			$requestParameters[]=array('table'=>'_interetVille','fieldName1'=>'idUtilisateur','fieldName2'=>'idVille','idInteret'=>$interets['ville'],'userId'=>$this->userId);
		}
		if($interets['pays']!=0){
			$requestParameters[]=array('table'=>'_interetPays','fieldName1'=>'idUtilisateur','fieldName2'=>'idPays','idInteret'=>$interets['pays'],'userId'=>$this->userId);
		}
		if($interets['adresse']!=0){
			$idHistoriqueAdresse = $interets['adresse'];
			$requestParameters[]=array('table'=>'_interetAdresse','fieldName1'=>'idUtilisateur','fieldName2'=>'idHistoriqueAdresse','idInteret'=>$interets['adresse'],'userId'=>$this->userId);
			
			$requete = "
					SELECT ae.idEvenement as idEvenementGroupeAdresse, ae.idAdresse as idAdresse 
					FROM _adresseEvenement ae
					LEFT JOIN historiqueAdresse ha on ha.idAdresse = ae.idAdresse 
					WHERE ha.idHistoriqueAdresse  = ".$idHistoriqueAdresse."
					";			
			$result = $this->connexionBdd->requete($requete);
			$fetch = mysql_fetch_array($result);
			$idAdresse = $fetch['idAdresse'];
			$idEvenementGroupeAdresse = $fetch['idEvenementGroupeAdresse'];
			
			$evenement = new archiEvenement();
			$titreAdresse = $evenement->getIntituleAdresseFrom($idAdresse,'idAdresse');
			
			$urlBack = $this->creerUrl('','',array('archiAffichage'=>'adresseDetail','archiIdAdresse'=>$idAdresse,'archiIdEvenementGroupeAdresse'=>$idEvenementGroupeAdresse));
			$txtLink="Aller à l'adresse " . $titreAdresse;
		}
		if($interets['personne']){
			$requestParameters[]=array('table'=>'_interetPersonne','fieldName1'=>'idUtilisateur','fieldName2'=>'idPersonne','idInteret'=>$interets['personne'],'userId'=>$this->userId);
			$urlBack = $this->creerUrl('', 'evenementListe', array('selection' => 'personne', 'id' => $interets['personne']));
			$txtLink = "Retour à la fiche de la personne";
		}

		$nbEltInserted=0;
		foreach ($requestParameters as $rp){
			//Insert if not exists
			$requete= "
					INSERT INTO ".$rp['table']." (".$rp['fieldName1'].",".$rp['fieldName2'].",created)
					SELECT '".$this->userId."', '".$rp['idInteret']."' , now()
					FROM DUAL
					WHERE NOT EXISTS (SELECT * FROM `".$rp['table']."`
					WHERE ".$rp['fieldName1']."='".$this->userId."' AND ".$rp['fieldName2']."='".$rp['idInteret']."')
					LIMIT 1
					";
			$res = $this->connexionBdd->requete($requete,false);
		}
		$this->messages->addConfirmation('Intérêt(s) sauvegardé(s) avec succès !');
		$t->assign_vars(array(
				'message' =>  $this->messages->display(),
				'textLink' => $txtLink,
				'urlBack'=> $urlBack
		)); 
		ob_start();
		$t->pparse('confirm');
		$html .= ob_get_contents();
		ob_end_clean();
		return $html;
	}
774442
function isUTF8($str)
    {
         // astuce pour entrer dans un test booléen ^^
         // (si c'est un tableau... ce qui est forcement vrai)
        if (is_array($str)) {
            $str = implode('', $str);
            // retourne FALSE si aucun caractere n'appartient au jeu utf8
            return !((ord($str[0]) != 239) && (ord($str[1]) != 187) && (ord($str[2]) != 191));
        } else {
            // retourne TRUE
            // si la chaine decoder et encoder est egale a elle meme
            return (utf8_encode(utf8_decode($str)) == $str);
        }    
    }
421655
def _get_chain_by_sid(sid):
    """"""
    try:
        return d1_gmn.app.models.Chain.objects.get(sid__did=sid)
    except d1_gmn.app.models.Chain.DoesNotExist:
        pass
749792
private function hydrate($object_data) {

    // Vérification du type de donnée insérée
    if (is_array($object_data)) {                                                                           // SI il s'agit d'un tableau...
      foreach ($object_data as $object_data_key => $object_data_value) {                                    // On parcourt chaque élément du tableau
        if($this->isProperty($object_data_key) || method_exists($this, 'set'.ucfirst($object_data_key))) {  // SI la clé est une propriété de l'objet ou une méthode existante pour l'objet...

          // Retypage à 'Null' en cas de valeur vide
          if ($object_data_value == '') { $object_data_value = null;  }

          $this->{'set'.ucfirst($object_data_key)}($object_data_value);                                     // On appelle le 'setter' correspondant
        }
      }
    } else if (is_a($object_data, get_class($this))) {                                                      // SINON si il s'agit d'un objet...
      foreach ($this->properties() as $properties_key => $properties_value) {                               // Pour chacune de ses propriétés...
        $this->{'set'.ucfirst($properties_value)}($object_data->$properties_value());                       // On appelle le 'setter' correspondant
      }
    } else {
      throw new Exception("le type de donnée inséré à la méthode d'hydratation de la classe '".get_class($this)."' est incorrect", '00010003');
    }
  }
9733
void readFromFile() throws IOException {
		final Counter counter = new CounterStorage(this).readFromFile();
		if (counter != null) {
			final Counter newCounter = clone();
			startDate = counter.getStartDate();
			requests.clear();
			for (final CounterRequest request : counter.getRequests()) {
				requests.put(request.getName(), request);
			}
			if (errors != null) {
				errors.clear();
				errors.addAll(counter.getErrors());
			}
			// on ajoute les nouvelles requêtes enregistrées avant de lire le fichier
			// (par ex. les premières requêtes collectées par le serveur de collecte lors de l'initialisation)
			addRequestsAndErrors(newCounter);
		}
	}
1050988
@Override
	public boolean isValid(String value, ConstraintValidatorContext constraintContext) {
		
		// Si l'objet est null : false
		if(value == null) return false;
		
		// Si l'objet n'est pas une chaine : false
		if(!(value instanceof String)) return false;
		
		// On caste
		String stringValue = (String) value;
		
		// Si la chaine est vide : false
		if(stringValue == null || stringValue.length() == 0) return false;
		
		// Obtention du tableau de valeurs
		String[] parts = stringValue.split("\\.");
		
		// Si la tableau n'a pas une taille de 4
		if(parts == null || parts.length < 4) return false;
		
		// Pattern Numerique
		Pattern pattern = Pattern.compile("\\d+");
		
		// Parcours du tableau
		for (String part : parts) {

			// Si ce n'est pas un Numerique
			if(!pattern.matcher(part).matches()) return false;
		}
		
		// On retourne true
		return true;
	}
392398
def find_le_index(self, k):
        ''
        i = bisect_right(self._keys, k)
        if i:
            return i - 1
        raise ValueError('No item found with key at or below: %r' % (k,))
437122
private function ajoutRue($idSousQuartier, $nom, $prefixe)
    {
        // on verifie qu'il n'existe pas deja une rue du meme nom dans la ville
        // recherche de la ville
        $reqVille = "
                    SELECT distinct v.idVille as idVille
                    FROM ville v
                    LEFT JOIN quartier q ON q.idVille = v.idVille
                    LEFT JOIN sousQuartier sq ON sq.idQuartier = q.idQuartier
                    WHERE
                        sq.idSousQuartier = '$idSousQuartier'
                    ";
        $resVille = $this->connexionBdd->requete($reqVille);
        $adresseExistante = 0;
        if (mysql_num_rows($resVille)>0) {
            $fetchVille = mysql_fetch_assoc($resVille);
            $idVille =$fetchVille['idVille'];


            $reqVerif = "
            SELECT r.idRue
            FROM rue r
            LEFT JOIN sousQuartier sq ON sq.idSousQuartier = r.idSousQuartier
            LEFT JOIN quartier q ON q.idQuartier = sq.idQuartier
            LEFT JOIN ville v ON v.idVille = q.idVille
            WHERE
            LOWER(r.nom) = LOWER(\"".$nom."\")
            AND LOWER(r.prefixe) = LOWER(\"".$prefixe."\")
            AND v.idVille = '".$idVille."'
            ";

            $resVerif=$this->connexionBdd->requete($reqVerif);
            if (mysql_num_rows($resVerif)>0) {
                $adresseExistante = 1;
            }
        }


        $sql="
            SELECT idRue
            FROM rue
            WHERE idSousQuartier = '".$idSousQuartier."'
            AND LOWER(nom) = LOWER(\"".$nom."\")
            AND LOWER(prefixe) = LOWER(\"".$prefixe."\")
        ";

        $res=$this->connexionBdd->requete($sql);
        $newIdRue = 0;
        if ($adresseExistante || mysql_num_rows($res)>0) {
            $this->erreurs->ajouter(_("Erreur :")." "._("il y a déjà un enregistrement de rue du même nom dans cette ville"));
        } else {
            // ajout
            $this->connexionBdd->requete("
                INSERT INTO rue (idSousQuartier,nom,prefixe)
                VALUES ('".$idSousQuartier."',\"".$nom."\",\"".$prefixe."\")
            ");

            $newIdRue = mysql_insert_id();
        }

        return $newIdRue;
    }
361550
private boolean nextSearchItemset(BitVector bv, int[] scratchi, int[] iters) {
    final int last = scratchi.length - 1;
    for(int j = last; j >= 0; j--) {
      int n = bv.iterAdvance(iters[j]);
      if(n >= 0 && (j == last || n != iters[j + 1])) {
        iters[j] = n;
        scratchi[j] = bv.iterDim(n);
        return true; // Success
      }
    }
    return false;
  }
1279652
public function getIdEvenementsFromRecherche($criteres = array(), $templateName = 'listeEvenement.tpl', $modeAffichage = '')
    {
        $html = '';
        $sqlJoin = '';
        $tabParametresAutorises = array('ordre', 'tri', 'debut', 'selection', 'id');

        $arrayIdEvenements=array();

        foreach ($tabParametresAutorises as $param) {
            if (isset($this->variablesGet[$param]) and !isset($criteres[$param])) {
                $criteres[$param] = $this->variablesGet[$param];
            }
        }

        //
        // si c'est une recherche alors on ne cherche pas dans les type d'événements étant des groupes d'adresses
        // !!!!! ATTENTION à l'ID du type d'événement en cas de vidage et changement des ID
        // !!!!! ATTENTION à l'ID du type d'événement en cas de vidage et changement des ID
        // !!!!! ATTENTION à l'ID du type d'événement en cas de vidage et changement des ID
        // !!!!! ATTENTION à l'ID du type d'événement en cas de vidage et changement des ID
        //$tabSqlWhere[] = 'hE.idTypeEvenement!=3';



        if (!empty($criteres['recherche_motcle'])) {
            $tabMotCle = explode(' ', $criteres['recherche_motcle']);
            foreach ($tabMotCle as $motcle) {
                $motcle = mysql_escape_string($motcle);
                $tabSqlWhere[]= "(hE.titre LIKE '%".$motcle."%' OR hE.description LIKE '%".$motcle."%')";
            }
        }

        if (!empty($criteres['recherche_courant'])) {
            $courant = implode("','", $criteres['recherche_courant']);
            $tabSqlWhere[] = '_eCA.idCourantArchitectural IN (\''.$courant.'\')';
            $tabSqlJoin[]  = 'LEFT JOIN _evenementCourantArchitectural _eCA USING (idEvenement) ';
        }

        if (!empty($criteres['recherche_typeStructure'])) {
            $tabSqlWhere[] = 'hE.idTypeStructure='.$criteres['recherche_typeStructure'];
        }

        if (!empty($criteres['recherche_typeEvenement'])) {
            $tabSqlWhere[] = 'hE.idTypeEvenement='.$criteres['recherche_typeEvenement'];
        }

        if (!empty($criteres['recherche_source'])) {
            $tabSqlWhere[] = 'hE.idSource='.$criteres['recherche_source'];
        }

        if (!empty($criteres['recherche_personnes'])) {
            $personnes = implode("','", $criteres['recherche_personnes']);
            $tabSqlWhere[] = '_eP.idPersonne IN (\''.$personnes.'\')';
            $tabSqlJoin[]  = 'LEFT JOIN _evenementPersonne _eP USING (idEvenement)';
        }

        if (isset($criteres['recherche_anneeDebut']) && $criteres['recherche_anneeDebut']!='') {
            $tabSqlWhere[] = '(extract(YEAR FROM hE.dateDebut)>='.$criteres['recherche_anneeDebut'].')';
        }

        if (isset($criteres['recherche_anneeFin']) && $criteres['recherche_anneeDebut']!='') {
            $tabSqlWhere[] = '(extract(YEAR FROM hE.dateDebut)<='.$criteres['recherche_anneeFin'].')';
        }

        if (isset($criteres['recherche_MH']) && $criteres['recherche_MH']=='1' && isset($criteres['recherche_ISMH']) && $criteres['recherche_ISMH']=='1') {
        // ATTENTION, si les deux cases sont cochées , on fait un "OU" entre les deux champs pour le résultat de la recherche
            $tabSqlWhere[] = "(hE.MH='1' OR hE.ISMH='1')";
        } else {
            if (isset($criteres['recherche_MH']) && $criteres['recherche_MH']=='1') {
                $tabSqlWhere[] = "hE.MH='1'";
            }

            if (isset($criteres['recherche_ISMH']) && $criteres['recherche_ISMH']=='1') {
                $tabSqlWhere[] = "hE.ISMH='1'";
            }
        }




        if (!isset($criteres['ordre'])) {
            $sqlOrdre = 'hE.titre';
        } else {
            switch ($criteres['ordre']) {
                case 'description':
                    $sqlOrdre = 'hE.description';
                    break;
                case 'source':
                    $sqlOrdre = 's.nom';
                    break;
                case 'structure':
                    $sqlOrdre = 'tS.nom';
                    break;
                case 'titre':
                    $sqlOrdre = 'hE.titre';
                    break;
                case 'type':
                    $sqlOrdre = 'tE.nom';
                    break;
                case 'dateCreation':
                    $sqlOrdre = 'hE.dateCreationEvenement';
                    break;
                default:
                    $sqlOrdre = 'hE.titre';
            }
        }

        if (!isset($criteres['debut']) or !is_numeric($criteres['debut']) or $criteres['debut'] < 1) {
            $criteres['debut'] = 0;
            $sqlLimit = '0, 10';
            $valDebutSuivant = 0;
            $valDebutPrecedent = 0;
        } else {
            $sqlLimit = $criteres['debut'].', 10';
            if ($criteres['debut'] > 9) {
                $valDebutPrecedent = $criteres['debut'] -10;
            } else {
                $valDebutPrecedent = 0;
            }
            $valDebutSuivant = $criteres['debut'];
        }

        if (isset($criteres['selection']) and is_numeric($criteres['id'])) {
            switch ($criteres['selection']) {
                case 'typeStructure':
                    $tabSqlWhere[] = 'hE.idTypeStructure='.$criteres['id'];
                    break;
                case 'typeEvenement':
                    $tabSqlWhere[] = 'hE.idTypeEvenement='.$criteres['id'];
                    break;
                case 'source':
                    $tabSqlWhere[] = 'hE.idSource='.$criteres['id'];
                    break;
                case 'utilisateurAjout':
                    $tabSqlWhere[] = 'hE.idUtilisateur='.$criteres['id'];
                    break;
                case 'personne':
                    $tabSqlWhere[] = '_eP.idPersonne='.$criteres['id'];
                    $tabSqlJoin[]  = 'LEFT JOIN _evenementPersonne _eP USING (idEvenement) ';
                    break;
                case 'courant':
                    $tabSqlWhere[] = '_eCA.idCourantArchitectural='.$criteres['id'];
                    $tabSqlJoin[]  = 'LEFT JOIN _evenementCourantArchitectural _eCA USING (idEvenement) ';
                    break;
            }
        }


        if (isset($criteres['tri'])) {
            if ($criteres['tri'] == 'desc') {
                $sqlTri = 'DESC';
            } else {
                $sqlTri = 'ASC';
            }
        } else {
            $sqlTri = 'ASC';
        }

        $sqlWhere = '';
        if (isset($tabSqlWhere) && count($tabSqlWhere)>0) {
            $sqlWhere = implode(' AND ', $tabSqlWhere);
        } else {
            $sqlWhere ='1';
        }

        if (isset($tabSqlJoin)) {
            foreach ($tabSqlJoin as $val) {
                $sqlJoin .= ' '.$val;
            }
        }

        $sqlCount = 'SELECT hE.idEvenement
				FROM evenements hE2, evenements hE
				'.$sqlJoin.'
				WHERE '. $sqlWhere .' AND hE.idEvenement = hE2.idEvenement
				GROUP BY hE.idEvenement
				ORDER BY '.$sqlOrdre.' '.$sqlTri;

        $result = $this->connexionBdd->requete($sqlCount);

        if (( mysql_num_rows($result) - $valDebutSuivant ) > 10) {
            $valDebutSuivant += 10;
        }
        $nbReponses = mysql_num_rows($result);

        // requête
        $sql = 'SELECT hE.idEvenement
				FROM evenements hE2, evenements hE
				LEFT JOIN source s ON hE.idSource = s.idSource
				LEFT JOIN typeStructure tS ON hE.idTypeStructure = tS.idTypeStructure
				LEFT JOIN typeEvenement tE ON hE.idTypeEvenement = tE.idTypeEvenement
				'.$sqlJoin.'
				WHERE '. $sqlWhere .' AND hE.idEvenement = hE2.idEvenement
				GROUP BY hE.idEvenement
				ORDER BY '.$sqlOrdre.' '.$sqlTri;//.' LIMIT '.$sqlLimit.' ' // modif laurent , pas de limite dans cette requetes sinon on n'affichera pas tous les resultats
        //hE.titre, hE.idSource, hE.idTypeStructure, hE.idTypeEvenement, hE.description AS description, s.nom as nomSource, hE.dateCreationEvenement, // modif laurent pour accelerer la recherche
        //tS.nom as nomTypeStructure, tE.nom as nomTypeEvenement


        $result  = $this->connexionBdd->requete($sql);

        $t=new Template('modules/archi/templates/');
        $t->set_filenames((array('ev'=>$templateName)));

        $t->assign_vars(array('ajouterEvenement' => $this->creerUrl('', 'ajouterEvenement')));


        if (mysql_num_rows($result) > 0) {
        // **********************************************************************
            // boucle sur les resultats de la requete
            // **********************************************************************
            while ($rep = mysql_fetch_object($result)) {
                $arrayIdEvenements[]=$rep->idEvenement;
            }
        }

        return $arrayIdEvenements;
    }
355458
public function findRoute(\Psr\Http\Message\ServerRequestInterface &$p_request)
    {
        if ($this->routes instanceof \FreeFW\Router\RouteCollection) {
            $params     = $p_request->getServerParams();
            $currentDir = '/';
            $requestUrl = '';
            if (array_key_exists('_request', $_GET)) {
                $requestUrl = '/' . ltrim($_GET['_request'], '/');
            }
            if (($pos = strpos($requestUrl, '?')) !== false) {
                if (array_key_exists('_url', $_GET)) {
                    $requestUrl = $_GET['_url'];
                } else {
                    $requestUrl = substr($requestUrl, 0, $pos);
                }
            }
            $currentDir = rtrim($this->base_path, '/');
            $this->logger->debug('router.findRoute.request : ' . $requestUrl);
            foreach ($this->routes->getRoutes() as $idx => $oneRoute) {
                $this->logger->debug('router.findRoute.test : ' . $oneRoute->getUrl());
                if (strtoupper($p_request->getMethod()) == strtoupper($oneRoute->getMethod())) {
                    if ($currentDir != '/') {
                        $requestUrl = str_replace($currentDir, '', $requestUrl);
                    }
                    $params = array();
                    if ($oneRoute->getUrl() == $requestUrl) {
                        // Ok, pas besoin de compliquer....
                    } else {
                        // @todo : ajouter la notion obligatoire pour les paramètres
                        if (!preg_match("#^" . $oneRoute->getRegex() . "$#", $requestUrl, $matches)) {
                            continue;
                        }
                        // Ok
                        // On a trouvé une route, on récupère les paramètres.
                        // On va en profiter pour les injecter dans la requête
                        $matchedText = array_shift($matches);
                        if (preg_match_all("/:([\w-\._@%]+)/", $oneRoute->getUrl(), $argument_keys)) {
                            $argument_keys = $argument_keys[1];
                            if (count($argument_keys) != count($matches)) {
                                continue;
                            }
                            foreach ($argument_keys as $key => $name) {
                                if (isset($matches[$key]) && $matches[$key] !== null
                                    && $matches[$key] != '' && $matches[$key] != '/'
                                ) {
                                    $params[$name] = ltrim($matches[$key], '/'); // Pour les paramètres optionnel
                                } else {
                                    $params[$name] = '';
                                }
                            }
                        }
                        foreach ($params as $name => $value) {
                            $p_request = $p_request->withAttribute($name, $value);
                        }
                    }
                    $this->logger->debug('router.findRoute.match : ' . $oneRoute->getUrl());
                    return $oneRoute;
                }
            }
        }
        return false;
    }
129259
protected function filterChains()
    {
        foreach ($this->chains as $key => $chain) {
            $filterResult = $this->getFilterResult($key, $chain);
            if ($filterResult->isNotEmpty()) {
                $this->data->set(
                    $key,
                    $filterResult->getFilteredValue()
                );
            } else {
                $this->data->remove($key);
            }
        }
    }