Exemplo n.º 1
0
function formulaires_configurer_preferences_traiter_dist()
{
    if ($couleur = _request('couleur')) {
        $GLOBALS['visiteur_session']['prefs']['couleur'] = $couleur;
    }
    if ($display = _request('display')) {
        $GLOBALS['visiteur_session']['prefs']['display'] = $display;
    }
    if ($display_navigation = _request('display_navigation')) {
        $GLOBALS['visiteur_session']['prefs']['display_navigation'] = $display_navigation;
    }
    if (!is_null($display_outils = _request('display_outils'))) {
        $GLOBALS['visiteur_session']['prefs']['display_outils'] = $display_outils;
    }
    if (intval($GLOBALS['visiteur_session']['id_auteur'])) {
        include_spip('action/editer_auteur');
        $c = array('prefs' => serialize($GLOBALS['visiteur_session']['prefs']));
        if (_request('imessage')) {
            $c['imessage'] = _request('imessage');
        }
        auteur_modifier($GLOBALS['visiteur_session']['id_auteur'], $c);
    }
    if ($spip_ecran = _request('spip_ecran')) {
        // Poser un cookie,
        // car ce reglage depend plus du navigateur que de l'utilisateur
        $GLOBALS['spip_ecran'] = $spip_ecran;
        include_spip('inc/cookie');
        spip_setcookie('spip_ecran', $_COOKIE['spip_ecran'] = $spip_ecran, time() + 365 * 24 * 3600);
    }
    return array('message_ok' => _T('config_info_enregistree'), 'editable' => true);
}
function action_zengarden_activer_theme_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $arg = $securiser_action();
    if (strncmp('defaut:', $arg, 7) == 0) {
        $dir_theme = _DIR_RACINE . substr($arg, 7);
        $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'effacer'), 'data' => true));
        if ($flux) {
            include_spip('inc/meta');
            effacer_meta("zengarden_theme");
        }
    } elseif (strncmp('apercu:', $arg, 7) == 0) {
        $theme = substr($arg, 7);
        $dir_theme = _DIR_RACINE . $theme;
        if (is_dir($dir_theme)) {
            $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'apercevoir'), 'data' => true));
            if ($flux) {
                include_spip('inc/cookie');
                spip_setcookie('spip_zengarden_theme', $theme);
            }
        }
    } elseif (strncmp('activation:', $arg, 11) == 0) {
        $theme = substr($arg, 11);
        $dir_theme = _DIR_RACINE . $theme;
        if (is_dir($dir_theme)) {
            $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'activer'), 'data' => true));
            if ($flux) {
                include_spip('inc/meta');
                ecrire_meta("zengarden_theme", $theme);
            }
        }
    }
}
Exemplo n.º 3
0
/**
 * 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'));
}
Exemplo n.º 4
0
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'));
}
Exemplo n.º 5
0
function action_converser_post($lang, $ecrire=false)
{
	if ($lang) {
		include_spip('inc/lang');
		if (changer_langue($lang)) {
			spip_setcookie('spip_lang', $_COOKIE['spip_lang'] = $lang, time() + 365 * 24 * 3600);
			if ($ecrire)
				spip_setcookie('spip_lang_ecrire', $_COOKIE['spip_lang_ecrire'] = $lang, time() + 365 * 24 * 3600);
		}
	}
}
Exemplo n.º 6
0
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;
	}
}
Exemplo n.º 7
0
Arquivo: logout.php Projeto: JLuc/SPIP
/**
 * 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'));
}
Exemplo n.º 8
0
function action_preferer_dist()
{
    //
    // Preferences de presentation de l'espace prive
    //
    if ($_GET['arg'] !== 'display:4') {
        $securiser_action = charger_fonction('securiser_action', 'inc');
        $arg = $securiser_action();
    } else {
        $arg = $_GET['arg'];
    }
    if (!preg_match(",^(.+):(.*)\$,", $arg, $r)) {
        spip_log("action_preferer_dist: {$arg} pas compris");
    } else {
        $prefs_mod = false;
        list(, $op, $val) = $r;
        if ($op == 'couleur') {
            $GLOBALS['visiteur_session']['prefs']['couleur'] = $val;
            $prefs_mod = true;
        } elseif ($op == 'display') {
            $GLOBALS['visiteur_session']['prefs']['display'] = $val;
            $prefs_mod = true;
        } elseif ($op == 'display_outils') {
            $GLOBALS['visiteur_session']['prefs']['display_outils'] = $val;
            $prefs_mod = true;
        }
        if ($prefs_mod and intval($GLOBALS['visiteur_session']['id_auteur'])) {
            sql_updateq('spip_auteurs', array('prefs' => serialize($GLOBALS['visiteur_session']['prefs'])), "id_auteur=" . intval($GLOBALS['visiteur_session']['id_auteur']));
        }
        if ($op == 'spip_ecran') {
            // Poser un cookie,
            // car ce reglage depend plus du navigateur que de l'utilisateur
            $GLOBALS['spip_ecran'] = $val;
            include_spip('inc/cookie');
            spip_setcookie('spip_ecran', $val, time() + 365 * 24 * 3600);
        }
        // Si modif des couleurs en ajax, redirect inutile on a change de CSS
        if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
            exit;
        }
    }
}
function balise_LANGUE_PREFEREE_LIEN_EFFACE_COOKIE_dyn($texte = '')
{
	if ($texte == '') {
		$texte = _T('languepreferee:efface_cookie');
	}

	include_spip('inc/meta');
	$lien = '';
	if (isset($_COOKIE['spip_langue_preferee']) && $_COOKIE['spip_langue_preferee'] != '') {
		if (isset($_GET['var_langue_preferee_efface_cookie'])) {
			include_spip('inc/cookie');
			spip_setcookie('spip_langue_preferee', '', time() - 3600*24*10, chemin_cookie());
		} else {
			$url = preg_replace("/([?&])var_langue_preferee_efface_cookie=[^&]+(&)?/", "$1", self());
			$url .= (strpos($url, '?') > 0 ? '&amp;' : '?').'var_langue_preferee_efface_cookie=oui';
			$lien = '<a href="'.$url.'">'.$texte.'</a>';
		}
	}
	return $lien;
}
Exemplo n.º 10
0
function formulaires_login_verifier_dist($cible = "", $login = "", $prive = null)
{
    $session_login = _request('var_login');
    $session_password = _request('password');
    $session_remember = _request('session_remember');
    if (!$session_login) {
        # pas de login saisi !
        return array('var_login' => _T('info_obligatoire'));
    }
    // appeler auth_identifier_login qui va :
    // - renvoyer un string si echec (message d'erreur)
    // - un array decrivant l'auteur identifie si possible
    // - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification
    include_spip('inc/auth');
    $auteur = auth_identifier_login($session_login, $session_password);
    // on arrive ici si on ne s'est pas identifie avec un SSO
    if (!is_array($auteur)) {
        $erreurs = array();
        if (is_string($auteur)) {
            $erreurs['var_login'] = $auteur;
        }
        include_spip('inc/cookie');
        spip_setcookie("spip_admin", "", time() - 3600);
        if (strlen($session_password)) {
            $erreurs['password'] = _T('login_erreur_pass');
        } else {
            $erreurs['password'] = '******';
        }
        return $erreurs;
    }
    // on a ete authentifie, construire la session
    // en gerant la duree demandee pour son cookie
    if ($session_remember !== NULL) {
        $auteur['cookie'] = $session_remember;
    }
    auth_loger($auteur);
    return is_null($prive) ? is_url_prive($cible) : $prive ? login_autoriser() : array();
}
function balise_LANGUE_PREFEREE_SECTEUR_REDIRECTION_dyn($liste_rub_exclues="")
{
	include_spip('inc/meta');

	// Recuperation des langues des secteurs
	$langues_secteurs = array();
	include_spip('base/abstract_sql');
	$query = 'SELECT DISTINCT(lang) FROM spip_rubriques WHERE id_parent=0 AND statut="publie" GROUP BY lang';
	if ($res = sql_query($query)) { // was spip_query($query)) {
		while($row = sql_fetch($res)) { // was spip_fetch_array
			$langues_secteurs[] = $row['lang'];
		}
	}
	// Détection de la langue preferee
	if (isset($_GET['lang']) && in_array($_GET['lang'], $langues_secteurs)) {
		// Soit passee dans l'url, auquel cas c'est un choix qu'on conserve pour la suite
		$langue_preferee = $_GET['lang'];
		include_spip('inc/cookie');
		// On pose un cookie d'un an de duree de vie
		spip_setcookie('spip_langue_preferee', $langue_preferee, time() + 3660*24*365, chemin_cookie());
	} elseif(isset($_COOKIE['spip_lang']) && in_array($_COOKIE['spip_lang'], $langues_secteurs)){
		//Soit un cookie lang est présent
		$langue_preferee = $_COOKIE['spip_lang'];
		include_spip('inc/cookie');
		// On pose un cookie d'un an de duree de vie
		spip_setcookie('spip_langue_preferee', $langue_preferee, time() + 3660*24*365, chemin_cookie());
	}elseif (isset($_COOKIE['spip_langue_preferee']) && in_array($_COOKIE['spip_langue_preferee'], $langues_secteurs)) {
		// Soit deja enregistree dans un cookie
		$langue_preferee = $_COOKIE['spip_langue_preferee'];
	} else {
		// Soit indeterminee
		$langues_navigateur = getenv('HTTP_ACCEPT_LANGUAGE');
		// On supprime les taux de pertinence des langues acceptees
		$langues_navigateur = preg_replace("/;q=[.0-9]+(,)?/", "$1", $langues_navigateur);
		$langues_navigateur = explode(',', $langues_navigateur);
		// Quelles sont les langues acceptees disponibles dans les secteurs
		$langues_possibles = array_intersect($langues_navigateur, $langues_secteurs);
		if (count($langues_possibles)) {
			list(, $langue_preferee) = each($langues_possibles);
		} else {
			// fr-ca -> fr
			$langues_navigateur_reduites = array();
			foreach($langues_navigateur as $langue) {
				$langue_reduite = substr($langue, 0, 2);
				if (!in_array($langue_reduite, $langues_navigateur_reduites)) {
					$langues_navigateur_reduites[] = $langue_reduite;
				}
			}
			// Quelles sont les langues acceptees reduites disponibles dans les secteurs
			$langues_reduites_possibles = array_intersect($langues_navigateur_reduites, $langues_secteurs);
			if (count($langues_reduites_possibles)) {
				list(, $langue_preferee) = each($langues_reduites_possibles);
			} elseif (in_array(lire_meta('langue_site'), $langues_secteurs)) {
				// Quelle est alors la langue par defaut du site
				$langue_preferee = lire_meta('langue_site');
			} else {
				// Tant pis, on prend le premier secteur qui vient...
				list(, $langue_preferee) = each($langues_secteurs);
			}
		}
	}

	// On recupere l'id du premier secteur trouve correspondant a la langue preferee (tant pis s'il y en a plusieurs)
	if (!empty($liste_rub_exclues)) {
		$query='SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND lang='._q($langue_preferee).' AND id_rubrique NOT IN ('.$liste_rub_exclues.') LIMIT 0,1';
	} else {
		$query = 'SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND lang='._q($langue_preferee).' LIMIT 0,1';
	}
	$res = sql_query($query) ; // was spip_query($query);
	if ($row = sql_fetch($res)) { // was spip_fetch_array
		$id_rubrique = $row['id_rubrique'];
		if ( $GLOBALS['spip_version_code']<1.93) { // spip 1.9.x
			if (!function_exists('generer_url_rubrique')) { include_spip('urls/'.$GLOBALS['type_urls']); }
			$url_rubrique = generer_url_rubrique($id_rubrique);
		} else { // spip 2.x
			if (!function_exists('generer_url_entite')) { include_spip('inc/utils'); }
			$url_rubrique = generer_url_entite($id_rubrique,'rubrique');
		}
		spip_log('Redirection vers '.$url_rubrique);
		header('Location: '.$url_rubrique);
		exit;
	}
}
Exemplo n.º 12
0
 *
 */
