Créer/publier un plugin wordpress simple : « Adblock invite »

Suite à mon article « Incitateur anti-pub« , des demandes ont émergé concernant un plugin WordPress. Très enthousiaste, je l’ai réalisé. Il s’appelle adblock-invite et il est sous licence Beerware. C’est le premier plugin wordpress que je réalise, il est relativement simple et me semble un bon moyen concret de commencer avec WordPress (plus sympa que le « hello world »).

Note : pour ceux qui souhaitent un anti-pub standalone réferez-vous à cet article.

Le but du plugin est simple ; il s’agit d’un Widget avec un champs « titre » (pour le titre du bloc) et un champs « message ». Ce widget ne s’affichera que lorsque le visiteur n’aura pas d’anti-pub.

Créer, tester votre code

Dans le répertoire wp-content/plugins/ nous allons créer arborescence suivante :

$ cd wp-content/plugins/
$ mkdir adblock-invite
$ tree
.
+--- screenshot-1.png
+--- screenshot-2.png
+--- testads
|   +--- banners.js
+--- widget.php
+--- style.css
+--- readme.txt

Détail de l’arborescence :

  • screenshot-*.(png|jpg|jpeg|gif) : Les captures d’écrans du résultat final
  • testads/banners.js : Présent pour simuler une publicité
  • widget.php : Le code PHP d »exécution du script (Détaillé ci-après)
  • style.css : une mini feuille de style simplement destiné à mettre un « display: none » à l’initialisation du widget
  • readme.txt : Très important, pour construire le vôtre, référez vous au readme.txt standard & au readme validator de wordpress

Le fichier widget.php est le cœur du plugin, voici son contenu (A l’heure ou j’écris il est en  0.1)

<?php
/*
Plugin Name: Adblock invite (Yes Adblock)
Plugin URI: http://adblock-invite.zici.fr
Description: Detects if the visitor have AdBlock (or another) plugin/extension installed and if not, gives URL to download it.
Author: David Mercereau
Author URI: http://david.mercereau.info
Version: 0.1
License: Beerware
License URI: http://en.wikipedia.org/wiki/Beerware
*/

// Ajout de code dans le pied de page du thème :

function adblockInviteScriptFooter(){ 
	?>
	<script language="JavaScript" type="text/javascript" src="<?php echo plugins_url('testads/banners.js', __FILE__); ?>"></script>
	<script language="JavaScript" type="text/javascript">
		function widgetAdlblockInviteID(tag) {
                        var regexpParam=/adblock_invite_widget-*/;
                        var tagParam=tag;
                        tagParam = (tagParam === undefined) ? '*' : tagParam;
                        var elementsTable = new Array();
                        for(var i=0 ; i<document.getElementsByTagName(tagParam).length ; i++) {
                                if(document.getElementsByTagName(tagParam)[i].id && document.getElementsByTagName(tagParam)[i].id.match(regexpParam)) {
                                        document.getElementsByTagName(tagParam)[i].style.display='block';
                                }
                        }
		}
		var divAds = document.getElementById("adstest");
		if(divAds) {
			widgetAdlblockInviteID('div');
			widgetAdlblockInviteID('aside');
		}
	</script>
	<?php
} 
add_action('wp_footer', 'adblockInviteScriptFooter'); 

// Ajout d'une feuille de style dans le head (la feuille contenu dans wp-content/plugins/adblock-invite/style.css :

add_action('wp_print_styles', 'addstyle');
function addstyle() {
        wp_enqueue_style('adblock-invite-styles', plugins_url('style.css', __FILE__));
}

// Le code du widget (front et back) :

add_action( 'widgets_init', create_function('', 'return register_widget("adblockInviteWidget");') );
class adblockInviteWidget extends WP_Widget {

	function adblockInviteWidget() {
		$widget_ops = array( 
							'classname' => 'adblock_invite_widget_class', 
							'description' => 'Detects if the visitor have AdBlock (or another) plugin/extension installed and if not, gives URL to download it.' 
							); 
		$this->WP_Widget('adblock_invite_widget', 'Adblock invite', $widget_ops);
	}

	// Formulaire d'administration

	function form($instance) {
		$instance = wp_parse_args( (array) $instance, array( 'title' => 'You do not block ads?', 'message' => '<p>It seems that you don\'t have AdBlock (or another) installed in your browser. I encourage you to install it for free</p> <p><a href="http://adblockplus.org" target="_blank">Download AdBlock</a></p>' ) );
		$title = $instance['title'];
		$message = $instance['message'];
		?>
			<p>
				<label for="<?php echo $this->get_field_id('title'); ?>">Title: </label>
				<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" />
			</p>
			<p>
				<label for="<?php echo $this->get_field_id('message'); ?>">Message: </label>
				<textarea class="widefat" id="<?php echo $this->get_field_id('message'); ?>" name="<?php echo $this->get_field_name('message'); ?>" cols="30" rows="4"><?php echo attribute_escape($message); ?></textarea>
			</p>
		<?php
	}

