Ejemplo n.º 1
0
/**
 * 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();
    }
}
Ejemplo n.º 2
0
/**
 * 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();
    }
}
Ejemplo n.º 3
0
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";
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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('&amp;', '&', $url);
            // les redirections se font en &, pas en en &amp;
            redirige_par_entete($url);
        }
        if (!headers_sent() and !ob_get_length()) {
            http_status(204);
        }
        // No Content
        return true;
    }
    return false;
}
Ejemplo n.º 6
0
/**
 * 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);
}
Ejemplo n.º 7
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);
    }
}
Ejemplo n.º 8
0
/**
 * 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";
}
Ejemplo n.º 9
0
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;
}
Ejemplo n.º 10
0
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);
}
Ejemplo n.º 11
0
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;
}
Ejemplo n.º 12
0
// 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"
 *
Ejemplo n.º 13
0
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);
}
Ejemplo n.º 14
0
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);
	}
}