if (!defined("_ECRIRE_INC_VERSION")) {
    return;
}
// definition des balises et filtres boites
include_spip('inc/filtres_boites');
// verifier une seule fois que l'on peut utiliser APL si demande
if (defined('_Z_AJAX_PARALLEL_LOAD')) {
    // les pages APL contiennent un <noscript>
    // avec une meta refresh sur self()+var_zapl=non
    // ainsi, les clients sans javascript rechargent la page,
    // se voient poser un cookie, et voient ensuite le site sans APL
    if (_request('var_zapl') == 'non') {
        include_spip('inc/cookie');
        spip_setcookie('no_zapl', $_COOKIE['no_zapl'] = 'no_zapl');
    }
    if (!isset($_COOKIE['no_zapl']) and !_IS_BOT and !_request('var_zajax') and _request('var_mode') !== "debug" and $_SERVER['REQUEST_METHOD'] == 'GET') {
        define('_Z_AJAX_PARALLEL_LOAD_OK', true);
        $GLOBALS['marqueur'] = isset($GLOBALS['marqueur']) ? $GLOBALS['marqueur'] . ":Zapl" : ":Zapl";
    }
}
/**
 * Inutilise mais permet le chargement de ce fichier avant le decodage des urls
 * et l'utilisation de _DEFINIR_CONTEXTE_TYPE
 *
 * @param  <type> $flux
 *
 * @return <type>
 */
