function formulaires_configurer_preferences_charger()
{
    // travailler sur des meta fraiches
    include_spip('inc/meta');
    lire_metas();
    $valeurs = array();
    $valeurs['display_navigation'] = isset($GLOBALS['visiteur_session']['prefs']['display_navigation']) ? $GLOBALS['visiteur_session']['prefs']['display_navigation'] : 'navigation_avec_icones';
    $valeurs['display_outils'] = isset($GLOBALS['visiteur_session']['prefs']['display_outils']) ? $GLOBALS['visiteur_session']['prefs']['display_outils'] : 'oui';
    $valeurs['display'] = (isset($GLOBALS['visiteur_session']['prefs']['display']) and $GLOBALS['visiteur_session']['prefs']['display'] > 0) ? $GLOBALS['visiteur_session']['prefs']['display'] : 2;
    $valeurs['couleur'] = (isset($GLOBALS['visiteur_session']['prefs']['couleur']) and $GLOBALS['visiteur_session']['prefs']['couleur'] > 0) ? $GLOBALS['visiteur_session']['prefs']['couleur'] : 1;
    $valeurs['spip_ecran'] = $GLOBALS['spip_ecran'];
    // Ajout TinyMCE
    //var_export($GLOBALS['visiteur_session']['prefs']);
    $valeurs['tinymce'] = isset($GLOBALS['visiteur_session']['prefs']['tinymce']) ? $GLOBALS['visiteur_session']['prefs']['tinymce'] : 'oui';
    // ! Ajout TinyMCE
    $couleurs = charger_fonction('couleurs', 'inc');
    $les_couleurs = $couleurs(array(), true);
    $i = 1;
    foreach ($les_couleurs as $k => $c) {
        $valeurs['couleurs_url'][$i] = generer_url_public('style_prive.css', 'ltr=' . $GLOBALS['spip_lang_left'] . '&' . $couleurs($k));
        $valeurs['couleurs'][$i++] = $c;
    }
    $valeurs['imessage'] = $GLOBALS['visiteur_session']['imessage'];
    return $valeurs;
}
Esempio n. 2
0
function inc_meta_dist($table='meta')
{
	// Lire les meta, en cache si present, valide et lisible
	// en cas d'install ne pas faire confiance au meta_cache eventuel
	$cache = cache_meta($table);

	if ((_request('exec')!=='install' OR !test_espace_prive())
	AND $new = jeune_fichier($cache, _META_CACHE_TIME)
	AND lire_fichier_securise($cache, $meta)
	AND $meta = @unserialize($meta))
		$GLOBALS[$table] = $meta;

	if (isset($GLOBALS[$table]['touch']) 
	AND ($GLOBALS[$table]['touch']<time()-_META_CACHE_TIME))
		$GLOBALS[$table] = array();
	// sinon lire en base
	if (!$GLOBALS[$table]) $new = !lire_metas($table);

	// renouveller l'alea general si trop vieux ou sur demande explicite
	if ((test_espace_prive() || isset($_GET['renouvelle_alea']))
	AND $GLOBALS[$table]
	AND (time() > _RENOUVELLE_ALEA + $GLOBALS['meta']['alea_ephemere_date'])) {
		// si on n'a pas l'acces en ecriture sur le cache,
		// ne pas renouveller l'alea sinon le cache devient faux
		if (supprimer_fichier($cache)) {
			include_spip('inc/acces');
			renouvelle_alea();
			$new = false; 
		} else spip_log("impossible d'ecrire dans " . $cache);
	}
	// et refaire le cache si on a du lire en base
	if (!$new) touch_meta(false, $table);
}
Esempio n. 3
0
/**
 * Expliquer une configuration :
 * analyser le cfg pour determiner la table, le casier et le sous-casier eventuel
 *
 * @param string $cfg
 * @return array
 */
