/** * Demander à mettre à jour la base de données */ function exec_demande_mise_a_jour_dist() { // on fait la verif du path avant tout, // et l'installation des qu'on est dans la colonne principale // si jamais la liste des plugins actifs change, il faut faire un refresh du hit // pour etre sur que les bons fichiers seront charges lors de l'install include_spip('inc/plugin'); if (actualise_plugins_actifs()) { include_spip('inc/headers'); redirige_par_entete(self()); } include_spip('inc/presentation'); include_spip('inc/filtres_boites'); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page('', '', '', '', true, false, false); echo debut_grand_cadre(true); echo boite_ouvrir(_T('info_message_technique'), 'notice'); echo "<p>" . _T('info_procedure_maj_version') . "</p>", "<p>" . _T('info_administrateur_site_01') . "</p>"; echo bouton_action(_T('bouton_mettre_a_jour_base'), generer_url_ecrire("upgrade", "reinstall=non")); echo boite_fermer(); // masquer les erreurs sql sur cette page car proviennent de la base pas a jour ! echo '<style type="text/css">#debug-nav {display: none;}</style>'; echo fin_grand_cadre(true); echo fin_page(); }
function enregistre_modif_outils($cmd){ cs_log("INIT : enregistre_modif_outils()"); global $outils, $metas_outils; // recuperer les outils dans $_POST ou $_GET $toggle = array(); if(isset($_GET['outil'])) $toggle[] = $_GET['outil']; elseif(isset($_POST['cs_selection'])) $toggle = explode(',', $_POST['cs_selection']); else return; $_GET['outil'] = ($cmd!='hide' && count($toggle)==1)?$toggle[0]:''; $i = $cmd=='hide'?'cache':'actif'; ${$i} = isset($GLOBALS['meta']["tweaks_{$i}s"])?unserialize($GLOBALS['meta']["tweaks_{$i}s"]):array(); foreach($toggle as $o) if(autoriser('configurer', 'outil', 0, NULL, $outils[$o])) { if(isset(${$i}[$o][$i])) unset(${$i}[$o][$i]); else ${$i}[$o][$i] = 1; } if(defined('_SPIP19300')) $connect_id_auteur = $GLOBALS['auteur_session']['id_auteur']; else global $connect_id_auteur; spip_log("Changement de statut ($i) des outils par l'auteur id=$connect_id_auteur : ".implode(', ',array_keys(${$i}))); ecrire_meta("tweaks_{$i}s", serialize(${$i})); if($cmd=='switch') $metas_outils = ${$i}; include_spip('inc/plugin'); defined('_SPIP20100')?actualise_plugins_actifs():verif_plugin(); cs_log(" FIN : enregistre_modif_outils()"); }
function exec_upgrade_dist() { global $spip_version_base; if (!_FILE_CONNECT) { redirige_url_ecrire("install"); } // Si reinstallation necessaire, message ad hoc if (_request('reinstall') == 'oui') { include_spip('inc/minipres'); $r = minipres(_T('titre_page_upgrade'), "<p><b>" . _T('texte_nouvelle_version_spip_1') . "</b><p> " . _T('texte_nouvelle_version_spip_2', array('connect' => '<tt>' . _FILE_CONNECT . '</tt>')) . generer_form_ecrire('upgrade', "<input type='hidden' name='reinstall' value='non' />", '', _T('bouton_relancer_installation'))); echo $r; } elseif (_request('fin')) { include_spip('inc/plugin'); actualise_plugins_actifs(); include_spip('inc/headers'); $res = generer_url_ecrire('admin_plugin', 'var_mode=recalcul'); echo redirige_formulaire($res); } else { if (!isset($GLOBALS['meta']['version_installee'])) { $GLOBALS['meta']['version_installee'] = 0.0; } else { $GLOBALS['meta']['version_installee'] = (double) str_replace(',', '.', $GLOBALS['meta']['version_installee']); } # NB: str_replace car, sur club-internet, il semble que version_installe soit # enregistree au format '1,812' et non '1.812' // Erreur downgrade // (cas de double installation de fichiers SPIP sur une meme base) if ($spip_version_base < $GLOBALS['meta']['version_installee']) { $commentaire = _T('info_mise_a_niveau_base_2'); } else { $commentaire = _T('texte_mise_a_niveau_base_1'); } $commentaire .= "<br />[" . $GLOBALS['meta']['version_installee'] . "/" . $spip_version_base . "]"; $_POST['reinstall'] = 'non'; // pour copy_request dans admin include_spip('inc/headers'); $admin = charger_fonction('admin', 'inc'); $res = $admin('upgrade', _T('info_mise_a_niveau_base'), $commentaire); if ($res) { echo $res; } else { // effacer les alea pour forcer leur relecture // si jamais ils ont change pendant l'upgrade unset($GLOBALS['meta']['alea_ephemere']); unset($GLOBALS['meta']['alea_ephemere_ancien']); $res = redirige_action_auteur('purger', 'cache', 'upgrade', 'fin=oui', true); echo redirige_formulaire($res); } } }
/** * Affichage de la page de gestion des plugins * * Relance la page si des plugins ont été modifiés, sinon affiche la liste. * * @uses actualise_plugins_actifs() * @param string $retour Inutilisé */ function exec_admin_plugin_dist($retour = '') { if (!autoriser('configurer', '_plugins')) { include_spip('inc/minipres'); echo minipres(); } else { // on fait la verif du path avant tout, // et l'installation des qu'on est dans la colonne principale // si jamais la liste des plugins actifs change, il faut faire un refresh du hit // pour etre sur que les bons fichiers seront charges lors de l'install $new = actualise_plugins_actifs(); if ($new and _request('actualise') < 2) { include_spip('inc/headers'); redirige_par_entete(parametre_url(self(), 'actualise', _request('actualise') + 1, '&')); } else { admin_plug_args(_request('voir'), _request('erreur'), _request('format')); } } }
function exec_demande_mise_a_jour_dist() { // on fait la verif du path avant tout, // et l'installation des qu'on est dans la colonne principale // si jamais la liste des plugins actifs change, il faut faire un refresh du hit // pour etre sur que les bons fichiers seront charges lors de l'install include_spip('inc/plugin'); if (actualise_plugins_actifs()==-1){ include_spip('inc/headers'); redirige_par_entete(self()); } include_spip('inc/presentation'); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page('','','','',true,false,false); echo "<br /><br /><h4><span style='color: red'>", _T('info_message_technique'),"</span><br /> ", _T('info_procedure_maj_version'), "</h4><div>", _T('info_administrateur_site_01'), " <a href='" . generer_url_ecrire("upgrade","reinstall=non") . "'>", _T('info_administrateur_site_02'), "</a></div>"; echo fin_page(); }
function pipeline($action, $val = null) { static $charger; // chargement initial des fonctions mises en cache, ou generation du cache if (!$charger) { if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) { include_spip('inc/plugin'); // generer les fichiers php precompiles // de chargement des plugins et des pipelines actualise_plugins_actifs(); if (!($ok = @is_readable($charger))) { spip_log("fichier {$charger} pas cree"); } } if ($ok) { include_once $charger; } } // appliquer notre fonction si elle existe $fonc = 'execute_pipeline_' . strtolower($action); if (function_exists($fonc)) { $val = $fonc($val); } else { spip_log("fonction {$fonc} absente : pipeline desactive", _LOG_ERREUR); } // si le flux est une table avec 2 cle args&data // on ne ressort du pipe que les donnees dans 'data' // array_key_exists pour php 4.1.0 if (is_array($val) and count($val) == 2 and array_key_exists('data', $val)) { $val = $val['data']; } return $val; }
// ou a defini certaines des constantes que cette fonction doit definir // ===> on execute en neutralisant les messages d'erreur spip_initialisation_core(_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES, _DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES, _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES, _DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES); // chargement des plugins : doit arriver en dernier // car dans les plugins on peut inclure inc-version // qui ne sera pas execute car _ECRIRE_INC_VERSION est defini // donc il faut avoir tout fini ici avant de charger les plugins if (@is_readable(_CACHE_PLUGINS_OPT) and @is_readable(_CACHE_PLUGINS_PATH)) { // chargement optimise precompile include_once _CACHE_PLUGINS_OPT; } else { spip_initialisation_suite(); include_spip('inc/plugin'); // generer les fichiers php precompiles // de chargement des plugins et des pipelines actualise_plugins_actifs(); } // Initialisations non critiques surchargeables par les plugins spip_initialisation_suite(); if (!defined('_LOG_FILTRE_GRAVITE')) { /** niveau maxi d'enregistrement des logs */ define('_LOG_FILTRE_GRAVITE', _LOG_INFO_IMPORTANTE); } if (!defined('_OUTILS_DEVELOPPEURS')) { /** Activer des outils pour développeurs ? */ define('_OUTILS_DEVELOPPEURS', false); } // charger systematiquement inc/autoriser dans l'espace restreint if (test_espace_prive()) { include_spip('inc/autoriser'); }
function cs_init_plugins() { @unlink(_DIR_TMP."couteau-suisse.plat"); include_spip('inc/plugin'); defined('_SPIP20100')?actualise_plugins_actifs():verif_plugin(); if(defined('_LOG_CS')) cs_log(" -- actualise_plugins_actifs() effectue"); }
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', '&')); }
/** * Affichage de la page de gestion des plugins */ function exec_admin_plugin_dist() { if (!autoriser('configurer', 'plugins')) { include_spip('inc/minipres'); echo minipres(); } // on fait la verif du path avant tout, // et l'installation des qu'on est dans la colonne principale // si jamais la liste des plugins actifs change, il faut faire un refresh du hit // pour etre sur que les bons fichiers seront charges lors de l'install include_spip('inc/plugin'); $new = actualise_plugins_actifs(); if ($new and _request('actualise') < 2) { $url = parametre_url(self(), 'actualise', _request('actualise') + 1, '&'); include_spip('inc/headers'); echo redirige_formulaire($url); exit; } // reinstaller SVP si on le demande expressement. if (_request('var_mode') == 'reinstaller_svp') { include_spip('svp_administrations'); svp_vider_tables('svp_base_version'); include_spip('inc/headers'); echo redirige_formulaire(self()); exit; } // le code ci-dessous eut ete bien beau mais... // si l'on veut que les messages d'installation moches des plugins // soient au bon endroit, nous sommes obliges d'appeler la fonction // d'installation a la bonne place, et donc, en php... // car dans le html d'un squelette, encapsule dans un ob_start()/ob_flush(), // la redirection en cas de timeout sur une installation ne se fait pas. /* // on installe les plugins maintenant, // cela permet aux scripts d'install de faire des affichages (moches...) plugin_installes_meta(); // les squelettes ne peuvent pas s'appeler 'admin_plugin' // sinon Z les charge en priorite par rapport a ce fichier exec en PHP set_request('fond', 'svp_admin_plugin'); // on lance l'affichage standard Z include_spip('exec/fond'); */ // liste des erreurs mises en forme $erreur_activation = plugin_donne_erreurs(); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin"); echo debut_gauche('plugin', true); echo pipeline('affiche_gauche', array('args' => array('exec' => 'admin_plugin'), 'data' => recuperer_fond('prive/squelettes/navigation/svp_admin_plugin'))); echo debut_droite('plugin', true); // alerte si mode de compatibilité forcée $mode_compat = defined('_DEV_PLUGINS') ? '<span class="notice">' . _T('svp:alerte_compatibilite') . '</span>' : ''; echo gros_titre(_T('icone_admin_plugin') . $mode_compat, '', false); // message d'erreur au retour d'une operation if ($erreur_activation) { include_spip('inc/filtres_boites'); echo "<div class='svp_retour'>" . boite_ouvrir(_T('svp:actions_en_erreur'), 'error') . $erreur_activation . boite_fermer() . "</div>"; } // afficher les actions realisees s'il y en a eu // (activation/desactivation/telechargement...) echo svp_presenter_actions_realisees(); // on installe les plugins maintenant, // cela permet aux scripts d'install de faire des affichages (moches...) plugin_installes_meta(); echo recuperer_fond('prive/squelettes/contenu/svp_admin_plugin', $_REQUEST, array('ajax' => true)); echo pipeline('affiche_milieu', array('args' => array('exec' => 'admin_plugin'), 'data' => '')); echo fin_gauche(), fin_page(); }
function exec_admin_plugin_dist($retour='') { if (!autoriser('configurer', 'plugins')) { include_spip('inc/minipres'); echo minipres(); } else { // on fait la verif du path avant tout, // et l'installation des qu'on est dans la colonne principale // si jamais la liste des plugins actifs change, il faut faire un refresh du hit // pour etre sur que les bons fichiers seront charges lors de l'install if (actualise_plugins_actifs()==-1 AND _request('actualise')<2){ include_spip('inc/headers'); redirige_par_entete(parametre_url(self(),'actualise',_request('actualise')+1,'&')); } if ($erreur_activation = isset($GLOBALS['meta']['plugin_erreur_activation'])){ $erreur_activation = $GLOBALS['meta']['plugin_erreur_activation']; // l'effacement reel de la meta se fera au moment de l'affichage // mais on la vide pour ne pas l'afficher dans le bandeau haut unset($GLOBALS['meta']['plugin_erreur_activation']); } $format = ''; if (_request('format')!==NULL) $format = _request('format'); // liste ou repertoires $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin"); echo "<br />\n"; echo "<br />\n"; $quoi = _request('voir'); $quoi = $quoi ? $quoi : 'actifs'; echo gros_titre(_T('icone_admin_plugin'),'',false); echo barre_onglets("plugins", $quoi=='actifs'?"plugins_actifs":"admin_plugin"); echo debut_gauche('plugin',true); echo debut_boite_info(true); $s = ""; $s .= _T('info_gauche_admin_tech'); echo $s; echo fin_boite_info(true); // la valeur de retour de la fonction ci-dessus n'est pas compatible // avec ce que fait actualise_plugins_actifs, il faut recalculer. A revoir. $lcpa = liste_chemin_plugin_actifs(); echo pipeline('affiche_gauche', array( 'args'=>array('exec'=>'admin_plugin'), 'data'=>afficher_librairies() ) ); echo debut_droite('plugin', true); // message d'erreur au retour d'un operation if (_request('erreur')){ echo "<div class='erreur_message-plugins'>" . _T(_request('erreur')) . "</div>"; } if ($erreur_activation){ echo "<div class='erreur_message-plugins'>" . $erreur_activation . "</div>"; effacer_meta('plugin_erreur_activation'); } // on fait l'installation ici, // cela permet aux scripts d'install de faire des affichages (moches...) installe_plugins(); $lpf = liste_plugin_files(); $plugins_interessants = @array_keys(unserialize($GLOBALS['meta']['plugins_interessants'])); if (!is_array($plugins_interessants)) $plugins_interessants = array(); echo "<div class='liste-plugins formulaire_spip'>"; echo debut_cadre_trait_couleur('plugin-24.gif',true,'',_T('plugins_liste'), 'plugins'); if ($quoi!=='actifs'){ if ($lpf) echo "<p>"._T('texte_presente_plugin')."</p>"; else { if (!@is_dir(_DIR_PLUGINS)) echo "<p>"._T('plugin_info_automatique_ftp',array('rep'=>joli_repertoire(_DIR_PLUGINS))) . " — "._T('plugin_info_automatique_creer')."</p>"; } } if ($quoi=='actifs' OR $lpf) echo "<h3>".sinon( singulier_ou_pluriel(count($lcpa), 'plugins_actif_un', 'plugins_actifs', 'count'), _T('plugins_actif_aucun') )."</h3>"; $sub = "\n<div class='boutons'>" . "<input type='submit' class='submit save' value='"._T('bouton_enregistrer') ."' />" . "</div>"; $no_button = false; // la liste if ($quoi=='actifs'){ $aff = affiche_les_plugins($lcpa, $lcpa, $format); $no_button = !strlen($aff); $corps = $aff; } elseif ($quoi=='tous') $corps = affiche_les_plugins($lpf, $lcpa, $format); else { $dir_auto = substr(_DIR_PLUGINS_AUTO, strlen(_DIR_PLUGINS)); $lcpaffiche = array(); foreach ($lpf as $f) if (!strpos($f, '/') OR ($dir_auto AND substr($f, 0, strlen($dir_auto)) == $dir_auto) OR in_array($f, $lcpa) OR in_array($f, $plugins_interessants)) $lcpaffiche[] = $f; $corps = affiche_les_plugins($lcpaffiche, $lcpa, $format); } if (!$no_button) $corps .= "\n<br />" . $sub; echo redirige_action_post('activer_plugins','activer','admin_plugin','', $corps); echo fin_cadre_trait_couleur(true); if ($quoi=='actifs') echo affiche_les_extensions(liste_chemin_plugin_actifs(_DIR_EXTENSIONS)); echo "</div>"; echo http_script(" jQuery(function(){ jQuery('#plugins .boutons').hide(); jQuery('.plugins li.item a[rel=info]').click(function(){ var li = jQuery(this).parents('li').eq(0); var prefix = li.find('input.checkbox').attr('name'); if (!jQuery('div.details',li).html()) { jQuery('div.details',li).prepend(ajax_image_searching).load( jQuery(this).attr('href').replace(/admin_plugin|plugins/, 'info_plugin'), function(){ li.addClass('on'); } ); } else { if (jQuery('div.details',li).toggle().is(':visible')) li.addClass('on'); else li.removeClass('on'); } return false; }); jQuery('.plugins li.item input.checkbox').change(function(){ jQuery(this).parents('form').eq(0).find('.boutons').slideDown(); }); }); "); echo pipeline('affiche_milieu', array( 'args'=>array('exec'=>'admin_plugin'), 'data'=>'' ) ); echo fin_gauche(), fin_page(); } }
function pipeline($action, $val=null) { static $charger; // chargement initial des fonctions mises en cache, ou generation du cache if (!$charger) { if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) { include_spip('inc/plugin'); // generer les fichiers php precompiles // de chargement des plugins et des pipelines actualise_plugins_actifs(); if (!($ok = @is_readable($charger))) spip_log("fichier $charger pas cree"); } if ($ok) include_once $charger; } // appliquer notre fonction si elle existe $fonc = 'execute_pipeline_'.strtolower($action); if (function_exists($fonc)) { $val = $fonc($val); } // plantage ? else { include_spip('inc/plugin'); // on passe $action en arg pour creer la fonction meme si le pipe // n'est defini nul part ; vu qu'on est la c'est qu'il existe ! actualise_plugins_actifs(strtolower($action)); spip_log("fonction $fonc absente : pipeline desactive"); } // si le flux est une table qui encapsule donnees et autres // on ne ressort du pipe que les donnees // array_key_exists pour php 4.1.0 if (is_array($val) AND count($val)==2 AND (array_key_exists('data',$val))) $val = $val['data']; return $val; }