function zcore_declarer_url_objets($flux)
Exemplo n.º 13
0
/**
 * Ajoute une session pour l'auteur décrit par un tableau issu d'un SELECT-SQL
 *
 * @param array $auteur
 *     Description de la session de l'auteur. Peut contenir (par exemple)
 *     les clés : id_auteur, nom, login, email, statut, lang, ...
 * @return bool|string
 */
function ajouter_session($auteur)
{
    // Si le client a deja une session valide pour son id_auteur
    // on conserve le meme fichier
    // Attention un visiteur peut avoir une session et un id=0,
    // => ne pas melanger les sessions des differents visiteurs
    $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0;
    // Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session)
    // on va vérifier s'il y a vraiment des choses à écrire
    if (!$id_auteur) {
        // On supprime les données de base pour voir le contenu réel de la session
        $auteur_verif = $auteur;
        if (isset($auteur_verif['id_auteur'])) {
            unset($auteur_verif['id_auteur']);
        }
        if (isset($auteur_verif['hash_env'])) {
            unset($auteur_verif['hash_env']);
        }
        if (isset($auteur_verif['ip_change'])) {
            unset($auteur_verif['ip_change']);
        }
        if (isset($auteur_verif['date_session'])) {
            unset($auteur_verif['date_session']);
        }
        // Les variables vraiment nulle ne sont pas à prendre en compte non plus
        foreach ($auteur_verif as $variable => $valeur) {
            if ($valeur === null) {
                unset($auteur_verif[$variable]);
            }
        }
        // Si après ça la session est vide alors on supprime l'éventuel fichier et on arrête là
        if (!$auteur_verif) {
            if (isset($_COOKIE['spip_session']) and isset($_SESSION[$_COOKIE['spip_session']])) {
                unset($_SESSION[$_COOKIE['spip_session']]);
            }
            if (isset($_COOKIE['spip_session'])) {
                unset($_COOKIE['spip_session']);
            }
            return false;
        }
    }
    if (!isset($_COOKIE['spip_session']) or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session'])) {
        $_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true));
    }
    // Maintenant on sait qu'on a des choses à écrire
    // On s'assure d'avoir au moins ces valeurs
    $auteur['id_auteur'] = $id_auteur;
    if (!isset($auteur['hash_env'])) {
        $auteur['hash_env'] = hash_env();
    }
    if (!isset($auteur['ip_change'])) {
        $auteur['ip_change'] = false;
    }
    if (!isset($auteur['date_session'])) {
        $auteur['date_session'] = time();
    }
    if (isset($auteur['prefs']) and is_string($auteur['prefs'])) {
        $auteur['prefs'] = unserialize($auteur['prefs']);
    }
    // les sessions anonymes sont stockees dans $_SESSION
    if (!$id_auteur) {
        if (!isset($_SESSION[$_COOKIE['spip_session']])) {
            session_start();
        }
        $_SESSION[$_COOKIE['spip_session']] = preparer_ecriture_session($auteur);
    } else {
        $fichier_session = fichier_session('alea_ephemere');
        if (!ecrire_fichier_session($fichier_session, $auteur)) {
            spip_log('Echec ecriture fichier session ' . $fichier_session, "session" . _LOG_HS);
            include_spip('inc/minipres');
            echo minipres();
            exit;
        }
    }
    // poser le cookie de session SPIP
    include_spip('inc/cookie');
    $duree = _RENOUVELLE_ALEA * (!isset($auteur['cookie']) ? 2 : (is_numeric($auteur['cookie']) ? $auteur['cookie'] : 20));
    spip_setcookie('spip_session', $_COOKIE['spip_session'], time() + $duree);
    spip_log("ajoute session {$fichier_session} cookie {$duree}", "session");
    # on en profite pour purger les vieilles sessions anonymes abandonnees
    # supprimer_sessions(0, true, false);
    return $_COOKIE['spip_session'];
}
Exemplo n.º 14
0
/**
 * Complements d'initialisation non critiques pouvant etre realises
 * par les plugins
 *
 */