function expliquer_config($cfg)
{
    // par defaut, sur la table des meta
    $table = 'meta';
    $casier = null;
    $sous_casier = array();
    if (strlen($cfg)) {
        $cfg = explode('/', $cfg);
        // si le premier argument est vide, c'est une syntaxe /table/ ou un appel vide ''
        if (!reset($cfg) and count($cfg) > 1) {
            array_shift($cfg);
            $table = array_shift($cfg);
            if (!isset($GLOBALS[$table])) {
                lire_metas($table);
            }
        }
        // si on a demande #CONFIG{/meta,'',0}
        if (count($cfg)) {
            $casier = array_shift($cfg);
        }
        if (count($cfg)) {
            $sous_casier = $cfg;
        }
    }
    return array($table, $casier, $sous_casier);
}
Esempio n. 4
0
function formulaires_configurer_identite_charger_dist()
{
    // travailler sur des meta fraiches
    include_spip('inc/meta');
    lire_metas();
    $valeurs = array();
    foreach (array('nom_site', 'adresse_site', 'slogan_site', 'descriptif_site', 'email_webmaster') as $k) {
        $valeurs[$k] = isset($GLOBALS['meta'][$k]) ? $GLOBALS['meta'][$k] : '';
    }
    return $valeurs;
}
Esempio n. 5
0
/**
 * Fonction d'initialisation : vérifie les droits et met à jour les méta avant de lancer l'activation des plugins
 * 
 * @link http://doc.spip.org/@action_activer_plugins_dist
 * @return void
 */
function action_activer_plugins_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $securiser_action();
    if (!autoriser('configurer', '_plugins')) {
        die('erreur');
    }
    // forcer la maj des meta pour les cas de modif de numero de version base via phpmyadmin
    lire_metas();
    enregistre_modif_plugin();
}
Esempio n. 6
0
function exec_acces_restreint_config(){

	if (!autoriser('webmestre')) {
		include_spip('inc/minipres');
		echo minipres();
		exit;
	}

	include_spip('inc/config');
	inc_config_dist();
	if (_request('changer_config') == 'oui')
		accesrestreint_appliquer_modifs_config();

	pipeline('exec_init',array('args'=>array('exec'=>'acces_restreint_config'),'data'=>''));
	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo $commencer_page(_T('titre_page_config'), "configuration", "configuration");

	echo gros_titre(_T('titre_config_fonctions'),'',false);

	echo debut_gauche('',true);
	echo pipeline('affiche_gauche',array('args'=>array('exec'=>'acces_restreint_config'),'data'=>''));
	echo creer_colonne_droite('',true);
	echo pipeline('affiche_droite',array('args'=>array('exec'=>'acces_restreint_config'),'data'=>''));


	//Raccourcis
	$res = icone_horizontale(_T('accesrestreint:voir_toutes'), generer_url_ecrire("acces_restreint",''), "../"._DIR_PLUGIN_ACCESRESTREINT."/img_pack/zones-acces-24.gif", 'rien.gif',false);
	echo bloc_des_raccourcis($res);


	echo debut_droite('',true);
	lire_metas();

	$action = generer_url_ecrire('acces_restreint_config');

	echo "<form action='$action' method='post'><div>", form_hidden($action);
	echo "<input type='hidden' name='changer_config' value='oui' />";


	accesrestreint_htaccess_config();
	accesrestreint_htpasswd_config();
	echo '</div></form>';

	echo pipeline('affiche_milieu',array('args'=>array('exec'=>'acces_restreint_config'),'data'=>''));

	echo fin_gauche(), fin_page();
}
Esempio n. 7
0
function maj_vieille_base_create_dist($version_cible){

	$charger = charger_fonction('charger','maj/vieille_base');
	$version = $charger($version_cible);

	// choisir un nouveau prefixe de table, le noter, et switcher en redefinissant le serveur
	$new_prefixe = "XXspip$version";
	// ici on ecrit la meta dans la table 'officielle'
	ecrire_meta('restauration_table_prefix',$new_prefixe,'non');
	ecrire_meta('vieille_version_installee',$version_cible,'non');
	$metas = $GLOBALS['meta'];
	
	$prefixe_source = $GLOBALS['connexions'][0]['prefixe'];
	$GLOBALS['serveur_vieille_base'] = 0;
	$GLOBALS['connexions'][$GLOBALS['serveur_vieille_base']] = $GLOBALS['connexions'][0];
	$GLOBALS['connexions'][$GLOBALS['serveur_vieille_base']]['prefixe'] = $new_prefixe;
	lire_metas();
	
	if (!isset($GLOBALS['meta']['restauration_table_prefix_source'])) {

		$create = charger_fonction('create',"maj/vieille_base/$version");
		$create();
	
		// reecrire les metas dans la table provisoire
		foreach($metas as $k=>$v)
			ecrire_meta($k,$v);
		ecrire_meta('restauration_table_prefix_source',$prefixe_source,'non');
	
		// noter le numero de version installee
		//
		// Exception lorsque la version est entre 10000 et 12000
		// car ce qui est utilise est la base au moment du SVN 10000
		// qui avait url_propre dans les champs de tous les objets
		// mais un spip_version type 1.945 (et non 10000). 
		// si on laisse 10000, les mise a jour de url_propre ne se font pas.
		if ($version == 10000) $version = 1.945;
		ecrire_meta('version_installee',$version,'non');
	}
	
	if ($version_cible!=$GLOBALS['meta']['version_installee']) {
		// upgrader jusqu'a la cible
		include_spip('base/upgrade');
		maj_base($version_cible);
	}

}
 /**
  * Effectue l'action en attente.
  *
  * Appelle une methode do_{todo} de l'Actionneur où todo
  * est le type d'action à faire.
  *
  * Place dans la clé 'done' de description courte du paquet
  * le résultat de l'action (un booléen indiquant si elle s'est bien
  * déroulée).
  **/
 public function do_action()
 {
     if ($do = $this->work) {
         $todo = 'do_' . $do['todo'];
         lire_metas();
         // avoir les metas a jour
         $this->log("Faire {$todo} avec {$do['n']}");
         $do['done'] = $this->{$todo}($do);
         $this->done[] = $do;
         $this->work = array();
         $this->sauver_actions();
     }
 }
