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; }
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); }
/** * 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); }
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; }
/** * 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(); }
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(); }
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(); } }
/** * 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; }
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', '&')); }
/** * 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']; }
/** * 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; }
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 '' ; }
/** * 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; }
/** * 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); }
$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','>='))
/** * 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>"; } } } }