function spip_initialisation_suite() {
	static $too_late = 0;
	if ($too_late++) return;

	// taille mini des login
	if (!defined('_LOGIN_TROP_COURT')) define('_LOGIN_TROP_COURT', 4);

	// la taille maxi des logos (0 : pas de limite)
	if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko
	if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
	if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels

	if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko

	if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko
	if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels
	if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels

	if (!defined('_COPIE_LOCALE_MAX_SIZE')) define('_COPIE_LOCALE_MAX_SIZE',16777216); // poids en octet

	// qq chaines standard
	if (!defined('_ACCESS_FILE_NAME')) define('_ACCESS_FILE_NAME', '.htaccess');
	if (!defined('_AUTH_USER_FILE')) define('_AUTH_USER_FILE', '.htpasswd');
	if (!defined('_SPIP_DUMP')) define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml');
	if (!defined('_CACHE_RUBRIQUES')) define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt');
	if (!defined('_CACHE_RUBRIQUES_MAX')) define('_CACHE_RUBRIQUES_MAX', 500);

	if (!defined('_EXTENSION_SQUELETTES')) define('_EXTENSION_SQUELETTES', 'html');

	if (!defined('_DOCTYPE_ECRIRE')) define('_DOCTYPE_ECRIRE',
		// "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
		//"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n");
		"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n");
	       // "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 //EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n");
	if (!defined('_DOCTYPE_AIDE')) define('_DOCTYPE_AIDE',
	       "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>");

	// L'adresse de base du site ; on peut mettre '' si la racine est geree par
	// le script de l'espace public, alias  index.php
	if (!defined('_SPIP_SCRIPT')) define('_SPIP_SCRIPT', 'spip.php');
	// argument page, personalisable en cas de conflit avec un autre script
	if (!defined('_SPIP_PAGE')) define('_SPIP_PAGE', 'page');

	// le script de l'espace prive
	// Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
	// les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
	// meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html

	if (!defined('_SPIP_ECRIRE_SCRIPT')) define('_SPIP_ECRIRE_SCRIPT', // true ? #decommenter ici et commenter la
	       preg_match(',IIS|thttpd,',$_SERVER['SERVER_SOFTWARE']) ?
	       'index.php' : '');


	// Gestion AJAX sauf pour le mode oo (et en espace prive)

	if (isset($GLOBALS['visiteur_session']['prefs'])AND !_DIR_RESTREINT) {
		$x = $GLOBALS['visiteur_session']['prefs'];
		if (!is_array($x)) $x = unserialize($x); // prive.php l'a fait
		if ($x['display'] == 4) {
			define('_SPIP_AJAX', -1);
			if (isset($_COOKIE['spip_accepte_ajax']))
				spip_setcookie('spip_accepte_ajax', -1, 0);
		}
	}

	if (!defined('_SPIP_AJAX'))
		define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax']))
			? 1
		       : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0)));

	// La requete est-elle en ajax ?
	define('_AJAX',
		(isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery
		OR @$_REQUEST['var_ajax_redir'] # redirection 302 apres ajax jQuery
		OR @$_REQUEST['var_ajaxcharset'] # compat ascendante pour plugins
		)
		AND !@$_REQUEST['var_noajax'] # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient
	);

	# nombre de pixels maxi pour calcul de la vignette avec gd
	# au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
	# les configurations limitees en memoire ont un seuil plutot vers 1MPixel
	if (!defined('_IMG_GD_MAX_PIXELS')) define('_IMG_GD_MAX_PIXELS', (isset($GLOBALS['meta']['max_taille_vignettes'])&&$GLOBALS['meta']['max_taille_vignettes']<5500000)?$GLOBALS['meta']['max_taille_vignettes']:0);
	if (!defined('_IMG_GD_QUALITE')) define('_IMG_GD_QUALITE', 85);

	if (!defined('_MEMORY_LIMIT_MIN')) define('_MEMORY_LIMIT_MIN', 16);
	// si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard)
	// on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
	// il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
	if (test_espace_prive() AND _MEMORY_LIMIT_MIN>8){
		if ($memory = trim(ini_get('memory_limit'))){
			$unit = strtolower(substr($memory,strlen($memory/1),1));
			switch($unit) {
				// Le modifieur 'G' est disponible depuis PHP 5.1.0
				case 'g': $memory *= 1024;
				case 'm': $memory *= 1024;
				case 'k': $memory *= 1024;
			}
			if ($memory<_MEMORY_LIMIT_MIN*1024*1024){
				ini_set('memory_limit',$m=_MEMORY_LIMIT_MIN.'M');
				if (trim(ini_get('memory_limit'))!=$m){
					define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit
				}
			}
		}
		else
			define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit
	}
	// Protocoles a normaliser dans les chaines de langues
	if (!defined('_PROTOCOLES_STD'))
		define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');

	init_var_mode();
}
Exemplo n.º 15
0
        fich_debug("DBG >> $cookie_session\n");
        // On poste le cookie de session
        spip_setcookie('spip_session', $cookie_session);
        // On loge l'authentification
        spip_log("login de $login depuis LCS");
    }
} elseif ( $action=="logout" ) {
    close_session($idpers);
    @define('_DIR_RESTREINT_ABS', 'ecrire/');
    include_once _DIR_RESTREINT_ABS.'inc_version.php';

    include_spip('inc/cookie');
    include_once  _DIR_RESTREINT_ABS.'auth/ldap.php';
    include_spip('inc/session');

    $result = spip_query("SELECT id_auteur FROM spip_auteurs WHERE login='******' AND source='ldap'");
    $row_auteur = spip_fetch_array($result);
    ### DBG
    fich_debug("DBG >> id auteur : ".$row_auteur['id_auteur']."\n");
    supprimer_sessions($row_auteur['id_auteur']);
    spip_setcookie('spip_session', '', 0);
} else fich_debug("DBG >> No login No logout\n");

