Valider 6a0e07a2 rédigé par Fil's avatar Fil
Parcourir les fichiers

ajout d'un filtrage sur {{{ {cle==x} }}} ou {{{ {valeur == y} }}} dans les iterateurs generiques.

Exemepole :

{{{
               <BOUCLE_s(iter:DirectoryIterator){args .}{valeur==squelettes}>
                       <li>#COMPTEUR_BOUCLE. #CLE => #VALEUR**</li>
               </BOUCLE_s>
}}}
parent 76e8b7f7
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+43 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -56,6 +56,8 @@ class IterFactory{

class IterDecorator implements Iterator {
	private $iter;
	protected $filtre = array();
	protected $func_filtre = null;

	public function __construct(Iterator $iter, $command, $info){
		$this->iter = $iter;
@@ -63,11 +65,49 @@ class IterDecorator implements Iterator {
		$this->info = $info;
		$this->pos = 0;
		$this->total = $this->count();


		$op = '';
		if (is_array($this->command['where'])) {
			foreach ($this->command['where'] as $k => $com) {
				switch($com[1]) {
					case 'valeur':
						unset($op);
						if ($com[0] == 'REGEXP')
							$this->filtre[] = 'preg_match("/". '.str_replace('\"', '"', $com[2]).'."/", $'.$com[1].')';
						else if ($com[0] == '=')
							$op = '==';
						else if (in_array($com[0], array('<','<=', '>', '>=')))
							$op = $com[0];

						if ($op)
							$this->filtre[] = '$'.$com[1].$op.str_replace('\"', '"', $com[2]);

						break;
				}

			}
		}


		// Appliquer les filtres sur (valeur)
		if ($this->filtre) {
			$this->func_filtre = create_function('$cle,$valeur', $b = 'return ('.join(') AND (', $this->filtre).');');
			$this->total = null; # il faudra tout parcourir pour compter
		}

	}
 
	public function next(){
		$this->pos++;
		$this->iter->next();

		if ($f = $this->func_filtre) {
			while ($this->valid()
			AND !$f($this->pos,$this->current())) {
				$this->iter->next();
			}
		}
	}

	/**