Fiche


Niveau de difficulté : Avoir de bonnes bases.
Recommandations : n/c
A lire aussi : Sujet dédié sur le forum


Ceci est un exemple de plugin réalisé par une personne ne connaissant pas le php à la base
Voyez comme il arrive à s'en sortir. :-)

[Exemple] Plugin "Event Cats"

“Event Cats” vient de “Event Categories”, c'est-à-dire “catégories évènementielles” (un peu barbare, comme nom).
Version de Piwigo : 2.0.x.
Le concept a été discuté dans la discussion 15306 du forum français.
Cette description n'est pas appelée à durer, car ce plugin personnel va très bientôt devenir un plugin à part entière, amélioré en ce qui concerne sa configuration.

LE CONTEXTE


Le principe est le suivant : vous participez à un évènement (mariage, anniversaire, gala de judo du neveu…), au cours duquel vous savez que vous allez réaliser des photos (excellentes au demeurant). Vous voudrez les partager, entre autres avec des gens que vous ne connaissez pas forcément très bien et qui, surtout, n'ont pas (encore) de compte enregistré sur votre galerie. Mais vous ne voulez pas placer ces clichés dans une catégorie publique. Fournir :

  • l'URL de votre site ;
  • un compte (générique en l'occurrence, normalement) ;
  • un mot de passe,

peut parfois s'avérer compliqué, surtout à l'attention de gens un peu âgés (vous connaissez pas ma mère).

Ou bien, évoqué récemment dans la discussion 14698 du forum francophone, vous venez de créer votre galerie (toujours avec un contenu privé), et vous voulez prévenir toute votre famille d'un coup. Mais créer les 150 comptes que cela représente est un peu long… Vous pouvez les prévenir de l'existence de votre galerie en leur enjoignant de s'enregistrer, mais ils n'auront accès au contenu privé qu'après que vous en ayez donné la possibilité aux comptes créés ; or vous partez pour quinze jours aux Galapagos dans l'après-midi (et là-bas, il n'ont pas encore l'ADSL)…

“Event Cats” apporte les deux fonctionnalités suivantes :

  • possibilité d'identifier un compte à l'aide d'un simple URL (identification automatique, “auto log”) ;
  • possibilité pour le visiteur de s'enregistrer, en “recopiant” les droits du compte sous lequel il est identifié (duplication de compte).

Ainsi, juste avant de partir pour l'évènement où vous serez photographe, vous n'avez qu'à imprimer quelques dizaines de fois l'URL d'identification automatique comme une carte de visite par exemple, pour pouvoir le distribuer aux autres participants (vos futurs visiteurs) pendant l'évènement. Ou bien, juste avant de hisser les voiles pour les Galapagos, vous n'avez qu'à envoyer l'URL d'identification automatique à votre famille entière, en rappelant la possibilité de duplication.

LA RÉALISATION


Pour ce faire :

  • vous devez avoir activé l'extension (“plugin”) “LocalFiles Editor” ;

(Lorsque identifié en tant que Webmestre ou Administrateur, aller dans la page d'administration, cliquer sur “Speciales” puis sur “Plugins”. “LocalFiles Editor” est présent par défaut. Cliquer sur pour installer le plugin ; cliquer sur pour l'activer.)

  • le plugin “PWG Stuffs” est fortement conseillé ;

(Lorsqu'identifié en tant que Webmestre ou Administrateur, allez dans la page d'administration, cliquez sur “Speciales” puis sur “Plugins”. Cliquez sur “Autres plugins disponibles” en haut à droite. Dans la liste des plugins, cliquez sur “Installation automatique” situé sur la même ligne que “PWG Stuffs”. Cliquez à nouveau sur “Plugins” de la section “Speciales”, “PWG Stuffs” est normalement apparu. (Si ce n'est pas le cas, dans “Autres plugins disponibles”, cliquez sur “Téléchargement” situé sur la même ligne que “PWG Stuffs”. A l'aide d'un client FTP, transférez le dossier “PWG_Stuffs” du fichier téléchargé, dans le dossier “plugins” du répertoire où vous avez installé Piwigo, chez votre hébergeur. Donc, une fois apparu “PWG Stuffs” dans la liste de vos plugins : ) Cliquez sur pour installer le plugin ; cliquez sur pour l'activer.)

  • le plugin “Additional pages” est utilisé dans un prolongement, disons, du plugin personnel “Event Cats”.

(Ci-dessus, remplacer “PWG Stuffs” par “Additional Pages”… ;-) )

Une fois le plugin “LocalFiles Editor” activé, cliquez sur le lien “LocalFiles Editor” apparu en-dessous de “Plugins” dans la section “Speciales” du menu de la page d'administration. Cliquez sur “Plugin Personnel” en haut à droite. Recopiez le code ci-dessous dans le cadre situé en-dessous de “plugins/PersonalPlugin/main.inc.php”, entre les balises ”<?” et ”?>”. Si vous avez un autre plugin personnel déjà présent dans ce cadre, recopiez ce code après le code déjà présent, sans rien effacer. Il faudrait ne pas avoir de chance pour que le code rajouté perturbe le fonctionnement du code déjà présent. Enregistrez vos modifications en cliquant sur le bouton “Enregistrer” en-dessous du cadre. Si tout a été correctement fait, vous devez obtenir un message de confirmation vert, en haut de la page d'administration.

<?php
/*
Plugin Name: Event Cat
Version: 1.0.0
Description: A single URL can be enough to be identified, and a user can duplicate his account to create a new one with same properties. / On peut être identifié grâce à un simple URL, et on peut dupliquer son compte pour créer un nouveau compte ayant les mêmes propriétés.
Plugin URI: (Doesn't exist for the moment)
Author: P@t
Author URI: http://www.gauchon.fr
*/
 
add_event_handler('init', 'auto_log_user');
 
function auto_log_user()
{
  global $conf;
 
  if (isset($_GET['autolog']) and isset($conf['auto_log']))
  {
    if (isset($conf['outdated_page'][$_GET['autolog']]))
    {
      redirect(PHPWG_ROOT_PATH.'index.php?/additional_page/'.$conf['outdated_page'][$_GET['autolog']]);
    }
    elseif (isset($conf['auto_log'][$_GET['autolog']]) and ($userid = get_userid($conf['auto_log'][$_GET['autolog']])))
    {
      log_user($userid, false);
      if (isset($conf['prior_page'][$_GET['autolog']]))
      {
        redirect(PHPWG_ROOT_PATH.'index.php?/additional_page/'.$conf['prior_page'][$_GET['autolog']]);
      }
      elseif (isset($_GET['cat']) and is_numeric($_GET['cat']))
      {
        redirect(PHPWG_ROOT_PATH.'index.php?/category/'.$_GET['cat']);
      }
      else
      {
        redirect(make_index_url());
      }
    }
    else
    {
      access_denied();
    }
  }
}
 
add_event_handler('register_user', 'assign_perm_for_new_user');
 
function assign_perm_for_new_user($new_user)
{
  global $user;
 
  if (!is_a_guest() and !is_admin())
  {
    // User access
    $query = 'SELECT cat_id FROM '.USER_ACCESS_TABLE.' WHERE user_id = '.$user['id'].';';
    $result = pwg_query($query);
    $insert = array();
    while ($row = mysql_fetch_assoc($result))
    {
      $insert[] = '('.$new_user['id'].','.$row['cat_id'].')';
    }
    if (!empty($insert))
    {
      pwg_query('INSERT INTO '.USER_ACCESS_TABLE.' VALUES '.implode(',', $insert).';');
    }
 
    // User groups
    $query = 'SELECT group_id FROM '.USER_GROUP_TABLE.' WHERE user_id = '.$user['id'].';';
    $result = pwg_query($query);
    $insert = array();
    while ($row = mysql_fetch_assoc($result))
    {
      $insert[] = '('.$new_user['id'].','.$row['group_id'].')';
    }
    if (!empty($insert))
    {
      pwg_query('INSERT INTO '.USER_GROUP_TABLE.' VALUES '.implode(',', $insert).';');
    }
 
    // User infos
    $query = 'SELECT level FROM '.USER_INFOS_TABLE.' WHERE user_id = '.$user['id'].';';
    $result = pwg_query($query);
    $insert = array();
    while ($row = mysql_fetch_assoc($result))
    {
      $insert[] = '('.$new_user['id'].','.$row['level'].')';
    }
    if (!empty($insert))
    {
      $query = 'UPDATE '.USER_INFOS_TABLE.' SET level = '.$user['level'].' WHERE user_id = '.$new_user['id'].';';
      pwg_query($query);
    }
  }
}
 
add_event_handler('blockmanager_apply', 'duplicate_account_url');
 
function duplicate_account_url()
{
  global $conf, $lang, $template;
 
  if ($conf['allow_user_registration'] and !is_admin() and !is_a_guest())
  {
    $template->assign( 'U_REGISTER', get_root_url().'register.php');
    $lang['Create a new account'] = l10n('Duplicate account');
    $lang['Register'] = l10n('Duplicate');
  }
}
 
?>



Ensuite cliquez sur “Configuration locale” en haut à droite (à gauche de la droite ;-) ) de la page d'administration. Un cadre doit normalement se situer en-dessous de “include/config_local.inc.php”. A la fin du fichier, avant la balise ”? >”, recopiez le code ci-dessous. Enregistrez déjà vos modifications en cliquant sur le bouton “Enregistrer” en-dessous du cadre. Si tout a été correctement fait, vous devez obtenir un message de confirmation vert, en haut de la page d'administration. Mais c'est ici que vous allez pouvoir configurer “Event Cats”.