#On redirige vesr la page d'accueil dans tous les cas
echo "<script language=\"JavaScript\" type=\"text/javascript\">\n";
echo "<!--\n";
echo "top.location.href = '../lcs/index.php?url_redirect=accueil.php';\n";
echo "//-->\n";
echo "</script>\n";
?>
Exemplo n.º 16
0
function action_cookie_dist($set_cookie_admin = null, $change_session = null)
{
    $redirect_echec = $redirect = null;
    $test_echec_cookie = null;
    $url = "";
    if (is_null($set_cookie_admin)) {
        $set_cookie_admin = _request('cookie_admin');
        $change_session = _request('change_session');
        $test_echec_cookie = _request('test_echec_cookie');
        // La cible de notre operation de connexion
        $url = securiser_redirect_action(_request('url'));
        $redirect = $url ? $url : generer_url_ecrire('accueil');
        $redirect_echec = _request('url_echec');
        if (!isset($redirect_echec)) {
            if (strpos($redirect, _DIR_RESTREINT_ABS) !== false) {
                $redirect_echec = generer_url_public('login', '', true);
            } else {
                $redirect_echec = $redirect;
            }
        }
    }
    // rejoue le cookie pour renouveler spip_session
    if ($change_session == 'oui') {
        $session = charger_fonction('session', 'inc');
        $session(true);
        spip_log("statut 204 pour " . $_SERVER['REQUEST_URI']);
        http_status(204);
        // No Content
        return;
    }
    // tentative de connexion en auth_http
    if (_request('essai_auth_http') and !$GLOBALS['ignore_auth_http']) {
        include_spip('inc/auth');
        if (@$_SERVER['PHP_AUTH_USER'] and @$_SERVER['PHP_AUTH_PW'] and $auteur = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
            auth_loger($auteur);
            redirige_par_entete(parametre_url($redirect, 't', time(), '&'));
        } else {
            ask_php_auth(_T('info_connexion_refusee'), _T('login_login_pass_incorrect'), _T('login_retour_site'), "url=" . rawurlencode($redirect), _T('login_nouvelle_tentative'), strpos($url, _DIR_RESTREINT_ABS) !== false);
        }
    } else {
        // en cas de login sur bonjour=oui, on tente de poser un cookie
        // puis de passer au login qui diagnostiquera l'echec de cookie
        // le cas echeant.
        if ($test_echec_cookie == 'oui') {
            spip_setcookie('spip_session', 'test_echec_cookie');
            if ($redirect) {
                $redirect = parametre_url(parametre_url($redirect_echec, 'var_echec_cookie', 'oui', '&'), 'url', rawurlencode($redirect), '&');
            }
        } else {
            $cook = isset($_COOKIE['spip_admin']) ? $_COOKIE['spip_admin'] : '';
            // Suppression cookie d'admin ?
            if ($set_cookie_admin == "non") {
                if ($cook) {
                    spip_setcookie('spip_admin', $cook, time() - 3600 * 24);
                }
            } else {
                if ($set_cookie_admin) {
                    spip_setcookie('spip_admin', $set_cookie_admin, time() + 14 * 24 * 3600);
                }
            }
        }
    }
    // Redirection finale
    if ($redirect) {
        redirige_par_entete($redirect, true);
    }
}
Exemplo n.º 17
0
function ajouter_session($auteur) {
	// Si le client a deja une session valide pour son id_auteur
	// on conserve le meme fichier

	// Attention un visiteur peut avoir une session et un id=0,
	// => ne pas melanger les sessions des differents visiteurs
	$id_auteur = intval($auteur['id_auteur']);
	if (!isset($_COOKIE['spip_session'])
	OR !preg_match(',^'.$id_auteur.'_,', $_COOKIE['spip_session']))
		$_COOKIE['spip_session'] = $id_auteur.'_'.md5(uniqid(rand(),true));

	$fichier_session = fichier_session('alea_ephemere');
	
	// Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session)
	// on verifie qu'il y a vraiment des choses
	if (!$id_auteur){
		// On supprime les basiques pour voir le contenu effectif
		$auteur_verif = $auteur;
		if (isset($auteur_verif['id_auteur'])) unset($auteur_verif['id_auteur']);
		if (isset($auteur_verif['hash_env'])) unset($auteur_verif['hash_env']);
		if (isset($auteur_verif['ip_change'])) unset($auteur_verif['ip_change']);
		
		// Les variables vraiment nulle ne sont pas à prendre en compte non plus
		foreach($auteur_verif as $variable=>$valeur){
			if ($valeur === null){
				unset($auteur_verif[$variable]);
			}
		}
		
		// Si c'est vide alors on supprime et on ne fait rien
		if (!$auteur_verif){
			if (@file_exists($fichier_session)) spip_unlink($fichier_session);
			return false;
		}
	}
	
	// Maintenant on sait qu'il faut memoriser.
	// On s'assure d'avoir au moins ces valeurs
	$auteur['id_auteur'] = $id_auteur;
	if (!isset($auteur['hash_env'])) $auteur['hash_env'] = hash_env();
	if (!isset($auteur['ip_change'])) $auteur['ip_change'] = false;

	if (!ecrire_fichier_session($fichier_session, $auteur)) {
		include_spip('inc/minipres');
		echo minipres();
		exit;
	} else {
		include_spip('inc/cookie');
		$duree = _RENOUVELLE_ALEA *
		  (!isset($auteur['cookie'])
		  	? 2 : (is_numeric($auteur['cookie'])
				? $auteur['cookie'] : 20));
		spip_setcookie(
			'spip_session',
			$_COOKIE['spip_session'],
			time() + $duree
			);
		spip_log("ajoute session $fichier_session cookie $duree");

		// purger au passage les vieux fichiers de session
		supprimer_sessions(-1);

		return $_COOKIE['spip_session'];
	}
}
Exemplo n.º 18
0
 /**
  * Loger un auteur suite a son identification
  *
  * @param array $auteur
  */
 function auth_loger($auteur, $refuse_cookie_admin=false){
	if (!is_array($auteur) OR !count($auteur))
		return false;

	$session = charger_fonction('session', 'inc');
	$session($auteur);
	$p = ($auteur['prefs']) ? unserialize($auteur['prefs']) : array();
	$p['cnx'] = ($auteur['cookie'] == 'oui') ? 'perma' : '';
	$p = array('prefs' => serialize($p));
	sql_updateq('spip_auteurs', $p, "id_auteur=" . $auteur['id_auteur']);

	if ($auteur['statut'] == 'nouveau') {
		$session(); // charger la session car on va la modifier
		$auteur['statut'] = acces_statut($auteur['id_auteur'], $auteur['statut'], $auteur['bio']);
	}

	// Si on est admin, poser le cookie de correspondance
	include_spip('inc/cookie');
	if (!$refuse_cookie_admin AND $auteur['statut'] == '0minirezo') {
		spip_setcookie('spip_admin', '@'.$auteur['login'],
		time() + 7 * 24 * 3600);
	}
	// sinon le supprimer ...
	else {
		spip_setcookie('spip_admin', '',1);
	}

	//  bloquer ici le visiteur qui tente d'abuser de ses droits
	verifier_visiteur();
	return true;
}
Exemplo n.º 19
0
<?php

