Gestionnaire pour dépôt de plugins

bazooka07bazooka07 PluXml Lead Developer, Moderator
décembre 2018 modifié dans Plugins
Bonjour,

Si vous recherchez un outil pour créer un catalogue ou une vitrine des plugins sur votre site,
vous pouvez voir une démo ici: https://kazimentou.fr/pluxml-plugins2/

Pour l'installer, c'est simple:
[list=*]
[*]créez sur votre serveur http://www.monsite.com un dossier, disons depot, et un sous-dossier plugins[/*]
[*]dépliez l'archive zip dans le dossier depot. vous devez avoir un fichier index.php et un autre fichier php qui fournit quelques explications pour un futur développement[/*]
[*]déposez toutes les archives zip de vos plugins dans le sous-dossier plugins[/*]
[*]ouvrez votre navigateur à la page [/*]
[/list]


Le gestionnaire de dépôt, les icônes hors plugins et la feuille de style CSS sont toutes embarquées dans le fichier index.php
Vous pouvez :
[list=*]
[*]visualiser toutes les versions des plugins[/*]
[*]visualiser le contenu infos.xml de chaque version des plugins[/*]
[*]télécharger une archive zip d'un plugin[/*]
[*]télécharger le catalogue du site au format JSON, plus facile à exploiter que le format XML, si vous souhaitez exploiter le catalogue avec votre propre script php (lire le fichier index-demo )[/*]
[*]vous abonner au flux RSS du dépôt pour connaitre les 10 dernières versions des plugins[/*]
[/list]

Et c'est aussi léger que Pluxml :)

Télécharger la dernière version
version 2018-12-13 : divers fix + responsive design Iphone et Ipad + création à la volée d'un dossier assets
version 2017-07-10: divers fix
version 2017-05-23: Changement charte graphique. Fonction de callback pour JSONP
version 2015-10-30 : Gestion d'un cache pour les icônes des plugins.
version 2015-11-01 : Correction sur les "enclosures" dans le flux RSS. Ajout de balises" h3" et d'attribut "alt" dans les balises "img" pour améliorer la lecture dans un navigateur en mode texte (lynx).

A++

Réponses

  • Bonjour bazooka07,

    Merci, je vais tester ce petit script
  • je-evrardje-evrard Member
    octobre 2015 modifié
    Hello,

    @bazooka

    Pour eviter les erreurs fonction du php version (version 5.4 vs 5.3) on peut remplacer la ligne 239 :
    [== Indéfini ==]
    $lastRelease = $versions[array_keys($versions)[0]];
    

    par ceci
    [== Indéfini ==]
    $tmpversion = array_keys($versions);
    $lastRelease = $versions[$tmpversion[0]];
    

    Faire de meme avec la ligne 145 pour le sendRSS

    Sinon c'est intéressant (il y a de bonnes idées) et merci pour le partage.

    a+

    jéjé
  • bazooka07bazooka07 PluXml Lead Developer, Moderator


    Merci pour ton retour.

    Ces vieilles versions de PHP me laissent perplexes. Sont-elles encore utilisées ?
    Sur php.net, la plus "vieille" (old) version à télécharger est la 5.4.45 http://php.net/downloads.php#v5.4.45
    Même Free qui se trainait une antique version 5.1.3RC4-dev est en train de basculer vers la version 5.6: http://les.pages.perso.chez.free.fr/migrations/php5v6.io
    Ces vieilles versions deviennent même suspectes. Cela sous-entend que d'autres services sur le serveur ne sont pas mis à jour. Et donc failles de sécurité latentes.

    Mais vu l'effort demandé, je veux bien procéder à un petit ajustement.
  • DjbWebmasterDjbWebmaster Member
    octobre 2015 modifié
    Bonjour à tous,

    Je viens de tester hier soir l'apiV3 de github pour l'affichage de ses dépôts,
    il me reste encore des petites modifs à réaliser notamment l'affichage des icons pour chaque plugin.

    il me manque aussi la gestion des versions.

    visible ici
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    octobre 2015 modifié
    Bonjour,

    Petite correction dans la fonction getPluginIcon() :
    il manque un break dans la boucle for
    Je n'ai pas de Mac mais il semble que l'OS crée un fichier supplémentaire ._icon.png. Ce qui empêche l'affichage correcte de l'icône. Du coup, je filtre le nom des entrées de l'archive zip, de façon plus stricte.
    On accepte aussi les icônes /icon.png, /icon.gif et /icon.jpg. Comme Pluxml.

    Et aussi, ajout d'une constante VERSION pour faciliter le suivi. L'archive pour récupérer le source de la page porte le numéro de version maintenant.
    http://www.kazimentou.fr/pluxml-plugins2/repository2-2015-10-29.zip

    Source sur Github https://github.com/bazooka07/Pluxml-repository

    A++
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    octobre 2015 modifié
    Bonjour,

    Petit ajout:
    Gestion d'un cache pour les icônes des plugins :
    Evite d'ouvrir 2 fois les archives des plugins à la génération des caches. Aux visites suivantes, utilisation seule du cache du catalogue et du cache des icones.
    En théorie la page devrait s'afficher plus vite
    Utilisation du tag <enclosure> dans le flux RSS pour afficher l'icône du plugin si elle existe.

    A++
  • niqnutnniqnutn Member
    octobre 2015 modifié
    j'ai vu que le RSS n'était pas valide.
    https://validator.w3.org/feed/check.cgi?url=http%3A%2F%2Fwww.kazimentou.fr%2Fpluxml-plugins2%2Findex.php%3Frss#l18
    Sorry

    This feed does not validate.

    line 18, column 2: Missing enclosure attribute: length (6 occurrences) [help]

    <enclosure url="http://www.kazimentou.fr/pluxml-plugins2/index.php?plugin= ...
    ^

    line 18, column 2: Unexpected lenght attribute on enclosure element (6 occurrences) [help]

    <enclosure url="http://www.kazimentou.fr/pluxml-plugins2/index.php?plugin= ...
    ^

    In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendation.

    line 47, column 0: description should not contain link tag [help]

    <description>Présente une pagination moderne. Gére les flèches gauche et d ...


    <enclosure url="http://www.kazimentou.fr/pluxml-plugins2/index.php?plugin=plxMyPager&icon"; lenght="3" type="image/1446113094" />


    <description>Présente une pagination moderne. Gére les flèches gauche et droite du clavier. Rajoute les liens <link rel="prev|next" href="...". Gére la pagination d'un groupe de pages statiques, dans les pages d'un article. /> dans l'entête de la page.


    edit:

    est ce que c'est possible d'ajouter
    [== PHP ==]
    function getPluginName(ZipArchive $zipFile) {
    	$result = false;
    	for ($i=0; $i<$zipFile->numFiles; $i++) {
    		$filename = $zipFile->getNameIndex($i);
    		if (substr($filename, -4) == '.php') {
    			$content = $zipFile->getFromName($filename);
    			if (preg_match('/\bclass\s+(\w+)\s+extends\s+plxPlugin\b/', $content, $matches) === 1) {
    				$result = $matches[1];
    				break;
    			}
    			else {
    				$result=$filename;
    				$result = strstr($filename, '/' , true);
    			}		}
    	}
    	return $result;
    }
    
    pour récupérer le nom du dossier dans le cas d'un thème pour PluXml sinon on a rien.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Merci pour ta remarque.
    Erreur typographique. En fait surtout la longueur de l'enclosure n'était pas correcte.
    Pour ta demande, cela sera plutôt cela pour être plus strict :
    [== PHP ==]
    function getPluginName(ZipArchive $zipFile) {
    	$result = false;
    	for ($i=0; $i<$zipFile->numFiles; $i++) {
    		$filename = $zipFile->getNameIndex($i);
    		if (substr($filename, -4) == '.php') {
    			$content = $zipFile->getFromName($filename);
    			if (preg_match('/\bclass\s+(\w+)\s+extends\s+plxPlugin\b/', $content, $matches) === 1) {
    				$result = $matches[1];
    				break;
    			} else if (preg_match('/^([\w-]+)\/(?:article|static[^\.]*)\.php$/', $filename, $matches) === 1) {
    				// archive zip d'un théme demandé par niqnutn
    				$result = $matches[1];
    				break;
    			}
    		}
    	}
    	return $result;
    }
    
    A++
  • merci.

    pour l'erreur qui reste, ne faut il pas ajouter la section CDATA ?
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Ce n'est pas une erreur mais un avertissement sur un risque potentiel.
    J'ai essayé avec CDATA. Cela ne change rien pour le validateur mais Firefox ne l'interprête pas.
  • effectivement. j'ai pas vu que le flux rss était validé.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    janvier 2017 modifié
    Petite mise à jour :
    [list=*]
    [*]affiche un message d'erreur si la class Zip n'est pas installée[/*]
    [*]export au format xml[/*]
    [/list]

    Pour le format xml, j'ai repris le format utilisé par les plugins plxMyPluginDownloader et spxplugindownloader, en l'étoffant comme suit :
    [== XML ==]
    <?xml version="1.0" encoding="UTF-8"?><document>
       <repo>
    		<repo_title>...</repo_title>
    		<repo_author>...</repo_author>
    		<repo_url>...</repo_url>
    		<repo_version_url>...</repo_version_url>
    		<repo_version>...</repo_version>
    		<repo_site>...</repo_site>
    		<repo_description><![CDATA[...]]></repo_description>
    		<repo_name>...</repo_name>
    		<repo_icon>...</repo_icon>
        </repo>
       <plugin>
          <title><![CDATA[Titre du plugin]]></title>
          <author><![CDATA[Mon nom]]></author>
          <version>1.6</version>
          <date>01/10/2013</date>
          <site>http://www.monsite.net/</site>
          <description><![CDATA[Plugin x detail]]></description>
          <name>pluginname</name>
          <file>https://github.com/mongit/gutuma/pluginname.1.6.zip</file>
          <icon>https://github.com/mongit/gutuma/pluginname.png</icon>
       </plugin>
       <plugin>
          ...
       </plugin>
    </document>
    
    Ce qui permet d'ajouter plus facilement le site dans un catalogue de dépôts

    Voir la démo.
    Voir en dessous du tableau de plugins pour télécharger le source du gestionnaire de plugins. Ou sur Github

    Bonne année
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    mai 2017 modifié
    Mise à jour de mon gestionnaire de dépôt de plugins :
    affichage sous forme de vignettes de plugins
    prise en compte du paramètre callback dans l'url pour télécharger les infos des dernières versions de plugins et les exploiter avec Javascript. Cela permet de contourner les limites de certains serveurs avec allow_url_fopen et curl

    Voir le dépôt: http://kazimentou.fr/pluxml-plugins2/
    voir la fonction de callback, nommée test par exemple: http://kazimentou.fr/pluxml-plugins2/index.php?callback=test
    Télécharger le programme source : http://kazimentou.fr/pluxml-plugins2/repository2-2017-05-24.zip
    et sur Github: https://github.com/bazooka07/Pluxml-repository
  • DudyDudy Member
    super le style j'aime bien, il faudrait juste faire le trie par date, le reste c'est impeccable,

    bravo
  • j'ai un petit problème, un plugin qui ne veut pas apparaître.
    https://blog.niqnutn.com/data/medias/Partage/PluXml/plugins-repository/plxForkAwesome-1.0.10.zip
    alors que le premier est bien visible:
    https://blog.niqnutn.com/data/medias/Partage/PluXml/plugins-repository/plxForkAwesome-1.0.3.zip

    soit j'ai fait une erreur en créant l'archive soit c'est le format de version qui pose problème.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    La version que tu utilises est la "2015-10-29"
    La version actuelle est la "2017-07-10"

    Il y a quelques corrections de bugs entre les 2 versions.
  • j'ai testé avec la dernière version que tu utilises mais je retrouve le même problème.
  • Hello Bazooka07,
    Je m'adresse à toi car j'ai besoin de quelque chose qui ressemble à ton plugin.
    Je m'explique :
    dans un répertoire j'y mets mes quelques scripts et apps. Un fichier .xml est présent dans chaque script. J'aurais aimé affiché comme dans ton gestionnaire de dépôt, les apps avec les informations du fichier xml, tout simplement récupérer les infos du fichier xml et les afficher à l'écran comme ton gestionnaire. Je pense que cela doit être faisable mais le php est le côté obscure de la force :D

    Peux-tu m'aider ?

    Merci

    Jol
  • @bazooka07: merci, ça fonctionne :)
  • SudwebdesignSudwebdesign Member
    décembre 2018 modifié
    Slt Bazooka07,

    J'utilise avec bonheur ton outil et j'ai du faire quelques modifs afin que l'envoi de l'archive tourne bien chez free avec des plugins dont le zip et plus gros que 1Mo.

    Ligne 385 : (envoi du zip)
    				} else if(isset($_GET['download'])) { // envoi l'archive zip du plugin
    					$testfopen = @fopen($download);
    					if($testfopen){
    						unset($testfopen);
    						header('Content-Type: application/zip');
    						header('Content-Length: ' . filesize($download));
    						header('Content-Disposition: attachment; filename="'.basename($download).'"');
    						readfile($download);
    						exit;
    					} else {//Fix free.fr readfile limited to 1M
    						header_remove();
    						header('Location: '.$download);
    					}
    				}
    
    free.fr limite la lecture de fichier a 1Mo (readfile, fopen et get_file_content) popen est absent :|

    Je vais voir pour kzdownload et plxHrefDownload, je sens que ça va faire la même, merci free :)

    J'avais un problème de choix d’icône aussi (il s’arrêtait a la première icône trouvée icon.(gif|jpg|png) et pour ckeditor_PHP il se trompait.

    La ligne 167 :
    if(preg_match('#/icon\.(jpg|png|gif)$#', $filenameIcon, $matches)) {
    
    Est devenue :
    if(preg_match('#'.$keyName.'/icon\.(jpg|png|gif)$#', $filenameIcon, $matches)) {
    
    Et c'est bon (pour mon cas)

    Grand merci a Toi

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    décembre 2018 modifié
    Bonjour,

    Pour le premier point, je préfère me baser sur la taille du fichier et le nom du serveur ($_SERVER).
    J'ai fixé une limite selon les serveurs 1Mo chez Free.fr et 2Mo pour les autres. Je pense qu'on peut monter jusqu'à 4Mo.
    Pour les petits plugins pas de changement
    pour les gros plugins, si la taille est plus gros que la limite fixée, on bascule avec une redirection temporaire 307

    Ok, pour le deuxième point

    3 sites pour tester :
    - https://kazimentou.fr/pluxml-plugins2 ( OVH / Kimsufi )
    - https://echecs-annonay.fr/repo ( LWS )
    - http://kazimentou.free.fr/repo ( Free.fr )

    Où as tu trouvé cette limite de 1 Go ?
    Je pensais qu'elle était fixée par la constante output_buffering dans le fichier php.ini. Sauf que chez Free.fr, elle est égale à 0 au lieu de 4Mo pour les autres hébergeurs :
    - https://kazimentou.fr/pluxml-plugins2/env.php
    - https://echecs-annonay.fr/repo/env.php
    - http://kazimentou.free.fr/repo/env.php

    Un bout de code pour voir l'environnement de PHP :
    [== PHP ==]
    <?php
    header('Content-Type: text/plain; charset=utf-8');
    echo 'PHP version '.phpversion()."\n\n";
    foreach(explode("\n", trim('
    output_buffering
    post_max_size
    upload_max_filesize
    max_file_uploads
    ')) as $varname) {
    	printf("%-20s : %s\n", $varname, ini_get($varname));
    }
    echo "\n";
    ?>
    

    Mon dépôt Github sur ce sujet :
    https://github.com/bazooka07/Pluxml-repository.git
  • SudwebdesignSudwebdesign Member
    décembre 2018 modifié
    bazooka07 a écrit:
    Pour le premier point, je préfère me baser sur la taille du fichier et le nom du serveur ($_SERVER).
    J'ai fixé une limite selon les serveurs 1Mo chez Free.fr et 2Mo pour les autres. Je pense qu'on peut monter jusqu'à 4Mo.
    Pour les petits plugins pas de changement
    pour les gros plugins, si la taille est plus gros que la limite fixée, on bascule avec une redirection temporaire 307
    Oui c'est clair et bien mieux pour le serveur, je vais intégrer ça ;)
    bazooka07 a écrit:
    Où as tu trouvé cette limite de 1 [del]G[/del]Mo ?
    Avec plein de var_dump();exit; pendant les recherches du bogue (en direct), par exemple a partir de la ligne 395 (index.php):
    [== PHP ==]
    /*
    						header('Content-Type: application/zip');
    					    header('Content-Length: ' . filesize($download));
    					    header('Content-Disposition: attachment; filename="'.basename($download).'"');
    */
    						readfile($download);
    						var_dump($download);exit;//le warning apparait
    
    
    J'ai eu droit a :
    Warning: readfile(): File size is limited to 1M in depot.php on line 398
    bazooka07 a écrit:
    Mon dépôt Github sur ce sujet :
    https://github.com/bazooka07/Pluxml-repository.git
    C'est fourché, car il y a quelque modif que j'ai faite pour mon ancien serveur (php-5.5) const réagissait mal (en local) si la déclaration est avec des variable :/ et 2-3 petits trucs pour le personnaliser comme l'entête responsive (taille des caractères), le nom de répertoire...

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    décembre 2018 modifié
    C'est clair :
    - Impossible de définir des constantes à partir de variables, l'expression est évaluée à la compilation du script. C'est sensé s'exécuter plus vite.
    - define est évalué à l'exécution. On peut utiliser les variables qui existent. Dans ce cas-ci, le resultat est plutôt des variables qui ne sont pas modifiables.

    Il y a une intéressante discussion sur Stackoverflow ( anglophone ) :
    https://stackoverflow.com/questions/2447791/define-vs-const

    Pour le responsive design, c'est clair que je n'ai pas prévu pour un smartphone. Je ne maîtrisais pas encore trop le sujet à l'époque.
    J'y jetterai un oeil dès que j'aurai un moment.
  • bazooka07 a écrit:
    Pour le format xml, j'ai repris le format utilisé par les plugins plxMyPluginDownloader et spxplugindownloader, en l'étoffant comme suit :

    Ce qui m'arrange bien évidemment d'autant plus que voudrais bien faire fonctionner ma page de téléchargement et mon plugin installeurPlugins avec ton dépôt.

    En fait, j'avais choisi Repositorix parce qu'il propose les deux fichiers repository.xml et repository.version nécessaires au fonctionnement de plxMyPluginDownloader.

    Mon système étant au point, je cherche à l'améliorer d'autant plus que je comprends maintenant les avantages que tu m'a détaillé lors de notre échange à ce sujet mais ne sais pas comment le greffer la ligne intéressante étant...
    [== Indéfini ==]
    # infos sur le repository
    $repository_url = 'https://ressources.pluxopolis.net/repositorix/'; # avec un slash à la fin
    $repository_xmlfile = 'repository.xml';
    $repository_version = 'repository.version';
    

    Comment faire ?
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Je n'ai jamais trop adhéré au format XML.

    Je privilégie le format JSON qui se va très bien avec Javascript.

    Je suis en train de réviser mon gestionnaire de dépôt pour :
    - héberger les plugins et thèmes en parallèle. Je pourrai éventuellement gérer les scripts plus tard même si leurs utilisations ne semblent flous
    - des catalogue au format JSON de tous les plugins, thêmes, scripts complets avec lien de téléchargement et url directe pour les icônes et aperçus des thêmes
    - les catalogues se regénèrent automatiquement dès qu'on ajoute un plugin ou un thême dans le dossier qui va bien ou si les catalogues sont trop vieux (sécurité)
    - préserver l'interface existant avec les liens qu'il y a sur les forums

    J'ai commencé à travailler sur mon plugin kzUploader pour utiliser ces catalogues "en live". Je privilégie Javascript pour m'affranchir descontraintes imposés par certains hébergeurs (Free.fr, ...). Je ne serai donc pas gêné par les interdictions sur curl(), file_get_contents(),...

    Par contre, je suis tombé sur un hic. Les dépôts qui sont encore en http ne passeront pas si on a un site en https et il n'y a pas de solution pour un site dynamique.

    La seule solution que je vois est un "générateur de site statique". En clair, on génére une page d'accueil en pure HTML et les catalogues sur son PC et on synchronise le bazar avec une forge comme github, gitlab ou framagit avec Git.
  • jack31jack31 Member
    décembre 2018 modifié
    bazooka07 a écrit:
    J'ai commencé à travailler sur mon plugin kzUploader pour utiliser ces catalogues "en live". Je privilégie Javascript pour m'affranchir descontraintes imposés par certains hébergeurs (Free.fr, ...). Je ne serai donc pas gêné par les interdictions sur curl(), file_get_contents(),...

    Cela est génial ! :)
  • cpalocpalo Member
    février 2022 modifié

    Bonjour,
    je viens d'installer la version du 10 janvier 2019
    Pas de souci.. les trois dossiers (plugins, themes, scripts) s'affichent.
    Les plugins et les thèmes s'affichent comme attendus.
    Par contre c'est pour les scripts que j'ai un problème car il m'affiche que le dépôt ne contient aucun script; alors que pour tester j'y ai déposé tinymce_5.10.3.zip
    Est-ce que je dois modifier au préalable les noms de fichiers pour qu'ils soient pris en compte?
    Faut-il créer un fichier xml similaire à celui des thèmes ou des plugins?
    Cordialement

Connectez-vous ou Inscrivez-vous pour répondre.