- } else {
- if ($var->type != 'texte') {
- // cas 1 seul arg ne commencant pas par du texte brut:
- // erreur ou critere infixe "/"
- if (($v[1][1]->type != 'texte') || (trim($v[1][1]->texte) !='/')) {
- $err_ci = array('zbug_critere_inconnu',
- array('critere' => $var->nom_champ));
- erreur_squelette($err_ci, $result);
- } else {
- $crit = new Critere;
- $crit->op = '/';
- $crit->not = "";
- $crit->exclus ="";
- $crit->param = array(array($v[1][0]),array($v[1][2]));
- $args[] = $crit;
- }
- } else {
- // traiter qq lexemes particuliers pour faciliter la suite
- // les separateurs
- if ($var->apres)
- $result->separateur[] = $param;
- elseif (($param == 'tout') OR ($param == 'tous'))
- $result->modificateur['tout'] = true;
- elseif ($param == 'plat')
- $result->modificateur['plat'] = true;
-
- // Boucle hierarchie, analyser le critere id_rubrique
- // et les autres critères {id_x} pour forcer {tout} sur
- // ceux-ci pour avoir la rubrique mere...
- // Les autres critères de la boucle hierarchie doivent être
- // traités normalement.
- elseif (strcasecmp($type, 'hierarchie')==0
- AND !preg_match(",^id_rubrique\b,",$param)
- AND preg_match(",^id_\w+\s*$,", $param))
- {
- $result->modificateur['tout'] = true;
- }
- elseif (strcasecmp($type, 'hierarchie')==0 AND $param=="id_rubrique") {
- // rien a faire sur {id_rubrique} tout seul
- }
- else {
- // pas d'emplacement statique, faut un dynamique
- /// mais il y a 2 cas qui ont les 2 !
- if (($param == 'unique') || (preg_match(',^!?doublons *,', $param)))
- {
- // cette variable sera inseree dans le code
- // et son nom sert d'indicateur des maintenant
- $result->doublons = '$doublons_index';
- if ($param == 'unique') $param = 'doublons';
- }
- elseif ($param == 'recherche')
- // meme chose (a cause de #nom_de_boucle:URL_*)
- $result->hash = ' ';
- if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', $param, $m)) {
- $crit = phraser_critere_infixe($m[1], $m[3],$v, '/', '', '');
- } elseif (preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
- ')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', $param, $m)) {
- $a2 = trim($m[8]);
- if ($a2 AND ($a2[0]=="'" OR $a2[0]=='"') AND ($a2[0]==substr($a2,-1)))
- $a2 = substr($a2,1,-1);
- $crit = phraser_critere_infixe($m[2], $a2, $v,
- (($m[2] == 'lang_select') ? $m[2] : $m[7]),
- $m[6], $m[5]);
- $crit->exclus = $m[1];
- } elseif (preg_match("/^([!]?)\s*(" .
- CHAMP_SQL_PLUS_FONC .
- ")\s*(\??)(.*)$/is", $param, $m)) {
- // contient aussi les comparaisons implicites !
- // Comme ci-dessus:
- // le premier arg contient l'operateur
- array_shift($v);
- if ($m[6]) {
- $v[0][0] = new Texte;
- $v[0][0]->texte = $m[6];
- } else {
- array_shift($v[0]);
- if (!$v[0]) array_shift($v);
- }
- $crit = new Critere;
- $crit->op = $m[2];
- $crit->param = $v;
- $crit->not = $m[1];
- $crit->cond = $m[5];
- }
- else {
- $err_ci = array('zbug_critere_inconnu',
- array('critere' => $param));
- erreur_squelette($err_ci, $result);
- }
- if ((!preg_match(',^!?doublons *,', $param)) || $crit->not)
- $args[] = $crit;
- else
- $doublons[] = $crit;
+ } else {
+ if ($var->type!='texte'){
+ // cas 1 seul arg ne commencant pas par du texte brut:
+ // erreur ou critere infixe "/"
+ if (($v[1][1]->type!='texte') || (trim($v[1][1]->texte)!='/')){
+ $err_ci = array('zbug_critere_inconnu',
+ array('critere' => $var->nom_champ));
+ erreur_squelette($err_ci, $result);
+ } else {
+ $crit = new Critere;
+ $crit->op = '/';
+ $crit->not = "";
+ $crit->exclus = "";
+ $crit->param = array(array($v[1][0]), array($v[1][2]));
+ $args[] = $crit;
+ }
+ } else {
+ // traiter qq lexemes particuliers pour faciliter la suite
+ // les separateurs
+ if ($var->apres)
+ $result->separateur[] = $param;
+ elseif (($param=='tout') OR ($param=='tous'))
+ $result->modificateur['tout'] = true;
+ elseif ($param=='plat')
+ $result->modificateur['plat'] = true;
+
+ // Boucle hierarchie, analyser le critere id_rubrique
+ // et les autres critères {id_x} pour forcer {tout} sur
+ // ceux-ci pour avoir la rubrique mere...
+ // Les autres critères de la boucle hierarchie doivent être
+ // traités normalement.
+ elseif (strcasecmp($type, 'hierarchie')==0
+ AND !preg_match(",^id_rubrique\b,", $param)
+ AND preg_match(",^id_\w+\s*$,", $param)
+ ) {
+ $result->modificateur['tout'] = true;
+ } elseif (strcasecmp($type, 'hierarchie')==0 AND $param=="id_rubrique") {
+ // rien a faire sur {id_rubrique} tout seul
+ } else {
+ // pas d'emplacement statique, faut un dynamique
+ /// mais il y a 2 cas qui ont les 2 !
+ if (($param=='unique') || (preg_match(',^!?doublons *,', $param))){
+ // cette variable sera inseree dans le code
+ // et son nom sert d'indicateur des maintenant
+ $result->doublons = '$doublons_index';
+ if ($param=='unique') $param = 'doublons';
+ } elseif ($param=='recherche')
+ // meme chose (a cause de #nom_de_boucle:URL_*)
+ $result->hash = ' ';
+ if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', $param, $m)){
+ $crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
+ } elseif (preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
+ ')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', $param, $m)) {
+ $a2 = trim($m[8]);
+ if ($a2 AND ($a2[0]=="'" OR $a2[0]=='"') AND ($a2[0]==substr($a2, -1)))
+ $a2 = substr($a2, 1, -1);
+ $crit = phraser_critere_infixe($m[2], $a2, $v,
+ (($m[2]=='lang_select') ? $m[2] : $m[7]),
+ $m[6], $m[5]);
+ $crit->exclus = $m[1];
+ } elseif (preg_match("/^([!]?)\s*(" .
+ CHAMP_SQL_PLUS_FONC .
+ ")\s*(\??)(.*)$/is", $param, $m)) {
+ // contient aussi les comparaisons implicites !
+ // Comme ci-dessus:
+ // le premier arg contient l'operateur
+ array_shift($v);
+ if ($m[6]){
+ $v[0][0] = new Texte;
+ $v[0][0]->texte = $m[6];
+ } else {
+ array_shift($v[0]);
+ if (!$v[0]) array_shift($v);
+ }
+ $crit = new Critere;
+ $crit->op = $m[2];
+ $crit->param = $v;
+ $crit->not = $m[1];
+ $crit->cond = $m[5];
+ } else {
+ $err_ci = array('zbug_critere_inconnu',
+ array('critere' => $param));
+ erreur_squelette($err_ci, $result);
+ }
+ if ((!preg_match(',^!?doublons *,', $param)) || $crit->not)
+ $args[] = $crit;
+ else
+ $doublons[] = $crit;
+ }