/*
 * Paiement Bancaire
 * module de paiement bancaire multi prestataires
 * stockage des transactions
 *
 * Auteurs :
 * Cedric Morin, Nursit.com
 * (c) 2012 - Distribue sous licence GNU/GPL
 *
 */
if (!defined('_ECRIRE_INC_VERSION')) {
    return;
}
// verifier qu'on sait poser un cookie
if (!isset($_COOKIE['accept_cookie'])) {
    include_spip('inc/cookie');
    spip_setcookie('accept_cookie', $_COOKIE['accept_cookie'] = 1);
}
if (isset($GLOBALS['meta']['bank_paiement']) and $prestas = unserialize($GLOBALS['meta']['bank_paiement']) and count($prestas = $prestas['presta'])) {
    // initialiser la config de chaque presta actif
    foreach ($prestas as $p => $actif) {
        // TODO ajouter une secu !preg_match(',[\W],',$p) ?
        if ($actif) {
            #_chemin(_DIR_PLUGIN_BANK."presta/$p"); // pour les pages de retour
            include_spip("presta/{$p}/config");
            // pour la config par defaut
        }
    }
}
Exemplo n.º 20
0
if (isset($_GET['set_disp'])) {
	$GLOBALS['prefs']['display'] = floor($_GET['set_disp']);
	$prefs_mod = true;
}
if (isset($_GET['set_options']) AND ($_GET['set_options'] == 'avancees' OR $_GET['set_options'] == 'basiques')) {
	$GLOBALS['prefs']['options'] = $_GET['set_options'];
	$prefs_mod = true;
}
if ($prefs_mod AND !$var_auth)
	spip_query("UPDATE spip_auteurs SET prefs = " . _q(serialize($GLOBALS['prefs'])) . " WHERE id_auteur = " .intval($GLOBALS['auteur_session']['id_auteur']));

