X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Fpublic%2Faiguiller.php;fp=www%2Fecrire%2Fpublic%2Faiguiller.php;h=873b79055259dbaf47d83249503f7bcf06f1e423;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/public/aiguiller.php b/www/ecrire/public/aiguiller.php new file mode 100644 index 0000000..873b790 --- /dev/null +++ b/www/ecrire/public/aiguiller.php @@ -0,0 +1,241 @@ +false)); + $texte = $page; + if ($ancre = _request('var_ajax_ancre')){ + $texte = "anchor".$texte; + } + } + else { + include_spip('inc/headers'); + http_status(403); + $texte = _L('signature ajax bloc incorrecte'); + } + ajax_retour($texte); + return true; // on a fini le hit + } + return false; +} + +// au 1er appel, traite les formulaires dynamiques charger/verifier/traiter +// au 2e se sachant 2e, retourne les messages et erreurs stockes au 1er +// Le 1er renvoie True si il faut faire exit a la sortie + +// http://doc.spip.org/@traiter_formulaires_dynamiques +function traiter_formulaires_dynamiques($get=false){ + static $post = array(); + static $done = false; + + if ($get) return $post; + if ($done) return false; + $done = true; + + if (!($form = _request('formulaire_action') + AND $args = _request('formulaire_action_args'))) + return false; // le hit peut continuer normalement + + include_spip('inc/filtres'); + if (($args = decoder_contexte_ajax($args,$form))===false) { + spip_log("signature ajax form incorrecte : $form"); + return false; // continuons le hit comme si de rien etait + } else { + include_spip('inc/lang'); + // sauvegarder la lang en cours + $old_lang = $GLOBALS['spip_lang']; + // changer la langue avec celle qui a cours dans le formulaire + // on la depile de $args car c'est un argument implicite masque + changer_langue(array_shift($args)); + + + $verifier = charger_fonction("verifier","formulaires/$form/",true); + $post["erreurs_$form"] = pipeline( + 'formulaire_verifier', + array( + 'args'=>array('form'=>$form,'args'=>$args), + 'data'=>$verifier?call_user_func_array($verifier,$args):array()) + ); + if ((count($post["erreurs_$form"])==0)){ + $rev = ""; + $retour = ""; + if ($traiter = charger_fonction("traiter","formulaires/$form/",true)) + $rev = call_user_func_array($traiter,$args); + + $rev = pipeline( + 'formulaire_traiter', + array( + 'args'=>array('form'=>$form,'args'=>$args), + 'data'=>$rev) + ); + // le retour de traiter peut avoir 3 formats + // - simple message texte + // - tableau a deux entrees ($editable,$message) + // - tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx) + // le dernier format est celui conseille car il permet le pipelinage, en particulier + // en y passant l'id de l'objet cree/modifie + // si message_erreur est present, on considere que le traitement a echoue + // cas du message texte simple + if (!is_array($rev)){ + $post["message_ok_$form"] = $rev; + } + // cas du tableau deux valeurs simple (ancien format, deconseille) + elseif (count($rev)==2 + AND !array_key_exists('message_ok',$rev) + AND !array_key_exists('message_erreur',$rev) + AND !array_key_exists('redirect',$rev)) { + $post["editable_$form"] = reset($rev); + $post["message_ok_$form"] = end($rev); + } + // cas du tableau explicite (conseille) + else { + // verifier si traiter n'a pas echoue avec une erreur : + if (isset($rev['message_erreur'])) { + $post["erreurs_$form"]["message_erreur"] = $rev['message_erreur']; + + } + else { + // sinon faire ce qu'il faut : + if (isset($rev['message_ok'])) + $post["message_ok_$form"] = $rev['message_ok']; + if (isset($rev['editable'])) + $post["editable_$form"] = $rev['editable']; + // si une redirection est demandee, appeler redirigae_formulaire qui choisira + // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue) + if (isset($rev['redirect']) AND $rev['redirect']){ + include_spip('inc/headers'); + list($masque,$message) = redirige_formulaire($rev['redirect'], '','ajaxform'); + $post["message_ok_$form"] .= $message; + $retour .= $masque; + } + } + } + } + // si le formulaire a ete soumis en ajax, on le renvoie direct ! + if (_request('var_ajax')){ + if (find_in_path('formulaire_.php','balise/',true)) { + include_spip('inc/actions'); + include_spip('public/assembler'); + array_unshift($args,$form); + $retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn',$args),false); + // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7 + // sans cela le formulaire n'est pas actif apres le hit ajax + $retour = "".$retour; + ajax_retour($retour,false); + return true; // on a fini le hit + } + } + // restaurer la lang en cours + changer_langue($old_lang); + } + return false; // le hit peut continuer normalement +} + +?>