/** * 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 install_debut_html($titre = 'AUTO', $onLoad = '') { global $spip_lang_right,$spip_lang_left; utiliser_langue_visiteur(); http_no_cache(); if ($titre=='AUTO') $titre=_T('info_installation_systeme_publication'); # le charset est en utf-8, pour recuperer le nom comme il faut # lors de l'installation if (!headers_sent()) header('Content-Type: text/html; charset=utf-8'); // au cas ou minipres() est appele avant spip_initialisation_suite() if (!defined('_DOCTYPE_ECRIRE')) define('_DOCTYPE_ECRIRE', ''); return _DOCTYPE_ECRIRE. html_lang_attributes(). "<head>\n". "<title>". textebrut($titre). "</title> <link rel='stylesheet' href='".direction_css(find_in_path('minipres.css')). "' type='text/css' media='all' />\n" . // cet appel permet d'assurer un copier-coller du nom du repertoire a creer dans tmp (esj) http_script('', "spip_barre.js") . "</head> <body".$onLoad." class='minipres'> <div id='minipres'> <h1>". $titre . "</h1> <div>\n"; }
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 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; }
/** * On charge la config de l'outil et les valeurs d'erreurs renvoyees */ function devdebug_charger_debug(){ // On renvoie direct si pas defini if(!defined('_DEVDEBUG_MODE')) return; // Sinon, on traite if(_DEVDEBUG_MODE==1){ $prive = function_exists('test_espace_prive') ?test_espace_prive() // compatibilite pour SPIP 1.92 :(defined('_DIR_RESTREINT') ? !_DIR_RESTREINT : false); // Les liens d'erreur generes par PHP renvoient ... en local ! dans le php.ini standard // On les definit du type 'http://fr.php.net/manual/en/ %s .php' (necessite une connexion) $devdebug_langues_phpdoc = array('en','fr','de','ja','pl','ro','fa','es','tr'); if(function_exists('utiliser_langue_visiteur')) utiliser_langue_visiteur(); $lang = (isset($GLOBALS['spip_lang']) && in_array($GLOBALS['spip_lang'], $devdebug_langues_phpdoc)) ? $GLOBALS['spip_lang'] : 'fr'; @ini_set('docref_root', "http://www.php.net/manual/".$lang."/"); @ini_set('docref_ext', '.php'); // On lance le php error tracking quoiqu'il arrive @ini_set('track_errors',1); // On evite d'afficher les erreurs repetees @ini_set('ignore_repeated_errors',1); // Compatibilite PHP (recup de 'inc_version', mais qui le definit trop tard) @define('E_DEPRECATED',8192); // PHP 5.3 // Et let's go $niveau = 'E_WARNING'; if(defined('_DEVDEBUG_NIVEAU')) switch(_DEVDEBUG_NIVEAU) { case 'warning' : $niveau = "E_ALL ^ E_NOTICE"; break; case 'error' : $niveau = "E_ALL ^ (E_NOTICE | E_WARNING)"; break; case 'strict' : $niveau = "-1"; break; case 'all' : $niveau = "E_ALL | E_DEPRECATED"; break; case 'user' : $niveau = "E_USER_NOTICE | E_USER_WARNING | E_USER_ERROR"; break; case 'notice' : default : $niveau = "E_ALL"; break; } if(defined('_DEVDEBUG_ESPACE')) switch(_DEVDEBUG_ESPACE) { case 'public' : if(!$prive) { @ini_set('display_errors',1); eval("error_reporting($niveau);"); } else @ini_set('display_errors',0); break; case 'prive' : if($prive) { @ini_set('display_errors',1); eval("error_reporting($niveau);"); } else @ini_set('display_errors',0); break; default : @ini_set('display_errors',1); eval("error_reporting($niveau);"); } } elseif(_DEVDEBUG_MODE==0) @ini_set('display_errors',0); }
/** * Affiche l'étape 0 d'installation : écran d'accueil. * * @uses info_copyright() **/ function install_etape__dist() { utiliser_langue_visiteur(); $menu_langues = menu_langues('var_lang_ecrire'); if (!$menu_langues) { redirige_url_ecrire('install', "etape=chmod"); } else { include_spip('inc/presentation'); // pour info_copyright $res = "<div class='petit-centre'><img alt='SPIP' src='" . chemin_image('logo-spip2.gif') . "' />\n" . "<p class='small'>" . info_copyright() . "</p></div>\n" . "<p>" . _T('install_select_langue') . "</p>" . "<div>" . $menu_langues . "</div>\n" . generer_form_ecrire('install', "<input type='hidden' name='etape' value='chmod' />" . bouton_suivant()); echo minipres('AUTO', $res); } }
/** * http://doc.spip.org/@install_debut_html * * @param string $titre * @param string $onLoad * @param bool $all_inline * inliner les css et js dans la page (limiter le nombre de hits) * @return string */ function install_debut_html($titre = 'AUTO', $onLoad = '', $all_inline = false) { global $spip_lang_right, $spip_lang_left; utiliser_langue_visiteur(); http_no_cache(); if ($titre == 'AUTO') { $titre = _T('info_installation_systeme_publication'); } # le charset est en utf-8, pour recuperer le nom comme il faut # lors de l'installation if (!headers_sent()) { header('Content-Type: text/html; charset=utf-8'); } $css = ""; $files = array('reset.css', 'clear.css', 'minipres.css'); if ($all_inline) { // inliner les CSS (optimisation de la page minipres qui passe en un seul hit a la demande) foreach ($files as $name) { $file = direction_css(find_in_theme($name)); if (function_exists("compacte")) { $file = compacte($file); } else { $file = url_absolue_css($file); } // precaution lire_fichier($file, $c); $css .= $c; } $css = "<style type='text/css'>" . $css . "</style>"; } else { foreach ($files as $name) { $file = direction_css(find_in_theme($name)); $css .= "<link rel='stylesheet' href='{$file}' type='text/css' />\n"; } } // au cas ou minipres() est appele avant spip_initialisation_suite() if (!defined('_DOCTYPE_ECRIRE')) { define('_DOCTYPE_ECRIRE', ''); } return _DOCTYPE_ECRIRE . html_lang_attributes() . "<head>\n" . "<title>" . textebrut($titre) . "</title>\n" . "<meta name='viewport' content='width=device-width' />\n" . $css . "</head>\n<body" . $onLoad . " class='minipres'>\n\t<div id='minipres'>\n\t<h1>" . $titre . "</h1>\n\t<div>\n"; }
function formulaires_configurer_langue_traiter_dist() { $res = array('editable' => true); if ($lang = _request('changer_langue_site')) { include_spip('inc/lang'); // verif que la langue demandee est licite if (changer_langue($lang)) { ecrire_meta('langue_site', $lang); // le test a defait ca: utiliser_langue_visiteur(); $res['message_ok'] = _T('config_info_enregistree'); include_spip('inc/rubriques'); calculer_langues_rubriques(); } // le test a defait ca: utiliser_langue_visiteur(); } if (!$res['message_ok']) { $res['message_erreur'] = _L('erreur'); } return $res; }
function action_export_all_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); @list(, , $archive, $rub) = explode(',', $arg); $meta = base_dump_meta_name($rub); $file = ramasse_parties($rub, $archive, $meta); $size = !$file ? 0 : @(!file_exists($file) ? 0 : filesize($file)); $metatable = $meta . '_tables'; $tables = isset($GLOBALS['meta'][$metatable])?unserialize($GLOBALS['meta'][$metatable]):array(); effacer_meta($metatable); effacer_meta($meta); utiliser_langue_visiteur(); if (!$size) $corps = _T('avis_erreur_sauvegarde', array('type'=>'.', 'id_objet'=>'. .')); else { $corps = export_all_report_size($file, $rub, $size, generer_url_ecrire()) . export_all_report_tables($tables); } include_spip('inc/minipres'); echo minipres(_T('info_sauvegarde'), $corps); }
function verifier_visiteur() { // Rq: pour que cette fonction marche depuis mes_options // il faut forcer l'init si ce n'est fait // mais on risque de perturber des plugins en initialisant trop tot // certaines constantes @spip_initialisation_core(_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES, _DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES, _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES, _DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES); // Demarrer une session NON AUTHENTIFIEE si on donne son nom // dans un formulaire sans login (ex: #FORMULAIRE_FORUM) // Attention on separe bien session_nom et nom, pour eviter // les melanges entre donnees SQL et variables plus aleatoires $variables_session = array('session_nom', 'session_email'); foreach ($variables_session as $var) { if (_request($var) !== null) { $init = true; break; } } if (isset($init)) { #@spip_initialisation_suite(); $session = charger_fonction('session', 'inc'); $session(); include_spip('inc/texte'); foreach ($variables_session as $var) { if (($a = _request($var)) !== null) { $GLOBALS['visiteur_session'][$var] = safehtml($a); } } if (!isset($GLOBALS['visiteur_session']['id_auteur'])) { $GLOBALS['visiteur_session']['id_auteur'] = 0; } $session($GLOBALS['visiteur_session']); return 0; } $h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']); if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) { $session = charger_fonction('session', 'inc'); if ($session()) { return $GLOBALS['visiteur_session']['statut']; } if ($h and isset($_SERVER['PHP_AUTH_PW'])) { include_spip('inc/auth'); $h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); } if ($h) { $GLOBALS['visiteur_session'] = $h; return $GLOBALS['visiteur_session']['statut']; } } // au moins son navigateur nous dit la langue preferee de cet inconnu include_spip('inc/lang'); utiliser_langue_visiteur(); return false; }
// charger systematiquement inc/autoriser dans l'espace restreint if (test_espace_prive()) { include_spip('inc/autoriser'); } // // Installer Spip si pas installe... sauf si justement on est en train // if (!(_FILE_CONNECT or autoriser_sans_cookie(_request('exec')) or _request('action') == 'cookie' or _request('action') == 'converser' or _request('action') == 'test_dirs')) { // Si on peut installer, on lance illico if (test_espace_prive()) { include_spip('inc/headers'); redirige_url_ecrire("install"); } else { // Si on est dans le site public, dire que qq s'en occupe include_spip('inc/minipres'); utiliser_langue_visiteur(); echo minipres(_T('info_travaux_titre'), "<p style='text-align: center;'>" . _T('info_travaux_texte') . "</p>"); exit; } // autrement c'est une install ad hoc (spikini...), on sait pas faire } // memoriser un tri sessionne eventuel if (isset($_REQUEST['var_memotri']) and $t = $_REQUEST['var_memotri'] and (strncmp($t, 'trisession', 10) == 0 or strncmp($t, 'senssession', 11) == 0)) { if (!function_exists('session_set')) { include_spip('inc/session'); } session_set($t, _request($t)); } /** * Header "Composed-By" *
function liste_plugin_valides($liste_plug, $force = false){ $liste = array(); $ordre = array(); $infos = array(); // lister les extensions qui sont automatiquement actives $liste_extensions = liste_plugin_files(_DIR_EXTENSIONS); $listes = array( '_DIR_EXTENSIONS'=>$liste_extensions, '_DIR_PLUGINS'=>$liste_plug ); // creer une premiere liste non ordonnee mais qui ne retient // que les plugins valides, et dans leur derniere version en cas de doublon $liste_non_classee = array(); $get_infos = charger_fonction('get_infos','plugins'); foreach($listes as $dir_type=>$l){ foreach($l as $k=>$plug) { // renseigner ce plugin $infos[$dir_type][$plug] = $get_infos($plug,$force,constant($dir_type)); // si il n'y a pas d'erreur if ($infos[$dir_type][$plug] AND !isset($infos[$dir_type][$plug]['erreur'])) { // regarder si on a pas deja selectionne le meme plugin dans une autre version $version = isset($infos[$dir_type][$plug]['version'])?$infos[$dir_type][$plug]['version']:NULL; if (isset($liste_non_classee[$p=strtoupper($infos[$dir_type][$plug]['prefix'])])){ // prendre le plus recent if (spip_version_compare($version,$liste_non_classee[$p]['version'],'>')) unset($liste_non_classee[$p]); else{ continue; } } // ok, le memoriser $liste_non_classee[$p] = array( 'nom' => $infos[$dir_type][$plug]['nom'], 'etat' => $infos[$dir_type][$plug]['etat'], 'dir_type' => $dir_type, // extensions ou plugins 'dir'=>$plug, 'version'=>isset($infos[$dir_type][$plug]['version'])?$infos[$dir_type][$plug]['version']:NULL ); } } } // il y a des plugins a trier if (is_array($liste_non_classee)){ // pour tester utilise, il faut connaitre tous les plugins // qui seront forcement pas la a la fin, // car absent de la liste des plugins actifs $toute_la_liste = $liste_non_classee; // construire une liste ordonnee des plugins $count = 0; while ($c=count($liste_non_classee) AND $c!=$count){ // tant qu'il reste des plugins a classer, et qu'on ne stagne pas #echo "tour::";var_dump($liste_non_classee); $count = $c; foreach($liste_non_classee as $p=>$resume) { $plug = $resume['dir']; $dir_type = $resume['dir_type']; // si des plugins sont necessaire, on ne peut inserer qu'apres eux $necessite_ok = !erreur_necessite($infos[$dir_type][$plug]['necessite'], $liste); // si des plugins sont utiles, on ne peut inserer qu'apres eux, // sauf si ils sont de toute facon absents de la liste $utilise_ok = true; // tous les plugins "utilise" absents $nb_utilise_absents_toleres = count(erreur_necessite($infos[$dir_type][$plug]['utilise'], $toute_la_liste)); // tous les plugins "utilise" absents de la liste deja trie $nb_utilise_absents_tries = count(erreur_necessite($infos[$dir_type][$plug]['utilise'], $liste)); if (abs($nb_utilise_absents_tries - $nb_utilise_absents_toleres) > 0) { $utilise_ok = false; } if ($necessite_ok AND $utilise_ok){ $liste[$p] = $liste_non_classee[$p]; $ordre[] = $p; unset($liste_non_classee[$p]); } } } if (count($liste_non_classee)) { include_spip('inc/lang'); utiliser_langue_visiteur(); $erreurs = ""; foreach($liste_non_classee as $p=>$resume){ $plug = $resume['dir']; $dir_type = $resume['dir_type']; if ($n = erreur_necessite($infos[$dir_type][$plug]['necessite'], $liste)){ $erreurs .= "<li>" . _T('plugin_impossible_activer', array('plugin' => constant($dir_type). $plug) ) . "<ul><li>" . implode("</li><li>", $n) . "</li></ul></li>"; } else { // dependance circulaire, ou utilise qu'on peut ignorer ? // dans le doute on fait une erreur quand meme // plutot que d'inserer silencieusement et de risquer un bug sournois latent $necessite = erreur_necessite($infos[$dir_type][$plug]['utilise'], $liste); $erreurs .= "<li>" . _T('plugin_impossible_activer', array('plugin' => constant($dir_type). $plug) ) . "<ul><li>" . implode("</li><li>", $necessite) . "</li></ul></li>"; } } ecrire_meta('plugin_erreur_activation', "<ul>$erreurs</ul>"); } } return array($liste,$ordre,$infos); }
function appliquer_modifs_config($purger_skel=false) { if (($i = _request('adresse_site'))!==NULL){ if (!strlen($i)) {$GLOBALS['profondeur_url']=_DIR_RESTREINT?0:1;$i = url_de_base();} $_POST['adresse_site'] = preg_replace(",/?\s*$,", "", $i); } // provoquer l'envoi des nouveautes en supprimant le fichier lock if (_request('envoi_now')) { spip_unlink(_DIR_TMP . 'mail.lock'); } // Purger les squelettes si un changement de meta les affecte if ($i = _request('post_dates') AND ($i != $GLOBALS['meta']["post_dates"])) $purger_skel = true; if ($accepter_forum = _request('forums_publics') AND ($accepter_forum != $GLOBALS['meta']["forums_publics"])) { $purger_skel = true; $accepter_forum = substr($accepter_forum,0,3); } // Appliquer les changements de moderation forum // forums_publics_appliquer : futur, saufnon, tous if (in_array($appliquer = _request('forums_publics_appliquer'), array('tous', 'saufnon') )) { $sauf = ($appliquer == 'saufnon') ? "accepter_forum != 'non'" : ''; sql_updateq('spip_articles', array('accepter_forum'=>$accepter_forum), $sauf); } if ($accepter_forum == 'abo') ecrire_meta('accepter_visiteurs', 'oui'); if ($i = _request('langues_auth') AND is_array($i)) { set_request('langues_multilingue', join($i, ",")); } // Modification du reglage accepter_inscriptions => vider le cache // (pour repercuter la modif sur le panneau de login) if (($i = _request('accepter_inscriptions') AND $i != $GLOBALS['meta']['accepter_inscriptions']) OR ($i = _request('accepter_visiteurs') AND $i != $GLOBALS['meta']['accepter_visiteurs'])) { include_spip('inc/invalideur'); suivre_invalideur("1"); # tout effacer } foreach(liste_metas() as $i => $v) { if (($x =_request($i))!==NULL) ecrire_meta($i, $x); elseif (!isset($GLOBALS['meta'][$i])) ecrire_meta($i, $v); } if ($lang = _request('changer_langue_site')) { include_spip('inc/lang'); // verif que la langue demandee est licite if (changer_langue($lang)) { ecrire_meta('langue_site', $lang); } // le test a defait ca: utiliser_langue_visiteur(); } if ($purger_skel) { include_spip('inc/invalideur'); purger_repertoire(_DIR_SKELS); } }