Economie de plugins

Patrice, dit P@t pour les intimes, nous offre un merveilleux site essentiellement sur la Nouvelle Calédonie.
Par ailleurs, il partage ses solutions à base de Plugins et nous l’en remercions pour ses accords parfaits.

Pour autant, il n’est pas vain de comprendre comment faire l’économie d’un plugin dit «personnel» et pour ce faire, nous prendrons un exemple proposé par P@t.

Bien entendu, cela ne sera pas toujours aussi évident et il ne faut surtout pas appliquer cette solution de façon systématique. Dès lors que vous avez des requêtes SQL, il sera préférable de choisir une solution par plugin.

Exemple proposé par P@t:

add_event_handler('init', 'assign_template_permission_level');
function assign_template_permission_level()
{
  global $user, $template;
  $template->assign('USER_LEVEL', $user['level']);
}

et dans le template:

{if $USER_LEVEL >= 1}
Vous avez été reconnu par le webmaster comme une personne ayant plus de droits que d'autres...
{/if}

C’est effectivement très simple. Qu’à cela ne tienne !
C’est tellement simple que tout ceci peut très bien être réalisé directement dans le template…

{php}
global $user;
$this->assign('USER_LEVEL', $user['level']);
{/php}
{if $USER_LEVEL >= 1}
Vous avez été reconnu par le webmaster comme une personne ayant plus de droits que d'autres...
{/if}

Moins d’«handler», moins de conflits et d’erreurs. C’est encore plus simple.
Je n’explique pas toutes les justifications techniques mais assurément aujourd’hui, c’est bien la direction à prendre pour éviter le plat de spaghettis (ou sans le ‘s’ à l’italienne) à la sauce plugins.

Qu’on se le dise! Mais qu’on ne se le tienne pas pour dit, enfin au moins, cette fois c’est écrit!

Whois Online : grandes lignes

«Whois Online» est un plugin d’information sur les visites d’une galerie Piwigo.

Dans PhpWebGallery (version précédente de Piwigo), pour offrir des indications sur les visites observées, j’avais développé un plugin basé sur l’historique des visites de la galerie.
Malheureusement la volumétrie de l’historique croit, et toute requête devient vite pénalisante pour le serveur MySQL.
Pour que le plugin fonctionne, nous devions activer l’historique. Le provider Free s’était empressé de faire la chasse aux historiques en base de données, condamnant ainsi ses clients à ne plus pouvoir afficher ces indications.
Dans une optique radicalement opposée, j’ai donc conçu «Whois Online».

Une petite table, épurée régulièrement, devient donc la clé de voûte du plugin.

La structure (sans entrer dans les détails):

  1. La session php.
  2. La première (ou dernière) adresse IP (connue).
  3. L’identifiant de l’utilisateur.
  4. Son pseudo.
  5. La langue utilisée.
  6. La permanence de ce suivi (‘false’ par défaut).
  7. Le time() php du dernier accès.
  8. Les 10 derniers ids utilisés via picture.
  9. Les 10 derniers ids de catégories présentées via index.
  10. Les 10 derniers ids de tags présentés par picture.
  11. Les 10 derniers ids de recherches présentés par picture.
  12. La date du premier accès connu.
  13. Les hits sur picture.
  14. Les hits sur picture/index.
  15. etc.

À savoir: Un enregistrement global conserve le nombre de hits par minute (10), par tranches de 5 minutes (12), par heures (24), et par jour (14).
À l’activation du plugin, la table est crée si elle n’existe pas déjà.
À la désactivation, la table est supprimée sauf si elle est protégée (Option par défaut, modifiable en configuration).
À chaque visite de l’index ou de picture, (Événements « loc_begin_index » et « loc_begin_picture ») le plugin met à jour la table, prépare les informations, et (suivant les options en configuration) il affiche ou non les éléments d’information.

Les visites (Hits) des pages Comments, Tags, Search, Notification, Identification et autres ne sont pas comptabilisés.
Nous présentons une galerie ne l’oublions pas.

Vous pouvez configurer le plugin en sachant que pendant les 24 premières heures, les informations affichées seront incomplètes (il n’y avait rien avant).
Au-delà de 24h, vous pouvez afficher les informations que vous souhaitez. Vous pouvez ne pas afficher les données par le plugin mais par votre template extension. Voir le template fourni, default.tpl, pour un exemple d’utilisation des variables {$Whois.xxxx}.
À lire l’article : « Whois Online : côté template ».
Vous devez encore savoir que le nombre de hits des images est calculé au départ sur la base des hits connus dans la table images. Par contre pour le total des pages d’index et le total, il s’agit d’estimations (respectivement 70% et 170% du nombre de hits des images).

Whois Online : côté template