if (isset($_GET['set_ecran'])) {
	// Poser un cookie,
	// car ce reglage depend plus du navigateur que de l'utilisateur
	$GLOBALS['spip_ecran'] = $_GET['set_ecran'];
	spip_setcookie('spip_ecran', $GLOBALS['spip_ecran'], time() + 365 * 24 * 3600);
 } else $GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? $_COOKIE['spip_ecran'] : "etroit";


// deux globales (compatibilite ascendante)
$GLOBALS['options']      = $GLOBALS['prefs']['options'];
$GLOBALS['spip_display'] = $GLOBALS['prefs']['display'];
$choix_couleur = $GLOBALS['prefs']['couleur'];
if (!isset($GLOBALS['couleurs_spip'][$choix_couleur])) $choix_couleur = 1;

$GLOBALS['couleur_foncee'] = $GLOBALS['couleurs_spip'][$choix_couleur]['couleur_foncee'];
$GLOBALS['couleur_claire'] = $GLOBALS['couleurs_spip'][$choix_couleur]['couleur_claire'];

// charger l'affichage minimal et initialiser a la langue par defaut
include_spip('inc/minipres');
Exemplo n.º 21
0
function formulaires_login_traiter_dist($cible="",$login="",$prive=null){
	$res = array();
	// Si on se connecte dans l'espace prive, 
	// ajouter "bonjour" (repere a peu pres les cookies desactives)
	if (is_null($prive) ? is_url_prive($cible) : $prive) {
		$cible = parametre_url($cible, 'bonjour', 'oui', '&');
	}
	if ($cible=='@page_auteur')
		$cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'],'auteur');

	if ($cible) {
		$cible = parametre_url($cible, 'var_login', '', '&');

		// transformer la cible absolue en cible relative
		// pour pas echouer quand la meta adresse_site est foireuse
		if (strncmp($cible,$u = url_de_base(),strlen($u))==0){
			$cible = "./".substr($cible,strlen($u));
		}

		// si c'est une url absolue, refuser la redirection
		// sauf si cette securite est levee volontairement par le webmestre
		elseif (tester_url_absolue($cible) AND !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) {
			$cible = "";
		}
	}


	// Si on est admin, poser le cookie de correspondance
	if ($GLOBALS['auteur_session']['statut'] == '0minirezo') {
		include_spip('inc/cookie');
		spip_setcookie('spip_admin', '@'.$GLOBALS['auteur_session']['login'],
		time() + 7 * 24 * 3600);
	}

	// Si on est connecte, envoyer vers la destination
	if ($cible AND ($cible!=self())) {
		if (!headers_sent() AND !$_GET['var_mode']) {
			include_spip('inc/headers');
			$res['redirect'] = $cible;
		} else {
			$res['message_ok'] .= inserer_attribut(
				"<a>" . _T('login_par_ici') . "</a>",
				'href', $cible
			);
		}
	}
	return $res;
}
Exemplo n.º 22
0
/***************************************************************************\
 *  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';
Exemplo n.º 23
0
/**
 * Loger un auteur suite a son identification
 *
 * @param array $auteur
 * @return bool
 */
