X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Fpublic%2Faiguiller.php;fp=www%2Fecrire%2Fpublic%2Faiguiller.php;h=28f552b7209036c71c9db1f240dae59e507248c4;hb=a33c2ba9d919664b3bb0f565f8e9a8b9d8530cdb;hp=0000000000000000000000000000000000000000;hpb=8945248b3d948385798d9aa355c70e7089aca2b3;p=lhc%2Fweb%2Fclavette_www.git diff --git a/www/ecrire/public/aiguiller.php b/www/ecrire/public/aiguiller.php new file mode 100644 index 0000000..28f552b --- /dev/null +++ b/www/ecrire/public/aiguiller.php @@ -0,0 +1,259 @@ +false)); + $texte = $page; + if ($ancre = _request('var_ajax_ancre')){ + // pas n'importe quoi quand meme dans la variable ! + $ancre = str_replace(array('<','"',"'"),array('<','"',''),$ancre); + $texte = "anchor".$texte; + } + } + else { + include_spip('inc/headers'); + http_status(403); + $texte = _L('signature ajax bloc incorrecte'); + } + ajax_retour($texte, false); + 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)); + + + // inclure mes_fonctions et autres filtres avant verifier/traiter + include_spip('public/parametrer'); + $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()) + ); + // si on ne demandait qu'une verif json + if (_request('formulaire_action_verifier_json')){ + include_spip('inc/json'); + include_spip('inc/actions'); + ajax_retour(json_encode($post["erreurs_$form"]),'text/plain'); + return true; // on a fini le hit + } + $retour = ""; + if ((count($post["erreurs_$form"])==0)){ + $rev = ""; + 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 +} + +?>