«Whois Online» propose une solution d’affichage des indications obtenues (Cf. Les grandes lignes). Pour autant, vous désirez peut-être insérer ailleurs quelques uns de ces éléments. À la surprise générale, vous n’obtiendrez aucun élément dans certains cas. En effet, il se peut que votre template soit traité avant l’appel de «Whois Online», et dans ce cas, vous ne pourrez pas afficher ces indications. Exemple: La page about.php (A propos) ne sollicite pas le plugin, et elle ne peut pas afficher ces indications. En supposant que votre template soit analysé et résolu après l’appel du plugin, vous pourrez coder celui-ci de la façon suivante:

<balise attribut="valeur">{'Exemple d\'utilisation :'|@translate} {$Whois.indication}</balise>

{$Whois.indication} est un exemple, et à la place de « indication » vous avez le choix suivant:

Total Nombre de visites de toutes les pages suivies (Index / Picture).
Image Nombre de visites de la page picture.php
Other Différence entre les deux précédentes valeurs.
Current_minute Nombre de visite depuis le début de la minute actuelle (prise sur le serveur), cette minute fait donc entre 1 seconde et 1 minute (à 21:12:53, la minute ne fait que 54 secondes).
Previous_minute Nombre de visite de la minute précédente (à 21:12:53, il s’agit des visites comprises entre 21:11:00 et 21:11:59).
Current_5mins Visites des 5 dernières minutes en cours (à 21:12:53, il s’agit des visites comprises entre 21:08:00 et 21:12:53).
Current_10mins Visites des 10 dernières minutes en cours (à 21:12:53, il s’agit des visites comprises entre 21:03:00 et 21:12:53).
Current_hour Visites des 55 minutes et un peu plus.
Current_24h Visites des 1380 minutes et un peu plus.
Yesterday Visites de la journée d’hier (Calendaire).
Users_Last_day Nombre de visiteurs des 24 dernières heures à la seconde près.
Users_Last_hour Nombre de visiteurs des 3600 dernières secondes.
Guests Nombre de visiteurs non connectés qui ont été actifs durant les 5 dernières minutes (ils regardent, passent un coup de fil, sont sur une autre application, consultent un autre site, de toute façon, ils peuvent ou non revenir dans une seconde) au-delà c’est déjà peu probable.
Online Liste des membres connectés (et pas un nombre) durant les 5 dernières minutes.
Review_url Lien (href=) vers la page d’index des images que les autres visiteurs ont consultées mais pas l’actuel visiteur en tenant compte de ses droits (ce paramètre peut être non renseigné), il est possible d’y trouver des images déjà vues mais pas si elles sont dans Seen_url.
Their_ids (tableau) identifiants des images correspondantes à Review_url.
Seen_url Lien (href=) vers la page d’index des images que le visiteur vient de consulter (ce paramètre peut être non renseigné).
My_ids (tableau) identifiants des images correspondantes à Seen_url.

En complément, vous avez également {$Online.xxxxxxx} et comme pour {$Whois.xxxxxx} vous pouvez activer le plugin standard « Multi view » qui permet lancer la « Smarty Debug Console ». A l’aide de cette dernière, vous pourrez retrouver toutes les variables disponibles à l’issue du traitement de chaque page.

Whois Online : un nettoyage régulier

La table mémoire du plugin Whois Online est épurée régulièrement.

Une fois toutes les 7 sollicitations, suivant la taille de la table, le plugin tentera de réduire le nombre d’enregistrements de la table. Certains enregistrements pourront être effacés dès lors qu’ils sont présents depuis plus de 72 heures sans accès ou que la permanence ne sera pas prévue (’false’ par défaut).

Par défaut, si le nombre d’enregistrements à effacer est supérieur à 20, et si ce nombre représente plus de 20% de ceux à conserver alors dès la septième sollicitation suivante l’effacement sera réalisé.

Autrement dit :
– L’enregistrement global ne sera jamais supprimé (hits par minutes, 5 minutes, heures, et jours).
– Les enregistrements des visiteurs récents (moins de 72 heures) ne seront pas supprimés.
– Les enregistrements protégés (Webmaster, Admin, … selon vos choix) resteront dans la table (permanence).
– Les sites ayant peu de visiteurs ou ayant des membres régulièrement connectés ne devraient pas ressentir de ralentissements du fait d’une épuration à priori exceptionnelle.
– Les sites très sollicités par un grand nombre de visiteurs différents devraient avoir un lissage de l’épuration. D’une part, l’épuration ne devrait pas être systématique (une fois sur sept), et d’autre part, en configurant le plugin les webmaster pourront adapter le seuil de déclenchement:
(Nombre d’enregistrements permanents et/ou d’accès de moins de 72 heures) + 20%
Ces 20% seront paramétrables (10% à 200%).

