[SPXPLUGINDOWNLOADER] : télécharger les plugins des dépôts

1356

Réponses

  • GariGari Member
    Salut,

    Je rêve d'un truc :
    - Dans la page "média", avoir un sous-répertoire "plugins" à côté de "documents" et "images"
    - Pouvoir uploader un plugin zippé dans ce répertoire
    - aller dans Spxplugindownloader dans le dépôt "local" et retrouver mon zip automatiquement (pas de xml à générer au préalable), et pouvoir toutes les actions classiques (installation, réinstallation, upgrade, désinstallation, etc.).

    Dans le principe, les zip pourraient rester dans le répertoire "medias/plugins", c'est ce qui servirait à Spxplugindownloader à construire son dépôt local à la volée.

    Mon objectif final, c'est de pouvoir mettre un plugin perso ou téléchargé préalablement sur mon poste sur mon site sans avoir à passer par le FTP et la ligne de commande... De cette manière, Spxplugindownloader pourrait gérer l'ensemble des cas de figure :)

    Est-ce qu'il y a une chance que ça apparaisse dans une prochaine version ? {)
  • je-evrardje-evrard Member
    mars 2015 modifié
    jerry a écrit:
    Le dépôt de Bronco n'apparait pas dans la liste des dépôts. C'est normal ???

    Je viens de le mettre mais il y a une erreur 404 pour l'xml du depot:
    [== Indéfini ==]
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>404 Not Found</title>
    </head><body>
    <h1>Not Found</h1>
    <p>The requested URL /repository.xml was not found on this server.</p>
    <p>Additionally, a 404 Not Found
    error was encountered while trying to use an ErrorDocument to handle the request.</p>
    </body></html>
    

    Tu pourras le voir dans plugins/cache/repository.bronco.xml (le repository.bronco.version semble fonctionner)

    alors que l'url semble correct dans le navigateur et dans mon store.
    [== Indéfini ==]
    http://repo.warriordudimanche.net/repository.xml
    

    Je n'ai pas encore l'explication (une redirection ?)

    si je trouve je vous dis. Si tu a l'url direct bronco que je teste si c'est la redirection ou pas. Merci.

    Gari. Merci pour les remarques, j'en tiens compte bien sur. Ca aide a avancer.
  • broncobronco Member
    Ok, je te passe l'url directe: http://egoweb.o2switch.net/repo/repository.xml
    Dis-moi si ça fonctionne ;)
  • je-evrardje-evrard Member
    mars 2015 modifié
    Meme avec l'url direct j'ai un 404 (sur .version aussi a première vue puisque j'ai 0)

    J'ai testé en changeant l'url vers le repository de stef et ça marche. Il semble que ce soit de ton coté.
    [== Indéfini ==]
    <repository>
    		<title><![CDATA[Bronco]]></title>
    		<author><![CDATA[Bronco]]></author>
    		<repositoryurl>https://raw.githubusercontent.com/Pluxopolis/repository/master/repository.xml</repositoryurl>
    		<repositoryversionurl>https://raw.githubusercontent.com/Pluxopolis/repository/master/repository.version</repositoryversionurl>
    		<site>http://warriordudimanche.net</site>
    		<description><![CDATA[Liste des dépots des plugins de Bronco]]></description>
    		<name>bronco</name>
    		<icon>http://warriordudimanche.net/themes/defaut/img/favicon2.png</icon>
    	</repository>
    

    Si je trouve la raison je te dis.
  • broncobronco Member
    mars 2015 modifié
    Ben ça alors, c'est curieux...
    je ne comprends pas de quoi ça pourrait venir... oO
    ça le fait aussi pour le fichier version ou pas ?!
  • Yep aussi pour le fichier version. Du coup temporairement je t'ai hébergé les fichiers xml chez moi et ça marche.
    [== Indéfini ==]
    <repository>
    		<title><![CDATA[Bronco]]></title>
    		<author><![CDATA[Bronco]]></author>
    		<repositoryurl>http://www.secretsitebox.fr/spx/repository/repository-bronco.xml</repositoryurl>
    		<repositoryversionurl>http://www.secretsitebox.fr/spx/repository/repository.version</repositoryversionurl>
    		<site>http://warriordudimanche.net</site>
    		<description><![CDATA[Liste des dépots des plugins de Bronco]]></description>
    		<name>bronco</name>
    		<icon>http://warriordudimanche.net/themes/defaut/img/favicon2.png</icon>
    	</repository>
    

    Je n'ai pas testé les zip mais les infos s'affichent nickel (jolis logo d'ailleurs).

    J'ai cherché mais pas trouvé encore le soucis au niveau des repository xml et version.

    Si quelqu'un a une idée ?

    a+

    jéjé
  • broncobronco Member
    Merci ^^
    Et avec http://warriordudimanche.net/vrac/repository.xml c'est pareil ?
  • je-evrardje-evrard Member
    mars 2015 modifié
    Salut bronco,

    J'ai testé ton lien (impec dans le navigateur) mais avec curl j'obtiens ceci :
    [== Indéfini ==]
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0">
    	<title>Page non trouvée - Warrior du Dimanche</title>
    			
    	<link rel="icon" href="http://warriordudimanche.net/themes/defaut/img/favicon2.png" />
    	
    <link rel="stylesheet" type="text/css" href="http://warriordudimanche.net/themes/defaut/computed_style.css?lastupdate=1424439687"  media="screen" />
    			<link rel="alternate" type="application/rss+xml" title="Fil Rss des articles" href="http://warriordudimanche.net/feed/rss" />
    	<link rel="alternate" type="application/rss+xml" title="Fil Rss des commentaires" href="http://warriordudimanche.net/feed/rss/commentaires" />
    	<!--[if lt IE 9]>
    	<script src="http://warriordudimanche.net/themes/defaut/js/html5ie.js"></script>
    	<script src="http://warriordudimanche.net/themes/defaut/js/respond.min.js"></script>
    	<![endif]-->
    
    ...
    

    En gros la racine de ton site avec dans le title page non trouvée. C'est assez étonnant.

    Pour le tester de ton coté c'est assez simple.

    Tu édites le fichier plugins/cache/repository-stores.xml

    Dans ta branche, tu peux modifier l'url repositoryurl avec la nouvelle (version aussi tu peu) et tu supprimes repository.bronco.version et repository.bronco.xml
    Tu vas ensuite dans le plugin qui va regénérer tes fichiers xml + version dans le cache dont tu peux voir la structure.
    Après il peut s'agir d'un problème avec curl aussi, mais je n'ai pas trouvé pour le moment.

    a+

    jéjé
  • J'obtiens la même chose en effet et je n'arrive pas à fixer le fichier de sortie de curl pour voir ce qui se passe.

    De plus, si on utilise le dépôt de jéjé, les plugins de Bronco apparaissent bien dans la liste des plugins disponibles mais leur téléchargement échoue systématiquement (à mon avis, ce doit être lié au problème de redirection du dépôt).
  • Je viens de m'apercevoir également que les mises à jour de plugins ne sont pas prises en compte : quand on clique sur le bouton "mettre à jour", on a un message nous disant que tout s'est bien passé mais le bouton reste sur "mettre à jour" et les fichiers du plugins ne sont pas modifiés.
  • je-evrardje-evrard Member
    mars 2015 modifié
    Hello Jerry,

    Tu peux me dire quel plugins tu as testé ? On galère mais c'est pour la bonne cause héhé.
  • cfdevcfdev Member
    Jerry Wham a écrit:
    Je viens de m'apercevoir également que les mises à jour de plugins ne sont pas prises en compte : quand on clique sur le bouton "mettre à jour", on a un message nous disant que tout s'est bien passé mais le bouton reste sur "mettre à jour" et les fichiers du plugins ne sont pas modifiés.

    J'ai pareil, spxtinyMce ne passe pas en 2.6... 8.(
  • je-evrardje-evrard Member
    mars 2015 modifié
    Pas de soucis je regarde ça dès que possible.
  • J'ai testé avec un de mes plugins (DebugToolBarForPluxml) et avec un des tiens (spxtynimce - version 2.5) que j'ai pris au hasard des plugins à mettre à jour.
  • je-evrardje-evrard Member
    mars 2015 modifié
    C'est fixé pour tynimce. Un problème de structure de zip et mon depot pas a jour (j'avais laissé le zip en 2.5).

    Il faudrait un truc pour automatiser tout ça, pour éviter les erreurs. Je pense a un depot de zip avec mise a jour auto du fcihier xml (a la bronco un peu). Pour le futur peut-être.
  • Oui j'ai vu. C'est a cause de la fonction rename qui ne marche pas quand le plugin est installé. (ce n'est pas mon cas puisque ma structure n'utilise pas la fonction rename).

    J'ai peut-etre une solution possible...
  • je-evrardje-evrard Member
    mars 2015 modifié
    Bon j'ai trouvé une solution. Je vais la proposer vous me direz ce que vous en pensez...
  • je-evrardje-evrard Member
    mars 2015 modifié
    Donc voici l'idée :

    [list=*]
    [*]on télécharge le dezip du plugin dans le répertoire plugins[/*]
    [*]on renomme le plugin courant si il existe par le nom.tmp[/*]
    [*]on renomme le dossier dézippé par le nom du plugin[/*]
    [*]si ça marche on detruit le dossier nom.tmp[/*]
    [*]si ça marche pas on renomme le nom.tmp par le nom du plugin pour que tout soit comme avant[/*]
    [/list]

    Ce qui donne le code :
    [== Indéfini ==]
    		# téléchargement du fichier distant
    		$zipfile = PLX_PLUGINS.$plugName.'.zip';
    
    		if(!spxplugindownloader::downloadRemoteFile($file, $zipfile)) {
    			plxMsg::Error($plxPlugin->getLang('L_ERR_DOWNLOAD'));
    			header('Location: plugin.php?p=spxplugindownloader&groupe='.$groupe);
    			exit;
    		}
    
    		# dezippage de l'archive
    		require_once(PLX_PLUGINS."spxplugindownloader/dUnzip2.inc.php");
    		$zip = new dUnzip2($zipfile); // New Class : arg = fichier à dézipper
    		$zip->unzipAll(PLX_PLUGINS, "", true, 0755); // Unzip All  : args = dossier de destination
    
    		# on renomme le dossier extrait
    		
    		# ici on renomme le plugin courant
    		if (file_exists(realpath(PLX_PLUGINS.$plugName))) {
    			rename(PLX_PLUGINS.$plugName , PLX_PLUGINS.$plugName.".tmp");
    		}
    		# ici on renomme le plugin zipper (ça marche puique on a renommé l'ancien)
    		rename(PLX_PLUGINS.$plugName.'-'.str_replace('.zip', '', basename($file)), PLX_PLUGINS.$plugName);
    
    		# on supprimer le fichier .zip
    		unlink($zipfile);
    
    		# on teste si le dézippage semble ok par la présence du fichier infos.xml du plugin
    		if(!is_file(PLX_PLUGINS.$plugName.'/infos.xml')){
    			plxMsg::Error($plxPlugin->getLang('L_ERR_INSTALL'));
    			# on arrive pas a lire le fichier info on renomme le plugin tmp par l'ancien nom
    			rename(PLX_PLUGINS.$plugName.".tmp", PLX_PLUGINS.$plugName);
    		}else{
    			# ici on est ok on regarde si on a un plugin tmp
    			if (file_exists(realpath(PLX_PLUGINS.$plugName.".tmp"))) {
    				# on le detruit avec une fonction du plugin (la meme que pluxml classe plugin)
    				spxplugindownloader::deleteDir (realpath(PLX_PLUGINS.$plugName.".tmp"));
    			}
    			if ($depot=="spx"){
    				$hitname = $_POST['buttonhit'][$plugName];
    				file_get_contents('http://www.secretsitebox.fr/spx/hitcounter.php?file='.$hitname.'&url=true');
    			}
    			plxMsg::Info($plxPlugin->getLang('L_INSTALL_OK'));
    		}
    

    Rajout de la fonction de destruction des dossiers dans le plugin.
    [== Indéfini ==]
    /**
    	 * Méthode récursive qui supprime tous les dossiers et les fichiers d'un répertoire
    	 *
    	 * @param	deldir	répertoire de suppression
    	 * @return	boolean	résultat de la suppression
    	 * @author	Stephane F
    	 **/
    	public static function deleteDir($deldir) { #fonction récursive
    
    		if(is_dir($deldir) AND !is_link($deldir)) {
    			if($dh = opendir($deldir)) {
    				while(FALSE !== ($file = readdir($dh))) {
    					if($file != '.' AND $file != '..') {
    						spxplugindownloader::deleteDir(($deldir!='' ? $deldir.'/' : '').$file);
    					}
    				}
    				closedir($dh);
    			}
    			return rmdir($deldir);
    		}
    		return unlink($deldir);
    	}
    

    Ca semble marcher pas mal. Quand pensez-vous ?

    a+

    jeje
  • GariGari Member
    Salut,
    Je ne crois pas avoir vu d'appel aux fonctions deactivate (pour le plugin qui va se faire supprimer) et activate (pour le nouveau plugin), si et seulement si le plugin à migrer était activé bien entendu. Il me semble que c'est pourtant nécessaire si la nouvelle version du plugin embarque une nouvelle fonctionnalité (je me suis déjà fait avoir tout seul).
    A+
    Gari.
  • Je viens de faire la modif. Ça a l'air de fonctionner. Merci.
  • Ceux de Bronco ne fonctionnent toujours pas par contre. :(
  • Merci de la bonne nouvelle Jerry. Pour bronco c'est un autre problème dont personnellement je n'ai pas trouvé l'origine. Bronco si tu est d'accord tu peux m'envoyer tes zips de plugins que je mettrais chez moi en attendant de trouver la solution.

    Mise à jour imminente pour ce petit soucis de rename.

    A plus

    Jeje
  • je-evrardje-evrard Member
    mars 2015 modifié
    ## Version spx 2.2 (20/03/2015) ##
    MOD: traduction
    BUG: changement sur la façon d'installer et de mettre à jour (copie le plugin en plugin.tmp)
    BUG: position du menu
  • Voici ce que j'obtiens pour Bronco. Ça nous aide pas trop... :(
    * About to connect() to repo.warriordudimanche.net port 80 (#0)
    *   Trying 109.234.161.33...
    * connected
    * Connected to repo.warriordudimanche.net (109.234.161.33) port 80 (#0)
    > GET /repository.version HTTP/1.1
    
    Host: repo.warriordudimanche.net
    
    Accept: */*
    
    
    
    * additional stuff not fine transfer.c:1037: 0 0
    * The requested URL returned error: 404
    * Closing connection #0
    URL....: http://repo.warriordudimanche.net/repository.version
    Code...: 404 (0 redirect(s) in 0 secs)
    Content:  Size: -1 (Own: 0) Filetime: -1
    Time...: 0.031356 Start @ 0.03134 (DNS: 0.00155 Connect: 0.015904 Request: 0.015936)
    Speed..: Down: 0 (avg.) Up: 0 (avg.)
    Curl...: v7.26.0
    
  • Je te propose d'ajouter la fonction suivante pour le débug :
    	private static function infosOnCurlJob($curl,$return=false) {
    		if ($return) {	
    			$fp = fopen(dirname(__FILE__).'/curlerrorlog.txt', 'w');
    			curl_setopt($curl, CURLOPT_VERBOSE, true);
    	   		curl_setopt($curl, CURLOPT_STDERR, $fp);
    	   		$curlVersion = curl_version();
    			$result = curl_exec($curl);
    			extract(curl_getinfo($curl));
    	   		$metrics = <<<EOD
    URL....: $url
    Code...: $http_code ($redirect_count redirect(s) in $redirect_time secs)
    Content: $content_type Size: $download_content_length (Own: $size_download) Filetime: $filetime
    Time...: $total_time Start @ $starttransfer_time (DNS: $namelookup_time Connect: $connect_time Request: $pretransfer_time)
    Speed..: Down: $speed_download (avg.) Up: $speed_upload (avg.)
    Curl...: v{$curlVersion['version']}
    EOD;
    			fclose($fp);
    	   		file_put_contents(dirname(__FILE__).'/curlerrorlog.txt', $metrics,FILE_APPEND);
    		} else {
    			$result = curl_exec($curl);
    		}
    		return $result;
    	}
    
    et de remplacer les appels à
    $result = curl_exec($curl);
    
    par
    $result = spxplugindownloader::infosOnCurlJob($curl,false);
    
    ou
    $result = spxplugindownloader::infosOnCurlJob($curl,true);
    
    si on veut que le résultat s'affiche dans le fichier curlerrorlog.txt dans le dossier du plugin spxplugindownloader (qu'il faudra renommer en spxdownloader par la suite quand tu auras achevé le traitement des thèmes. J'ai vu que tu as commencé...).
  • je-evrardje-evrard Member
    mars 2015 modifié
    Merci Jerry.

    Ok je teste ça et je rajoute. Ca va nous servir pour les logs.

    Oui, j'ai commencé les thèmes dans la meme logique que les plugins, j'ai caché le menu pour le moment et j'ai ecore du boulot.

    Pour la suite je vais intégrer un moteur de recherche par dépot et/ou par plugins.

    a+

    jéjé
  • broncobronco Member
    Salut les gars, je débarque un peu après quelques jours épiques (et colégram, allez ^^)
    Je lis les messages, j'installe et je teste.
    Je vous tiens au courant ;-)
  • Et bien moi, je vais couper du bois (non, je ne vous montrerai pas ma culotte et ce qu'il y a dedans :D ).
  • Salut bronco content d'avoir de tes nouvelles. Je suis de promenade dans les plaines de l'ouest, de retour lundi.
  • broncobronco Member
    Salut ! Profite bien de la balade et profite de l'instant présent ;-)
    Bon, après test en local chez moi:
    le zip du repo fonctionne dans le navigateur,
    si je fais un curl dpuis une page de test, le zip se télécharge normalement.
    Par contre, dès que je teste depuis la page de plugins, j'ai une erreur L_ERR_INSTALL. (ligne 199 d'admin-plugin.php)

    Après avoir jeté un oeil sur ton code, je remarque que ce n'est pas une erreur L_ERR_DOWNLOAD (ligne 175): si le fichier n'était pas accessible, ne serais-ce pas ici que l'erreur apparaîtrait ?

    D'ailleurs, une fois supprimé le return true inhibant la fonction is_RemoteFileExists (ligne 111 du script du plugin) je n'obtiens pas d'erreur...
    Quid ?!

    Au passage, j'en profite pour dire que c'est du très beau boulot: on a vraiment le plaisir de la navigation sur un market et pas le soucis de l'install des plugins... vraiment que du tout bon :-) GG
Connectez-vous ou Inscrivez-vous pour répondre.