function formulaires_editer_balade_traiter_dist($id_collection = 'new', $retour = '') { $message = array(); // récupérer le rang des articles de la balade et le mettre à jour $rangs = _request('rang'); foreach ($rangs as $rang => $id_article) { $rang = $rang + 1; $ok = sql_updateq('spip_collections_liens', array('rang' => intval($rang)), "objet='article' AND id_objet = {$id_article}"); } // éditer le gis associé if ($action_editer = charger_fonction("editer_gis", 'action', true)) { list($id, $err) = $action_editer(_request('id_gis')); } // ne pas polluer l'url de retour avec des paramètres inutiles set_request('id_gis'); set_request('id_objet'); // invalider le cache include_spip('inc/invalideur'); suivre_invalideur("id='gis/{$id}"); // rediriger sur l'url de retour passée en paramètre if ($retour) { include_spip('inc/headers'); $message['redirect'] = redirige_formulaire($retour); } return $message; }
function formulaires_editer_json_article_traiter_dist($id_article = 'new', $retour = '') { $message = array('editable' => true, 'message_ok' => ''); $vhplab_json = _request('vhplab_json'); $vhplab_json_num = intval($vhplab_json); if ($vhplab_json_num > 0) { // comprobamos si el articulo ya ha sido relacionado con un id $result = sql_select('*', 'spip_vhplab_json_liens', 'id_objet=' . intval($id_article) . ' AND objet=' . sql_quote("article")); if ($row = sql_fetch($result)) { // si el articulo ya ha sido relacionado con un id actualizamos el enlace sql_updateq('spip_vhplab_json', array('id_json' => $vhplab_json_num), 'id_vhplab_json=' . intval($row['id_vhplab_json'])); $message['message_ok'] = _T('vhplab:json_update_ok'); } else { // si el articulo no ha sido relacionado con ningún id creamos un enlace $id_vhplab = sql_insertq("spip_vhplab_json", array('id_json' => $vhplab_json_num)); sql_insertq('spip_vhplab_json_liens', array('id_vhplab_json' => intval($id_vhplab), 'id_objet' => intval($id_article), 'objet' => 'article')); $message['message_ok'] = _T('vhplab:json_insert_ok'); } } if ($retour) { include_spip('inc/headers'); $message['message_ok'] .= redirige_formulaire($retour); } return $message; }
function formulaires_editer_mot_article_traiter_dist($id_article = 'new', $id_groupe = '', $retour = '') { $message = array('editable' => true, 'message_ok' => ''); $id_mot_ancien = sql_getfetsel('mot.id_mot', 'spip_mots as mot left join spip_mots_liens as mots_liens ON (mot.id_mot=mots_liens.id_mot)', 'mots_liens.id_objet=' . intval($id_article) . ' AND mots_liens.objet = "article" AND mot.id_groupe=' . intval($id_groupe)); include_spip('action/editer_liens'); // si aucun mot selectionne on delie le mot de ce groupe if (!($id_mot = _request('id_mot'))) { objet_dissocier(array("mot" => $id_mot_ancien), array("article" => $id_article)); } else { if ($id_mot_ancien != $id_mot) { // on delie l'ancien mot objet_dissocier(array("mot" => $id_mot_ancien), array("article" => $id_article)); // on lie le nouveau objet_associer(array("mot" => $id_mot), array("article" => $id_article)); } } // on invalide le cache include_spip('inc/invalideur'); suivre_invalideur("id='id_article/{$id_article}'"); if ($retour) { include_spip('inc/headers'); $message .= redirige_formulaire($retour); } return $message; }
/** * Sauvegarder par morceaux * * @param string $arg */ function action_sauvegarder_dist($arg = null) { if (!$arg) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } $status_file = $arg; $redirect = parametre_url(generer_action_auteur('sauvegarder', $status_file), "step", intval(_request('step') + 1), '&'); // lancer export qui va se relancer jusqu'a sa fin $sauvegarder = charger_fonction('sauvegarder', 'inc'); utiliser_langue_visiteur(); // quand on sort de $export avec true c'est qu'on a fini if ($sauvegarder($status_file, $redirect)) { dump_end($status_file, 'sauvegarder'); include_spip('inc/headers'); echo redirige_formulaire(generer_url_ecrire("sauvegarder", 'status=' . $status_file, '', true, true)); } // forcer l'envoi du buffer par tous les moyens ! echo str_repeat("<br />\r\n", 256); while (@ob_get_level()) { @ob_flush(); @flush(); @ob_end_flush(); } }
/** * Sauvegarder par morceaux * * @param string $arg */ function action_restaurer_dist($arg = null) { if (!$arg) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } $status_file = $arg; define('_DUMP_STATUS_FILE', $status_file); $status_file = _DIR_TMP . basename($status_file) . ".txt"; if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) { include_spip('inc/headers'); echo redirige_formulaire(generer_url_ecrire("restaurer", 'status=' . _DUMP_STATUS_FILE, '', true, true)); } else { utiliser_langue_visiteur(); $archive = "<br />" . joli_repertoire($status['archive']); $action = _T('dump:info_restauration_sauvegarde', array('archive' => $archive)); $admin = charger_fonction('admin', 'inc'); echo $admin('restaurer', $action, "", true); } // forcer l'envoi du buffer par tous les moyens ! echo str_repeat("<br />\r\n", 256); while (@ob_get_level()) { @ob_flush(); @flush(); @ob_end_flush(); } }
function formulaires_login_charger_dist($cible = "", $login = "", $prive = null) { $erreur = _request('var_erreur'); if (!$login) { $login = strval(_request('var_login')); } // si on est deja identifie if (!$login and isset($GLOBALS['visiteur_session']['login'])) { $login = $GLOBALS['visiteur_session']['login']; } // ou si on a un cookie admin if (!$login) { if (isset($_COOKIE['spip_admin']) and preg_match(",^@(.*)\$,", $_COOKIE['spip_admin'], $regs)) { $login = $regs[1]; } } include_spip('inc/auth'); $row = auth_informer_login($login); // Construire l'environnement du squelette // Ne pas proposer de "rester connecte quelques jours" // si la duree de l'alea est inferieure a 12 h (valeur par defaut) $valeurs = array('var_login' => $login, 'editable' => !$row, 'cnx' => isset($row['cnx']) ? $row['cnx'] : '', 'auth_http' => login_auth_http(), 'rester_connecte' => _RENOUVELLE_ALEA < 12 * 3600 ? '' : ' ', '_logo' => isset($row['logo']) ? $row['logo'] : '', '_alea_actuel' => isset($row['alea_actuel']) ? $row['alea_actuel'] : '', '_alea_futur' => isset($row['alea_futur']) ? $row['alea_futur'] : '', '_pipeline' => 'affiche_formulaire_login'); if ($erreur or !isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) { $valeurs['editable'] = true; } if (is_null($prive) ? is_url_prive($cible) : $prive) { include_spip('inc/autoriser'); $loge = autoriser('ecrire'); } else { $loge = (isset($GLOBALS['visiteur_session']['auth']) and $GLOBALS['visiteur_session']['auth'] != ''); } // Si on est connecte, appeler traiter() // et lancer la redirection si besoin if (!$valeurs['editable'] and $loge) { $traiter = charger_fonction('traiter', 'formulaires/login'); $res = $traiter($cible, $login, $prive); $valeurs = array_merge($valeurs, $res); if (isset($res['redirect']) and $res['redirect']) { include_spip('inc/headers'); # preparer un lien pour quand redirige_formulaire ne fonctionne pas $valeurs['_deja_loge'] = inserer_attribut("<a>" . _T('login_par_ici') . "</a>{$m}", 'href', $res['redirect']); $m = redirige_formulaire($res['redirect']); } } // en cas d'echec de cookie, inc_auth a renvoye vers le script de // pose de cookie ; s'il n'est pas la, c'est echec cookie // s'il est la, c'est probablement un bookmark sur bonjour=oui, // et pas un echec cookie. if ($erreur == 'cookie') { $valeurs['echec_cookie'] = ' '; } elseif ($erreur) { // une erreur d'un SSO indique dans la redirection vers ici // mais il faut se proteger de toute tentative d'injection malveilante include_spip('inc/texte'); $valeurs['message_erreur'] = safehtml($erreur); } return $valeurs; }
function base_restaurer_dist($titre = '', $reprise = false) { $status_file = _DUMP_STATUS_FILE; $status_file = _DIR_TMP . basename($status_file) . ".txt"; if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) { } else { $redirect = parametre_url(generer_action_auteur('restaurer', _DUMP_STATUS_FILE), "step", intval(_request('step') + 1), '&'); $timeout = ini_get('max_execution_time'); // valeur conservatrice si on a pas reussi a lire le max_execution_time if (!$timeout) { $timeout = 30; } // parions sur une valeur tellement courante ... $max_time = time() + $timeout / 2; include_spip('inc/minipres'); @ini_set("zlib.output_compression", "0"); // pour permettre l'affichage au fur et a mesure $titre = _T('dump:restauration_en_cours') . " (" . count($status['tables']) . ") "; $balise_img = chercher_filtre('balise_img'); $titre .= $balise_img(chemin_image('searching.gif')); echo install_debut_html($titre); // script de rechargement auto sur timeout echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . $timeout * 1000 . ")"); echo "<div style='text-align: left'>\n"; dump_serveur($status['connect']); spip_connect('dump'); // au premier coup on ne fait rien sauf afficher l'ecran de sauvegarde if (_request('step')) { $options = array('callback_progression' => 'dump_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), 'where' => $status['where'] ? $status['where'] : array(), 'desc_tables_dest' => array()); if ($desc = sql_getfetsel('valeur', 'spip_meta', "nom='dump_structure_temp'", '', '', '', '', 'dump') and $desc = unserialize($desc)) { $options['desc_tables_dest'] = $desc; } #var_dump(sql_allfetsel('nom,valeur','spip_meta',"",'','','','','dump')); #die(); $res = base_copier_tables($status_file, $status['tables'], 'dump', '', $options); } else { // mais on en profite pour reparer les version base pour etre sur de ne pas les perdre sql_updateq("spip_meta", array('impt' => 'oui'), "nom='version_installee'", '', 'dump'); sql_updateq("spip_meta", array('impt' => 'oui'), "nom LIKE '%_base_version'", '', 'dump'); } echo "</div>\n"; if (!$res) { echo dump_relance($redirect); } echo install_fin_html(); ob_end_flush(); flush(); if (!$res) { exit; } // quand on sort de $export avec true c'est qu'on a fini dump_end(_DUMP_STATUS_FILE, 'restaurer'); include_spip('inc/headers'); echo redirige_formulaire(generer_url_ecrire("restaurer", 'status=' . _DUMP_STATUS_FILE, '', true, true)); } }
function action_tester_taille_dist() { if (!autoriser('configurer')) { return; } $taille = _request('arg'); $taille = explode('-', $taille); $GLOBALS['taille_max'] = end($taille); $GLOBALS['taille_min'] = 0; if (count($taille) > 1) { $GLOBALS['taille_min'] = reset($taille); } // si l'intervalle est assez petit, on garde la valeur min if ($GLOBALS['taille_max'] * $GLOBALS['taille_max'] - $GLOBALS['taille_min'] * $GLOBALS['taille_min'] < 50000) { ecrire_meta('max_taille_vignettes', $t = $GLOBALS['taille_min'] * $GLOBALS['taille_min'] * 0.9, 'non'); echo round($t / 1000000, 3) . ' Mpx'; die; } $taille = $GLOBALS['taille_test'] = round(($GLOBALS['taille_max'] + $GLOBALS['taille_min']) / 2); include_spip('inc/filtres'); // des inclusions representatives d'un hit prive et/ou public pour la conso memoire include_spip('public/assembler'); include_spip('public/balises'); include_spip('public/boucles'); include_spip('public/cacher'); include_spip('public/compiler'); include_spip('public/composer'); include_spip('public/criteres'); include_spip('public/interfaces'); include_spip('public/parametrer'); include_spip('public/phraser_html'); include_spip('public/references'); include_spip('inc/presentation'); include_spip('inc/charsets'); include_spip('inc/documents'); include_spip('inc/header'); propre("<doc1>"); // charger propre avec le trairement d'un modele $i = _request('i') + 1; $image_source = chemin_image("test.png"); $GLOBALS['redirect'] = generer_url_action("tester_taille", "i={$i}&arg=" . $GLOBALS['taille_min'] . "-" . $GLOBALS['taille_test']); ob_start('action_tester_taille_error_handler'); filtrer('image_recadre', $image_source, $taille, $taille); $GLOBALS['redirect'] = generer_url_action("tester_taille", "i={$i}&arg={$taille}-" . $GLOBALS['taille_max']); // si la valeur intermediaire a reussi, on teste la valeur maxi qui est peut etre sous estimee $taille = $GLOBALS['taille_max']; filtrer('image_recadre', $image_source, $taille, $taille); $GLOBALS['redirect'] = generer_url_action("tester_taille", "i={$i}&arg={$taille}-" . $GLOBALS['taille_max']); ob_end_clean(); // on est ici, donc pas de plantage echo redirige_formulaire($GLOBALS['redirect']); }
function exec_upgrade_dist() { global $spip_version_base; if (!_FILE_CONNECT) { redirige_url_ecrire("install"); } // Si reinstallation necessaire, message ad hoc if (_request('reinstall') == 'oui') { include_spip('inc/minipres'); $r = minipres(_T('titre_page_upgrade'), "<p><b>" . _T('texte_nouvelle_version_spip_1') . "</b><p> " . _T('texte_nouvelle_version_spip_2', array('connect' => '<tt>' . _FILE_CONNECT . '</tt>')) . generer_form_ecrire('upgrade', "<input type='hidden' name='reinstall' value='non' />", '', _T('bouton_relancer_installation'))); echo $r; } elseif (_request('fin')) { include_spip('inc/plugin'); actualise_plugins_actifs(); include_spip('inc/headers'); $res = generer_url_ecrire('admin_plugin', 'var_mode=recalcul'); echo redirige_formulaire($res); } else { if (!isset($GLOBALS['meta']['version_installee'])) { $GLOBALS['meta']['version_installee'] = 0.0; } else { $GLOBALS['meta']['version_installee'] = (double) str_replace(',', '.', $GLOBALS['meta']['version_installee']); } # NB: str_replace car, sur club-internet, il semble que version_installe soit # enregistree au format '1,812' et non '1.812' // Erreur downgrade // (cas de double installation de fichiers SPIP sur une meme base) if ($spip_version_base < $GLOBALS['meta']['version_installee']) { $commentaire = _T('info_mise_a_niveau_base_2'); } else { $commentaire = _T('texte_mise_a_niveau_base_1'); } $commentaire .= "<br />[" . $GLOBALS['meta']['version_installee'] . "/" . $spip_version_base . "]"; $_POST['reinstall'] = 'non'; // pour copy_request dans admin include_spip('inc/headers'); $admin = charger_fonction('admin', 'inc'); $res = $admin('upgrade', _T('info_mise_a_niveau_base'), $commentaire); if ($res) { echo $res; } else { // effacer les alea pour forcer leur relecture // si jamais ils ont change pendant l'upgrade unset($GLOBALS['meta']['alea_ephemere']); unset($GLOBALS['meta']['alea_ephemere_ancien']); $res = redirige_action_auteur('purger', 'cache', 'upgrade', 'fin=oui', true); echo redirige_formulaire($res); } } }
function formulaires_editer_adhsaison_traiter_dist($id_saison = 'new', $retour = '', $config_fonc = 'saisons_edit_config', $row = array(), $hidden = '') { $message = ""; $action_editer = charger_fonction("editer_adhsaison", 'action'); list($id, $err) = $action_editer(); if ($err) { $message .= $err; } elseif ($retour) { include_spip('inc/headers'); $retour = parametre_url($retour, 'id_saison', $id); $message .= redirige_formulaire($retour); } return $message; }
function formulaires_editer_related_article_traiter_dist($id_article = 'new', $retour = '') { $message = array('editable' => true, 'message_ok' => ''); $related = _request('related'); $related_num = intval($related); $delete_related = _request('delete_related'); $delete_related_num = explode(' ', $delete_related); if ($related_num > 0) { // insertamos as coordenadas do artigo $result = sql_select('*', 'spip_vhplab_related', 'id_objet_related=' . intval($related_num) . ' AND objet_related=' . sql_quote("article")); if ($row = sql_fetch($result)) { $already = sql_select('*', 'spip_vhplab_related_liens', 'id_objet=' . intval($id_article) . ' AND objet=' . sql_quote("article") . ' AND id_vhplab_related=' . intval($row['id_vhplab_related'])); if ($r = sql_fetch($already)) { $message['message_ok'] = _T('vhplab:related_already_ok'); } else { sql_insertq('spip_vhplab_related_liens', array('id_vhplab_related' => intval($row['id_vhplab_related']), 'id_objet' => intval($id_article), 'objet' => 'article')); $message['message_ok'] = _T('vhplab:related_insert_ok'); } } else { $id_vhplab = sql_insertq("spip_vhplab_related", array('id_objet_related' => $related_num, 'objet_related' => 'article')); sql_insertq('spip_vhplab_related_liens', array('id_vhplab_related' => intval($id_vhplab), 'id_objet' => intval($id_article), 'objet' => 'article')); $message['message_ok'] = _T('vhplab:related_insert_ok'); } } if (count($delete_related_num) > 0) { for ($i = 0; $i < count($delete_related_num); $i++) { $result = sql_select('*', 'spip_vhplab_related', 'id_objet_related=' . intval($delete_related_num[$i]) . ' AND objet_related=' . sql_quote("article")); if ($row = sql_fetch($result)) { $already = sql_select('*', 'spip_vhplab_related_liens', 'id_objet=' . intval($id_article) . ' AND objet=' . sql_quote("article") . ' AND id_vhplab_related=' . intval($row['id_vhplab_related'])); if ($r = sql_fetch($already)) { sql_delete('spip_vhplab_related_liens', 'id_objet=' . intval($id_article) . ' AND objet=' . sql_quote("article") . ' AND id_vhplab_related=' . intval($row['id_vhplab_related'])); $message['message_ok'] .= _T('vhplab:related_deleted_ok'); } } } } if ($retour) { include_spip('inc/headers'); $message['message_ok'] .= redirige_formulaire($retour); } return $message; }
function formulaires_editer_tags_article_traiter_dist($id_article = 'new', $retour = '') { $message = array('editable' => true, 'message_ok' => ''); $tags = _request('tags'); $array_tags = split(',', $tags); // 4 insertamos as tags do artigo $txt = '4'; for ($i = 0; $i < count($array_tags); $i++) { $tag = trim($array_tags[$i]); $type = 'tags'; if (strlen($tag) > 3) { $result = sql_select("*", "spip_mots", "titre=" . sql_quote($tag)); if ($row = sql_fetch($result)) { $result = sql_insertq("spip_mots_liens", array('id_mot' => $row['id_mot'], 'id_objet' => $id_article, 'objet' => 'article')); $message .= _T('vhplab:tags_insert_ok_1'); } else { $result = sql_select("*", "spip_groupes_mots", "titre=" . sql_quote($type)); if ($row = sql_fetch($result)) { $c = array('titre' => $tag, 'id_groupe' => $row['id_groupe'], 'type' => $type, 'maj' => $date); $id_nova_mot = sql_insertq("spip_mots", $c); if ($id_nova_mot) { $result = sql_insertq("spip_mots_liens", array('id_mot' => $id_nova_mot, 'id_objet' => $id_article, 'objet' => 'article')); $message .= _T('vhplab:tags_insert_ok_2'); } } } } } // borra la cache pero no se como va: // http://programmer.spip.net/The-processes /* include_spip('inc/invalideur'); suivre_invalideur("id='id_article/$id_article'"); */ if ($retour) { include_spip('inc/headers'); $message .= redirige_formulaire($retour); } return $message; }
/** * fonction appliquee par ecrire/index sur le resultat de la precedente * en cas de refus de connexion. * Retourne un message a afficher ou redirige illico. * * @param $raison * @return array|string */ function auth_echec($raison) { include_spip('inc/minipres'); include_spip('inc/headers'); // pas authentifie. Pourquoi ? if (is_string($raison)) { // redirection vers une page d'authentification // on ne revient pas de cette fonction // sauf si pb de header $raison = redirige_formulaire($raison); } elseif (is_int($raison)) { // erreur SQL a afficher $raison = minipres(_T('info_travaux_titre'), _T('titre_probleme_technique') . "<p><tt>" . sql_errno() . " " . sql_error() . "</tt></p>"); } elseif (@$raison['statut']) { // un simple visiteur n'a pas acces a l'espace prive spip_log("connexion refusee a " . @$raison['id_auteur']); $raison = minipres(_T('avis_erreur_connexion'), _T('avis_erreur_visiteur')); } else { // auteur en fin de droits ... $h = $raison['site']; $raison = minipres(_T('avis_erreur_connexion'), "<br /><br /><p>" . _T('texte_inc_auth_1', array('auth_login' => $raison['login'])) . " <a href='{$h}'>" . _T('texte_inc_auth_2') . "</a>" . _T('texte_inc_auth_3')); } return $raison; }
function action_tester_taille_dist() { if (!autoriser('configurer')) return; $max_size = isset($GLOBALS['meta']['max_taille_vignettes'])?$GLOBALS['meta']['max_taille_vignettes']:0; $max_size_echec = isset($GLOBALS['meta']['max_taille_vignettes_echec'])?$GLOBALS['meta']['max_taille_vignettes_echec']:0; $max_size_test = isset($GLOBALS['meta']['max_taille_vignettes_test'])?$GLOBALS['meta']['max_taille_vignettes_test']:0; $taille = _request('arg'); $taille = explode('-',$taille); $GLOBALS['taille_max'] = end($taille); $GLOBALS['taille_min'] = 0; if (count($taille)>1) $GLOBALS['taille_min'] = reset($taille); // si l'intervalle est assez petit, on garde la valeur min if ($GLOBALS['taille_max']*$GLOBALS['taille_max']-$GLOBALS['taille_min']*$GLOBALS['taille_min']<50000){ ecrire_meta('max_taille_vignettes',$t=$GLOBALS['taille_min']*$GLOBALS['taille_min'],'non'); echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'><html><head><title>test</title></head><body><div>"; echo round($t/1024/1024,3).' Mpx'; echo "</div></body></html>"; die(); } $taille = $GLOBALS['taille_test'] = round(($GLOBALS['taille_max']+$GLOBALS['taille_min'])/2); include_spip('inc/filtres'); // des inclusions representatives d'un hit prive et/ou public pour la conso memoire include_spip('public/assembler'); include_spip('public/balises'); include_spip('public/boucles'); include_spip('public/cacher'); include_spip('public/compiler'); include_spip('public/composer'); include_spip('public/criteres'); include_spip('public/interfaces'); include_spip('public/parametrer'); include_spip('public/phraser_html'); include_spip('public/references'); include_spip('inc/presentation'); include_spip('inc/charsets'); include_spip('inc/documents'); include_spip('inc/header'); $dummy = propre("<doc1>"); $i = _request('i')+1; $image_source = chemin_image("test.png"); $GLOBALS['redirect'] = generer_url_action("tester_taille", "i=$i&arg=".$GLOBALS['taille_min']."-".$GLOBALS['taille_test']); ob_start('action_tester_taille_error_handler'); $result = filtrer('image_recadre',$image_source,$taille,$taille); $GLOBALS['redirect'] = generer_url_action("tester_taille", "i=$i&arg=$taille-".$GLOBALS['taille_max']); // si la valeur intermediaire a reussi, on teste la valeur maxi qui est peut etre sous estimee $taille = $GLOBALS['taille_max']; $result = filtrer('image_recadre',$image_source,$taille,$taille); $GLOBALS['redirect'] = generer_url_action("tester_taille", "i=$i&arg=$taille-".$GLOBALS['taille_max']); ob_end_clean(); // on est ici, donc pas de plantage echo redirige_formulaire($GLOBALS['redirect']); }
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 = "<br class='bugajaxie' style='display:none;'/>".$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 }
/** * http://doc.spip.org/@minipres * * @param string $titre * titre de la page * @param string $corps * corps de la page * @param string $onload * attribut onload de <body> * @param bool $all_inline * inliner les css et js dans la page (limiter le nombre de hits) * @return string */ function minipres($titre = '', $corps = "", $onload = '', $all_inline = false) { if (!defined('_AJAX')) { define('_AJAX', false); } // par securite if (!$titre) { if (!_AJAX) { http_status(403); } if (!($titre = _request('action')) and !($titre = _request('exec')) and !($titre = _request('page'))) { $titre = '?'; } $titre = spip_htmlspecialchars($titre); $titre = $titre == 'install' ? _T('avis_espace_interdit') : $titre . ' : ' . _T('info_acces_interdit'); $corps = generer_form_ecrire('accueil', '', '', $GLOBALS['visiteur_session']['statut'] ? _T('public:accueil_site') : _T('public:lien_connecter')); spip_log($GLOBALS['visiteur_session']['nom'] . " {$titre} " . $_SERVER['REQUEST_URI']); } if (!_AJAX) { return install_debut_html($titre, $onload, $all_inline) . $corps . install_fin_html(); } else { include_spip('inc/headers'); include_spip('inc/actions'); $url = self('&', true); foreach ($_POST as $v => $c) { $url = parametre_url($url, $v, $c, '&'); } ajax_retour("<div>" . $titre . redirige_formulaire($url) . "</div>", false); } }
/** * cette fonction doit etre appelee avec un $id_transaction securise * jamais avec un $id_transaction qui provient directement de l'url sans verification * * @param string $mode * @param string $acte_ou_abo * @param bool|string $succes * true, false, 'wait' * @param int $id_transaction * @return string|void */ function redirige_apres_retour_transaction($mode, $acte_ou_abo, $succes, $id_transaction = 0) { $redirect = ""; $row = false; if ($id_transaction = intval($id_transaction)) { // attraper les infos sur la transaction $row = sql_fetsel('*', 'spip_transactions', 'id_transaction=' . intval($id_transaction)); } // cas de paiement par un admin (cheque...) // renvoyer dans le prive $id_auteur = sql_getfetsel("id_auteur", "spip_transactions", "id_transaction=" . intval($id_transaction)); if ($id_transaction and isset($GLOBALS['visiteur_session']['id_auteur']) and (test_espace_prive() or $id_auteur and $GLOBALS['visiteur_session']['id_auteur'] != $id_auteur) and include_spip("inc/autoriser") and autoriser("regler", "transaction", $id_transaction)) { $redirect = generer_url_ecrire("transactions", "id_transaction=" . $id_transaction, true); } if (!$redirect) { // si des urls retour ok ou echec sont definies pour cette transaction // fournies par #FORMULAIRE_PAYER_ACTE if ($row['url_retour'] and $urls = unserialize($row['url_retour'])) { if ($succes === true and isset($urls['url_retour_ok'])) { $redirect = $urls['url_retour_ok']; } elseif ($succes === 'wait' and isset($urls['url_retour_attente'])) { $redirect = $urls['url_retour_attente']; } elseif (!$succes and isset($urls['url_retour_echec'])) { $redirect = $urls['url_retour_echec']; } } // par defaut on revient sur des pages standard, // ou sur une des pages reglees en define() if (!strlen($redirect)) { // _BANK_ACTE_NORMAL_RETURN_URL // _BANK_ACTE_WAIT_RETURN_URL // _BANK_ACTE_CANCEL_RETURN_URL // _BANK_ABO_NORMAL_RETURN_URL // _BANK_ABO_WAIT_RETURN_URL // _BANK_ABO_CANCEL_RETURN_URL $acte_ou_abo = $acte_ou_abo == 'acte' ? 'ACTE' : 'ABO'; if ($succes === true) { $c = "_BANK_" . $acte_ou_abo . "_NORMAL_RETURN_URL"; if (defined($c)) { $redirect = constant($c); } else { $redirect = generer_url_public('bank_retour_ok'); } } elseif ($succes === 'wait') { $c = "_BANK_" . $acte_ou_abo . "_WAIT_RETURN_URL"; if (defined($c)) { $redirect = constant($c); } else { $redirect = generer_url_public('bank_retour_attente'); } } else { $c = "_BANK_" . $acte_ou_abo . "_CANCEL_RETURN_URL"; if (defined($c)) { $redirect = constant($c); } else { $redirect = generer_url_public('bank_retour_echec'); } } } // ajouter id_transaction et transaction_hash sur l'url de retour dans tous les cas if (strlen($redirect)) { $redirect = parametre_url($redirect, 'type', strtolower($acte_ou_abo), '&'); if ($row and $row['transaction_hash']) { $redirect = parametre_url($redirect, 'id_transaction', $id_transaction, '&'); $redirect = parametre_url($redirect, 'transaction_hash', $row['transaction_hash'], '&'); } } } // permettre de definir autrement l'url de redirection $redirect = pipeline('bank_redirige_apres_retour_transaction', array('args' => array('mode' => $mode, 'type' => $acte_ou_abo, 'succes' => $succes, 'id_transaction' => $id_transaction, 'row' => $row), 'data' => $redirect)); #var_dump($redirect);die(); if (strlen($redirect)) { include_spip('inc/headers'); return redirige_formulaire($redirect); } //on ne devrait jamais arriver la ! if ($succes === true) { echo "Transaction {$mode} {$acte_ou_abo} {$id_transaction} terminee OK"; } elseif ($succes === 'wait') { echo "Transaction {$mode} {$acte_ou_abo} {$id_transaction} terminee OK"; } else { echo "Transaction {$mode} {$acte_ou_abo} {$id_transaction} annulee"; } die; }
function formulaires_assistant_migration_verifier_3_dist(){ $erreurs = array(); if (_request('direction')=='depuis'){ // en cas d'abandon sur une migration "depuis", annuler if (_request('canceldepuis')){ include_spip('inc/migration'); $status = abandonner_migration_depuis(); finir_migration_status_depuis(); include_spip('inc/headers'); $erreurs['message_erreur'] = _T('migration:titre_abandon_migration') . redirige_formulaire(generer_url_ecrire('migrer_depuis_fin')); } else { $s = lire_migration_depuis_status(); if ($s AND $s['status']!=='ended') $erreurs['waiting'] = ' '; } } else { foreach(array('url_cible') as $obli) if (!_request($obli)) $erreurs[$obli] = _T('info_obligatoire'); if (strpos(_request('url_cible'),'+')===false) $erreurs['url_cible'] = _T('migration:erreur_url_incorrecte'); if (!count($erreurs)){ $url_cible = _request('url_cible'); $url_cible = explode('+',$url_cible); $migration_key = array_pop($url_cible); $url_cible = implode('+',$url_cible); initialiser_migration_vers($url_cible,$migration_key,_request('quoi')); $connect = charger_fonction('connect','migration/envoi'); $res = $connect($GLOBALS['meta']['adresse_site']); if ($res!==true){ $erreurs['message_erreur'] = _T(is_string($res)?$res:'migration:erreur_echec_connexion_init'); } } } return $erreurs; }
/** * Affichage de la page de gestion des plugins */ function exec_admin_plugin_dist() { if (!autoriser('configurer', 'plugins')) { include_spip('inc/minipres'); echo minipres(); } // on fait la verif du path avant tout, // et l'installation des qu'on est dans la colonne principale // si jamais la liste des plugins actifs change, il faut faire un refresh du hit // pour etre sur que les bons fichiers seront charges lors de l'install include_spip('inc/plugin'); $new = actualise_plugins_actifs(); if ($new and _request('actualise') < 2) { $url = parametre_url(self(), 'actualise', _request('actualise') + 1, '&'); include_spip('inc/headers'); echo redirige_formulaire($url); exit; } // reinstaller SVP si on le demande expressement. if (_request('var_mode') == 'reinstaller_svp') { include_spip('svp_administrations'); svp_vider_tables('svp_base_version'); include_spip('inc/headers'); echo redirige_formulaire(self()); exit; } // le code ci-dessous eut ete bien beau mais... // si l'on veut que les messages d'installation moches des plugins // soient au bon endroit, nous sommes obliges d'appeler la fonction // d'installation a la bonne place, et donc, en php... // car dans le html d'un squelette, encapsule dans un ob_start()/ob_flush(), // la redirection en cas de timeout sur une installation ne se fait pas. /* // on installe les plugins maintenant, // cela permet aux scripts d'install de faire des affichages (moches...) plugin_installes_meta(); // les squelettes ne peuvent pas s'appeler 'admin_plugin' // sinon Z les charge en priorite par rapport a ce fichier exec en PHP set_request('fond', 'svp_admin_plugin'); // on lance l'affichage standard Z include_spip('exec/fond'); */ // liste des erreurs mises en forme $erreur_activation = plugin_donne_erreurs(); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin"); echo debut_gauche('plugin', true); echo pipeline('affiche_gauche', array('args' => array('exec' => 'admin_plugin'), 'data' => recuperer_fond('prive/squelettes/navigation/svp_admin_plugin'))); echo debut_droite('plugin', true); // alerte si mode de compatibilité forcée $mode_compat = defined('_DEV_PLUGINS') ? '<span class="notice">' . _T('svp:alerte_compatibilite') . '</span>' : ''; echo gros_titre(_T('icone_admin_plugin') . $mode_compat, '', false); // message d'erreur au retour d'une operation if ($erreur_activation) { include_spip('inc/filtres_boites'); echo "<div class='svp_retour'>" . boite_ouvrir(_T('svp:actions_en_erreur'), 'error') . $erreur_activation . boite_fermer() . "</div>"; } // afficher les actions realisees s'il y en a eu // (activation/desactivation/telechargement...) echo svp_presenter_actions_realisees(); // on installe les plugins maintenant, // cela permet aux scripts d'install de faire des affichages (moches...) plugin_installes_meta(); echo recuperer_fond('prive/squelettes/contenu/svp_admin_plugin', $_REQUEST, array('ajax' => true)); echo pipeline('affiche_milieu', array('args' => array('exec' => 'admin_plugin'), 'data' => '')); echo fin_gauche(), fin_page(); }
/** * Retourne une page HTML contenant, dans une présentation minimale, * le contenu transmis dans `$titre` et `$corps`. * * Appelée pour afficher un message d’erreur (l’utilisateur n’a pas * accès à cette page par exemple). * * Lorsqu’aucun argument n’est transmis, un header 403 est renvoyé, * ainsi qu’un message indiquant une interdiction d’accès. * * @example * ``` * include_spip('inc/minipres'); * if (!autoriser('configurer')) { * echo minipres(); * exit; * } * ``` * @uses install_debut_html() * @uses install_fin_html() * * @param string $titre * Titre de la page * @param string $corps * Corps de la page * @param array $options * string onload : Attribut onload de `<body>` * bool all_inline : Inliner les css et js dans la page (limiter le nombre de hits) * int status : status de la page * @return string * HTML de la page */ function minipres($titre = '', $corps = "", $options = array()) { // compat signature old // minipres($titre='', $corps="", $onload='', $all_inline = false) $args = func_get_args(); if (isset($args[2]) and is_string($args[2])) { $options = array('onload' => $args[2]); } if (isset($args[3])) { $options['all_inline'] = $args[3]; } $options = array_merge(array('onload' => '', 'all_inline' => false), $options); if (!defined('_AJAX')) { define('_AJAX', false); } // par securite if (!$titre) { if (!isset($options['status'])) { $options['status'] = 403; } if (!($titre = _request('action')) and !($titre = _request('exec')) and !($titre = _request('page'))) { $titre = '?'; } $titre = spip_htmlspecialchars($titre); $titre = $titre == 'install' ? _T('avis_espace_interdit') : $titre . ' : ' . _T('info_acces_interdit'); $statut = isset($GLOBALS['visiteur_session']['statut']) ? $GLOBALS['visiteur_session']['statut'] : ''; $nom = isset($GLOBALS['visiteur_session']['nom']) ? $GLOBALS['visiteur_session']['nom'] : ''; if ($statut != '0minirezo') { $titre = _T('info_acces_interdit'); } $corps = generer_form_ecrire('accueil', '', '', $statut ? _T('public:accueil_site') : _T('public:lien_connecter')); spip_log($nom . " {$titre} " . $_SERVER['REQUEST_URI']); } if (!_AJAX) { if (isset($options['status'])) { http_status($options['status']); } return install_debut_html($titre, $options['onload'], $options['all_inline']) . $corps . install_fin_html(); } else { include_spip('inc/headers'); include_spip('inc/actions'); $url = self('&', true); foreach ($_POST as $v => $c) { $url = parametre_url($url, $v, $c, '&'); } ajax_retour("<div>" . $titre . redirige_formulaire($url) . "</div>", false); } }
/** * Relancer le hit de maj avant timeout * si pas de redirect fourni, on redirige vers exec=upgrade pour finir * ce qui doit etre une maj SPIP * * @param string $meta * @param string $table * @param string $redirect * @return void */ function relance_maj($meta, $table, $redirect = '') { include_spip('inc/headers'); if (!$redirect) { // recuperer la valeur installee en cours // on la tronque numeriquement, elle ne sert pas reellement // sauf pour verifier que ce n'est pas oui ou non // sinon is_numeric va echouer sur un numero de version 1.2.3 $installee = intval($GLOBALS[$table][$meta]); $redirect = generer_url_ecrire('upgrade', "reinstall={$installee}&meta={$meta}&table={$table}", true); } echo redirige_formulaire($redirect); exit; }
function minipres($titre='', $corps="", $onload='') { if (!defined('_AJAX')) define('_AJAX', false); if (!$titre) { if (!_AJAX) http_status(403); if (!$titre = _request('action') AND !$titre = _request('exec') AND !$titre = _request('page')) $titre = '?'; $titre = htmlspecialchars($titre); $titre = ($titre == 'install') ? _T('avis_espace_interdit') : $titre . ' : '. _T('info_acces_interdit'); $corps = generer_form_ecrire('accueil', '','',_T('public:accueil_site')); spip_log($GLOBALS['visiteur_session']['nom'] . " $titre " . $_SERVER['REQUEST_URI']); } if (!_AJAX) return install_debut_html($titre, $onload) . $corps . install_fin_html(); else { include_spip('inc/headers'); include_spip('inc/actions'); $url = self('&',true); foreach ($_POST as $v => $c) $url = parametre_url($url, $v, $c, '&'); echo ajax_retour("<div>".$titre . redirige_formulaire($url)."</div>",false); } }
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'); // ainsi que l'API SQL bien utile dans verifier/traiter include_spip('base/abstract_sql'); $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())); // accessibilite : si des erreurs mais pas de message general l'ajouter if (count($post["erreurs_{$form}"]) and !isset($post["erreurs_{$form}"]['message_erreur'])) { $post["erreurs_{$form}"]['message_erreur'] = singulier_ou_pluriel(count($post["erreurs_{$form}"]), 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie'); } // 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 est // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx) // 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 $post["message_ok_{$form}"] = ''; // on peut avoir message_ok et message_erreur if (isset($rev['message_ok'])) { $post["message_ok_{$form}"] = $rev['message_ok']; } // verifier si traiter n'a pas echoue avec une erreur : if (isset($rev['message_erreur'])) { $post["erreurs_{$form}"]["message_erreur"] = $rev['message_erreur']; // si il y a une erreur on ne redirige pas } else { // sinon faire ce qu'il faut : 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 // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $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 }
/***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2014 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ // Script pour appeler un squelette apres s'etre authentifie include_once 'inc_version.php'; include_spip('inc/cookie'); $auth = charger_fonction('auth', 'inc'); $var_auth = $auth(); if ($var_auth !== '') { if (!is_int($var_auth)) { // si l'authentifie' n'a pas acces a l'espace de redac // c'est qu'on voulait forcer sa reconnaissance en tant que visiteur. // On reexecute pour deboucher sur le include public. // autrement on insiste if (is_array($var_auth)) { $var_auth = '../?' . $_SERVER['QUERY_STRING']; spip_setcookie('spip_session', $_COOKIE['spip_session'], time() + 3600 * 24 * 14); } include_spip('inc/headers'); redirige_formulaire($var_auth); } } // En somme, est prive' ce qui est publiquement nomme'... include 'public.php';
function migration_afficher_status($status){ $s = "?"; switch($status['status']){ case 'init': $s = _T('migration:status_waiting'); break; case 'end': case 'basereverted': $s = "[end]".redirige_formulaire(generer_url_ecrire('migrer_depuis_fin')); break; default: if (isset($status['source'])) $s = _T('migration:status_connected',array('source'=>"<strong>".$status['source']."</strong>")); if (isset($status['progress'])){ if (isset($status['progress']['tables'])) $status['progress']['tables'] = migration_afficher_status_tables($status['progress']['tables']); if (isset($status['progress']['files'])) $status['progress']['files'] = migration_afficher_status_files($status['progress']['files']); $s.= '<br />'.implode('<br />',$status['progress']); } $s .= '<br />'; $s .= "[".$status['status']."]"; break; } return $s; }
/** * Traiter le formulaire */ function formulaires_integ_adhintg_traiter_dist($titre_saison, $retour = '', $config_fonc = 'integ_adhintg_edit_config', $row = array(), $hidden = '') { $ref_saisie = _request('ref_saisie'); $id_coti = intval(_request('id_coti')); $message = ""; $exec_import = charger_fonction("import_edit", 'exec'); // @todo-JR-20120216-Verifier l'affichage des erreurs car c'est une liste // Chaque enreg peut etre en erreur !! // voir inc/adh_import.adh_import_show_erreurs list($id, $err) = $exec_import($ref_saisie, $id_coti); if ($err) { $message .= $err; } elseif ($retour) { //include_spip('inc/headers'); $retour = parametre_url($retour, 'ref_saisie', $id); $message .= redirige_formulaire($retour); } return $message; }