Esempio n. 9
0
/**
 * Stocker les metas
 * @param string $form
 * @param array $valeurs
 * @param array $store
 * @return string
 */
function cvtconf_configurer_stocker($form, $valeurs, $store)
{
    $trace = '';
    list($table, $casier, $prefixe, $stockage) = cvtconf_definir_configurer_conteneur($form, $valeurs);
    // stocker en base
    // par defaut, dans un casier serialize dans spip_meta (idem CFG)
    if (!isset($GLOBALS[$table])) {
        lire_metas($table);
    }
    $prefixe = $prefixe ? $prefixe . '_' : '';
    $table = $table ? "/{$table}/" : "";
    $casier = $casier ? rtrim($casier, '/') . '/' : "";
    // slash final, sinon rien
    foreach ($store as $k => $v) {
        ecrire_config("{$stockage}{$table}{$prefixe}{$casier}{$k}", $v);
        if (_request('var_mode') == 'configurer' and autoriser('webmestre')) {
            $trace .= "<br />table {$table} : " . $prefixe . $k . " = {$v};";
        }
    }
    return $trace;
}
Esempio n. 10
0
function install_etape_3b_dist()
{
    $login = _request('login');
    $email = _request('email');
    $nom = _request('nom');
    $pass = _request('pass');
    $pass_verif = _request('pass_verif');
    $server_db = defined('_INSTALL_SERVER_DB') ? _INSTALL_SERVER_DB : _request('server_db');
    if (!defined('_PASS_LONGUEUR_MINI')) {
        define('_PASS_LONGUEUR_MINI', 6);
    }
    if (!defined('_LOGIN_TROP_COURT')) {
        define('_LOGIN_TROP_COURT', 4);
    }
    if ($login) {
        $echec = $pass != $pass_verif ? _T('info_passes_identiques') : (strlen($pass) < _PASS_LONGUEUR_MINI ? _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI)) : (strlen($login) < _LOGIN_TROP_COURT ? _T('info_login_trop_court') : ''));
        include_spip('inc/filtres');
        if (!$echec and $email and !email_valide($email)) {
            $echec = _T('form_email_non_valide');
        }
        if ($echec) {
            echo minipres('AUTO', info_progression_etape(3, 'etape_', 'install/', true) . "<div class='error'><h3>{$echec}</h3>\n" . "<p>" . _T('avis_connexion_echec_2') . "</p>" . "</div>");
            exit;
        }
    }
    if (@file_exists(_FILE_CHMOD_TMP)) {
        include _FILE_CHMOD_TMP;
    } else {
        redirige_url_ecrire('install');
    }
    if (!@file_exists(_FILE_CONNECT_TMP)) {
        redirige_url_ecrire('install');
    }
    # maintenant on connait le vrai charset du site s'il est deja configure
    # sinon par defaut lire_meta reglera _DEFAULT_CHARSET
    # (les donnees arrivent de toute facon postees en _DEFAULT_CHARSET)
    lire_metas();
    if ($login) {
        include_spip('inc/charsets');
        $nom = importer_charset($nom, _DEFAULT_CHARSET);
        $login = importer_charset($login, _DEFAULT_CHARSET);
        $email = importer_charset($email, _DEFAULT_CHARSET);
        # pour le passwd, bizarrement il faut le convertir comme s'il avait
        # ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js
        $pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1');
        include_spip('auth/sha256.inc');
        include_spip('inc/acces');
        $htpass = generer_htpass($pass);
        $alea_actuel = creer_uniqid();
        $alea_futur = creer_uniqid();
        $shapass = _nano_sha256($alea_actuel . $pass);
        // prelablement, creer le champ webmestre si il n'existe pas (install neuve
        // sur une vieille base
        $t = sql_showtable("spip_auteurs", true);
        if (!isset($t['field']['webmestre'])) {
            @sql_alter("TABLE spip_auteurs ADD webmestre varchar(3)  DEFAULT 'non' NOT NULL");
        }
        $id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "login="******"nom" => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'htpass' => $htpass, 'statut' => '0minirezo'), "id_auteur={$id_auteur}");
        } else {
            $id_auteur = sql_insertq('spip_auteurs', array('nom' => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'htpass' => $htpass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'statut' => '0minirezo'));
        }
        // le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne
        @sql_updateq('spip_auteurs', array('webmestre' => 'oui'), "id_auteur={$id_auteur}");
        // inserer email comme email webmaster principal
        // (sauf s'il est vide: cas de la re-installation)
        if ($email) {
            ecrire_meta('email_webmaster', $email);
        }
        // Connecter directement celui qui vient de (re)donner son login
        // mais sans cookie d'admin ni connexion longue
        include_spip('inc/auth');
        if (!($auteur = auth_identifier_login($login, $pass)) or !auth_loger($auteur, true)) {
            spip_log("login automatique impossible {$auth_spip} {$session}" . count($row));
        }
    }
    // installer les metas
    $config = charger_fonction('config', 'inc');
    $config();
    // activer les plugins
    // leur installation ne peut pas se faire sur le meme hit, il faudra donc
    // poursuivre au hit suivant
    include_spip('inc/plugin');
    actualise_plugins_actifs();
    include_spip('inc/distant');
    redirige_par_entete(parametre_url(self(), 'etape', '4', '&'));
}
Esempio n. 11
0
/**
 * Renvoyer le secret du site, et le generer si il n'existe pas encore
 * Le secret du site doit rester aussi secret que possible, et est eternel
 * On ne doit pas l'exporter
 *
 * http://doc.spip.org/@secret_du_site
 *
 * @return string
 */
