From a4895abc260177da1964c25f288bfe2d52352d89 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Sat, 10 Dec 2011 16:27:38 +0000 Subject: [PATCH] La fonction de chargeur de plugin ou lib disparait du core : tout cela reposait sur le bricolage du flux RSS. SVP/STP reprend ca de facon beaucoup plus propre et robuste, c'est donc lui qui sera en charge de cette fonctionnalite --- .gitattributes | 6 - ecrire/action/charger_plugin.php | 307 ------------ ecrire/exec/charger_plugin.php | 69 --- ecrire/exec/charger_plugin_descr.php | 65 --- ecrire/exec/info_plugin_distant.php | 34 -- ecrire/inc/charger_plugin.php | 555 --------------------- ecrire/inc/plugin.php | 5 +- ecrire/plugin.xml | 13 - ecrire/plugins/afficher_plugin_distant.php | 139 ------ 9 files changed, 3 insertions(+), 1190 deletions(-) delete mode 100644 ecrire/action/charger_plugin.php delete mode 100644 ecrire/exec/charger_plugin.php delete mode 100644 ecrire/exec/charger_plugin_descr.php delete mode 100644 ecrire/exec/info_plugin_distant.php delete mode 100644 ecrire/inc/charger_plugin.php delete mode 100644 ecrire/plugins/afficher_plugin_distant.php diff --git a/.gitattributes b/.gitattributes index 2d335a13cb..793a50d1f1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7,7 +7,6 @@ ecrire/action/ajouter_lien.php -text ecrire/action/annuler_job.php -text ecrire/action/auth.php -text ecrire/action/calculer_taille_cache.php -text -ecrire/action/charger_plugin.php -text ecrire/action/confirmer_email.php -text ecrire/action/confirmer_inscription.php -text ecrire/action/converser.php -text @@ -73,14 +72,11 @@ ecrire/exec/404.php -text ecrire/exec/admin_plugin.php -text ecrire/exec/base_delete_all.php -text ecrire/exec/base_repair.php -text -ecrire/exec/charger_plugin.php -text -ecrire/exec/charger_plugin_descr.php -text ecrire/exec/demande_mise_a_jour.php -text ecrire/exec/fond.php -text ecrire/exec/fond_monobloc.php -text ecrire/exec/index.php -text ecrire/exec/info_plugin.php -text -ecrire/exec/info_plugin_distant.php -text ecrire/exec/informer.php -text ecrire/exec/install.php -text ecrire/exec/plonger.php -text @@ -97,7 +93,6 @@ ecrire/inc/autoriser.php -text ecrire/inc/bandeau.php -text ecrire/inc/boutons.php -text ecrire/inc/charger_php_extension.php -text -ecrire/inc/charger_plugin.php -text ecrire/inc/chercher_logo.php -text ecrire/inc/chercher_rubrique.php -text ecrire/inc/commencer_page.php -text @@ -235,7 +230,6 @@ ecrire/plugin.xml -text ecrire/plugins/afficher_liste.php -text ecrire/plugins/afficher_nom_plugin.php -text ecrire/plugins/afficher_plugin.php -text -ecrire/plugins/afficher_plugin_distant.php -text ecrire/plugins/afficher_repertoires.php -text ecrire/plugins/extraire_boutons.php -text ecrire/plugins/extraire_pipelines.php -text diff --git a/ecrire/action/charger_plugin.php b/ecrire/action/charger_plugin.php deleted file mode 100644 index 1ef4cf35a2..0000000000 --- a/ecrire/action/charger_plugin.php +++ /dev/null @@ -1,307 +0,0 @@ -<?php - -/***************************************************************************\ - * SPIP, Systeme de publication pour l'internet * - * * - * Copyright (c) 2001-2011 * - * 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. * -\***************************************************************************/ - - -/* - * Ce fichier est extrait du plugin charge : action charger decompresser - * - * Auteur : bertrand@toggg.com - * © 2007 - Distribue sous licence LGPL - * - */ - -if (!defined('_ECRIRE_INC_VERSION')) return; - -// http://doc.spip.org/@action_charger_plugin_dist -function action_charger_plugin_dist() { - global $spip_lang_left; - - $securiser_action = charger_fonction('securiser_action', 'inc'); - $arg = $securiser_action(); - - include_spip('inc/minipres'); - include_spip('inc/charger_plugin'); - - // droits : il faut avoir le droit de choisir les plugins, - // mais aussi d'en ajouter -- a voir - include_spip('inc/autoriser'); - if (!autoriser('configurer', 'plugins')) { - echo minipres(); - exit; - } - - $zip = ""; - if ($arg == 'update_flux') { - if (is_array($syndic_plug = @unserialize($GLOBALS['meta']['syndic_plug']))) - foreach ($syndic_plug as $url => $c) - essaie_ajouter_liste_plugins($url); - } - elseif ($arg == 'supprimer_flux' AND $url = _request('supprimer_flux')) { - $syndic_plug = @unserialize($GLOBALS['meta']['syndic_plug']); - unset($syndic_plug[$url]); - ecrire_meta('syndic_plug', serialize($syndic_plug)); - } - elseif (in_array($arg,array('charger_zip','lib','plugins'))) { - // la verification que c'est bien un zip sera faite apres - $zip = _request('url_zip_plugin'); - } - elseif (strlen($arg)) { - // la verification que c'est bien un zip sera faite apres - $zip = $arg; - } - else { - // indetermine : c'est un zip ou une liste - $arg = 'charger_liste_ou_zip'; - $zip = _request('url_zip_plugin2'); - } - - # si premiere lecture, destination temporaire des fichiers - $tmp = sous_repertoire(_DIR_CACHE, 'chargeur'); - # on ne se contenten pas du basename qui peut etre un simple v1 - # exemple de l'url http://nodeload.github.com/kbjr/Git.php/zipball/v0.1.1-rc - - $fichier = (_request('fichier')? - _request('fichier') - :"h".substr(md5($zip),0,8)."-".basename($zip) - ); - # basename par securite notamment dans le cas ou $fichier viens de l'exterieur - $fichier = $tmp.basename($fichier); - $extension = ""; // a verifier - - # au second tour, le zip designe directement le fichier au lieu de l'url - # initiale - if (!file_exists($fichier)) { - # si on ne dispose pas encore du fichier - # verifier que le zip en est bien un (sans se fier a son extension) - # en chargeant son entete car l'url initiale peut etre une simple - # redirection et ne pas comporter d'extension .zip - include_spip('inc/distant'); - $head = recuperer_page($zip, false, true, 0); - - if (preg_match(",^Content-Type:\s*application/zip$,Uims",$head)) - $extension = "zip"; - elseif (preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)$,Uims",$head,$m)){ - $f = $m[1]; - if (pathinfo($f, PATHINFO_EXTENSION)=="zip"){ - $fichier = (_request('fichier')? - _request('fichier') - :"h".substr(md5($zip),0,8)."-".basename($f) - ); - $fichier = $tmp.basename($fichier); - $extension = "zip"; - } - } - // au cas ou, si le content-type n'est pas la - // mais que l'extension est explicite - elseif(pathinfo($zip, PATHINFO_EXTENSION)=="zip") - $extension = "zip"; - - # si ce n'est pas un zip dans un format connu, - # c'est sans doute une liste de plugins - # si on est dans le bon scenario - if (!$extension) { - if ($arg == 'charger_liste_ou_zip') { - essaie_ajouter_liste_plugins($zip); - } - } - } - else { - $extension = pathinfo($fichier, PATHINFO_EXTENSION); - if (!$extension) - $extension = pathinfo($zip, PATHINFO_EXTENSION); - } - # format de fichier inconnu - if (!$extension) { - spip_log("Extension inconnue pour le paquet $fichier venant de $zip"); - include_spip('inc/headers'); - redirige_url_ecrire('charger_plugin'); - } - - # Si definie a '', le chargeur est interdit ; mais on n'aurait de toutes - # facons jamais pu venir ici avec toutes les securisations faites :^) - if (!_DIR_PLUGINS_AUTO) die('jamais'); - - # dispose-t-on du fichier ? - $status = null; - # forcer l'extension du fichier par securite - $fichier = $tmp.basename($fichier,".$extension").".$extension"; - if (!@file_exists($fichier)) { - include_spip('inc/distant'); - $contenu = recuperer_page($zip, $fichier, false,_COPIE_LOCALE_MAX_SIZE); - if (!$contenu) { - spip_log('charger_decompresser impossible de charger '.$zip); - $status = -1; - } - } - - if ($status === null) { - $status = chargeur_charger_zip( - array( - 'zip' => $zip, - 'arg' => $arg, - 'fichier' => $fichier, - 'tmp' => $tmp, - 'extract' => _request('extract') - ) - ); - if (_request('extract')) { - spip_unlink($fichier); - } - } - - // Vers quoi pointe le bouton "suite" - $suite = ''; - - // le fichier .zip est la et bien forme - if (is_array($status)) { - - // Reconnaitre un plugin par son fichier xml - $get_infos = charger_fonction('get_infos','plugins'); - $infos = $get_infos($status['tmpname'], true, ''); - $nom = $description = $type = ""; - if ($infos) { - $nom = $infos['nom']; - $image = $infos['icon']; - $description = $infos['description']; - $type = 'plugin'; - $dest = _DIR_PLUGINS_AUTO; - } else { - $type = 'lib'; - $dest = _DIR_RACINE.'lib/'; - } - - // Fixer son emplacement final - $status['dirname'] = $dest - . basename($status['tmpname']) . '/'; - - // repertoire parent accessible en ecriture ? - if (!@is_dir($dest) - OR !@is_writeable($dest)) { - $retour = _T("erreur"); - $texte = "<p>"._T('plugin_erreur_droit1',array('dest'=>$dest))."</p>" - . "<p>"._T('plugin_erreur_droit2').aide('install0')."</p>"; - } - else - - // C'est un plugin ? - if ($type == 'plugin') { - - $retour = typo($nom); - - // l'icone ne peut pas etre dans tmp/ (lecture http oblige) - // on la copie donc dans local/chargeur/ - if (isset($image) AND $image) { - $dir = sous_repertoire(_DIR_VAR,'chargeur'); - @copy($status['tmpname'].'/'.$image, $image2 = $dir.basename($image)); - $retour = "<img src='".$image2."' style='float:right;' />" - . $retour; - } else - $retour = "<img src='".chemin_image('plugin-24.png')."' style='float:right;' />" - . $retour; - - if (_request('extract')) { - charger_fonction('afficher_plugin','plugins'); // pour plugin_propre - $texte = plugin_propre($description) - . '<p>'._T('plugin_zip_installe_finie',array('zip'=>$zip)).'</p>' - . "<h2 style='text-align:center;'>"._T('plugin_zip_active')."</h2>"; - } else { - $texte = '<p>'._T('plugin_zip_telecharge',array('zip'=>$zip)).'</p>'; - $texte .= liste_fichiers_pclzip($status); - $texte .= "<h2 style='text-align:center;'>"._T('plugin_zip_installer')."</h2>"; - $suite = 'plugins'; - } - } - - // C'est un paquet quelconque - else { - $retour = _T('plugin_charge_paquet',array('name' => basename($status['tmpname']))); - - if (_request('extract')) { - $texte = '<p>'._T('plugin_zip_installe_rep_finie', array('zip'=>$zip, 'rep'=>$status['dirname'])).'</p>'; - } else { - $texte = "<p>"._T('plugin_zip_telecharge',array('zip'=>$zip))."</p>\n"; - $texte .= liste_fichiers_pclzip($status); - $suite = 'lib'; - } - } - } - - // fichier absent - else if ($status == -1) { - $retour = _T('erreur'); - $texte = _T('plugin_erreur_charger', array('zip'=>$zip)); - } - - // fichier la mais pas bien dezippe - else { - $retour = _T('erreur'); - $texte = _T('plugin_erreur_zip',array('status'=>$status)); - } - - - include_spip('inc/install'); // pour bouton_suivant() - - $texte = "<div style='text-align:".$spip_lang_left.";'>$texte</div>\n"; - - $redirect = rawurldecode(_request('redirect')); - // par defaut on revient sur la page admin_plugin - if($redirect == _DIR_RESTREINT OR $redirect == "./"){ - $redirect_annul = generer_url_ecrire('admin_plugin'); - $redirect_form = 'admin_plugin&voir=recents&'.$type.'='.preg_replace(',^[^/]+/|/$,', '', $status['dirname']); - $redirect_action = ''; - } - else{ - $redirect_annul = $redirect; - $redirect_form = preg_replace(',^.*exec\=,', '', $redirect); - if (!$suite) - $texte .= form_hidden(parametre_url(generer_url_ecrire($redirect_form), $type,preg_replace(',^[^/]+/|/$,', '', $status['dirname']))); - $redirect_action = $redirect_form; - } - echo minipres($retour." ", - $suite - ? redirige_action_post(_request('action'), - $suite, - $redirect_action, - '', - form_hidden('?url_zip_plugin='.urlencode($zip).'&extract=oui&fichier='.urlencode($fichier)) - .$texte - ."<a class='suivant' href='" - .$redirect_annul - ."'>"._T('bouton_annuler')."</a>" - .bouton_suivant()) - : generer_form_ecrire($redirect_form, $texte . bouton_suivant()) - ); - exit; - - // 0 = rien, pas charge - // liste de fichiers = retour gagnant - // < 0 = erreur pclzip - // ----- Error codes - // -1 : Unable to open file in binary write mode - // -2 : Unable to open file in binary read mode - // -3 : Invalid parameters - // -4 : File does not exist - // -5 : Filename is too long (max. 255) - // -6 : Not a valid zip file - // -7 : Invalid extracted file size - // -8 : Unable to create directory - // -9 : Invalid archive extension - // -10 : Invalid archive format - // -11 : Unable to delete file (unlink) - // -12 : Unable to rename file (rename) - // -13 : Invalid header checksum - // -14 : Invalid archive size - -# redirige_par_entete($url_retour); -} - -?> diff --git a/ecrire/exec/charger_plugin.php b/ecrire/exec/charger_plugin.php deleted file mode 100644 index 6226359deb..0000000000 --- a/ecrire/exec/charger_plugin.php +++ /dev/null @@ -1,69 +0,0 @@ -<?php - -/***************************************************************************\ - * SPIP, Systeme de publication pour l'internet * - * * - * Copyright (c) 2001-2011 * - * 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. * -\***************************************************************************/ - -if (!defined('_ECRIRE_INC_VERSION')) return; - -include_spip('inc/config'); -include_spip('inc/plugin'); -include_spip('inc/presentation'); -include_spip('inc/layer'); -include_spip('inc/actions'); -include_spip('inc/securiser_action'); - -// http://doc.spip.org/@exec_admin_plugin_dist -function exec_charger_plugin_dist($retour='') { - - if (!autoriser('configurer', 'plugins')) { - include_spip('inc/minipres'); - echo minipres(); - } else { - - $commencer_page = charger_fonction('commencer_page', 'inc'); - echo $commencer_page(_T('icone_admin_plugin'), "configuration", "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); - - echo pipeline('affiche_gauche', - array( - 'args'=>array('exec'=>'charger_plugin'), - 'data'=>'' - ) - ); - - echo debut_droite('plugin', true); - echo gros_titre(_T('icone_admin_plugin'),'',false); - echo barre_onglets("plugins", "charger_plugin"); - // voire si on peut creer le repertoure auto/ sans rien demander - sous_repertoire(_DIR_PLUGINS_AUTO, '', true, true); - - echo "<div class='liste-plugins formulaire_spip'>"; - include_spip('inc/charger_plugin'); - echo formulaire_charger_plugin($retour); - echo "</div>"; - - echo pipeline('affiche_milieu', - array( - 'args'=>array('exec'=>'charger_plugin'), - 'data'=>'' - ) - ); - - echo fin_gauche(), fin_page(); - } -} - -?> diff --git a/ecrire/exec/charger_plugin_descr.php b/ecrire/exec/charger_plugin_descr.php deleted file mode 100644 index 66f5786709..0000000000 --- a/ecrire/exec/charger_plugin_descr.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php - -/***************************************************************************\ - * SPIP, Systeme de publication pour l'internet * - * * - * Copyright (c) 2001-2011 * - * 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. * -\***************************************************************************/ - -if (!defined('_ECRIRE_INC_VERSION')) return; - -include_spip('inc/plugin'); - -// Un morceau d'ajax qui affiche le descriptif d'un plugin a partir -// des listes de plugins a telecharger, dans exec=admin_plugin -// http://doc.spip.org/@exec_charger_plugin_descr_dist - -// http://doc.spip.org/@exec_charger_plugin_descr_dist -function exec_charger_plugin_descr_dist() { - exec_charger_plugin_descr_args( _request('url')); -} - -// http://doc.spip.org/@exec_charger_plugin_descr_args -function exec_charger_plugin_descr_args($url_plugin) { - - if (!autoriser('configurer', 'plugins') OR !$url_plugin) { - include_spip('inc/minipres'); - echo minipres(); - } else { - include_spip('inc/charger_plugin'); - include_spip('inc/texte'); - $liste = liste_plugins_distants($url_plugin); - $item = $liste[$url_plugin][2]; - // les <multi> sont perdus par le lecteur de rss ou le rss lui meme - // on les reinsere ici, en attendant mieux - - $item['titre'] = "<multi>".$item['titre']."</multi>"; - $item['descriptif'] = "<multi>".$item['descriptif']."</multi>"; - - include_spip('inc/presentation'); - $res = debut_cadre_relief('', true) - . recuperer_fond('prive/objets/contenu/plugin_item_rss',$item) - . fin_cadre_relief(true); - - include_spip('inc/actions'); - ajax_retour($res); - /* - echo debut_cadre_relief('', true); - echo propre('<h3><multi>' - .sinon($item['titre'], $liste[$url_plugin][0]).'</multi></h3>' - .'<multi>'.$item['descriptif'].'</multi>' - .'<p>'.$item['lesauteurs']. '</p> ' - . ($item['tags'] - ? "<p>".join(' — ',$item['tags'])."</p>\n" - :'') - . propre('[->'.$liste[$url_plugin][1].']') - ); - echo fin_cadre_relief(true);*/ - } -} - -?> diff --git a/ecrire/exec/info_plugin_distant.php b/ecrire/exec/info_plugin_distant.php deleted file mode 100644 index 39c66b79ef..0000000000 --- a/ecrire/exec/info_plugin_distant.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php - -/***************************************************************************\ - * SPIP, Systeme de publication pour l'internet * - * * - * Copyright (c) 2001-2011 * - * 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. * -\***************************************************************************/ - -if (!defined('_ECRIRE_INC_VERSION')) return; - -include_spip('inc/plugin'); - -include_spip('inc/actions'); -// http://doc.spip.org/@exec_info_plugin_dist -function exec_info_plugin_distant_dist() { - if (!autoriser('configurer', 'plugins')) { - include_spip('inc/minipres'); - echo minipres(); - } else { - $plug = _request('plugin'); - include_spip('inc/charger_plugin'); - include_spip('inc/texte'); - $liste = liste_plugins_distants($plug); - $item = $liste[$plug][2]; - $afficher_plugin_distant = charger_fonction("afficher_plugin_distant","plugins"); - ajax_retour(affiche_bloc_plugin_distant($plug, $liste[$plug][2])); - } -} - -?> diff --git a/ecrire/inc/charger_plugin.php b/ecrire/inc/charger_plugin.php deleted file mode 100644 index bdfa86416f..0000000000 --- a/ecrire/inc/charger_plugin.php +++ /dev/null @@ -1,555 +0,0 @@ -<?php - -/***************************************************************************\ - * SPIP, Systeme de publication pour l'internet * - * * - * Copyright (c) 2001-2011 * - * 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. * -\***************************************************************************/ - - -/* - * Ce fichier est extrait du plugin charge : action charger decompresser - * - * Auteur : bertrand@toggg.com - * © 2007 - Distribue sous licence LGPL - * - */ - -if (!defined('_ECRIRE_INC_VERSION')) return; - -include_spip('inc/plugin'); -include_spip('inc/actions'); - - -// http://doc.spip.org/@formulaire_charger_plugin -function formulaire_charger_plugin($retour='') { - global $spip_lang_left, $spip_lang_right; - - include_spip('inc/filtres'); - include_spip('inc/actions'); - include_spip('inc/presentation'); - - // Si defini comme non-existant - if (!_DIR_PLUGINS) - return ''; - - $auto = ''; - if (_DIR_PLUGINS_AUTO) { - if (!@is_dir(_DIR_PLUGINS_AUTO) - OR !is_writeable(_DIR_PLUGINS_AUTO)) { - $auto = _T('plugin_info_automatique1')."\n" - .'<ol class="spip"><li>'._T('plugin_info_automatique2',array('rep'=>joli_repertoire(_DIR_PLUGINS_AUTO))).'</li>' - .'<li>'._T('plugin_info_automatique3').aide("install0")."</li></ol>" - ."\n<p>"._T('plugin_info_automatique_lib')."</p>"; - } - - if (!$auto) - $auto = interface_plugins_auto($retour); - - } - - $message = _T('plugin_info_automatique_ftp',array('rep'=>joli_repertoire(_DIR_PLUGINS))); - if (!@is_dir(_DIR_PLUGINS)) - $message .= " — "._T('plugin_info_automatique_creer'); - - return debut_cadre_trait_couleur("spip-pack-24.png", true, "", _T('plugin_titre_automatique_ajouter')) - . "<h3>"._T('plugin_titre_automatique')."</h3>" - . "<p>".$message."</p>\n" - . $auto - . fin_cadre_trait_couleur(true); - -} - - -// http://doc.spip.org/@interface_plugins_auto -function interface_plugins_auto($retour) { - - $res = "<div class='verdana2'>"; - - if ($retour) { - $res .= "<div>$retour</div>\n"; - } - - $liste = liste_plugins_distants(); - - $message .= '<div class="explication">'._T('plugin_zip_adresse') - . '<br />'._T('plugin_info_automatique_exemples').'<ul class="spip">'; - - $les_urls = array('http://plugins.spip.net/paquets-spip3.0'); - if (isset($GLOBALS['chargeur_urls_rss']) AND is_array($GLOBALS['chargeur_urls_rss'])) - $les_urls = array_merge($les_urls,$GLOBALS['chargeur_urls_rss']); - foreach($les_urls as $url) - $message .= "<li><a href='$url' onclick=\"jQuery('#url_zip_plugin2').attr('value',jQuery(this).html()).focus();return false;\">" - .$url - ."</a></li>"; - $message .= "</ul></div>"; - - $form = ""; - $form .= "<ul><li class='editer_url_zip_plugin2 obligatoire'>"; - - $form .= "<label for='url_zip_plugin2'>"._T('plugin_zip_adresse_champ')."</label>"; - $form .= $message; - $form .= " - <input type='text' class='text' id='url_zip_plugin2' name='url_zip_plugin2' value='' size='40' />"; - $form .= "</li></ul>"; - $form .= "<div class='boutons' id='loadrss'><input type='submit' value='" - . _T('bouton_valider') - . "'/>\n" - . "</div>\n"; - $form = redirige_action_post('charger_plugin', - '', // arg = 'plugins' / 'lib', a priori - '', - '', - $form); - - $res .= "<div class='formulaire_spip formulaire_editer'>"; - - $res .= $form; - $res .= "</div>\n"; - - - $res .= "</div>\n"; - - $res .= afficher_liste_listes_plugins(); - - if ($liste) { - $res .= afficher_liste_plugins_distants($liste); - - $menu = array(); - $compte = 0; - - $res .= - http_script(" - jQuery(function(){ - jQuery('.plugins li.item a[rel=info]').click(function(){ - var li = jQuery(this).parents('li').eq(0); - if (!jQuery('div.details',li).html()) { - jQuery('div.details',li).prepend(ajax_image_searching).load( - jQuery(this).attr('href').replace(/admin_plugin|plugins|charger_plugin/, 'info_plugin_distant'), {}, function(){ - li.addClass('on'); - } - ); - } - else { - if (jQuery('div.details',li).toggle().is(':visible')) - li.addClass('on'); - else - li.removeClass('on'); - } - return false; - }); - }); - "); - - } - return $res; -} - -function afficher_liste_plugins_distants($liste){ - $res = ""; - if (!$liste) return ""; - - $menu = array(); - $compte = 0; - - $afficher_plugin_distant = charger_fonction('afficher_plugin_distant','plugins'); - $url_page = self(); - foreach ($liste as $url => $info) { - $titre = $info[0]; - $titre = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($titre)))))); - $menu[$titre] = $afficher_plugin_distant($url_page, $url, $info, _request('plugin')==$url); - } - ksort($menu); - - $res .= - "<h3>"._T('plugins_compte',array('count' => count($menu)))."</h3>" - . '<p>'._T('plugin_info_automatique_select',array('rep'=>joli_repertoire(_DIR_PLUGINS_AUTO))).'</p>' - . "<ul class='liste-items plugins distants'>".join("\n",$menu)."</ul>"; - - return $res; -} - -// http://doc.spip.org/@chargeur_charger_zip -function chargeur_charger_zip($quoi = array()) -{ - if (!$quoi) { - return true; - } - if (is_scalar($quoi)) { - $quoi = array('zip' => $quoi); - } - if (isset($quoi['depot']) || isset($quoi['nom'])) { - $quoi['zip'] = $quoi['depot'] . $quoi['nom'] . '.zip'; - } - foreach (array( 'remove' => 'spip', - 'arg' => 'lib', - 'plugin' => null, - 'cache_cache' => null, - 'rename' => array(), - 'edit' => array(), - 'root_extract' => false, # extraire a la racine de dest ? - 'tmp' => sous_repertoire(_DIR_CACHE, 'chargeur') - ) - as $opt=>$def) { - isset($quoi[$opt]) || ($quoi[$opt] = $def); - } - - - # destination finale des fichiers - switch($quoi['arg']) { - case 'lib': - $quoi['dest'] = _DIR_RACINE.'lib/'; - break; - case 'plugins': - $quoi['dest'] = _DIR_PLUGINS_AUTO; - break; - default: - $quoi['dest'] = ''; - break; - } - - - if (!@file_exists($fichier = $quoi['fichier'])) - return 0; - - include_spip('inc/pclzip'); - $zip = new PclZip($fichier); - $list = $zip->listContent(); - - // on cherche la plus longue racine commune a tous les fichiers - $max_n = 999999; - foreach($list as $n) { - $p = array(); - foreach(explode('/', $n['filename']) as $n => $x) { - if ($n>$max_n) - continue; - $sofar = join('/',$p); - $paths[$n][$sofar]++; - $p[] = $x; - } - $max_n = min($n,$max_n); - } - - $total = $paths[0]['']; - $i = 0; - while (isset($paths[$i]) - AND count($paths[$i]) <= 1 - AND array_values($paths[$i]) == array($total)) - $i++; - - $racine = $i - ? array_pop(array_keys($paths[$i-1])).'/' - : ''; - - $quoi['remove'] = $racine; - - // si pas de racine commune, reprendre le nom du fichier zip - // en lui enlevant la racine h+md5 qui le prefixe eventuellement - // cf action/charger_plugin L74 - if (!strlen($nom = basename($racine))) - $nom = preg_replace(",^h[0-9a-f]{8}-,i","",basename($fichier, '.zip')); - - $dir_export = $quoi['root_extract'] - ? $quoi['dest'] - : $quoi['dest'] . $nom.'/'; - - $tmpname = $quoi['tmp'].$nom.'/'; - - // choisir la cible selon si on veut vraiment extraire ou pas - $target = $quoi['extract'] ? $dir_export : $tmpname; - // ici, il faut vider le rep cible si il existe deja, non ? - if (is_dir($target)){ - include_spip('inc/invalideur'); - purger_repertoire($target,array('subdir'=>true)); - } - - // et enfin on extrait - $ok = $zip->extract( - PCLZIP_OPT_PATH, - $target - , - PCLZIP_OPT_SET_CHMOD, _SPIP_CHMOD, - PCLZIP_OPT_REPLACE_NEWER, - PCLZIP_OPT_REMOVE_PATH, $quoi['remove'] - ); - if ($zip->error_code < 0) { - spip_log('charger_decompresser erreur zip ' . $zip->error_code . - ' pour paquet: ' . $quoi['zip']); - return //$zip->error_code - $zip->errorName(true); - } - -/* - * desactive pour l'instant - * - * - if (!$quoi['cache_cache']) { - chargeur_montre_tout($quoi); - } - if ($quoi['rename']) { - chargeur_rename($quoi); - } - if ($quoi['edit']) { - chargeur_edit($dir_export, $quoi['edit']); - } - - if ($quoi['plugin']) { - chargeur_activer_plugin($quoi['plugin']); - } -*/ - - spip_log('charger_decompresser OK pour paquet: ' . $quoi['zip']); - - - - $size = $compressed_size = 0; - $removex = ',^'.preg_quote($quoi['remove'], ',').','; - foreach ($list as $a => $f) { - $size += $f['size']; - $compressed_size += $f['compressed_size']; - $list[$a] = preg_replace($removex,'',$f['filename']); - } - - // Indiquer par un fichier install.log - // a la racine que c'est chargeur qui a installe ce plugin - ecrire_fichier($tmpname.'/install.log', - "installation: charger_plugin\n" - ."date: ".gmdate('Y-m-d\TH:i:s\Z', time())."\n" - ."source: ".$quoi['zip']."\n" - ); - - - - return array( - 'files' => $list, - 'size' => $size, - 'compressed_size' => $compressed_size, - 'dirname' => $dir_export, - 'tmpname' => $tmpname - ); -} - -// pas de fichiers caches et preg_files() les ignore (*sigh*) -// http://doc.spip.org/@chargeur_montre_tout -function chargeur_montre_tout($quoi) -{ - # echo($quoi['dest']); - if (!($d = @opendir($quoi['dest']))) { - return; - } - while (($f = readdir($d)) !== false) { - if ($f == '.' || $f == '..' || $f[0] != '.') { - continue; - } - rename($quoi['dest'] . '/' . $f, $quoi['dest'] . '/'. substr($f, 1)); - } -} - -// renommer des morceaux -// http://doc.spip.org/@chargeur_edit -function chargeur_edit($dir, $edit) -{ - if (!($d = @opendir($dir))) { - return; - } - while (($f = readdir($d)) !== false) { - if ($f == '.' || $f == '..') { - continue; - } - if (is_dir($f = $dir . '/' . $f)) { - chargeur_edit($f, $edit); - } - $contenu = file_get_contents($f); - if (($change = preg_replace( - array_keys($edit), array_values($edit), $contenu)) == $contenu) { - continue; - } - $fw = fopen($f, 'w'); - fwrite($fw, $change); - fclose($fw); - } -} - -// renommer des morceaux -// http://doc.spip.org/@chargeur_rename -function chargeur_rename($quoi) -{ -/* - preg_files() est deficiante pour les fichiers caches, ca aurait pu etre bien pourtant ... -*/ - spip_log($quoi); - foreach ($quoi['rename'] as $old => $new) { - !is_writable($file = $quoi['dest'] . '/' . $old) || - rename($file, $quoi['dest'] . '/'. $new); - } -} - -// juste activer le plugin du repertoire $plugin -// http://doc.spip.org/@chargeur_activer_plugin -function chargeur_activer_plugin($plugin) -{ - spip_log('charger_decompresser activer plugin: ' . $plugin); - include_spip('inc/plugin'); - ecrire_plugin_actifs(array($plugin), false, 'ajoute'); -} - - -// http://doc.spip.org/@liste_fichiers_pclzip -function liste_fichiers_pclzip($status) { - $list = $status['files']; - - $ret = '<b>'._T('plugin_zip_content',array('taille'=>taille_en_octets($status['size']), 'rep'=>$status['dirname'])).'</b>'; - - $l .= "<ul style='font-size:x-small;'>\n"; - foreach ($list as $f) { - if (basename($f) == 'svn.revision') - lire_fichier($status['tmpname'].'/'.$f,$svn); - if ($joli = preg_replace(',^(.*/)([^/]+/?)$,', '<span style="visibility:hidden">\1</span>\2', $f)) { - if (!$vu[dirname($f.'x')]++) - $l .= "<li>".$f."</li>\n"; - else - $l .= "<li>".$joli."</li>\n"; - } - } - $l .= "</ul>\n"; - - include_spip('inc/filtres'); - if (preg_match(',<revision>([^<]+)<,', $svn, $t)) - $rev = '<div>revision '.$t[1].'</div>'; - if (preg_match(',<commit>([^<]+),', $svn, $t)) - $date = '<div>' . affdate($t[1]) .'</div>'; - - return $ret . $rev . $date . $l; -} - -// Attention on ne sait pas ce que vaut cette URL -// http://doc.spip.org/@essaie_ajouter_liste_plugins -function essaie_ajouter_liste_plugins($url) { - if (!preg_match(',^https?://[^.]+\.[^.]+.*/.*[^/]$,', $url)) - return; - - include_spip('inc/distant'); - if (!$rss = recuperer_page($url) - OR !preg_match(',<item,i', $rss)) - return; - - $liste = chercher_enclosures_zip($rss,true); - if (!$liste) - return; - - // Ici c'est bon, on conserve l'url dans spip_meta - // et une copie du flux analise dans tmp/ - ecrire_fichier(_DIR_TMP.'syndic_plug_'.md5($url).'.txt', serialize($liste)); - $syndic_plug = @unserialize($GLOBALS['meta']['syndic_plug']); - $syndic_plug[$url] = count($liste); - ecrire_meta('syndic_plug', serialize($syndic_plug)); -} - -// Recherche les enclosures de type zip dans un flux rss ou atom -// les renvoie sous forme de tableau url => titre -// si $desc on ramene aussi le descriptif du paquet desc -// http://doc.spip.org/@chercher_enclosures_zip -function chercher_enclosures_zip($rss, $desc = '') { - $liste = array(); - include_spip('inc/syndic'); - foreach(analyser_backend($rss) as $item){ - if ($item['enclosures'] - AND $zips = extraire_balises($item['enclosures'], 'a')){ - if ($img = extraire_balise($item['descriptif'], 'img') - AND $src = extraire_attribut($img, 'src')) { - $item['icon'] = $src; - } - foreach ($zips as $zip) - if (extraire_attribut($zip, 'type') == 'application/zip') { - if ($url = extraire_attribut($zip, 'href')) { - $liste[$url] = array($item['titre'], $item['url']); - if ($desc===true OR $desc == $url) - $liste[$url][] = $item; - } - } - } - } - spip_log(count($liste).' enclosures au format zip'); - return $liste; -} - - -// Renvoie la liste des plugins distants (accessibles a travers -// l'une des listes de plugins) -// Si on passe desc = un url, ramener le descriptif de ce paquet -// http://doc.spip.org/@liste_plugins_distants -function liste_plugins_distants($desc = false) { - // TODO une liste multilingue a telecharger - $liste = array(); - - if (is_array($flux = @unserialize($GLOBALS['meta']['syndic_plug']))) { - - foreach ($flux as $url => $c) { - if (file_exists($cache=_DIR_TMP.'syndic_plug_'.md5($url).'.txt') - AND lire_fichier($cache, $rss)) - $liste = array_merge(unserialize($rss),$liste); - } - } - - return $liste; -} - -// http://doc.spip.org/@afficher_liste_listes_plugins -function afficher_liste_listes_plugins() { - if (!is_array($flux = @unserialize($GLOBALS['meta']['syndic_plug']))) - return ''; - - if (count($flux)){ - $ret = '<h3>'._T('plugin_info_automatique_liste').'</h3><ul class="liste-items">'; - //$ret .= '<li>'._T('plugin_info_automatique_liste_officielle').'</li>'; - foreach ($flux as $url => $c) { - $a = '<div class="actions">[<a href="'.parametre_url( - generer_action_auteur('charger_plugin', 'supprimer_flux'),'supprimer_flux', $url).'">'._T('lien_supprimer').'</a>]</div>'; - $time = @filemtime(_DIR_TMP.'syndic_plug_'.md5($url).'.txt'); - $ret .= '<li class="item">'.inserer_attribut(PtoBR(propre("[->$url]")),'title',$url).' ('._T('plugins_compte',array('count' => $c)).') ' - .($time?"<div class='small'>" . _T('sites:info_derniere_syndication').' '.affdate(date('Y-m-d H:i:s',$time)) ."</div>":'') - . $a .'</li>'; - } - $ret .= '</ul>'; - - $ret .= '<div style="text-align:'.$GLOBALS['spip_lang_right'].'"><a href="'.parametre_url( - generer_action_auteur('charger_plugin', 'update_flux'),'update_flux', 'oui').'">'._T('plugin_info_automatique_liste_update').'</a></div>'; - } - - return $ret; -} - -// Si le chargement auto est autorise, un bouton -// sinon on donne l'url du zip -// http://doc.spip.org/@bouton_telechargement_plugin -function bouton_telechargement_plugin($url, $rep) { - // essayer de creer le repertoire lib/ si on en a le droit - if (($rep == 'lib') AND !is_dir(_DIR_RACINE . 'lib')) - sous_repertoire(_DIR_RACINE . 'lib','',false,true); - - if (($rep == 'lib')? - (_DIR_PLUGINS_AUTO AND is_dir(_DIR_RACINE . 'lib')): - (_DIR_PLUGINS_AUTO AND @is_dir(_DIR_PLUGINS_AUTO)) - ) - $bouton = redirige_action_post('charger_plugin', - $rep, // arg = 'lib' ou 'plugins' - '', - '', - "<input type='hidden' name='url_zip_plugin' value='$url' />" - ."<input type='submit' name='ok' value='"._T('bouton_download')."' />", - 'class="noajax"'); - else if ($rep == 'lib'){ - $bouton = "<div class='info_todo'>"._T('plugin_info_automatique1_lib')."\n" - .'<ol><li>'._T('plugin_info_automatique2',array('rep'=>joli_repertoire(_DIR_RACINE . 'lib/'))).'</li>' - .'<li>'._T('plugin_info_automatique3').aide("install0")."</li></ol></div>"; - } - - return _T('plugin_info_telecharger',array('url'=>$url,'rep'=>$rep.'/')).$bouton; - -} - -?> diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php index 7af6de6d46..6c670acb0a 100644 --- a/ecrire/inc/plugin.php +++ b/ecrire/inc/plugin.php @@ -365,10 +365,11 @@ function plugin_controler_necessite($liste, $nom, $version) function plugin_controler_lib($lib, $url) { - if ($url) { + /* Feature sortie du core, voir STP + * if ($url) { include_spip('inc/charger_plugin'); $url = '<br />' . bouton_telechargement_plugin($url, 'lib'); - } + }*/ return _T('plugin_necessite_lib', array('lib'=>$lib)) . $url; } diff --git a/ecrire/plugin.xml b/ecrire/plugin.xml index 6fadd61bf8..7c32e3a50a 100644 --- a/ecrire/plugin.xml +++ b/ecrire/plugin.xml @@ -190,19 +190,6 @@ Le programme est né en 2001 d'une initiative du minirézo, un colle <titre>plugin_titre_modifier</titre> <url>admin_plugin</url> </onglet> -<!-- - <onglet id='admin_plugin' parent="plugins"> - <icone>images/plugin-24.png</icone> - <titre>plugins_liste</titre> - <url>admin_plugin</url> - <args>voir=tous</args> - </onglet> - --> - <onglet id='charger_plugin' parent="plugins"> - <icone>images/spip-pack-24.png</icone> - <titre>plugin_titre_automatique_ajouter</titre> - <url>charger_plugin</url> - </onglet> <pipeline><nom>accueil_encours</nom><action></action></pipeline> <pipeline><nom>accueil_informations</nom><action></action></pipeline> diff --git a/ecrire/plugins/afficher_plugin_distant.php b/ecrire/plugins/afficher_plugin_distant.php deleted file mode 100644 index ed42e651c0..0000000000 --- a/ecrire/plugins/afficher_plugin_distant.php +++ /dev/null @@ -1,139 +0,0 @@ -<?php - -/***************************************************************************\ - * SPIP, Systeme de publication pour l'internet * - * * - * Copyright (c) 2001-2011 * - * 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. * -\***************************************************************************/ - -if (!defined('_ECRIRE_INC_VERSION')) return; -include_spip('inc/charsets'); -include_spip('inc/texte'); - -// http://doc.spip.org/@ligne_plug -function plugins_afficher_plugin_distant_dist($url_page, $zip_file, $info, $expose=false, $class_li="item"){ - static $id_input=0; - static $versions = array(); - static $charger_plugin = null; - - $erreur = false; - $s = ""; - - $titre = $info[0]; - $url_doc = $info[1]; - $info = $info[2]; // recuperer le tableau - - $titre = typo('<multi>'.$titre.'</multi>'); // recuperer les blocs multi du flux de la zone (temporaire?) - $nick = strtolower(basename($zip_file, '.zip')); - $info['prefix'] = $nick; - $plug_file = $zip_file; - - // numerotons les occurences d'un meme prefix - $versions[$info['prefix']] = isset($versions[$info['prefix']]) ? $versions[$info['prefix']] + 1 : ''; - $id = $info['prefix'] . $versions[$info['prefix']]; - - $class = $class_li; - $class .= $actif?" actif":""; - $class .= $expose?" on":""; - $erreur = isset($info['erreur']); - if ($erreur) - $class .= " erreur"; - $s .= "<li id='$id' class='$class'>"; - - - // checkbox pour activer ou desactiver - // si $actif vaut -1, c'est actif, et ce n'est pas desactivable (extension) - /* - if (!$erreur AND $actif>=0){ - $id_input++; - $check = "\n<input type='radio' name='url_zip_plugin' id='label_$id_input' value='O'"; - $check .= $actif?" checked='checked'":""; - $check .= " class='checkbox' />"; - $check .= "<label for='label_$id_input'>".$titre."</label>"; - $s .= "<div class='check'>$check</div>"; - }*/ - - if (!$erreur){ - // bouton de telechargement - if (!$charger_plugin) - $charger_plugin = generer_action_auteur('charger_plugin',"charger_zip","./"); - $balise_img = chercher_filtre('balise_img'); - $action = parametre_url($charger_plugin,'url_zip_plugin',$plug_file); - $s .= "<div class='download'>". - "<a href='$action' title='"._T('plugin_charger')."'>" - . $balise_img(find_in_theme("images/telecharger-16.png"),_T('plugin_charger')) - ."</a></div>" - ; - } - - // Cartouche Resume - $s .= "<div class='resume'>"; - - $desc = $info['descriptif']; - $url_stat = parametre_url($url_page, "plugin",$plug_file); - - $s .= "<h3 class='nom'><a href='$url_stat' rel='info'>".$titre."</a></h3>"; - $s .= "<div class='short'>".couper($desc,60)."</div>"; - if (isset($info['icon']) and $info['icon']) { - include_spip("inc/filtres_images_mini"); - $s.= "<div class='icon'><a href='$url_stat' rel='info'><img src='".$info['icon']."' width='32' height='auto' /></a></div>"; - } - $s .= "</div>"; - - if ($erreur){ - $s .= "<div class='erreur'>"; - foreach($info['erreur'] as $err) - $s .= "$err <br/>"; - $s .= "</div>"; - } - - // afficher les details d'un plug en secours ; la div sert pour l'ajax - $s .= "<div class='details'>"; - if ($expose) - $s .= affiche_bloc_plugin_distant($plug_file, $info); - $s .= "</div>"; - - $s .= "</li>"; - return $s; -} - -// http://doc.spip.org/@affiche_bloc_plugin -function affiche_bloc_plugin_distant($plug_file, $info) { - //recuperer_fond('prive/contenu/item_rss_plugin',$item) - - $s = ""; - if (isset($info['descriptif'])) - $s .= "<div class='desc'>".$info['descriptif']. "</div>"; - - if (isset($info['lesauteurs']) AND trim($info['lesauteurs'])) - $s .= "<div class='auteurs'>" . _T('public:par_auteur') .' '. $info['lesauteurs'] . "</div>"; - if (isset($info['licence'])) - $s .= "<div class='licence'>" . _T('intitule_licence') .' '. $info['licence'] . "</div>"; - - if (trim($info['url'])) { - $lien = $info['url']; - if (!preg_match(',^https?://,iS', $lien)) - $lien = extraire_attribut(extraire_balise($lien,'a'),'href'); - $s .= "<div class='site'><a href='$lien' class='spip_out'>" . _T('en_savoir_plus') .'</a></div>'; - } - - // - // Ajouter les infos techniques - // - $infotech = array(); - - // source zip le cas echeant - $source = _T('plugin_source').' '.trim($plug_file); - - $s .= "<div class='tech'>" - . $source - ."</div>"; - - - return $s; -} -?> -- GitLab