function evaluer(&$substitutions = array()) { if (DEBUG_EVAL) { Analyse::echo_debug("Evaluation boucle repeter {$this->nom}. RAW args: {$this->args}"); } $args = $this->replace($substitutions, $this->args); $debut = lireTag($args, "debut"); $fin = lireTag($args, "fin"); $increment = lireTag($args, "increment"); if ($debut == '') { $debut = 1; } if ($increment == '') { $increment = 1; } $val = ''; if ($increment == 0) { die("L'increment de la boucle REPETER_" . $this->nom . " doit être different de 0"); } for ($idx = $debut, $count = 1; $idx <= $fin; $idx += $increment, $count++) { $substitutions['#INDEX'] = $idx; $substitutions['#__COMPTEUR__'] = $count; $val .= $this->contenu->evaluer($substitutions); } return $val; }
function evaluer(&$substitutions = array()) { if (DEBUG_EVAL) { Analyse::echo_debug("Eval boucle simple {$this->nom}"); } // Bug signalé par tetedelard // Réinitialiser l'état (la boucle peut-être placée dans une boucle qui implique des iterations, // et influe sur les paramètres de cette boucle, et donc sur ses résultats. $this->est_vide = true; $val = ''; // Effectuer les substitutions dans les arguments de la boucle a exécuter // avec les valeurs de la présente boucle. $args = $this->replace($substitutions, $this->args); /* if (DEBUG_EVAL) { Analyse::echo_debug("Eval boucle simple $this->nom, args=$this->args, subst_args=$args, Substitutions: \n", $substitutions, 'variables:, $this->variables); } */ $type_boucle = ucfirst(strtolower(lireTag($args, 'type'))); $boucle_subst = $this->evaluer_boucle_classique($type_boucle, $args); if (DEBUG_EVAL) { Analyse::echo_debug("Eval boucle simple {$this->nom}, subst: ", $boucle_subst === false ? 'FALSE' : $boucle_subst, " est vide: ", $this->est_vide === false ? 'FALSE' : "TRUE"); } if ($boucle_subst !== false) { if (DEBUG_EVAL) { Analyse::echo_debug("Boucle simple {$this->nom} n'est plus vide."); } // Si boucle_subst es définie, alors la boucle n'est pas vide. $this->est_vide = false; // Evaluer la présente boucle. foreach ($boucle_subst->iterations as $iteration) { if (DEBUG_EVAL) { Analyse::echo_debug("eval: type=" . $this->contenu->type() . "\nsubst: ", $iteration, "\ncontenu: "); $this->contenu->imprimer(); } if ($iteration->prefixe !== false) { // La boucle a place quelque chose avant le texte. // On l'ajoute nous aussi. $val .= $iteration->prefixe; if (DEBUG_EVAL) { Analyse::echo_debug("eval: prefixe={$iteration->prefixe}"); } } if ($iteration->remplacement !== false) { // La boucle a remplacé le texte qu'on lui a passé par un autre // -> on retourne simplement ce texte, sans faire d'autres évaluations $val .= $iteration->remplacement; if (DEBUG_EVAL) { Analyse::echo_debug("eval: remplacement={$iteration->remplacement}"); } } else { if (DEBUG_EVAL) { Analyse::echo_debug("eval: evaluation contenu"); } $val .= $this->contenu->evaluer($iteration->varval); } } // Si la boucle n'est pas vide, mais n'a retourné aucune itération, // il faut tout de même évaluer son contenu. // FIXME: retiré, car on ajoute toujours une iteration par tour de boucle // cf. ajoutIteration() // if (count($boucle_subst->iterations) == 0) $val .= $this->contenu->evaluer(); } if (DEBUG_EVAL) { Analyse::echo_debug("boucle={$type_boucle} vide:", $this->est_vide ? "Oui" : "Non"); } return $val; }
function boucleReprisePaiement($texte, $args) { $paiement = lireTag($args, "paiement", "int"); $refcommande = lireTag($args, "refcommande", "string"); $module = new Modules(); $commande = new Commande(); $res = ""; if (!empty($paiement) && $module->charger_id($paiement) && !empty($refcommande) && $commande->charger_ref($refcommande)) { if ($module->type == 1 && $module->actif == 1) { $res = str_replace("#URL", sprintf("index.php?action=reprise_paiement&id_commande=%d&id_paiement=%d", $commande->id, $module->id), $texte); } } return $res; }
function evaluer(&$substitutions = array()) { if (DEBUG_EVAL) { Analyse::echo_debug("Evaluation boucle test {$this->nom}. RAW args: {$this->args}"); } $args = $this->replace($substitutions, $this->args); $var = lireTag($args, "variable"); if ($var == '') { $var = lireTag($args, "var"); } $test = lireTag($args, "test"); $val = lireTag($args, "valeur"); if ($val == '') { $val = lireTag($args, "val"); } if (DEBUG_EVAL) { Analyse::echo_debug("Boucle test: args='{$args}', var='{$var}', test='{$test}', val='{$val}'"); } $vrai = false; switch (strtolower($test)) { case "vide": $vrai = trim($var) == ''; break; case "nonvide": $vrai = trim($var) != ''; break; case "egal": $vrai = $var == $val; break; case "different": $vrai = $var != $val; break; case "superieur": $vrai = $var > $val; break; case "superieurouegal": $vrai = $var >= $val; break; case "inferieur": $vrai = $var < $val; break; case "inferieurouegal": $vrai = $var <= $val; break; case "dansliste": $sep = lireTag($args, "separateur"); if (empty($sep)) { $sep = ","; } $vrai = in_array($var, explode($sep, $val)); break; case "contient": $vrai = strstr($var, $val) !== false; break; // Contribution de asturyan // Contribution de asturyan case "modulo": $val = explode(",", $val); $vrai = $var % $val[0] == $val[1]; break; default: die("L'argument 'test' de la boucle {$this->nom} est manquant ou inconnu: '{$test}'"); break; } if ($vrai) { return $this->contenu[0]->evaluer($substitutions); } else { return $this->contenu[1]->evaluer($substitutions); } }