Exemple sans déclenchement :
– 5 enregistrements permanents + 95 visiteurs très récents.
Il faudrait en standard avoir « n » enregistrements pour déclencher…
Imaginons que nous avons 50 visiteurs de plus pendant les 3 prochaines heures.
Combien faudra-t-il avoir d’accès ayant plus de 72 heures sans retour du visiteur?
( 5 + 95 + 50 ) x 20% = 30 et en dessous: PAS DE DÉCLENCHEMENT.

Exemple de déclenchement :
– Durant les 3h suivantes, 40 visiteurs dépassent les 72 heures sans activité, nous avons également 10 visiteurs récents en plus, reprennons:
95 (du départ) + 50 (des 3 premières heures) + 10 (nouveaux) + 5 (permanents):
Nous sommes à 160 accès connus dont 40 à supprimer. Combien avons-nous d’actifs? (160 – 40) = 120
Les 40 accès à supprimer représente donc 33% des actifs soit plus de 20%.
Et 40 accès à supprimer c’est également plus que les 20 accès du seuil fixe. Le déclenchement se réalisera si ce n’est pas déjà fait durant les 7 prochains accès.

Dans la pratique, l’épuration ne se réalisera que rarement en période de forte sollicitation du site (toujours trop d’utilisateurs récents), mais elle intervient en début de reprise après une période de faible activité du site. Puis une fois par heure, au moment du passage d’un certain nombre de visiteurs au moins à plus de 72 heures d’inactivité.

Le seuil en % (20% par défaut) pourra être modifié via l’icone Icone de Whois Online (Admin > Spéciale > Historique) par :
Seuil de nettoyage [10-200] (rapport entre données obsolètes et actives)

Tandis que le seuil fixe (20 par défaut) pourra l’être par :
Limite d’inactifs [20-100] (nombre maximum d’anciens enregistrements)

Ajouter un lien en Admin…

Niveau: Moyen
Je ne sais jamais où conserver les liens utiles au site.
Exemples:
L’adresse de la home page de mon Provider, mon url de PhpMyAdmin, Paypal, Google Analytics, Google Adsense, … Certains de ces liens n’ont pas besoin d’être publiés ailleurs qu’en Admin.

L’objectif de cet article est de vous montrer qu’en quelques secondes vous allez pouvoir les enregistrer.

Remarque: le plugin LocalFiles Editor doit être activé.
Administration > Spéciales > LocalFiles Editor > Onglet « Langues »
Choisissez votre langue: Français (FR) [Edit]
Pour notre exemple, j’ajoute ceci:

$lang['FORUM'] = 'Support</a></li>
<li class="external"><a class="external" href="http://www.vdigital.org/sharing/" onclick="window.open(this.href, \'\'); return false;">VDigital\'s'
;

Explications:
Normalement dans admin.lang.php, vous trouvez ceci:

$lang['FORUM'] = 'Support';

Dans le template d’Admin, nous trouvons

<li><a ... >{'FORUM'|@translate}</a></li>

@translate va remplacer ‘FORUM’ par sa traduction.
La traduction est réalisée en fonction du langage utilisé par admin.lang.php.

Cependant cette traduction peut être contre-carrée par la version locale de la langue.
LocalFiles Editor Plugin est l’outil idéal pour modifier ce fichier.

Oui mais dans la traduction rien ne vous empêche de:

  • traduire ‘FORUM’,
  • et d’ajouter autant de fois que nécessaire:
    • la fermeture des balises HTLM encore ouvertes (</a></li>)
    • ouvrir un autre lien (<li …><a …>VDigital\’s)

Ne fermez pas les dernières balises (la fermeture déjà prévue de ‘FORUM’ s’en chargera).
Ces liens seront pratiques pour référencer vos sites techniques préférés ou d’autres sites privés.

Des liens sans .php

Quelques hébergeurs (comme OVH ou Infomaniak) proposent l’option MultiViews.

À vérifier: Accédez à une de vos images par la page picture.php. À partir de l’URL indiquée dans la barre de votre navigateur, enlevez « à la main » l’indication .php et faites « Entr(er) ». Si cela fonctionne, vous pourrez continuer.

Pour les serveurs Apache, vous allez créer votre fichier .htaccess (au niveau du répertoire racine de votre site ou à défaut de votre répertoire Piwigo).
Il vous suffira de coder ceci:

Options +Multiviews

Alors depuis l’Administration > Spéciale > LocalFiles Editor
et l’onglet Configuration, vous ajouterez ceci:

$conf['php_extension_in_urls'] = false;

Vos adresses en seront, je veux le croire, beaucoup plus sympathiques !!!