	// Enregistrement du contenu

	function update($new_instance, $old_instance) {
		$instance = $old_instance;
		$instance['title'] = $new_instance['title'];
		$instance['message'] = $new_instance['message'];
		return $instance;
	}

	// Affichage du widget en front

	function widget($args, $instance) {
		extract($args);

		echo $before_widget;

		$title = apply_filters( 'widget_title', $instance['title'] );
		$message = empty( $instance['message'] ) ? '&nbsp;' : $instance['message'];

		if ( !empty( $title ) ) { echo $before_title . $title . $after_title; };

		echo $message;

		echo $after_widget;
	}
}

Vous pouvez tester votre plugin en l’activant dans le panel d’administration (Extensions / Extensions installées)

Publier sur WordPress.orgadblock-invite-search

Le saint graal pour un plugin WordPress étant d’être dans l’annuaire afin que l’utilisateur final n’est qu’à faire une recherche via son blog pour pouvoir installer d’un seul clic le dit plugin.

Pour ce faire il faut d’abord créer un compte sur wordpress.org puis proposer votre plugin. Une étape de modération est nécessaire.

Vous allez ensuite recevoir un email avec l’URL de votre plugin dont vous serez administrateur. (pour moi c’est http://wordpress.org/extend/plugins/adblock-invite/) Il vous faut ensuite faire le premier commit afin de rendre la page public. Voici la démarche :

$ # Création d'un répertoire de travail
$ cd ~/Projets
$ mkdir adblock-invite
$ cd adblock-invite/
$ # Récupération de arborescence svn
$ svn co http://plugins.svn.wordpress.org/adblock-invite/ .
$ # Copie et ajout du code
$ cp /var/www/wp-content/plugins/adblock-invite/* trunk/
$ svn add trunk/*
$ # Copie des screenshots pour le site de wordpress
$ cp trunk/screenshot-* assets/
$ svn add assets/*
$ # Commit et envoi 
$ svn ci -m 'Adding first version of my plugin'

Pour en savoir plus sur svn rapporté à WordPress vous pouvez vous rendre sur wordpress.org/extend/plugins/about/svn.
Et voilà c’est terminé vous devriez avoir votre page administrable sur wordpress.org & votre plugin doit être disponible dans l’annuaire.

Les ressources

Les liens qui’ m’ont bien aidé dans ma démarche :

N’hésitez pas à me faire part de point à améliorer dans ce plugin ou dans ce tuto (je l’ai fait à posteriori il est donc possible qu’il manque des étapes)

Xsshfs v0.5 – Interface graphique pour Xsshfs (Perl/Glade)

Xsshfs est une interface graphique pour SSHFS développé par mes soins. Ce dernier sert à monter sur son système de fichier, un autre système de fichier distant, à travers une connexion SSH. L’avantage est de manipuler les données distantes avec n’importe quel gestionnaire de fichier.

Vite vite, je veux le tester

Pour les Debian/ubuntu

Graphiquement télécharger le deb ici

Sinon en 4 commandes c’est fini :

meuhwa:~$ sudo apt-get install sshfs ssh-askpass libgtk2-gladexml-perl perl libimage-librsvg-perl liblocale-gettext-perl libconfig-tiny-perl
meuhwa:~$ wget http://xsshfs.zici.fr/files/xsshfs_current.deb
meuhwa:~$ sudo dpkg -i xsshfs_current.deb
meuhwa:~$ rm xsshfs_current.deb

Installation à partir du dépôt source

Il faut préalablement avoir installé les dépendances suivantes :  sshfs, ssh-askpass, perl, libgtk2-gladexml-perl, libimage-librsvg-perl, liblocale-gettext-perl, libconfig-tiny-perl

meuhwa:~$ wget -O xsshfs.zip http://forge.zici.fr/p/xsshfs/source/download/master/
meuhwa:~$ unzip xsshfs.zip
meuhwa:~$ cd xsshfs-master
meuhwa:~$ perl xsshfs.pl

Les nouveauté de la version 0.5

  • Paramétrer les valeurs par défauts des champs de connexions
  • Normalisation FreeDesktop
  • Traduit en 3 langues (c’est toujours 3 fois plus que dans la version 0.4)
  • Possibilité de « reprendre » une connexion enregistré
Sources : http://doc.ubuntu-fr.org/sshfs

emailPoubelle.php – script libre d’email jetable

Ayant un serveur & des noms de domaines, j’utilise pour chaque site où je m’inscrit une adresse email spécifique. Je fonctionnais jusqu’à présent en catch-all (*@mercereau.info -> MonEm@il) mais c’est quand même le meilleur moyen de prendre du SPAM. Du coup j’ai fais une mini interface en PHP pour créer des alias facilement (des emails poubelles) & j’ai évidemment publier les sources ! (A installer sans modération)

Présentation

emailPoubelle.php est donc une page qu’il faut typiquement inclure dans votre site.

Le script dépend de Postfix & de la lib pear Net_DNS2.

Installation

Installation des dépendances :

srv:~$ pear install Net_DNS2

Télécharger & décompresser les sources :

srv:~$ mkdir -p /www/emailPoubelle/postfix
srv:~$ cd /tmp
srv:~$ wget -O emailPoubelle.zip http://forge.zici.fr/p/emailpoubelle-php/source/download/master/
srv:~$ unzip emailPoubelle.zip
srv:~$ cp emailpoubelle-php-master/* /www/emailPoubelle

Configurer Postfix :

srv:~$ vi /etc/postfix/main.cf
[...]
virtual_alias_maps = hash:/www/emailPoubelle/postfix/virtual
srv:~$ touch /www/emailPoubelle/postfix/virtual
srv:~$ /usr/sbin/postmap /www/emailPoubelle/postfix/virtual
srv:~$ chown www-data /www/emailPoubelle/postfix/virtual
srv:~$ chown www-data /www/emailPoubelle/postfix/virtual.db

N’hésitez pas à me faire des retours, le modifier, le partager…. bref pleins de trucs en « er »!

La pluralité est une force !

[Web-Dynamic-Dnsupdate] Administrer vos zones DNS sans base de données

Présentation

Je voulais vous présenter le projet Web-Dynamic-Dnsupdate qui est une interface web d’administration DNS sans base de donné basé sur la lib pear Net_DNS2

Mon entreprise l’utilise et m’a permis de contribuer au projet (migration vers la lib Net_DNS2 car la lib Net_DNS est obsolète)

Voir la démo :

Les points forts :

  1. C’est très pratique pour avoir un zone toujours à jour (c’est souvent le problème des interfaces avec bases de données) ;
  2. Vous ne risquez pas de planter votre zone à cause d’une erreur de syntaxe. Le protocole ce charge de valider votre syntaxe ;
  3. Le projet a été conçu avec des GET afin qu’il soit possible de l’exploiter en ligne de commande / dans un script (exemple :
    lynx --auth login:motDePasse http://dns.exemple.com/dnsupdate.php?todo=recordAdd&rr=exemple.testdom2.com.+10800+IN+CNAME+exemple.com&domain=testdom2.com 
  4. Beaucoup de type d’enregistrements supportés :
    • Par le Wizard : A AAAA CNAME NS MX TXT PTR SPF
    • Sans Wizard : A NS CNAME SOA WKS PTR HINFO MX TXT RP AFSDB X25 ISDN RT NSAP SIG KEY PX AAAA LOC EID NIMLOC SRV ATMA NAPTR KX CERT DNAME OPT APL DS SSHFP IPSECKEY RRSIG NSEC DNSKEY DHCID NSEC3 NSEC3PARAM HIP TALINK CDS SPF TKEY TSIG URI CAA TA DLV

Les manques :

  1. Projet jeune ;
  2. Il n’est pas possible de créer des zones via l’interface ;

Autoriser l’update dans bind9

Deux petites lignes sont à indiquer dans les zones que vous souhaitez laisser mettre à jour via l’interface :

...
zone "testdom2.com" {
    type master;
    allow-transfer { 192.168.2.158;};
    allow-update { 192.168.2.158; };
    file "/var/lib/bind/testdom2.com/zone";
};
...

Xsshfs v0.4 est de sortie…

Xsshfs est un petit programme Perl écrit par mes soins qui permet d’utiliser la commande SSHFS graphiquement. Celui-ci est maintenant disponible en version 0.4.

Au menu des petits plus :

  • Sélection d’une clef SSH possible
  • Le champs « Autres options » c.f. man sshfs
  • Une petite ré-organisation des champs pour épurer l’interface
  • Ajout de paramètres à la commande xsshfs :  –help | –version | –ficheirConfig | –debug

Les liens du projet

Pour l’installation :

$ wget http://xsshfs.zici.fr/files/xsshfs_current.deb ; sudo dpkg -i xsshfs_current.deb ; sudo apt-get install -f ; rm xsshfs_current.deb </code>

Des adresses emails jetables gratuites et sans limite de temps

Zici.fr vous propose des adresses emails jetables gratuites, sans aucune limite de temps.

Créer maintenant votre propre adresse email temporaire sur poubelle.zici.fr

Le script d’emali poubelle est publiée sous licence libre, vous pouvez donc le télécharger et l’utiliser sur votre plateforme. Rendez vous sur poubelle.zici.fr pour plus d’informations

En continuant à utiliser le site, vous acceptez l’utilisation des cookies (au chocolat) Plus d’informations

Les cookies sont utilisés à des fin de statistique de visite du blog sur une plateforme indépendante que j'héberge moi même. Les statistiques sot faites avec un logiciel libre. Aucune information n'est redistribué à google ou autre. Je suis seul autorisé à lire ces informations

Fermer