// Pour le plugin personnel Event Cats, la table des codes pour permettre l'identification automatique des comptes listés ici : 
$conf['auto_log'] = array(
  'Code02_pour_Piwigo03' => 'Piwigo',
  'prior_page_pour_Piwigo03' => 'Piwigo',
);
 
// Pour le plugin personnel Event Cats, la table des codes périmés avec l'identifiant de la page Additional Pages correspondant : 
$conf['outdated_page'] = array(
  'Code_perime_pour_Piwigo03' => '2',
);
 
// Pour le plugin personnel Event Cats, la table des codes passant d'abord par une page Additional Pages,
// avec l'identifiant correspondant : 
$conf['prior_page'] = array(
  'prior_page_pour_Piwigo03' => '3',
);
 
// Pour le plugin personnel Event Cats, autoriser la duplication de compte : 
$conf['allow_user_registration'] = true;



La configuration ci-dessus, dans mon site de tests, active les liens suivants, que vous pouvez tester :

Vous êtes automatiquement identifié sur mon site de tests en tant que l'utilisateur “Piwigo”, et êtes redirigé sur la catégorie 15.

Vous n'êtes pas identifié, et êtes redirigé sur la Additional Pages 2, qui annonce que ce lien est périmé.

Vous êtes automatiquement identifié sur mon site de tests en tant que l'utilisateur “Piwigo”, et êtes redirigé sur la Additional Pages 3.