function auth_loger($auteur)
{
    if (!is_array($auteur) or !count($auteur)) {
        return false;
    }
    // initialiser et poser le cookie de session
    unset($_COOKIE['spip_session']);
    auth_init_droits($auteur);
    // initialiser les prefs
    $p = $GLOBALS['visiteur_session']['prefs'];
    $p['cnx'] = $auteur['cookie'] == 'oui' ? 'perma' : '';
    sql_updateq('spip_auteurs', array('prefs' => serialize($p)), "id_auteur=" . $auteur['id_auteur']);
    // Si on est admin, poser le cookie de correspondance
    include_spip('inc/cookie');
    if ($auteur['statut'] == '0minirezo') {
        spip_setcookie('spip_admin', '@' . $auteur['login'], time() + 7 * 24 * 3600);
    } else {
        spip_setcookie('spip_admin', '', 1);
    }
    //  bloquer ici le visiteur qui tente d'abuser de ses droits
    verifier_visiteur();
    return true;
}
Exemplo n.º 24
0
            $desc['login'] = $login;
            $desc['source'] = 'ldap';
            $desc['pass'] = '';
            $r = sql_insertq('spip_auteurs', $desc);
			$result = spip_query("SELECT * FROM spip_auteurs WHERE login="******" AND source='ldap'");
        }
        $row_auteur = spip_fetch_array($result);
        ### DBG
        fich_debug("DBG >> statut :".$row_auteur['statut']."\n");
        if ($row_auteur['statut'] == '0minirezo')
	    	$cookie_admin = "@".$session_login;

        $var_f = charger_fonction('session', 'inc');
        $cookie_session = $var_f($row_auteur);
        ### DBG
        fich_debug("DBG >> $cookie_session\n");
        // On poste le cookie de session
        spip_setcookie('spip_session', $cookie_session);
        // On loge l'authentification
        spip_log("login de $login depuis LCS");
    
        ////////////// test de recup des zones/groupes //////////////
        // dans un premier temps on ne s'occupe que des groupes principaux
        // pour les groupes secondaire, des verifs supplementaires seront a effectuer
        // #
        // # - on teste l'existence d'une zone d'acces restreint intitulee Profs ou Administratifs
        // # - on recupere les groupe d'appartenance du user
        // # - on verifie l'appartenance du user a la/les zone/s de meme intitule que le/les groupe/s
        // # - si il n'est pas dans la zone on l'ajoute
        
        //Verifier la presence des plugins Tispip et Acces-restreint
Exemplo n.º 25
0
    return;
}
if (!defined('_DIR_PLUGIN_THEME')) {
    // si on est en mode apercu, il suffit de repasser dans l'espace prive pour desactiver l'apercu
    if (test_espace_prive()) {
        if (isset($_COOKIE['spip_zengarden_theme'])) {
            include_spip('inc/cookie');
            spip_setcookie('spip_zengarden_theme', $_COOKIE['spip_zengarden_theme'] = '', -1);
        }
    } elseif (isset($GLOBALS['meta']['zengarden_switcher']) or defined('_ZEN_VAR_THEME')) {
        if (!is_null($arg = _request('var_theme'))) {
            include_spip('inc/cookie');
            if ($arg) {
                spip_setcookie('spip_zengarden_theme', $_COOKIE['spip_zengarden_theme'] = $arg);
            } else {
                spip_setcookie('spip_zengarden_theme', $_COOKIE['spip_zengarden_theme'] = '', -1);
            }
        }
    }
    // ajouter le theme au path
    if ((isset($_COOKIE['spip_zengarden_theme']) and $t = $_COOKIE['spip_zengarden_theme'] or isset($GLOBALS['meta']['zengarden_theme']) and $t = $GLOBALS['meta']['zengarden_theme']) and is_dir(_DIR_RACINE . $t)) {
        _chemin(_DIR_RACINE . $t);
        $GLOBALS['marqueur'] = (isset($GLOBALS['marqueur']) ? $GLOBALS['marqueur'] : "") . ":theme-{$t}";
        // @experimental : sauver le nom du repertoire theme utilise
        // a defaut de connaitre le vrai prefixe
        if (!defined('NOM_THEME')) {
            define('NOM_THEME', basename($t));
        }
    }
    // @experimental : balise #THEME qui retourne le nom du theme selectionne
    function balise_THEME_dist($p)