Bonjour à tous.
J'ouvre un nouveau fil pour ne pas interférer avec celui du MOD Stats Ip Excluder (V1.6.x) et présenter les avancées sur le sujet (VDigital et rub, parmi d'autres, semblent impatients de voir ce plugin ! ;-) )
Je tente donc la création du plugin Stats Ip Excluder (version prévisionnelle 2.0) pour la future v1.7.x de PWG. Mais mes faibles connaissances en php et sur le système des plugins de PWG me brident énormément.
Voici l'état d'avancement des travaux à ce jour :
- Interface d'administration du plugin dans le panneau d'administration :
-> Installation, activation, désactivation et désinstallation
-> Administration du plugin avec case d'activation du filtrage des IP et tableau d'entrée des paramètres de filtrage
- Sauvegarde des paramètres dans un fichier data.dat
Au cours de la révision 1880 de la 1.7.0RC1, rvelices a ajouté le filtre sur les entrées dans l'historique nécessaire pour l'application du plugin. Je travaille donc à partir de cette révision. Mais là, je coince un peu...
Alors si quelqu'un se sent de poster ici une explication (même succincte) sur "comment utiliser les triggers"...
Dernière modification par Eric (2007-03-11 14:56:00)
Hors ligne
Eric,
Je débute avec les plugins, si ce qui suit n'est pas conforme à l'utilisation des plugins.
Merci au membre de l'équipe de me corriger.
(mais cela fonctionne)
J’ai refait en test de la RC1.17 mon usemap navigation sur l’image , la gestion de l'affichage de l'édito et de la bannière, une gestion optimisée pour mon cas des .css et .js en fonction du contexte(pseudo header dynamique).
La gestion du cadre autour des photos.
Sur le wiki de'un membre "Flipflip" (je crois), il y a un exemple de gestion de fichier.
Un exemple simple vaut mieux qu'un discours:
------------------------------------------------
Dans cet exemple lors du passage sur le déclencheur 'loc_end_picture' de picture.php
Je passe la main à la fonction 'MyPictureSize' ou je calcule les informations pour définir un usemap.
<?php /*
Plugin Name: gbo !
Version: 0.1
Author: Gbo-gallery
Description:
Changes the headerpage layout.css for hk-3 theme.
define the picture size for usemap
*/
/* ********************************************** */
/* ********* Parts of picture size for usemap ********* */
/* ********************************************** */
/* Eric: definition du déclencheur à intercepter */
Add_event_handler( 'loc_end_picture','MyPictureSize');
/* fonction mise en oeuvre apres interception */
function MyPictureSize( )
{global $template,$picture;
$taille_image[0] = $picture['current'][width];
$taille_image[1] = $picture['current'][height];
$template->assign_vars(
array(
'LEFT_BEGIN' => 0,
'HEIGHT_BEGIN' => 0,
'LEFT_END' => $taille_image[0] * 0.20,
'RIGHT_BEGIN' => $taille_image[0] * 0.80,
'RIGHT_END' => $taille_image[0],
'MID_BEGIN' => $taille_image[0] * 0.40,
'MID_END' => $taille_image[0] * 0.60,
'HEIGHT_END' => $taille_image[1],
'TITLE_FRAME' => $picture['current'][name],
'SRC_IMG' => $picture['current']['image_url'],
)
);
/* Eric : ici je change le fichier '/picture_content.tpl' par celui qui est dans mon plugin */
$template->set_filenames( array('gbo_content'=> dirname(__FILE__).'/picture_content.tpl') );
$template->assign_var_from_handle( 'ELEMENT_CONTENT', 'gbo_content');
}
?>
Bref c'est royal..
Hors ligne
Salut EX-FTB et merci pour ta réponse.
EX-FTB a écrit:
Sur le wiki de'un membre "Flipflip" (je crois), il y a un exemple de gestion de fichier.
Pour la gestion du fichier, j'ai pigé et cela fonctionne comme précisé dans mon post initial. Les données sont bien lues et enregistrées dans le fichier.
EX-FTB a écrit:
/* Eric: definition du déclencheur à intercepter */
Add_event_handler( 'loc_end_picture','MyPictureSize');
Là, çà commence à m'intéresser ! Voilà donc comment on fait appel aux trigger. Je testerai çà ce soir.
EX-FTB a écrit:
/* Eric : ici je change le fichier '/picture_content.tpl' par celui qui est dans mon plugin */
$template->set_filenames( array('gbo_content'=> dirname(__FILE__).'/picture_content.tpl') );
$template->assign_var_from_handle( 'ELEMENT_CONTENT', 'gbo_content');
Effectivement, remplacer le fichier php d'origine par une version retravaillée personnelle dans le plugin c'est une solution. Un peu bourrin mais si le résultat est là... Je pensais utiliser le principe de la surcharge du code existant (comme pour les css et le config_default.inc.php. Mais la solution que tu proposes me permettra déjà de tester si mon plugin fonctionne.
Merci encore ! A+
8-)
Hors ligne
Eric a écrit:
Effectivement, remplacer le fichier php d'origine par une version retravaillée personnelle dans le plugin c'est une solution.
8-)
Eric le code PHP d’origine reste en place.
Le but du trigger est justement de ne pas toucher les fichiers PHP.
Je fais juste une couche de présentation (TPL) intégrée au plugin pour ne pas avoir de soucis avec les futurs changement de version 1.8….
De plus c’est beaucoup plus simple à déployer, tu livres seulement ton plugin, tout est inclus.
Hors ligne
Compris... Enfin, je crois.
Je vais tenter une approche sur la base de ton exemple et je te tiens au courant.
Merci ;-)
Hors ligne
Bon, voilà ou j'en suis :
<?php /* Plugin Name: Plugins IP Excluder Version: 0.1 Description: Permet l'exclusion d'une IP ou d'une plage d'IP des statistiques Plugin URI: http://www.phpwebgallery.net */ if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); /* Définiton de ma classe */ class IpExclude { var $my_config; /* Chargement de mon fichier de config ou création si inexistant */ function load_config() { $x = @file_get_contents( dirname(__FILE__).'/data.dat' ); if ($x!==false) { $c = unserialize($x); // do some more tests here $this->my_config = $c; } if ( !isset($this->my_config) or empty($this->my_config['ip_excluded']) ) { $this->my_config['ip_excluded'] = array( '*' ); $this->my_config['ip_activated'] = false; $this->save_config(); } } /* Sauvegarde des données dans le fichier de config */ function save_config() { $file = fopen( dirname(__FILE__).'/data.dat', 'w' ); fwrite($file, serialize($this->my_config) ); fclose( $file ); } /* Interception du déclencheur */ Add_event_handler( 'pwg_log_allowed','IpExclusion'); /* Fonction d'exclusion */ function IpExclusion() { foreach ( $this->my_config['ip_excluded'] as $Exclusion ) { if ($this->my_config['ip_activated']) { $do_log = false; } else { $do_log = true; } } } /* Intégration du plugin admin */ function plugin_admin_menu($menu) { array_push($menu, array( 'NAME' => 'IP Excluder', 'URL' => get_admin_plugin_menu_link(dirname(__FILE__).'/admin/ip_exclude_admin.php') ) ); return $menu; } } $obj = new IpExclude(); $obj->load_config(); add_event_handler('get_admin_plugin_menu_links', array(&$obj, 'plugin_admin_menu') ); set_plugin_data($plugin['id'], $obj); ?>
Ce n'est qu'une ébauche qui ne fonctionne pas pour la bonne et simple raison que la variable $do_log faisant partie du trigger n'est pas retournée.
Pause diner et je reprend ma "spéléo"...
Hors ligne
function IpExclusion($pwg_will_log) { if (!$pwg_will_log) return $pwg_will_log; $do_log = true; foreach ( $this->my_config['ip_excluded'] as $Exclusion ) { if ($this->my_config['ip_activated']) { $do_log = false; } else { $do_log = true; } } return $do_log; }
Hors ligne
Eric a écrit:
Bon, voilà ou j'en suis :
Pause diner et je reprend ma "spéléo"...
Ta lampe de spéléo et l'aide de revlices m'éclaire aussi!
la publication de code d'essai fait avancer tout le monde
Est-ce que qq'un a étudié la reprise des news sous forme de plugin?
Dernière modification par EX-FTB (2007-03-12 20:35:11)
Hors ligne
Dieu existe ! Et il s'appelle rvelices !!! :-D
Milles mercis, çà fonctionne impec. Tu tiendras une place de choix dans la partie "Greatings" du plugin.
Encore quelques tests de fonctionnement et je crois que je serai prêt à publier le plugin Stats Ip Excluder. C'est VDigital et rub qui vont être contents. ;-)
EX-FTB a écrit:
Est-ce que qq'un a étudié la reprise des news sous forme de plugin?
Normalement, Nicco s'en occupe. Mais avec ce que je viens d'apprendre, je pense que je vais lui donner un coup de main, s'il le souhaite. Je suis déjà sur le coup pour les CSS du MOD. Alors pourquoi pas pour le plugin ?!?
Merci encore à toi EX-FTP et à rvelices.
PS : un lexique des triggers disponibles dans la future 1.7 est-il à l'étude ? Ce serait sympa pour les développeurs de plugins de connaitre tous les points d'entrée possible. Voire, par la suite d'en étendre le nombre en fonction des besoins.
Hors ligne
Bon... Je me suis enflammé comme une torche pour me faire moucher aussi sec :-s Tout content que j'étais de ne plus avoir des messages d'insulte de php pour cause de code incorrect.
Car en fait, çà ne fonctionne pas. Il y a un truc que je ne comprend pas vraiment. Dans le fichier ../admin/include/functions.php je pensais avoir repéré correctement le trigger qu'il me fallait à ce niveau :
function pwg_log($image_id = null, $image_type = null) { global $conf, $user, $page; $do_log = true; if (!$conf['log']) { $do_log = false; } if (is_admin() and !$conf['history_admin']) { $do_log = false; } if ($user['is_the_guest'] and !$conf['history_guest']) { $do_log = false; } $do_log = trigger_event('pwg_log_allowed', $do_log, $image_id, $image_type); if (!$do_log) { return false; }
rvelice fait bien appel à la variable $do_log qui, si j'ai tout pigé, conditionne l'entrée en log en fonction qu'elle soit positionnée à true ou false. Mais d'où sort alors $pwg_will_log ?
J'ai remis ma frontale (je vais me la faire greffer à vie !) et je replonge...
Hors ligne
Eric a écrit:
rvelice fait bien appel à la variable $do_log qui, si j'ai tout pigé, conditionne l'entrée en log en fonction qu'elle soit positionnée à true ou false. Mais d'où sort alors $pwg_will_log ?
la variable do_log de la fonction pwg_log est innaccessible dans ta fonction (ce n'est pas une variable globale). C'est pour cette raison qu'on la passe dans les parametres de l'evenement. Le nom pwg_will_log c'est un nom de variable a ton choix. Tu peux mettre tout ce que tu veux (imagines toi un simple appel de fonction dans n'importe quel language)
Tu la recuperes dans ta fonction (premiere parametre), tu l'utilises comme tu veux et tu dois retourner un boolean qui remplace ensuite do_log dans la fonction pwg_log
Hors ligne
Ok pour $pwg_will_log mais je me demande si l'interception du déclencheur dans mon code est correcte.
add_event_handler( 'pwg_log','IpExclusion');
J'ai activé l'affichage des requêtes sur ma galerie de test par le mode debug et j'ai activé mon plugin en tentant d'exclure l'IP 127.0.0.1 des stats. J'obtient ceci :
[0.192 s, 20 queries] : pre_trigger_event "pwg_log_allowed" true [0.192 s, 20 queries] : post_trigger_event "pwg_log_allowed" true [21]
Visiblement, le booleen $do_log ne remonte pas en false...
Après une longue journée de labeur, je ne suis plus bon à rien. Je reprendrai "ma spéléo" demain. Merci pour ta patience, rvelices. Je suis loin d'être un expert en prog en général et en php en particulier.
Hors ligne
Salut !
Avec ces dernières précisions, mon premier plugin pour la future V1.7 est prèt !
J'ai effectué quelques tests en local sous EasyPhp et Wamp. Sur mon réseau local, tout fonctionne à merveille. J'ai tout de même positionné la version du plugin en béta car il faudrait le tester dans un contexte réel. Mais je ne suis pas inquiet.
Seul pb, il n'y a pas de compatibilité 1.7.x encore de prévue dans le gestionnaire d'extensions du site. Comment faire pour publier ce plugin, sachant qu'il s'agit d'une révision de mon MOD ?
En tous cas, encore mille mercis à EX-FTB et rvelices pour leur aide !
Hors ligne
On s'aide mutuellement, c’est ce qui fait l’intérêt du forum. ^_^
J’avance doucement( 1/2h par jour), j'ai refait les cas particuliers de mon site en 1.6.
Mais tous les jours je trouve une mise en oeuvre plus appropriée.
Exemple :
Gestion de l’édito dans un fichier tpl séparé en lieu est place de
< !-- Begin … END -- !>
Il faut peut être ouvrir une liste de fonction disponible dans des plugins pour éviter que tout un chacun réinvente la roue.
J’en profite pour demander d’autres trigger à Rvelices.
Dans les tags.php, search.php, about.php … pour pouvoir inclure le menbar.php afin d’ajouter si on le désire des menus sur les pages qui en sont dépourvues.
Ajout de 20h31.
La publication de ton code aiderai à la compréhension des triggers et plugin.
Dernière modification par EX-FTB (2007-03-13 20:38:42)
Hors ligne