#1 07-08-2011 17:18

Brice
Inscription : 17-02-2010
Messages : 45
Site Web

Création de plugin

Resalut Jonas,

Comme je l'évoquais dans mon précédent post, j'envisage de me lancer dans la création d'un plugin pour GCweb permettant de sélectionner quel type de lightbox l'on souhaite mettre en place et gérer les paramètres pour chacun des scripts lightbox.

Pour ce faire, je pense avoir un fichier config_lightboxes.php dans /conf/ permettant d'ajouter les champs dans la page de config de GCweb et un fichier render_lightboxes.php dans /plugins/ qui se charge d'ajouter les infos dans les pages en frontend.

À moins que l'on puisse avoir plusieurs render_....php, le fichier correspondant à la configuration étant le seul appelé (gain de temps au niveau du traitement ?)

De plus, dans la doc, je ne vois pas comment on fait pour récupérer les champs de configuration. Pourrais-tu m'indiquer comment on fait cela ?

En te remerciant par avance. À bientôt.

Hors ligne

#2 07-08-2011 17:48

jonas
Administrator
Inscription : 25-06-2006
Messages : 729

Re : Création de plugin

Créer un fichier /conf/config_lightboxes.php est une bonne idée. Si tu veux que l'utilisteur puisse configurer ce fichier depuis sont navigateur web tu peux créer un /config_<tonplugin>.php http://jonas.tuxfamily.org/wiki/gcweb/d … fix_config mais ... ça va beaucoup compliquer ton travail et je ne trouve pas que ce soit indispensable.

À moins que l'on puisse avoir plusieurs render_....php,

