Valider a4895abc rédigé par cerdic's avatar cerdic
Parcourir les fichiers

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
parent 1eaf7bf9
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+0 −6
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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

ecrire/action/charger_plugin.php

supprimé100644 → 0
+0 −307
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?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);
}

?>

ecrire/exec/charger_plugin.php

supprimé100644 → 0
+0 −69
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?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();
	}
}

?>

ecrire/exec/charger_plugin_descr.php

supprimé100644 → 0
+0 −65
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?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(' &mdash; ',$item['tags'])."</p>\n"
				:'')
			. propre('[->'.$liste[$url_plugin][1].']')
			);
		echo fin_cadre_relief(true);*/
	}
}

?>

ecrire/exec/info_plugin_distant.php

supprimé100644 → 0
+0 −34
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?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]));
	}
}

?>
Chargement en cours