function secret_du_site()
{
    if (!isset($GLOBALS['meta']['secret_du_site'])) {
        include_spip('base/abstract_sql');
        $GLOBALS['meta']['secret_du_site'] = sql_getfetsel('valeur', 'spip_meta', "nom='secret_du_site'");
    }
    if (!isset($GLOBALS['meta']['secret_du_site']) or strlen($GLOBALS['meta']['secret_du_site']) < 64) {
        include_spip('inc/acces');
        include_spip('auth/sha256.inc');
        ecrire_meta('secret_du_site', _nano_sha256($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SERVER_SIGNATURE"] . creer_uniqid()), 'non');
        lire_metas();
        // au cas ou ecrire_meta() ne fonctionne pas
    }
    return $GLOBALS['meta']['secret_du_site'];
}
Esempio n. 12
0
/**
 * Lecture de la configuration
 *
 * lire_config() permet de recuperer une config depuis le php<br>
 * memes arguments que la balise (forcement)<br>
 * $cfg: la config, lire_config('montruc') est un tableau<br>
 * lire_config('/table/champ') lit le valeur de champ dans la table des meta 'table'<br>
 * lire_config('montruc/sub') est l'element "sub" de cette config equivalent a lire_config('/meta/montruc/sub')<br>
 *
 * $unserialize est mis par l'histoire
 *
 * @param  string  $cfg          la config
 * @param  mixed   $def          un défaut optionnel
 * @param  boolean $unserialize  n'affecte que le dépôt 'meta'
 * @return string
 */
function spip_bonux_lire_config($cfg='', $def=null, $unserialize=true) {
	// lire le stockage sous la forme /table/valeur
	// ou valeur qui est en fait implicitement /meta/valeur
	// ou casier/valeur qui est en fait implicitement /meta/casier/valeur
	if ($cfg AND strpos($cfg,'/')===false){
		return isset($GLOBALS['meta'][$cfg])?
		  ((!$unserialize OR ($t=unserialize($GLOBALS['meta'][$cfg]))===false)?$GLOBALS['meta'][$cfg]:$t)
		  :$def;
	}

	// par defaut, sur la table des meta
	$table = 'meta';
	$cfg = explode('/',$cfg);
	// si le premier argument est vide, c'est une syntaxe /table/ ou un appel vide ''
	if (!reset($cfg) AND count($cfg)>1) {
		array_shift($cfg);
		if (count($cfg)) $table = array_shift($cfg);
		if (!isset($GLOBALS[$table]))
			lire_metas($table);
		if (!isset($GLOBALS[$table]))
			return $def;
	}

	$r = $GLOBALS[$table];

	// si on a demande #CONFIG{/meta,'',0}
	if (!count($cfg))
		return $unserialize ? $r : serialize($r);
	
	$deserialize = false; // on ne deserialise qu'une seule fois...
	while($casier = array_shift($cfg)) {
		$r = isset($r[$casier])?$r[$casier]:null;
		// deserializer tant que c'est necessaire
		if (!$deserialize AND $r  AND is_string($r) AND (count($cfg) OR $unserialize)) {
			$deserialize = true;
			$r = unserialize($r);
		}
	}

	if (is_null($r)) return $def;
	return $r;
}
Esempio n. 13
0
function import_tables($request, $archive) {
	global $import_ok, $abs_pos,  $affiche_progression_pourcent;

	// regarder si on est pas en train d'importer dans une copie des tables
	if (isset($GLOBALS['meta']['restauration_table_prefix'])) {
		$charger = charger_fonction('charger','maj/vieille_base');
		$charger($GLOBALS['meta']['vieille_version_installee']);
		$GLOBALS['serveur_vieille_base'] = 0;
		$prefix = $GLOBALS['connexions'][$GLOBALS['serveur_vieille_base']]['prefixe'];
		$GLOBALS['connexions'][$GLOBALS['serveur_vieille_base']]['prefixe'] = $GLOBALS['meta']['restauration_table_prefix'];
		// verifier qu'une table meta existe bien
		// sinon c'est une restauration anterieure echouee
		if (!sql_getfetsel('valeur','spip_meta','','','','0,1')){
				$GLOBALS['connexions'][$GLOBALS['serveur_vieille_base']]['prefixe'] = $prefix;
				return;
		}
		// recharger les metas
		lire_metas();
	}

	$abs_pos = (!isset($GLOBALS['meta']["restauration_status"])) ? 0 :
		$GLOBALS['meta']["restauration_status"];

	// au premier appel destruction des tables a restaurer
	// ou initialisation de la table des translations,
	// mais pas lors d'une reprise.

	if ($request['insertion']=='on') {
		include_spip('inc/import_insere');
		$request['init'] = (!$abs_pos) ? 'insere_1_init' : 'insere_1bis_init';
		$request['boucle'] = 'import_insere';
	} elseif ($request['insertion']=='passe2') {
		$request['init'] = 'insere_2_init';
		$request['boucle'] = 'import_translate';
	} else {
		$request['init'] = (!$abs_pos) ? 'import_init_tables' : 'import_table_choix';
		$request['boucle'] = 'import_replace';
	}

	if (strncmp(".gz", substr($archive,-3),3)==0) {
			$size = false;
			$taille = taille_en_octets($abs_pos);
			$file = gzopen($archive, 'rb');
			$gz = 'gzread';
	} else {
			$size = @filesize($archive);
			$taille = @floor(100 * $abs_pos / $size)." %";
			$file = fopen($archive, 'rb');
			$gz = 'fread';
	}

	
	if ($abs_pos==0) {
		list($tag, $atts, $charset) = import_debut($file, $gz);
		// improbable: fichier correct avant debut_admin et plus apres
		if (!$tag) return !($import_ok = true);
		$version_archive = import_init_meta($tag, $atts, $charset, $request);
	} else {
		$version_archive = $GLOBALS['meta']['restauration_version_archive'];
		$atts = unserialize($GLOBALS['meta']['restauration_attributs_archive']);
		spip_log("Reprise de l'importation interrompue en $abs_pos");
		$_fseek = ($gz=='gzread') ? 'gzseek' : 'fseek';
		$_fseek($file, $abs_pos);
	}
	
	// placer la connexion sql dans le bon charset

	if (isset($GLOBALS['meta']['restauration_charset_sql_connexion']))
		sql_set_charset($GLOBALS['meta']['restauration_charset_sql_connexion']);

	if (!defined('_DEBUG_IMPORT')) define('_DEBUG_IMPORT', false);
	if (_DEBUG_IMPORT)
		ecrire_fichier(_DIR_TMP."debug_import.log","#####".date('Y-m-d H:i:s')."\n",false,false);
	$fimport = import_charge_version($version_archive);

	if ($request['insertion'] !== 'passe2')
		import_affiche_javascript($taille);

	if (function_exists('ob_flush')) @ob_flush();
	flush();
	$oldtable ='';
	$cpt = 0;
	$pos = $abs_pos;

	// BOUCLE principale qui tourne en rond jusqu'a le fin du fichier
	while ($table = $fimport($file, $request, $gz, $atts)) {
	  // memoriser pour pouvoir reprendre en cas d'interrupt,
	  // mais pas d'ecriture sur fichier, ca ralentit trop
		ecrire_meta("restauration_status", "$abs_pos",'non');
		if ($oldtable != $table) {
			if (_DEBUG_IMPORT){
				ecrire_fichier(_DIR_TMP."debug_import.log","----\n".$GLOBALS['debug_import_avant']."\n<<<<\n$table\n>>>>\n".$GLOBALS['debug_import_apres']."\n----\n",false,false);
			}
			if ($oldtable) spip_log("$cpt entrees","import");
			spip_log("Analyse de $table (commence en $pos)","import");
			affiche_progression_javascript($abs_pos,$size,$table);
			$oldtable = $table;
			$cpt = 0;
			$pos = $abs_pos;
		}
		$cpt++;
	}
	spip_log("$cpt entrees","import");
	spip_log("fin de l'archive, statut: " .($import_ok ? 'ok' : 'alert'),"import");

	if (!$import_ok) 
	  return  _T('avis_archive_invalide') . ' ' .
	    _T('taille_octets', array('taille' => $pos)) ;

	if ($GLOBALS['spip_version_base'] != (str_replace(',','.',$GLOBALS['meta']['version_installee']))){
		// il FAUT recharger les bonnes desc serial/aux avant ...
		include_spip('base/serial');
		$GLOBALS['tables_principales']=array();
		base_serial($GLOBALS['tables_principales']);
		include_spip('base/auxiliaires');
		$GLOBALS['tables_auxiliaires']=array();
		base_auxiliaires($GLOBALS['tables_auxiliaires']);
		$GLOBALS['tables_jointures']=array();
		include_spip('public/interfaces');
		declarer_interfaces();
		include_spip('base/upgrade');
		maj_base(); // upgrade jusqu'a la version courante
	}
	// regarder si on est pas en train d'importer dans une copie des tables
	if (isset($GLOBALS['meta']['restauration_table_prefix_source'])){
		$prefixe_source = $GLOBALS['meta']['restauration_table_prefix_source'];
		
		$GLOBALS['connexions']['-1'] = $GLOBALS['connexions'][0];
		// rebasculer le serveur sur les bonnes tables pour finir proprement
		$GLOBALS['connexions'][0]['prefixe'] = $prefixe_source;
		// et relire les meta de la bonne base
		lire_metas();


		$tables_recopiees = isset($GLOBALS['meta']['restauration_recopie_tables'])?unserialize($GLOBALS['meta']['restauration_recopie_tables']):array();
		spip_log("charge tables_recopiees ".serialize($tables_recopiees),'dbdump');

		// recopier les tables l'une sur l'autre
		// il FAUT recharger les bonnes desc serial/aux avant ...
		include_spip('base/serial');
		$GLOBALS['tables_principales']=array();
		base_serial($GLOBALS['tables_principales']);
		include_spip('base/auxiliaires');
		$GLOBALS['tables_auxiliaires']=array();
		base_auxiliaires($GLOBALS['tables_auxiliaires']);
		$GLOBALS['tables_jointures']=array();
		include_spip('public/interfaces');
		declarer_interfaces();
		
		// puis relister les tables a importer
		// et les vider si besoin, au moment du premier passage ici
		// (et seulement si ce n'est pas une fusion, comment le dit-on ?)
		$initialisation_copie = (!isset($GLOBALS['meta']["restauration_status_copie"])) ? 0 :
			$GLOBALS['meta']["restauration_status_copie"];

		if (!$initialisation_copie) {
			// vide les tables qui le necessitent
			$tables = import_init_tables($request);
			ecrire_meta("restauration_status_copie", "ok",'non');
		}
		else
			// la liste des tables a recopier
			$tables = import_table_choix($request);
		#		var_dump($tables);die();
		spip_log("tables a copier :".implode(", ",$tables),'dbdump');
		if (in_array('spip_auteurs',$tables)){
			$tables = array_diff($tables,array('spip_auteurs'));
			$tables[] = 'spip_auteurs';
		}
		if (in_array('spip_meta',$tables)){
			$tables = array_diff($tables,array('spip_meta'));
			$tables[] = 'spip_meta';
		}
		sql_drop_table('spip_test','','-1');
		foreach ($tables as $table){
			if (sql_showtable($table,true,-1)){
				if (!isset($tables_recopiees[$table])) $tables_recopiees[$table] = 0;
				if ($tables_recopiees[$table]!==-1){
					affiche_progression_javascript(0,0,$table);
					while (true) {
						$n = intval($tables_recopiees[$table]);
						$res = sql_select('*',$table,'','','',"$n,400",'','-1');
						while ($row = sql_fetch($res,'-1')){
							array_walk($row,'sql_quote');
							sql_replace($table,$row);
							$tables_recopiees[$table]++;
						}
						if ($n == $tables_recopiees[$table])
							break;
						spip_log("recopie $table ".$tables_recopiees[$table],'dbdump');
						affiche_progression_javascript($tables_recopiees[$table],0,$table);
						ecrire_meta('restauration_recopie_tables',serialize($tables_recopiees));
					}
					sql_drop_table($table,'','-1');
					spip_log("drop $table",'dbdump');
					$tables_recopiees[$table]=-1;
					ecrire_meta('restauration_recopie_tables',serialize($tables_recopiees));
					spip_log("tables_recopiees ".serialize($tables_recopiees),'dbdump');
				}
			}
		}
	}

	// recharger les metas
	lire_metas();
	#die();
	return '' ;
}
Esempio n. 14
0
/**
 * Obtenir la configuration des crayons
 *
 * @note wdgcfg = widget config :-)
 * 
 * @return array
 *     Couples : attribut => valeur
**/
function wdgcfg()
{
    $php = function_exists('crayons_config') ? crayons_config() : array();
    include_spip('inc/meta');
    lire_metas();
    global $meta;
    $metacrayons = empty($meta['crayons']) ? array() : unserialize($meta['crayons']);
    $wdgcfg = array();
    foreach (array('msgNoChange' => false, 'msgAbandon' => false, 'filet' => false, 'yellow_fade' => false, 'clickhide' => false) as $cfgi => $def) {
        $wdgcfg[$cfgi] = isset($php[$cfgi]) ? $php[$cfgi] : isset($metacrayons[$cfgi]) ? $metacrayons[$cfgi] : $def;
    }
    return $wdgcfg;
}
Esempio n. 15
0
/**
 * Une fonction pour installer une table de configuration supplementaire
 * @param string $table
 */
function installer_table_meta($table)
{
    $trouver_table = charger_fonction('trouver_table', 'base');
    if (!$trouver_table("spip_{$table}")) {
        include_spip('base/auxiliaires');
        include_spip('base/create');
        creer_ou_upgrader_table("spip_{$table}", $GLOBALS['tables_auxiliaires']['spip_meta'], false, false);
        $trouver_table('');
    }
    lire_metas($table);
}
Esempio n. 16
0
	$GLOBALS['spip_pipeline']['pre_description_outil']='';
// post_description_outil : 2e pipeline de pre_affichage, ici le texte est quasi definitif
#$GLOBALS['spip_pipeline']['post_description_outil']='';
// a l'issue du telechargement d'un fichier distant
$GLOBALS['spip_pipeline']['fichier_distant']='';

// Declaration d'un pipeline servant a inserer un bouton sous la baniere du Couteau Suisse
if (!isset($GLOBALS['spip_pipeline']['porte_plume_cs_pre_charger']))
	$GLOBALS['spip_pipeline']['porte_plume_cs_pre_charger']='';

// liste des outils et des variables
global $metas_vars, $metas_outils;
if (!isset($GLOBALS['meta']['tweaks_actifs'])) {
cs_log("  -- lecture metas");
	include_spip('inc/meta');
	lire_metas();
}
$metas_outils = isset($GLOBALS['meta']['tweaks_actifs'])?unserialize($GLOBALS['meta']['tweaks_actifs']):array();
$metas_vars = isset($GLOBALS['meta']['tweaks_variables'])?unserialize($GLOBALS['meta']['tweaks_variables']):array();

// pour les serveurs qui aiment les virgules...
$GLOBALS['spip_version_code'] = str_replace(',','.',$GLOBALS['spip_version_code']);
// constantes de compatibilite
// (pour info : SPIP 2.0 => 12691, SPIP 2.1 => 15133, SPIP 2.2 => ??)
if (!strncmp($GLOBALS['spip_version_affichee'],'2.2',3)) 
	{ @define('_SPIP20200', 1); @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
elseif ($GLOBALS['spip_version_code']>=15133) 
	{ @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
elseif (version_compare($GLOBALS['spip_version_code'],'1.9300','>=')) 
	{ @define('_SPIP19300', 1); @define('_SPIP19200', 1); }
elseif (version_compare($GLOBALS['spip_version_code'],'1.9200','>=')) 
Esempio n. 17
0
/**
 * Mise à jour d'un plugin de SPIP
 * 
 * Fonction appelée par la fonction de maj d'un plugin.
 * On lui fournit un tableau de fonctions élementaires
 * dont l'indice est la version
 * 
 * @param string $nom_meta_base_version
 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
 * @param string $version_cible
 *     Version du schéma de données dans le plugin (déclaré dans paquet.xml)
 * @param array $maj
 *     Tableau d'actions à faire à l'installation (clé 'create') et pour chaque
 *     version intermédiaire entre la version actuelle du schéma du plugin dans SPIP
 *     et la version du schéma déclaré dans le plugin (ex. clé '1.1.0').
 *     
 *     Chaque valeur est un tableau contenant une liste de fonctions à exécuter,
 *     cette liste étant elle-même un tableau avec premier paramètre le nom de la fonction
 *     et les suivant les paramètres à lui passer
 *     @example
 *        array(
 *            'create' => array(
 *                array('maj_tables', array('spip_rubriques', 'spip_articles')),
 *                array('creer_base)),
 *            '1.1.0' => array(
 *                array('sql_alter', 'TABLE spip_articles ADD INDEX truc (truc)'))
 *        )
 * @param string $table_meta
 *     Nom de la table meta (sans le prefixe spip_) dans laquelle trouver la meta $nom_meta_base_version
 * @return void
 */
function maj_plugin($nom_meta_base_version, $version_cible, $maj, $table_meta = 'meta')
{
    if ($table_meta !== 'meta') {
        lire_metas($table_meta);
    }
    if (!isset($GLOBALS[$table_meta][$nom_meta_base_version]) || !spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '=')) {
        // $maj['create'] contient les directives propres a la premiere creation de base
        // c'est une operation derogatoire qui fait aboutir directement dans la version_cible
        if (isset($maj['create'])) {
            if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) {
                // installation : on ne fait que l'operation create
                $maj = array("init" => $maj['create']);
                // et on lui ajoute un appel a inc/config
                // pour creer les metas par defaut
                $config = charger_fonction('config', 'inc');
                $maj[$version_cible] = array(array($config));
            }
            // dans tous les cas enlever cet index du tableau
            unset($maj['create']);
        }
        // si init, deja dans le bon ordre
        if (!isset($maj['init'])) {
            include_spip('inc/plugin');
            // pour spip_version_compare
            uksort($maj, 'spip_version_compare');
        }
        // la redirection se fait par defaut sur la page d'administration des plugins
        // sauf lorsque nous sommes sur l'installation de SPIP
        // ou define _REDIRECT_MAJ_PLUGIN
        $redirect = defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin');
        if (defined('_ECRIRE_INSTALL')) {
            $redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape'));
        }
        $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect);
        if ($res) {
            if (!is_array($res)) {
                spip_log("Pb d'acces SQL a la mise a jour", "maj." . _LOG_INFO_ERREUR);
            } else {
                echo "<p>" . _T('avis_operation_echec') . ' ' . join(' ', $res) . "</p>";
            }
        }
    }
}