Vous avez la possibilité de dupliquer le compte générique “Piwigo”, et donc avoir immédiatement accès à la catégorie privée “Piwigo” sous votre propre compte (que je ne conserverai peut-être pas longtemps ;-) !) que vous pouvez personnaliser.

LA CONFIGURATION


La configuration de “Event Cats” se fait (pour le moment) à l'aide des variables $conf[] recopiées dans le fichier “include/config_local.inc.php”. “Event Cats” utilise les tableaux suivants :

  • $conf['auto_log']

cette variable tableau établit la liste des comptes qui pourront faire l'objet d'une identification automatique. A chaque ligne de la définition de la variable, est déclarée une correspondance entre un code. choisi par vous, et un compte ouvert dans la liste des utilisateurs de votre galerie. Points de vigilance :

  1. ne modifier que les termes entre les apostrophes (') ;
  2. le compte doit être écrit exactement de la même façon qu'il est défini dans la liste des utilisateurs ;
  3. le code ne doit comporter que des caractères habituellement trouvés dans un URL, c'est-à-dire pas d'espaces, de guillemets, d'apostrophes, de caractères accentués, de caractères “spéciaux en général”, disons, pour être sûr… en gros : lettres majuscules ou minuscules de A à Z, chiffres, caractères -, +, _, et en se limitant à cela on est sûr(e) de ne pas se tromper.


  • $conf['outdated_page']

Cette variable tableau établit la liste des codes “périmés”, c'est-à-dire que si un visiteur utilise un URL comportant l'un de ces codes, il ne sera pas identifié, et sera redirigé vers une page créée avec le plugin “Additional Pages”. A chaque ligne de la définition de la variable, est déclarée une correspondance entre le code, et l'identifiant de la page “Additional Pages” correspondante. Attention, aucun test n'est effectué pour vérifier que la page existe bel et bien. L'identifiant de la page est un numéro, que vous pouvez repérer dans le lien créé par ce plugin vers cette page, au moment de sa création.

  • $conf['prior_page']

Cette variable tableau établit la liste des codes avec lesquels le visiteur sera identifié automatiquement, mais sera d'abord redirigé vers une page créée avec le plugin “Additional Pages”. A chaque ligne de la définition de la variable est déclarée une correspondance entre le code et l'identifiant de la page “Additional Pages” correspondante. Attention, aucun test n'est effectué pour vérifier que la page existe bel et bien. L'identifiant de la page est un numéro, que vous pouvez repérer dans le lien créé par ce plugin vers cette page, au moment de sa création.

Et la variable booléenne (vrai/faux) suivante:

  • $conf['allow_user_registration']

Cette variable booléenne prendra la valeur true ou false selon que vous voulez respectivement autoriser ou pas la fonctionnalité de duplication de compte. Attention, pour le moment cette fonctionnalité est établie pour tous les utilisateurs enregistrés, c'est-à-dire même ceux s'identifiant “normalement” sur votre site. Prochainement une nouvelle variable tableau permettra d'affiner cette autorisation.

Copiez/collez les lignes d'exemple pour les variable tableaux, puis modifiez-les comme indiqué pour établir les correspondances que vous voulez pour votre site.

Utilisez la section “Identification” du menu de la page d'administration pour créer les utilisateurs et leur affecter les groupes correspondant aux droits de visite que vous désirez. Utilisez le lien “Gérer” de la section “Catégories” pour établir les autorisations des catégories privées sur les groupes que vous désirez (voir le wiki pour plus de détails sur ces sujets).

Une fois tous ces paramètres correctement établis, vous pouvez communiquer un URL du type suivant:

http://xxxx.fai.com/piwigo/index.php?autolog=code_numero_1

où “xxxx.fai.com” est l'URL “racine” de votre site, “piwigo” le chemin où est situé la racine de Piwigo sur votre site, et “code_numero_1” le code correspondant au compte que vous voulez identifier automatiquement. “Event Cats” permet enfin de rediriger automatiquement l'utilisateur identifié vers une catégorie spécifique (celle du mariage où vous avez été photographe par exemple). Pour ce faire, repérez sur votre site l'identifiant de la catégorie en question (lorsque vous cliquez sur une catégorie pour y entrer, Piwigo vous redirige vers un URL du type “index.php?/category/nn”. C'est le nombre représenté par nn qui est l'identifiant de cette catégorie), et communiquez l'URL suivant:

http://xxxx.fai.com/piwigo/index.php?autolog=code_numero_1&cat=nn

(Ou bien http://xxxx.fai.com/piwigo/index.php?cat=nn&autolog=code_numero_1 c'est exactement pareil.)

ET VOILA !


Ne vous reste plus qu'à copier/coller, et vous habiller pour le mariage, ou pour les Galapagos ;-) !

Merci à P@t et à l'équipe.

Luc

MERCI DE NE PAS TOUCHER AUX LIGNES QUI SUIVENT.

 
Haut de page
projet/developpement/plugins/exemple_event_cat.txt · Dernière modification: 2010/10/30 16:02 par gotcha
 
 
github twitter newsletter Faire un don Piwigo.org © 2002-2020 · Contact