Pas compris la question mais tu peux avoir plusieur render_....php pour un même plugin (mais ça n'a aucun intéret)

De plus, dans la doc, je ne vois pas comment on fait pour récupérer les champs de configuration. Pourrais-tu m'indiquer comment on fait cela ?

C'est à toi de le gérer. Dans ton render_....php : <?php include PATH_GCWEB.'/conf/plugin_machin.php' ?> par exemple.

PS : Bon demaine je reprend le TAF sad les réponse seront certainement moi rapide

Hors ligne

#3 07-08-2011 18:38

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

jonas a écrit :

Créer un fichier /conf/config_lightboxes.php est une bonne idée. Si tu veux que l'utilisteur puisse configurer ce fichier depuis sont navigateur web tu peux créer un /config_<tonplugin>.php http://jonas.tuxfamily.org/wiki/gcweb/d … fix_config mais ... ça va beaucoup compliquer ton travail et je ne trouve pas que ce soit indispensable.

Je vais sans doute commencer léger : seulement donner le choix du système de lightbox. Pour les paramètres, on verra par la suite smile

jonas a écrit :

À moins que l'on puisse avoir plusieurs render_....php,

Pas compris la question mais tu peux avoir plusieur render_....php pour un même plugin (mais ça n'a aucun intéret)

En fait, si l'utilisateur peut choisir entre plusieurs système de lightbox, est-ce qu'il ne vaut pas mieux avoir plusieurs fichiers render pour éviter d'avoir plein de tests conditionnels si l'on s'en tient à un seul fichier.
Mais je viens de repenser que cela nécessiterait d'avoir un render générique qui ensuite ferait appel au bon fichier render pour le système de lightbox.
mmh... suis pas sûr d'être très clair...

Comme je disais je vais commencer léger smile On verra par la suite.

jonas a écrit :

De plus, dans la doc, je ne vois pas comment on fait pour récupérer les champs de configuration. Pourrais-tu m'indiquer comment on fait cela ?

C'est à toi de le gérer. Dans ton render_....php : <?php include PATH_GCWEB.'/conf/plugin_machin.php' ?> par exemple.

Hum... Si on reprend l'exemple de config du wiki mais imaginons que l'on ait deux checkbox. Dans mon render_machin.php, il me faudra récupérer la valeur du fieldset grâce à la variable  $config_plugin_machin ? Du genre :

if ($config_plugin_machin == "option 1") 
              ............
endif;
if ($config_plugin_machin == "option 2") 
....

C'est cela ?

PS : Bon demaine je reprend le TAF sad les réponse seront certainement moi rapide

Bon courage alors... Perso, j'ai été recruté début juin, donc les vacances ça sera sans doute début septembre. Et je risque d'être assez long (étant simple amateur sans réelles connaissances et ayant pas mal de projets sur le feu...)

A+

Dernière modification par Brice (07-08-2011 18:38)

Hors ligne

#4 07-08-2011 22:48

jonas
Administrator
Inscription : 25-06-2006
Messages : 729

Re : Création de plugin

En fait, si l'utilisateur peut choisir entre plusieurs système de lightbox, est-ce qu'il ne vaut pas mieux avoir plusieurs fichiers render pour éviter d'avoir plein de tests conditionnels si l'on s'en tient à un seul fichier.
Mais je viens de repenser que cela nécessiterait d'avoir un render générique qui ensuite ferait appel au bon fichier render pour le système de lightbox.
mmh... suis pas sûr d'être très clair...

Ce n'est pas 3 conditions dans ton plugin qui vont changer beaucoup les choses smile
Comparer à l'ensemble des testes faite par GCweb ton plugin ne réprésente rien du tout !

... du genre

Oui du genre comme ça. Bien qu'un "elseif" à la place du second if serrait plus judicieux voire même un "switch" avec des "case" (le switsh rend surtout le code plus lisible).
Sinon, toujour pour la lecture du code, GCweb utilise plutot la convention de code des accolades que les endif mais cella n'est vraiment pas important.

Dans un 1ère version tu peux aussi mettre les options directement dans render_....php, c'est ce que j'ai fais pour http://forum.jonas.tuxfamily.org/forum/ … php?id=251 et je ne pense pas modifier cella.

Dernière modification par jonas (07-08-2011 22:50)

Hors ligne

#5 08-08-2011 18:47

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

Bon, j'ai voulu me coller au plugin mais je patauge hmm

Alors, si j'ai bien compris (après plusieurs tentatives), il faut créer le fichier de conf du plugin dans /plugins/ et non dans /conf/ comme je le faisais...

Du coup, on a cela :
/plugins/config_selectlightbox.php
/plugins/render_selectlightbox.php

De plus, lorsque je regarde la doc, on a un fichier où est écrite la configuration du plugin dans /conf/ ; du coup dans mon cas, je crée un fichier /conf/plugin_selectlightbox.php qui ne contient que cela :

<?php

?>

Voici le fichier config_selectlightbox.php (adapté de ce qui est proposé sur le wiki avec des input radio -- eh oui, il ne faut que l'utilisateur ne puisse choisir qu'un système de lightbox) :

<?php
if ($checkUserPasswd) {
     //Ecriture du fichier de config
     $fp = fopen(PATH_GCWEB.'/conf/plugin_selectlightbox.php','w');
     fwrite($fp, "<?php
           $config_plugin_selectlightbox = array (
                'selectlightbox_nolightbox' => ".checktype($_POST['selectlightbox_nolightbox'],'boolean').",
                'selectlightbox_lightbox2' => ".checktype($_POST['selectlightbox_lightbox2'],'boolean').",
				'selectlightbox_pirobox' => ".checktype($_POST['selectlightbox_pirobox'],'boolean')."
           );\n?>
      ");
     fclose($fp);
}
 
include PATH_GCWEB.'/conf/plugin_selectlightbox.php';
 
echo '<fieldset><legend>Choix du système de lightbox</legend>
		'.input_radio('selectlightbox_nolightbox','Désactivé',$config_plugin_selectlightbox['nolightbox']).'
		'.input_radio('selectlightbox_lightbox2','Lightbox2',$config_plugin_selectlightbox['lightbox2']).'
		'.input_radio('selectlightbox_pirobox','Pirobox',$config_plugin_selectlightbox['pirobox']).'
</fieldset>';
?>

Alors, je me suis aperçu que je ne vais pas pouvoir utiliser des input de type radio car ce type d'input ne semble pas être défini hmm Du coup je vais passer par un select mais penses-tu développer la possibilité d'utiliser des radios (beaucoup plus cool pour rajouter des infos comme un lien vers le site du plugin, vers la démo...) ?

Merci pour tes éclaircissements et à bientôt

[EDIT] Sur les problèmes d'affichage, en fait ça fonctionne...

[EDIT2] Dans les select, on ne peut pas spécifier un array de value correspondant aux options ?

Dernière modification par Brice (08-08-2011 19:18)

Hors ligne

#6 08-08-2011 21:31

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

Bon j'ai poursuivi mes efforts mais je rencontre un nouveau problème. L'écriture dans le fichier /conf/plugin_selectlightbox.php se fait mais les infos saisies dans la configuration ne sont pas pris en compte :

<?php
           $config_plugin_selectlightbox = array (
                'selectlightbox_nolightbox' => False,
                'selectlightbox_lightbox2' => False,
		'selectlightbox_pirobox' => False,
		'selectlightboxsel' => ''
           );
?>

Et le /plugins/config_selectlightbox.php :

<?php
if ($checkUserPasswd) {
     //Ecriture du fichier de config
     $fp = fopen(PATH_GCWEB.'/conf/plugin_selectlightbox.php','w');
     fwrite($fp, "<?php
           \$config_plugin_selectlightbox = array (
                'selectlightbox_nolightbox' => ".checktype($_POST['selectlightbox_nolightbox'],'boolean').",
                'selectlightbox_lightbox2' => ".checktype($_POST['selectlightbox_lightbox2'],'boolean').",
		'selectlightbox_pirobox' => ".checktype($_POST['selectlightbox_pirobox'],'boolean').",
		'selectlightboxsel' => ".checktype($_POST['selectlightboxsel'])."
           );\n?>
      ");
     fclose($fp);
}
 
include PATH_GCWEB.'/conf/plugin_selectlightbox.php';

$selectlightboxoptions = array ("Désactivé","Lightbox2","Pirobox");

echo '<div><fieldset><legend>Choix du système de lightbox</legend>
		'.input_checkbox('selectlightbox_nolightbox','Désactivé',$config_plugin_selectlightbox['nolightbox']).'
		'.input_checkbox('selectlightbox_lightbox2','Lightbox2',$config_plugin_selectlightbox['lightbox2']).'
		'.input_checkbox('selectlightbox_pirobox','Pirobox',$config_plugin_selectlightbox['pirobox']).'
		'.input_select('selectlightboxsel',$selectlightboxoptions,False,__('Type de lightbox'),'default').'
</fieldset></div>';
?>

J'ai essayé de me basé sur le configuration.php notamment pour ce qui est de la récupération du select (pour le template par exemple) mais impossible de récupérer la valeur choisie et la checkbox cochée hmm

En te remerciant (il va sans doute te falloir être patient hmm)

A bientôt

Hors ligne

#7 08-08-2011 22:50

jonas
Administrator
Inscription : 25-06-2006
Messages : 729

Re : Création de plugin

La doc n'est pas un tutorial pour le php wink dans un 1er temps contente toi de faire "simple" (comme je te l'ai dit pour le plugin isNew je ne l'ai pas fait ce n'est pas pour rien big_smile.

Dans ton render_....php

<?php
// Configuration
effetLightbox = "display"; // Effet ligntbox option possible : "display", "lightbox2" ou "pirobox"
...
?>

Dernière modification par jonas (08-08-2011 22:51)

Hors ligne

#8 09-08-2011 07:34

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

Salut jonas,

Alors si je m'en tiens au render, c'est quand même facile : intégration de trois différents système de lightbox fonctionnels, reste à en ajouter quelques un éventuellement et mettre en place quelques paramètres mais ça va (le tout en utilisant un switch avec case comme recommandé -- le seul truc dont je suis pas bien sûr, c'est le break mais je vais relire la doc php).

jonas a écrit :

La doc n'est pas un tutorial pour le php wink dans un 1er temps contente toi de faire "simple" (comme je te l'ai dit pour le plugin isNew je ne l'ai pas fait ce n'est pas pour rien big_smile.

Effectivement, la doc n'est pas un tutoriel mais en la lisant on a vraiment l'impression que c'est simple hmm Et si même toi, tu ne le fais pas... Mais bon, si je comprends bien, en relisant la doc, ce qu'il faut en fait c'est reprendre et réécrire la fonction writeconfig pour notre plugin ou je me trompe une nouvelle fois ?

Merci et à bientôt.

Hors ligne

#9 09-08-2011 19:43

jonas
Administrator
Inscription : 25-06-2006
Messages : 729

Re : Création de plugin

... réécrire la fonction writeconfig ...

Oui, en gros, donc je trouve que c'est lourd pour un simple plugin.

Hors ligne

#10 09-08-2011 20:29

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

Certes... Tu prévois de modifier ce mécanisme pour les prochaines versions ?

Bon, j'essaierai malgré tout d'y regarder, histoire de rendre les choses intéressantes smile (bien sûr je t'embêterai sans doute pas mal si ça te dérange pas). Et pour commencer, on peut réutiliser les variables (je pense notamment à password) du configuration.php ? Il faut passer par un include ou pas (si oui, il faut récupérer le nouveau nom du fichier de conf et ça m'a l'air d'une boucle sans fin hmm) J'y regarderai de plus près d'ici la fin de la semaine (pas sûr que je produise quelque chose cependant).

Merci encore et à+

Hors ligne

#11 09-08-2011 21:13

jonas
Administrator
Inscription : 25-06-2006
Messages : 729

Re : Création de plugin

Peut-être pour la version 2 ... mais pas pour la branche 1 et le version 2 ne sortira peut-être jamais !

Réutiliser le password ? pour quoi faire ?

/plugins/config_.........php serra un "include" de la page de configuration, comme indiqué dans la doc il faudra vérifié le mot de passe avec le fonction faite pour ça avant d'enregistré le fichier de config /conf/tonplugin.php sinon, n'importe qui pourra modifier la config du plugin.

/plugins/render_........php aura un "include" du fichier de config /conf/tonplugin.php il n'y a donc aucune boucle infini.

Hors ligne

#12 11-08-2011 19:11

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

Salut jonas,

Alors je m'arrache les cheveux... :'(

J'ai fait plusieurs essais sans succès et j'ai essayé de partir du fichier configuration.php et de l'adapter mais je ne parviens pas à saisir où je fais fausse route. Avec le code ci-dessous, le fichier de conf est bien créé / modifié mais les informations ne sont pas prises en compte ; de plus, si je modifie le fichier de conf à la main et que je recharge la page (même après avoir vidé le cache), la configuration n'est pas lue...

Voici le code :

<?php

//Charger ancienne config
$plgfileconfig = PATH_GCWEB.'/conf/plugin_selectlightbox.php';
$plgoldConf = plgreadconfig($plgfileconfig);

#$error = '';
#$warning = '';
#$ok = "<code style='color:green'>ok</code>";
#$ko = "<code style='color:red'>ko</code>";


/*** FONCTION ***/

function plgreadconfig($plgfileconfig) {
    /*
     * Lit le fichier de config et le retourne. Si le fichier de config
     * n'existe pas retourne False
     */
    global $plgoldconf;

    if (!file_exists($plgfileconfig)) {
        $plgoldconf = False;
        return False;
    } else {
        include $plgfileconfig;
        $plgoldconf = $plgconf;
        return $plgconf;
    }
}

function plgwriteconfig($plgfileconfig) {
    /*
     * Ecrit le fichier de config.
     */

    $plgnewfileconfig = "<?php
            /*****************************************************
             * Fichier de configuration généré automatiquement *
             *****************************************************/

            \$plgconf = array(
                /*** CONFIGURATION DU SITE ***/
                'plgtitle'         => ".checktype($_POST['plgtitle']).",
                'plggenerator'     => ".checktype($_POST['plggenerator'],'boolean')."
			);\n?>
		";

            //pas d'erreur, on ecrit le fichier
            $plgfp = fopen($plgfileconfig,'w');
            fwrite($plgfp, $plgnewfileconfig);
            fclose($plgfp);
}

/*** end function ***/

/*** ACTIONS *********************************************************/
//Sauvegarder le fichier
    if ($checkUserPasswd) {
        //Sauvegarde fichier config
        $plgwriteconfigOK = plgwriteconfig($plgfileconfig);

        if ($plgwriteconfigOK) {
            //L'écriture du fichier de config est ok, lecture de la config
            $plgoldConf = plgreadconfig($plgfileconfig);
            unset ($_POST); // suppression des données post pour que ce soit celle de oldConf qui soit utilisée
        }
    }

include PATH_GCWEB.'/conf/plugin_selectlightbox.php';

echo '<fieldset><legend>'.__('Général','titre de section').'</legend>
                '.input_type_texte('plgtitle',__('Titre du site')).'
                    <span></span>
                '.input_checkbox('plggenerator',__('Générateur'),False).'
                    <span>'.__('Permet de créer les pages de thème pour un type de collection non
                    supportée ou d\'en remplacer une qui ne vous plait pas
                    (<a href="./?redirect=http%3A%2F%2Fjonas.tuxfamily.org%2Fwiki%2Fgcweb%2Fconfiguration%23Ordre_de_tri+par_defaut">plus d\'information</a>).
                    Activez cette fonctionnalité uniquement quand vous en avez
                    l\'utilité').'.</span>
            </fieldset>
            ';
?>

Où donc est-ce que je me plante (j'ai lu et relu le code, j'en comprends grosso modo le fonctionnement mais quelque chose m'échappe) ? Sur quoi devrais-je me pencher (doc comprise) ?

Désolé et merci encore et par avance.

A+

Hors ligne

#13 21-08-2011 15:46

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

Salut jonas,

J'ai laissé de côté la configuration du plugin pour me concentrer sur le plugin en lui-même ; je t'envoie cela par mail.

Cependant, j'aimerais comprendre comment écrire un fichier de configuration pour le plugin... la configuration étant assez longue et pas terrible dans le fichier render.

Merci et à bientôt.

Hors ligne

#14 21-08-2011 20:47

jonas
Administrator
Inscription : 25-06-2006
Messages : 729

Re : Création de plugin

J'ai laissé de côté la configuration du plugin pour me concentrer sur le plugin en lui-même ; je t'envoie cela par mail.

Ok, le but est je suppose que je le mets à disposition sur http://gcweb.web4me.fr/demo.php?model=list&collec=1 si oui
  - Rempli le petite fiche type ici http://forum.jonas.tuxfamily.org/forum/ … php?id=140
  - Si tu en as la possibilité, pour moi c'est beacoup plus simple si tu met ton plugin quelque part sur ton site web (et que les gens télécharge le plugin via un lien qui pointe sur ton site web).
  - Et enfin, as-tu vérifié les différents effet sont redistribuable ? pour lightbox2 c'est ok, tant qu'on cite l'auteur, ce que tu fais (licence: http://creativecommons.org/licenses/by/2.5/) Pour les autres je te laisse vérifié wink  (j'espère que c'est le cas, sinon il faudra supprimé les source du code et donner au utilisateur une procédure d'installation plus complexe genre "téléchargez les fichier là et copié les ici")

Sinon pour répondre à ta question dans ton mail, le code est très lisible et me semble propre smile (après je ne suis qu'un amateur big_smile ...)

Hors ligne

#15 21-08-2011 21:57

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

Salut jonas,

Alors pour ce qui est des plugins et de leurs licenses :
- lightbox2 : pas de problème
- fancybox : GPL et MIT
- pirobox : CC-by-sa
- shadowbox : je dois t'avouer que je ne suis pas trop sûr, au vu du texte de la licence :

Shadowbox.js Non-Commercial License version 1.0

Under the terms of this license, the licensee is granted the following privileges:

  - The right to use the library as part of a website or application that is not
    used for commercial purposes

  - The right to modify the library to suit his purpose.

Under no circumstance is the licensee permitted to redistribute the source code,
images, or documentation contained in the library. All redistribution rights
remain with the copyright holder unless specific prior written permission is
obtained.

Under no circumstance shall this copyright notice or list of conditions be
modified or removed from the code distribution in either source or binary form.

This software is provided by the copyright holder and contributors "as is" and
any express or implied warranties, including, but not limited to, the implied
warranties of merchantability and fitness for a particular purpose are disclaimed.

In no event shall the copyright holder or contributors be liable for any direct,
indirect, incidental, special, exemplary, or consequential damages (including, but
not limited to, procurement of substitute goods or services; loss of use, data, or
profits; or business interruption) however caused and on any theory of liability,
whether in contract, strict liability, or tort (including negligence or otherwise)
arising in any way out of the use of this software, even if advised of the
possibility of such damage.

Qu'en penses-tu ? Dans tous les cas, je n'ai pas touché aux fichiers, j'ai laissé les licences, les en-têtes de fichier, les sources sont citées.

Je ferai le post / fiche type pour mettre à disposition, et mettrai l'archive sur mon serveur.

A+

Hors ligne

#16 22-08-2011 22:45

jonas
Administrator
Inscription : 25-06-2006
Messages : 729

Re : Création de plugin

Y'a des développeur casse pied ! big_smile ils veux visiblement que les gens sache que c'est lui qui a codé ça !

Je vois 3 solutions :
  - faire un ptit mail au développeur pour lui demander l'autorisation (te décidé avant sous quel licence serra distribué le code et le lui dire, égallement lui dire que son site serra en lien sur la page de téléchargement de plugin)
  - ou donner les instrcutions à l'utlisateur pour télécharger le plugin sur le site officiel
  - Supprimer le lightbox en question sad

A toit de voir wink

Hors ligne

#17 23-08-2011 07:28

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

Je pensais le mettre sous licence GNU GPL ; mais entre pirobox et shadowbox ça ne va pas passer si je comprends bien hmm J'avais déjà essayé d'envoyer des mails au développeur de pirobox mais j'ai jamais eu de réponse hmm

Dans tous les cas, est-il possible d'inclure l'ensemble des scripts lightbox dans le package (je ne les ai pas modifié) avec leur licence respective et de ne placer que le render_selectlightbox sous GNU GPL ?

Je vais de toute façon contacter les développeurs.

A+

Hors ligne

#18 23-08-2011 22:56

jonas
Administrator
Inscription : 25-06-2006
Messages : 729

Re : Création de plugin

... j'sais pas trop ... mais j'ai mis le plugin lightbox2 sous GNU/GPL3 donc on va dire que le plugin est sous GNU/GPL et que les scripts sont redistribué selon leur licence originale big_smile

Donc en ce qui me concerne pas de problème pour que j'indique GNU/GPL pour ton plugin et qu'il intègre les différents effets sauf pirobox car son auteur à l'aire de vouloir concervé l'exclusivité de la distribution !

Hors ligne

#19 24-08-2011 17:30

Brice
Membre
Inscription : 17-02-2010
Messages : 45
Site Web

Re : Création de plugin

jonas a écrit :

... j'sais pas trop ... mais j'ai mis le plugin lightbox2 sous GNU/GPL3 donc on va dire que le plugin est sous GNU/GPL et que les scripts sont redistribué selon leur licence originale big_smile

Ça me semble être la bonne approche smile

Donc en ce qui me concerne pas de problème pour que j'indique GNU/GPL pour ton plugin et qu'il intègre les différents effets sauf pirobox car son auteur à l'aire de vouloir concervé l'exclusivité de la distribution !

Tu veux dire Shadowbox, pirobox étant sous CC-by-sa.
Dans tous les cas, j'ai envoyé un mail aux auteurs de ces deux plugins. Je n'ai toujours pas de réponse ; je pars en congés la semaine prochaine donc je ferai une relance d'ici une dizaine de jours et si mes mails sans réponse, je propose que les plugins intègrent l'archive. Qu'en penses-tu ?

A+

Hors ligne

#20 27-08-2011 16:05

jonas
Administrator
Inscription : 25-06-2006
Messages : 729

Re : Création de plugin

yep ! je voulais dire Shadowbox

A ton retour si pas de réponse tu package ton plugin comme tu veux (avec ou sans Shadowbox) et on met en ligne ! (et tu gardes de coté le mail que tu as envoyer wink.

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Si vous êtes un être humain ne changez pas le contenu de ces deux champs.

Pied de page des forums