/** * Demander à mettre à jour la base de données */ function exec_demande_mise_a_jour_dist() { // 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'); if (actualise_plugins_actifs()) { include_spip('inc/headers'); redirige_par_entete(self()); } include_spip('inc/presentation'); include_spip('inc/filtres_boites'); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page('', '', '', '', true, false, false); echo debut_grand_cadre(true); echo boite_ouvrir(_T('info_message_technique'), 'notice'); echo "<p>" . _T('info_procedure_maj_version') . "</p>", "<p>" . _T('info_administrateur_site_01') . "</p>"; echo bouton_action(_T('bouton_mettre_a_jour_base'), generer_url_ecrire("upgrade", "reinstall=non")); echo boite_fermer(); // masquer les erreurs sql sur cette page car proviennent de la base pas a jour ! echo '<style type="text/css">#debug-nav {display: none;}</style>'; echo fin_grand_cadre(true); echo fin_page(); }
function action_editer_mot_dist($arg=null) { if (is_null($arg)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } $id_mot = intval($arg); $id_groupe = intval(_request('id_groupe')); if (!$id_mot AND $id_groupe) { $id_mot = sql_insertq("spip_mots", array('id_groupe' => $id_groupe)); } // modifier le contenu via l'API include_spip('inc/modifier'); $c = array(); foreach (array( 'titre', 'descriptif', 'texte', 'id_groupe' ) as $champ) $c[$champ] = _request($champ); revision_mot($id_mot, $c); if ($redirect = _request('redirect')) { include_spip('inc/headers'); redirige_par_entete(parametre_url(urldecode($redirect), 'id_mot', $id_mot, '&')); } else return array($id_mot,''); }
function action_configurer_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); # ceinture & bretelles, a priori le test dans exec_configurer # suffit a empecher d'obtenir un hash qui passe le test ci-dessus if(!autoriser('configurer', _request('configuration'))) { include_spip('inc/minipres'); echo minipres(_T('info_acces_interdit')); exit; } $r = rawurldecode(_request('redirect')); $r = parametre_url($r, 'configuration', $arg,"&"); appliquer_modifs_config(); // Cette globale est fixee par appliquer_modifs_config(); // c'est un message a afficher dans l'exec de retour (relayeur si comme ici on est en ajax) if ($arg == 'relayeur') $r = parametre_url($r, 'retour_proxy', $GLOBALS['retour_proxy'],"&"); else if ($arg == 'langue') { include_spip('inc/rubriques'); calculer_langues_rubriques(); } if (_request('envoi_now')) cron(0, array('mail' => -1)); redirige_par_entete($r); }
/** * Se deloger * Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton, * avec un autosubmit js pour ne pas compliquer l'experience utilisateur * * http://doc.spip.org/@action_logout_dist * */ function action_logout_dist() { $logout =_request('logout'); $url = _request('url'); // seul le loge peut se deloger // (mais id_auteur peut valoir 0 apres une restauration avortee) if (isset($GLOBALS['visiteur_session']['id_auteur']) AND is_numeric($GLOBALS['visiteur_session']['id_auteur']) // des sessions anonymes avec id_auteur=0 existent, // mais elles n'ont pas de statut : verifier ca aussi AND isset($GLOBALS['visiteur_session']['statut'])) { // relancer si pas de jeton if (!action_logout_secu($logout, $url, _request('jeton'))) { return; // page submit retournee } elseif (isset($_COOKIE['spip_session'])) { // le logout explicite vaut destruction de toutes les sessions $session = charger_fonction('session', 'inc'); $session($GLOBALS['visiteur_session']['id_auteur']); spip_setcookie('spip_session', $_COOKIE['spip_session'], time()-3600); } include_spip('inc/auth'); auth_trace($GLOBALS['visiteur_session'],'0000-00-00 00:00:00'); } // Action terminee (ou non faite si pas les droits) on redirige. // Cas particulier, logout dans l'espace public $url = securiser_redirect_action($url); if ($logout == 'public' AND !$url) $url = url_de_base(); include_spip('inc/headers'); redirige_par_entete($url // contrer le cache navigateur (Safari3) ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login')); }
function action_autoriser_dist() { $arg = intval(_request('arg')); if (!autoriser('voir', 'document', $arg) or !($row = sql_fetsel("fichier", "spip_documents", "id_document=" . intval($arg))) or !($file = $row['fichier']) or !file_exists($file)) { spip_log("Acces refuse (restreint) au document " . $arg . ': ' . $file); redirige_par_entete('./?page=404'); } else { if (!function_exists('mime_content_type')) { // http://doc.spip.org/@mime_content_type function mime_content_type($f) { preg_match("/\\.(\\w+)/", $f, $r); return $r[1]; } } $ct = mime_content_type($file); $cl = filesize($file); $filename = basename($file); header("Content-Type: " . $ct); header("Content-Disposition: attachment; filename=\"" . $filename . "\";"); if ($dcc) { header("Content-Description: " . $dcc); } if ($cl) { header("Content-Length: " . $cl); } header("Content-Transfer-Encoding: binary"); readfile($file); } }
function exec_export_all_init($rub, $gz, $tables, $serveur='', $save=''){ $meta = base_dump_meta_name($rub); utiliser_langue_visiteur(); if (!isset($GLOBALS['meta'][$meta])){ // c'est un demarrage en arrivee directe depuis exec=admin_tech // on initialise (mais si c'est le validateur, ne rien faire) if ($GLOBALS['exec'] == 'valider_xml') return; $archive = exec_export_all_args($rub, $gz); $tables = export_all_start($meta, $archive, $rub, $tables); $v = array($gz, $archive, $rub, $tables, 1, 0, $serveur, $save); ecrire_meta($meta, serialize($v), 'non'); // rub=$rub sert AUSSI a distinguer cette redirection // d'avec l'appel initial sinon FireFox croit malin // d'optimiser la redirection $url = generer_url_ecrire('export_all',"rub=$rub", true); } else { // appels suivants $export = charger_fonction('export', 'inc'); $arg = $export($meta); // Si retour de $export c'est fini; dernier appel pour ramasser // et produire l'en tete du fichier a partir de l'espace public $url = generer_action_auteur("export_all",$arg,'',true, true, true); } include_spip('inc/headers'); redirige_par_entete($url); }
function action_converser_dist() { if ($lang = _request('var_lang')) action_converser_post($lang); elseif ($lang = _request('var_lang_ecrire')) { if ( _request('arg') AND spip_connect()) { $securiser_action = charger_fonction('securiser_action', 'inc'); $securiser_action(); sql_updateq("spip_auteurs", array("lang" => $lang), "id_auteur = " . $GLOBALS['visiteur_session']['id_auteur']); $GLOBALS['visiteur_session']['lang'] = $lang; $session = charger_fonction('session', 'inc'); if ($spip_session = $session($GLOBALS['visiteur_session'])) { spip_setcookie( 'spip_session', $spip_session, time() + 3600 * 24 * 14 ); } } action_converser_post($lang, 'spip_lang_ecrire'); } $redirect = rawurldecode(_request('redirect')); if (!$redirect) $redirect = _DIR_RESTREINT_ABS; $redirect = parametre_url($redirect,'lang',$lang,'&'); redirige_par_entete($redirect, true); }
function action_referencer_traduction_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); if (preg_match(",^(\d+)$,", $arg, $r) AND $trad = intval(_request('lier_trad'))) { include_spip('action/editer_article'); if ($err = article_referent($r[1], array('lier_trad' => $trad))) redirige_par_entete(urldecode(_request('redirect')) . $err); } elseif (preg_match(",^(\d+)\D-(\d+)$,", $arg, $r)) { // supprimer le lien de traduction sql_updateq("spip_articles", array("id_trad" => 0), "id_article=" . $r[1]); // Verifier si l'ancien groupe ne comporte plus qu'un seul article. Alors mettre a zero. $cpt = sql_countsel("spip_articles", "id_trad=" . $r[2]); if ($cpt == 1) sql_updateq("spip_articles", array("id_trad" => 0), "id_trad=" . $r[2]); } elseif (preg_match(",^(\d+)\D(\d+)\D(\d+)$,", $arg, $r)) { // modifier le groupe de traduction de $r[1] (SQL le trouvera) sql_update('spip_articles', array("id_trad" => $r[3]), "id_trad=" . $r[2]); } elseif (preg_match(",^(\d+)\D(\d+)$,", $arg, $r)) { instituer_langue_article($r[1],$r[2]); } else { spip_log("action_referencer_traduction_dist $arg pas compris"); } }
function action_desinstaller_plugin_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); list($dir_plugins, $plugin) = explode("::", $arg); $dir_type = "_DIR_PLUGINS"; if (defined('_DIR_PLUGINS_SUPPL') and $dir_plugins == _DIR_PLUGINS_SUPPL) { $dir_type = "_DIR_PLUGINS_SUPPL"; } $installer_plugins = charger_fonction('installer', 'plugins'); $infos = $installer_plugins($plugin, 'uninstall', $dir_type); if ($infos and !$infos['install_test'][0]) { include_spip('inc/plugin'); ecrire_plugin_actifs(array($plugin), false, 'enleve'); $erreur = ''; } else { $erreur = 'erreur_plugin_desinstalation_echouee'; } if ($redirect = _request('redirect')) { include_spip('inc/headers'); if ($erreur) { $redirect = parametre_url($redirect, 'erreur', $erreur); } $redirect = str_replace('&', '&', $redirect); redirige_par_entete($redirect); } }
function action_desinstaller_plugin_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $plug_file = $securiser_action(); $get_infos = charger_fonction('get_infos','plugins'); $infos = $get_infos($plug_file); $erreur = ""; if (isset($infos['install'])){ // desinstaller $etat = desinstalle_un_plugin($plug_file,$infos); // desactiver si il a bien ete desinstalle if (!$etat) ecrire_plugin_actifs(array($plug_file),false,'enleve'); else $erreur = 'erreur_plugin_desinstalation_echouee'; } else { // en principe on ne passe pas la car pas de bouton sur les plugins non // desinstallables echo ('Ce plugin ne peut pas etre desinstalle et vous ne devriez pas arriver la !'); } if ($redirect = _request('redirect')){ include_spip('inc/headers'); if ($erreur) $redirect = parametre_url($redirect, 'erreur',$erreur); $redirect = str_replace('&','&',$redirect); redirige_par_entete($redirect); } }
function action_snippet_exporte(){ global $auteur_session; $arg = _request('arg'); $args = explode(":",$arg); $hash = _request('hash'); $id_auteur = $auteur_session['id_auteur']; $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); if (verifier_action_auteur("snippet_exporte-$arg",$hash,$id_auteur)==TRUE) { $table = $args[0]; $id = $args[1]; $f = snippets_fond_exporter($table, false); if ($f) { include_spip('public/assembler'); $out = recuperer_fond($f,array('id'=>intval($id))); //$out = preg_replace(",\n\n[\s]*(?=\n),","",$out); $filename=str_replace(":","_",$arg); if (preg_match(",<titre>(.*)</titre>,Uims",$out,$regs)) $filename = preg_replace(',[^-_\w]+,', '_', trim(translitteration(textebrut(typo($regs[1]))))); $extension = "xml"; Header("Content-Type: text/xml; charset=".$GLOBALS['meta']['charset']); Header("Content-Disposition: attachment; filename=$filename.$extension"); Header("Content-Length: ".strlen($out)); echo $out; exit(); } } redirige_par_entete(str_replace("&","&",urldecode($redirect))); }
function action_logout_dist() { global $visiteur_session, $ignore_auth_http; $logout = _request('logout'); $url = securiser_redirect_action(_request('url')); // cas particulier, logout dans l'espace public if ($logout == 'public' and !$url) { $url = url_de_base(); } // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee) if (is_numeric($visiteur_session['id_auteur'])) { include_spip('inc/auth'); auth_trace($visiteur_session, '0000-00-00 00:00:00'); // le logout explicite vaut destruction de toutes les sessions if (isset($_COOKIE['spip_session'])) { $session = charger_fonction('session', 'inc'); $session($visiteur_session['id_auteur']); spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600); } // si authentification http, et que la personne est loge, // pour se deconnecter, il faut proposer un nouveau formulaire de connexion http if (isset($_SERVER['PHP_AUTH_USER']) and !$ignore_auth_http and $GLOBALS['auth_can_disconnect']) { ask_php_auth(_T('login_deconnexion_ok'), _T('login_verifiez_navigateur'), _T('login_retour_public'), "redirect=" . _DIR_RESTREINT_ABS, _T('login_test_navigateur'), true); } } // Rediriger en contrant le cache navigateur (Safari3) include_spip('inc/headers'); redirige_par_entete($url ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login')); }
function action_editer_rubrique_dist($arg=null) { if (is_null($arg)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } if (!$id_rubrique = intval($arg)) { if ($arg != 'oui') { include_spip('inc/headers'); redirige_url_ecrire(); } $id_rubrique = insert_rubrique(_request('id_parent')); } revisions_rubriques($id_rubrique); if (_request('redirect')) { $redirect = parametre_url( urldecode(_request('redirect')), 'id_rubrique', $id_rubrique, '&'); include_spip('inc/headers'); redirige_par_entete($redirect); } else return array($id_rubrique,''); }
function action_pdf2swf_convert() { global $visiteur_session; $id_auteur = $visiteur_session['id_auteur']; $arg = _request('arg'); $args = explode(":",$arg); // le 1er element de _request('arg') est id_article=XXX $Targs = explode("=", $args[0]); $id_article = $Targs[1]; $hash = _request('hash'); $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); // if (!autoriser('creerarticledans', 'rubrique', $id_rubrique)) die(_T('avis_non_acces_page')); // ss-rep temporaire specifique de l'auteur en cours: tmp/pdf2swf/id_auteur/ => le creer si il n'existe pas $base_dezip = _DIR_TMP."pdf2swf/"; // avec / final if (!is_dir($base_dezip)) if (!sous_repertoire(_DIR_TMP,'pdf2swf')) die (_T('pdfswf:err_repertoire_tmp')); $rep_dezip = $base_dezip.$id_auteur.'/'; if (!is_dir($rep_dezip)) if (!sous_repertoire($base_dezip,$id_auteur)) die (_T('pdfswf:err_repertoire_tmp')); // traitement d'un fichier pdf envoye par $_POST $fichier_zip = addslashes($_FILES['fichier_pdf']['name']); if ($_FILES['fichier_pdf']['name'] == '' OR $_FILES['fichier_pdf']['error'] != 0 OR !move_uploaded_file($_FILES['fichier_pdf']['tmp_name'], $rep_dezip.$fichier_zip) ) die(_T('pdfswf:err_telechargement_fichier')); // conversion du fichier pdf en swf // $command='pdf2swf -t '.$rep_dezip.$fichier_zip.' '.$rep_dezip.$fichier_zip.'.swf'; $command='pdf2swf -t -B '. _DIR_PLUGIN_PDF2SWF.'fdplayer.swf '.$rep_dezip.$fichier_zip.' '.$rep_dezip.$fichier_zip.'.swf'; exec($command); //attacher le fichier pdf original a l'article if (!isset($ajouter_documents)) $ajouter_documents = charger_fonction('ajouter_documents','inc'); // la y'a un bogue super-bizarre avec la fonction spip_abstract_insert() qui est donnee comme absente lors de l'appel de ajouter_document() if (!function_exists('spip_abstract_insert')) include_spip('base/abstract_sql'); $id_doc_swf = $ajouter_documents($rep_dezip.$fichier_zip.'.swf', $fichier_zip.'.swf', "article", $id_article, 'document', 0, $toto=''); // si necessaire attacher le fichier odt original a l'article et lui mettre un titre signifiant if (_request('attacher_pdf') == '1') { $id_doc_odt = $ajouter_documents($rep_dezip.$fichier_zip, $fichier_zip, "article", $id_article, 'document', 0, $toto=''); } if (!function_exists('effacer_repertoire_temporaire')) include_spip('inc/getdocument'); // vider le contenu du rep de dezippage effacer_repertoire_temporaire($rep_dezip); // aller sur la page de l'article qui vient d'etre cree redirige_par_entete(parametre_url(str_replace("&","&",urldecode($redirect)),'id_article',$id_article,'&')); }
function action_poster_forum_prive_post($r) { list(,$id, $id_parent, $statut, $script, $objet) = $r; if (_request('valider_forum') AND ($statut!='')) { include_spip('inc/texte'); include_spip('inc/forum'); $titre_message = corriger_caracteres(_request('titre_message')); $texte = corriger_caracteres(_request('texte')); $id_forum = sql_insertq('spip_forum', array( $objet => $id, 'titre' => $titre_message, 'texte' => $texte, 'date_heure' => date('Y-m-d H:i:s'), 'nom_site' => _request('nom_site'), 'url_site' => _request('url_site'), 'statut' => $statut, 'id_auteur' =>$GLOBALS['visiteur_session']['id_auteur'], 'auteur' => $GLOBALS['visiteur_session']['nom'], 'email_auteur' => $GLOBALS['visiteur_session']['email'], 'id_parent' => $id_parent)); calculer_threads(); if ($objet == 'id_message') { sql_updateq("spip_auteurs_messages", array("vu" => 'non'), "id_message=$id"); } // Notification if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('forumprive', $id_forum); } $retour = urldecode(_request('redirect')); $retour = parametre_url($retour, 'modif_forum', 'fin', '&'); $retour = parametre_url($retour, 'texte', $objet, '&'); # $retour = parametre_url($retour, 'script', $script, '&'); redirige_par_entete($retour ."#id".$id_forum); } else { // previsualisation : on ne fait que passer .... // et si les clients HTTP respectaient le RFC HTTP selon lequel // une redirection d'un POST doit etre en POST et pas en GET // on n'aurait pas a faire l'horreur ci-dessous. set_request('action', ''); set_request('exec', 'poster_forum_prive'); set_request('id', $id); set_request('id_parent', $id_parent); set_request('statut', $statut); set_request('script', $script); include(_DIR_RESTREINT.'index.php'); exit; } }
function traiter_appels_actions() { // cas de l'appel qui renvoie une redirection (302) ou rien (204) if ($action = _request('action')) { include_spip('base/abstract_sql'); // chargement systematique pour les actions include_spip('inc/autoriser'); include_spip('inc/headers'); include_spip('inc/actions'); // des actions peuvent appeler _T if (!isset($GLOBALS['spip_lang'])) { include_spip('inc/lang'); utiliser_langue_visiteur(); } // si l'action est provoque par un hit {ajax} // il faut transmettre l'env ajax au redirect // on le met avant dans la query string au cas ou l'action fait elle meme sa redirection if ($v = _request('var_ajax') and $v !== 'form' and $args = _request('var_ajax_env') and $url = _request('redirect')) { $url = parametre_url($url, 'var_ajax', $v, '&'); $url = parametre_url($url, 'var_ajax_env', $args, '&'); set_request('redirect', $url); } else { if (_request('redirect')) { set_request('redirect', securiser_redirect_action(_request('redirect'))); } } $var_f = charger_fonction($action, 'action'); $var_f(); if (!isset($GLOBALS['redirect'])) { $GLOBALS['redirect'] = _request('redirect'); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $GLOBALS['redirect'] = urldecode($GLOBALS['redirect']); } $GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']); } if ($url = $GLOBALS['redirect']) { // si l'action est provoque par un hit {ajax} // il faut transmettre l'env ajax au redirect // qui a pu etre defini par l'action if ($v = _request('var_ajax') and $v !== 'form' and $args = _request('var_ajax_env')) { $url = parametre_url($url, 'var_ajax', $v, '&'); $url = parametre_url($url, 'var_ajax_env', $args, '&'); // passer l'ancre en variable pour pouvoir la gerer cote serveur $url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url); } $url = str_replace('&', '&', $url); // les redirections se font en &, pas en en & redirige_par_entete($url); } if (!headers_sent() and !ob_get_length()) { http_status(204); } // No Content return true; } return false; }
/** * Traite une demande de redirection * * Si le fond du formulaire demande expressement une redirection * par <!-- rediriger=1 -->, on stocke le message dans une meta * et on redirige le client, de maniere a charger la page * avec la nouvelle config (ce qui permet par exemple a Autorite * de controler d'eventuels conflits generes par les nouvelles autorisations) * * @param mixed $valeur # inutilisé * @param Object $cfg */ function cfg_post_traiter_param_rediriger($valeur, &$cfg){ if ($cfg->messages) { include_spip('inc/meta'); ecrire_meta('cfg_message_'.$GLOBALS['auteur_session']['id_auteur'], serialize($cfg->messages), 'non'); if (defined('_COMPAT_CFG_192')) ecrire_metas(); include_spip('inc/headers'); redirige_par_entete(parametre_url(self(),null,null,'&')); } }
/** * Retour de la demande de paiement chez PaypalExpress * * @param array $config * @param null|array $response * @return array */ function presta_paypalexpress_call_response($config, $response = null) { include_spip('inc/bank'); $mode = $config['presta']; $ack = false; include_spip('presta/paypalexpress/inc/paypalexpress'); /* At this point, the buyer has completed in authorizing payment at PayPal. The script will now call PayPal with the details of the authorization, incuding any shipping information of the buyer. Remember, the authorization is not a completed transaction at this state - the buyer still needs an additional step to finalize the transaction */ $token = urlencode(_request('token')); $id_transaction = intval($_SESSION['id_transaction']); if (!($row = sql_fetsel("*", "spip_transactions", "id_transaction=" . intval($id_transaction)))) { return bank_transaction_invalide($id_transaction, array('mode' => $mode, 'log' => var_export($_REQUEST, true) . var_export($_SESSION, true), 'erreur' => 'donnees Paypal non conformes')); } /* Build a second API request to PayPal, using the token as the ID to get the details on the payment authorization */ $nvpstr = "&TOKEN=" . $token; #var_dump($nvpstr); // pas la peine de faire un call Paypal si Cancel if ($token and _request('action') !== 'bank_cancel' and !defined('_BANK_CANCEL_TRANSACTION')) { /* Make the API call and store the results in an array. If the call was a success, show the authorization details, and provide an action to complete the payment. If failed, show the error */ $resArray = bank_paypalexpress_hash_call($config, "GetExpressCheckoutDetails", $nvpstr); #var_dump($resArray); $_SESSION['reshash'] = $resArray; $ack = strtoupper($resArray["ACK"]); } if ($ack == "SUCCESS" and isset($resArray["PAYERID"]) and isset($resArray["EMAIL"]) and $resArray["PAYERID"] == _request('PayerID')) { $url = $_SESSION['paypalexpress_url_confirm']; $url_checkout = generer_action_auteur('paypalexpress_checkoutpayment', $resArray["PAYERID"] . "-" . $mode . "-" . bank_config_id($config)); $url = parametre_url($url, 'checkout', $url_checkout, '&'); $resume = "Paiement par compte Paypal : <br/>" . $resArray['FIRSTNAME'] . ' ' . $resArray['LASTNAME'] . "," . $resArray['EMAIL']; $_SESSION['order_resume'] = $resume; $_SESSION['token'] = $token; $_SESSION['payer_id'] = $resArray["PAYERID"]; // on redirige (un peu sauvagement) sur l'URL de confirmation // qui est l'url d'origine du paiement avec un &confirm=oui // et va rafficher la commande avec un bouton de validation de paiement include_spip("inc/headers"); redirige_par_entete($url); } else { // regarder si l'annulation n'arrive pas apres un reglement (internaute qui a ouvert 2 fenetres de paiement) if ($row['reglee'] == 'oui') { return array($id_transaction, true); } return bank_transaction_echec($id_transaction, array('mode' => $mode, 'config_id' => bank_config_id($config), 'log' => var_export($_REQUEST, true) . var_export($_SESSION['reshash'], true), 'erreur' => $ack, 'where' => 'GetExpressCheckoutDetails')); } }
function action_galettonuts_cron_manuel_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action('galettonuts-0.1'); $voir_statut = _request('statut'); if ($voir_statut) { $voir_statut = '&statut=' . $voir_statut; } include_spip('inc/galettonuts_fonctions'); $code = (int) galettonuts_synchroniser(); redirige_par_entete(generer_url_ecrire(_request('redirect'), 'galettonuts_synchro_ok=oui&code_retour=' . $code . $voir_statut, true)); }
function action_spiplistes_supprimer_abonne_dist () { include_spip('inc/autoriser'); include_spip('inc/spiplistes_api'); // les globales ne passent pas en action //global $connect_id_auteur; $connect_id_auteur = $GLOBALS['auteur_session']['id_auteur']; $securiser_action = charger_fonction('securiser_action', 'inc'); $id_auteur = intval($securiser_action()); $redirect = urldecode(_request('redirect')); if (autoriser('supprimer', 'auteur', $id_auteur)) { $result = sql_select("id_auteur,statut", "spip_auteurs", "id_auteur=".sql_quote($id_auteur), '','', 1); if ($row = sql_fetch($result)) { $id_auteur = intval($row['id_auteur']); $statut = $row['statut']; if( ($id_auteur > 0) && ($statut=='6forum') ) { $sql_whereq = "id_auteur=".sql_quote($id_auteur); if( // vide la queue du courrier en attente pour cet abonne' spiplistes_courriers_en_queue_supprimer($sql_whereq) // supprime l'abonne' des abonnements && spiplistes_abonnements_auteur_desabonner($id_auteur, 'toutes') // supprime l'abonne' des formats elargis && spiplistes_format_abo_supprimer($id_auteur) ) { spiplistes_log("ID_AUTEUR #$id_auteur UNSUBSCRIBE BY ID_AUTEUR #$connect_id_auteur"); // ne peut supprimer que les invites if($statut=='6forum') { if(spiplistes_auteurs_auteur_delete($sql_whereq)) { // garde une petite trace... spiplistes_log("ID_AUTEUR #$id_auteur DELETED BY ID_AUTEUR #$connect_id_auteur"); } } } } } } if($redirect) { redirige_par_entete(str_replace("&", "&", $redirect)); } }
/** * Action effectuant 1 action dans la liste des actions à réaliser * sur les plugins. * * Cette action sera relancée tant qu'il reste des actions à faire */ function action_actionner_dist() { // droits include_spip('inc/autoriser'); if (!autoriser('configurer', '_plugins')) { include_spip('inc/minipres'); echo minipres(); exit; } include_spip('inc/svp_actionner'); include_spip('inc/headers'); $actionneur = new Actionneur(); $actionneur->get_actions(); if ($actionneur->one_action()) { // si SVP a été enlevé des actifs, on redirige sur la fin... // sinon cette page d'action/actionner devient introuvable. // dans ce cas précis, les autres actions prévues venant après la desactivation de SVP // ne pourront être traitees... SVP n'étant plus là ! if ($actionneur->tester_si_svp_desactive()) { $url = _request('redirect'); } else { $url = generer_action_auteur('actionner', '', _request('redirect')); } // en mode pas à pas, on affiche un bilan entre chaque action // et on demande a l'utilistateur de cliquer pour realiser // l'action suivante. include_spip('inc/config'); if (lire_config('svp/mode_pas_a_pas') == 'oui') { include_spip('inc/minipres'); $pres = $actionneur->presenter_actions(); $btn = "<a href='{$url}'>[ Action Suivante ]</a>"; $styles = "\n\t\t\t\t<style type='text/css'>\n\t\t\t\t#minipres #actionner .fail {color:#c30000;}\n\t\t\t\t#minipres #actionner ul {margin-left: 0.5em;}\n\t\t\t\t#minipres #actionner li {list-style-type:square; margin-left: 0.5em;}\n\t\t\t\t</style>"; echo minipres(_T('svp:installation_en_cours'), $pres . '<br /><br />' . $btn . $styles); die; } redirige_par_entete(str_replace('&', '&', $url)); } foreach ($actionneur->done as $done) { if ($done['todo'] == 'on') { if ($voir = session_get('svp_admin_plugin_voir') and $voir == 'inactif') { session_set('svp_admin_plugin_voir', 'actif'); } break; } } include_spip('inc/svp_depoter_local'); svp_actualiser_paquets_locaux(); if (!_request('redirect')) { $GLOBALS['redirect'] = generer_url_ecrire('admin_plugin'); } else { $GLOBALS['redirect'] = str_replace('&', '&', _request('redirect')); } }
function action_reorganiser_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $securiser_action(); if (_request('deplacements') !== NULL) { gerer_deplacements(_request('deplacements')); } $redirect = _request('redirect'); if ($redirect == NULL) { $redirect = ""; } redirige_par_entete(str_replace("&", "&", urldecode($redirect))); }
function action_editer_auteur_dist($arg=null) { if (is_null($arg)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } // si id_auteur n'est pas un nombre, c'est une creation if (!$id_auteur = intval($arg)) { if (($id_auteur = insert_auteur()) > 0){ # cf. GROS HACK # recuperer l'eventuel logo charge avant la creation # ils ont un id = 0-id_auteur de la session $id_hack = 0 - $GLOBALS['visiteur_session']['id_auteur']; $chercher_logo = charger_fonction('chercher_logo', 'inc'); if (list($logo) = $chercher_logo($id_hack, 'id_auteur', 'on')) rename($logo, str_replace($id_hack, $id_auteur, $logo)); if (list($logo) = $chercher_logo($id_hack, 'id_auteur', 'off')) rename($logo, str_replace($id_hack, $id_auteur, $logo)); } } // Enregistre l'envoi dans la BD if ($id_auteur > 0) $err = auteurs_set($id_auteur); if ($redirect = _request('redirect')) { if ($err){ $ret = ('&redirect=' . $redirect); spip_log("echec editeur auteur: " . join(' ',$echec)); $echec = '&echec=' . join('@@@', $echec); $redirect = generer_url_ecrire('auteur_infos',"id_auteur=$id_auteur$echec$ret",'&'); } else $redirect = urldecode($redirect); $redirect = parametre_url($redirect,'id_auteur', $id_auteur, '&'); include_spip('inc/headers'); redirige_par_entete($redirect); } else return array($id_auteur,$err); $redirect = _request('redirect'); }
function action_instituer_groupe_mots_get($table) { $titre = _T('info_mot_sans_groupe'); $id_groupe = sql_insertq("spip_groupes_mots", array( 'titre' => $titre, 'unseul' => 'non', 'obligatoire' => 'non', 'tables_liees'=>$table, 'minirezo' => 'oui', 'comite' => 'non', 'forum' => 'non')) ; redirige_par_entete(parametre_url(urldecode(_request('redirect')), 'id_groupe', $id_groupe, '&')); }
function action_converser_dist() { $update_session = false; if (_request('arg') and spip_connect()) { $securiser_action = charger_fonction('securiser_action', 'inc'); $securiser_action(); $update_session = true; } $lang = action_converser_changer_langue($update_session); $redirect = rawurldecode(_request('redirect')); if (!$redirect) { $redirect = _DIR_RESTREINT_ABS; } $redirect = parametre_url($redirect, 'lang', $lang, '&'); redirige_par_entete($redirect, true); }
function exec_test_ajax_dist() { switch (_request('js')) { // on est appele par <noscript> case -1: spip_setcookie('spip_accepte_ajax', -1); include_spip('inc/headers'); redirige_par_entete(chemin_image('puce-orange-anim.gif')); break; // ou par ajax case 1: default: spip_setcookie('spip_accepte_ajax', 1); break; } }
function action_clevermail_post_create_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $lst_id = intval($arg); include_spip('inc/autoriser'); if (autoriser('creer', 'cm_post', $lst_id)) { include_spip('inc/clevermail_post_create'); $pst_id = clevermail_post_create($lst_id); include_spip('inc/headers'); if ($pst_id) { redirige_par_entete(generer_url_ecrire('clevermail_posts') . '&lst_id=' . $lst_id); } else { redirige_par_entete(generer_url_ecrire('clevermail_lists') . '&err_lst=' . $lst_id . '&err_msg=erreur_contenu_vide#lst' . $lst_id); } } }
function action_configurer_relayeur_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $http_proxy = _request('http_proxy'); $http_noproxy = _request('http_noproxy'); $test_proxy = _request('test_proxy'); $tester_proxy = _request('tester_proxy'); $test = configuration_relayeur_post($http_proxy, $http_noproxy, $test_proxy, $tester_proxy); // message a afficher dans l'exec de retour $r = rawurldecode(_request('redirect')); $r = parametre_url($r, 'retour_proxy', $test, "&"); redirige_par_entete($r); }
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; } 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'); // Commentaire standard upgrade else $commentaire = _T('texte_mise_a_niveau_base_1'); $_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 { $res = redirige_action_auteur('purger', 'cache', 'accueil', '', true); redirige_par_entete($res); } } }
/** * Se deloger * Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton fourni * avec un autosubmit js pour ne pas compliquer l'experience utilisateur * * Déconnecte l'utilisateur en cours et le redirige sur l'URL indiquée par * l'argument de l'action sécurisée, et sinon sur la page d'accueil * de l'espace public. * */ function action_logout_dist() { $logout = _request('logout'); $url = securiser_redirect_action(_request('url')); // cas particulier, logout dans l'espace public if ($logout == 'public' and !$url) { $url = url_de_base(); } // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee) if (isset($GLOBALS['visiteur_session']['id_auteur']) and is_numeric($GLOBALS['visiteur_session']['id_auteur']) and isset($GLOBALS['visiteur_session']['statut'])) { // il faut un jeton pour fermer la session (eviter les CSRF) if (!($jeton = _request('jeton')) or !verifier_jeton_logout($jeton, $GLOBALS['visiteur_session'])) { $jeton = generer_jeton_logout($GLOBALS['visiteur_session']); $action = generer_url_action("logout", "jeton={$jeton}"); $action = parametre_url($action, 'logout', _request('logout')); $action = parametre_url($action, 'url', _request('url')); include_spip("inc/minipres"); include_spip("inc/filtres"); $texte = bouton_action(_T('spip:icone_deconnecter'), $action); $texte = "<div class='boutons'>{$texte}</div>"; $texte .= '<script type="text/javascript">document.write("<style>body{visibility:hidden;}</style>");window.document.forms[0].submit();</script>'; $res = minipres(_T('spip:icone_deconnecter'), $texte, '', true); echo $res; return; } include_spip('inc/auth'); auth_trace($GLOBALS['visiteur_session'], '0000-00-00 00:00:00'); // le logout explicite vaut destruction de toutes les sessions if (isset($_COOKIE['spip_session'])) { $session = charger_fonction('session', 'inc'); $session($GLOBALS['visiteur_session']['id_auteur']); spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600); } // si authentification http, et que la personne est loge, // pour se deconnecter, il faut proposer un nouveau formulaire de connexion http if (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http'] and $GLOBALS['auth_can_disconnect']) { ask_php_auth(_T('login_deconnexion_ok'), _T('login_verifiez_navigateur'), _T('login_retour_public'), "redirect=" . _DIR_RESTREINT_ABS, _T('login_test_navigateur'), true); } } // Rediriger en contrant le cache navigateur (Safari3) include_spip('inc/headers'); redirige_par_entete($url ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login')); }