/** * mise a jour des donnees si envoi via formulaire * * @link http://doc.spip.org/@enregistre_modif_plugin * @global array $GLOBALS['visiteur_session'] * @global array $GLOBALS['meta'] * @return void */ function enregistre_modif_plugin() { include_spip('inc/plugin'); // recuperer les plugins dans l'ordre des $_POST $test = array(); foreach (liste_plugin_files() as $file) { $test['s' . substr(md5($file), 0, 16)] = $file; } $plugin = array(); foreach ($_POST as $choix => $val) { if (isset($test[$choix]) && $val == 'O') { $plugin[] = $test[$choix]; } } spip_log("Changement des plugins actifs par l'auteur " . $GLOBALS['visiteur_session']['id_auteur'] . ": " . join(',', $plugin)); ecrire_plugin_actifs($plugin); // Chaque fois que l'on valide des plugins, on memorise la liste de ces plugins comme etant "interessants", avec un score initial, qui sera decremente a chaque tour : ainsi un plugin active pourra reter visible a l'ecran, jusqu'a ce qu'il tombe dans l'oubli. $plugins_interessants = @unserialize($GLOBALS['meta']['plugins_interessants']); if (!is_array($plugins_interessants)) { $plugins_interessants = array(); } $plugins_interessants2 = array(); foreach ($plugins_interessants as $plug => $score) { if ($score > 1) { $plugins_interessants2[$plug] = $score - 1; } } foreach ($plugin as $plug) { $plugins_interessants2[$plug] = 10; } // score initial ecrire_meta('plugins_interessants', serialize($plugins_interessants2)); }
function action_desinstaller_plugin_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $plug_file = $securiser_action(); $get_infos = charger_fonction('get_infos','plugins'); $infos = $get_infos($plug_file); $erreur = ""; if (isset($infos['install'])){ // desinstaller $etat = desinstalle_un_plugin($plug_file,$infos); // desactiver si il a bien ete desinstalle if (!$etat) ecrire_plugin_actifs(array($plug_file),false,'enleve'); else $erreur = 'erreur_plugin_desinstalation_echouee'; } else { // en principe on ne passe pas la car pas de bouton sur les plugins non // desinstallables echo ('Ce plugin ne peut pas etre desinstalle et vous ne devriez pas arriver la !'); } if ($redirect = _request('redirect')){ include_spip('inc/headers'); if ($erreur) $redirect = parametre_url($redirect, 'erreur',$erreur); $redirect = str_replace('&','&',$redirect); redirige_par_entete($redirect); } }
function action_desinstaller_plugin_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); list($dir_plugins, $plugin) = explode("::", $arg); $dir_type = "_DIR_PLUGINS"; if (defined('_DIR_PLUGINS_SUPPL') and $dir_plugins == _DIR_PLUGINS_SUPPL) { $dir_type = "_DIR_PLUGINS_SUPPL"; } $installer_plugins = charger_fonction('installer', 'plugins'); $infos = $installer_plugins($plugin, 'uninstall', $dir_type); if ($infos and !$infos['install_test'][0]) { include_spip('inc/plugin'); ecrire_plugin_actifs(array($plugin), false, 'enleve'); $erreur = ''; } else { $erreur = 'erreur_plugin_desinstalation_echouee'; } if ($redirect = _request('redirect')) { include_spip('inc/headers'); if ($erreur) { $redirect = parametre_url($redirect, 'erreur', $erreur); } $redirect = str_replace('&', '&', $redirect); redirige_par_entete($redirect); } }
function action_desinstaller_plugin_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $plugin = $securiser_action(); $installer_plugins = charger_fonction('installer', 'plugins'); $infos = $installer_plugins($plugin, 'uninstall'); if ($infos and !$infos['install_test'][0]) { include_spip('inc/plugin'); ecrire_plugin_actifs(array($plugin), false, 'enleve'); $erreur = ''; } else { $erreur = 'erreur_plugin_desinstalation_echouee'; } if ($redirect = _request('redirect')) { include_spip('inc/headers'); if ($erreur) { $redirect = parametre_url($redirect, 'erreur', $erreur); } $redirect = str_replace('&', '&', $redirect); redirige_par_entete($redirect); } }
/** * Activer un plugin * * @param string $dossier * Chemin du répertoire du plugin * @param array $i * Description en BDD du paquet - row SQL (tableau clé => valeur) * @param string $constante * Constante indiquant le chemin de base du plugin (_DIR_PLUGINS, _DIR_PLUGINS_SUPPL, _DIR_PLUGINS_DIST) * @return void **/ public function activer_plugin_dossier($dossier, $i, $constante = '_DIR_PLUGINS') { include_spip('inc/plugin'); $this->log("Demande d'activation de : " . $dossier); //il faut absolument que tous les fichiers de cache // soient inclus avant modification, sinon un appel ulterieur risquerait // de charger des fichiers deja charges par un autre ! // C'est surtout le ficher de fonction le probleme (options et pipelines // sont normalement deja charges). if (@is_readable(_CACHE_PLUGINS_OPT)) { include_once _CACHE_PLUGINS_OPT; } if (@is_readable(_CACHE_PLUGINS_FCT)) { include_once _CACHE_PLUGINS_FCT; } if (@is_readable(_CACHE_PIPELINES)) { include_once _CACHE_PIPELINES; } include_spip('inc/plugin'); ecrire_plugin_actifs(array($dossier), false, 'ajoute'); $installe = $i['version_base'] ? 'oui' : 'non'; if ($installe == 'oui') { if (!$i['constante']) { $i['constante'] = '_DIR_PLUGINS'; } // installer le plugin au prochain tour $new_action = array_merge($this->work, array('todo' => 'install', 'dossier' => rtrim($dossier, '/'), 'constante' => $i['constante'], 'v' => $i['version'])); array_unshift($this->end, $new_action); $this->log("Demande d'installation de {$dossier}"); #$this->installer_plugin($dossier); } $this->ajouter_plugin_interessants_meta($dossier); $this->actualiser_plugin_interessants(); }
/** * Calcule la liste des plugins actifs et recompile les fichiers caches * qui leurs sont relatifs * * @uses ecrire_plugin_actifs() * * @param bool $pipe_recherche ? * @return bool * true si il y a eu des modifications sur la liste des plugins actifs, false sinon **/ function actualise_plugins_actifs($pipe_recherche = false) { return ecrire_plugin_actifs('', $pipe_recherche, 'force'); }
function chargeur_activer_plugin($plugin) { spip_log('charger_decompresser activer plugin: ' . $plugin); include_spip('inc/plugin'); ecrire_plugin_actifs(array($plugin), false, 'ajoute'); }
function actualise_plugins_actifs($pipe_recherche = false){ if (!spip_connect()) return false; $plugin_actifs = liste_chemin_plugin_actifs(); $plugin_liste = liste_plugin_files(); $plugin_new = array_intersect($plugin_actifs,$plugin_liste); $actifs_avant = $GLOBALS['meta']['plugin']; ecrire_plugin_actifs($plugin_new,$pipe_recherche); // retourner -1 si la liste des plugins actifs a change return (strcmp($GLOBALS['meta']['plugin'],$actifs_avant)==0) ? 1 : -1; }