Annonce

  •  » Plugins
  •  » [Avis et conseils] Mod d'info mail des utilisateurs validés

#1 2006-02-26 17:04:32

Eric
Équipe Piwigo
VALENCE (FR)
2005-03-25
4579

[Avis et conseils] Mod d'info mail des utilisateurs validés

Bonjour à tous.

Cà fait prèt d'un an que j'ai découvert et aimé PWG et je me lance maintenant dans la création d'un Mod destiné à apporter une nouvelle fonction dans le panneau d'administration, partie "gestion des utilisateurs".

Celà consiste à ajouter la possibilité à l'admin d'envoyer automatiquement un mail aux utilisateurs inscrits qu'il aura sélectionné dans la page "user_list" pour leur signifier que leur inscription a été validée - C'est à dire que l'admin a associé le(s) utilisateur(s) à un ou des groupes d'utilisateurs, permettant ainsi la visualisation des catégories privées autorisées (c'est mon cas personnel !).

Mais je débute en php et j'ai besoin d'avis et des conseils concernant le code.

Tout d'abord la fonction de mail que je pense ajouter dans admin/include/functions.php :

Code:

// Validation Mail
//****************
function mail_user( $user_id )
{
  global $conf;

  $headers = 'From: <'.$mail_webmaster.'>'."\n";
  $headers.= 'Reply-To: '.$mail_webmaster."\n";
  $headers.= 'X-Mailer: PhpWebGallery, PHP ';

  $query = 'SELECT username,mail_address';
  $query.= ' FROM '.USERS_TABLE;
  $query.= " WHERE id = $user_id";
  $query.= ';';
  $result = pwg_query( $query );
  $query2 = 'SELECT language';
  $query2.= ' FROM '.USERS_INFOS_TABLE;
  $query2.= " WHERE id = $user_id";
  $query2.= ';';
  $result2 = pwg_query( $query2 );  
  while ( $row = mysql_fetch_array( $result ) )
  {
  while ( $row2 = mysql_fetch_array( $result2 ) )
  {  
    $to = $row['mail_address'];
    include( PHPWG_ROOT_PATH.'language/'.$row2['language'].'/common.lang.php' );
    $content = $lang['mail_hello'].$row['username']"\n\n";
    $subject = $lang['mail_validation_subject'];
    $content.= $lang['mail_validation_content'];
    $content = wordwrap( $content, 72 );
    @mail( $to, $subject, $content, $headers );
   }
   }
}

Cette fonction est appelée par une nouvelle option dans admin/user_list.php :

Code:

// +-----------------------------------------------------------------------+
// |                             mail users                                |
// +-----------------------------------------------------------------------+

if (isset($_POST['mail']) and count($collection) > 0)
{
    if (isset($_POST['confirm_mail']) and 1 == $_POST['confirm_mail'])
    {
      foreach ($collection as $user_id)
      {
        mail_user($user_id);
      }
      array_push(
        $page['infos'],
        sprintf(
          l10n('%d users mailed'),
          count($collection)
          )
        );
    }
    else
    {
      array_push($page['errors'], l10n('You need to confirm mailing'));
    }
  }
}

Il reste a modifier les templates et les fichiers common.lang.php pour que ce soit complètement fonctionnel mais avant d'aller plus loin, j'aimerai l'avis de "pros" du php. Par exemple, je ne suis pas sure de ma double boucle while imbriquée functions.php, ni sur la cohérence de mes requètes Sql. Le problème c'est que les infos nécessaires (username, mail_address, language) sont dans des tables différentes...

Merci d'avance pour vos commentaires et votre aide.

Hors ligne

#2 2006-02-27 23:15:49

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15126

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

Je pourrais t'aider pour la partie SQL, je vais y réfléchir... UP si besoin. 8-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#3 2006-03-16 20:57:04

Eric
Équipe Piwigo
VALENCE (FR)
2005-03-25
4579

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

Juste un passage éclair concernant le mod.

Le code est pas mal avancé mais encore à l'état de "rustine bancale". Je bute principalement sur le Sql mais je tiens à me débrouiller. Car c'est bien en forgeant que l'on devient forgeron !

Malheureusement, je n'ai pas le temps en ce moment de m'y impliquer autant que je voudrais. D'ici 2 semaines, ma situation devrait se calmer un peu et j'espère alors revenir ici pour proposer ce fameux mod.

D'ici là, merci d'être patient et, bien que celà me motive, merci d'éviter de m'envoyer des mails sur ce sujet. Préférez plutôt le post sur ce topic. Y étant abonné, je serai averti de vos messages.

Hors ligne

#4 2006-03-24 22:11:38

Eric
Équipe Piwigo
VALENCE (FR)
2005-03-25
4579

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

Je me suis (enfin ?) remis au travail sur mon Mod mais j'ai de sacrées lacunes quant à l'appel de requètes Sql via Php. Alors, j'aurai besoin d'un coup de main d'un spécialiste (VDigital ?).

Voici la fonction de génération des mails que j'ai ajoutée dans le fichier PWG/admin/include/functions.php :

Après

Code:

  // destruction of the user
  $query = '
DELETE FROM '.USERS_TABLE.'
  WHERE '.$conf['user_fields']['id'].' = '.$user_id.'
;';
  pwg_query($query);
}

Ajouter

Code:

//**************************
// Begin Mod validation par Mail *
//**************************
function mail_user($user_id)
{
  global $conf;

  $headers = 'From: <'.$mail_webmaster.'>'."\n";
  $headers.= 'Reply-To: '.$mail_webmaster."\n";
  $headers.= 'X-Mailer: PhpWebGallery, PHP ';
  
  $query = 'SELECT ut.username,ut.mail_address,uit.language';
  $query.= ' FROM '.USERS_TABLE.' as ut';
  $query.= ', '.USERS_INFOS_TABLE.' as uit';
  $query.= ' WHERE ut.id = uit.user_id';
  $query.= 'AND ut.id= '.$user_id;
  $query.= ';';
  $result = pwg_query( $query );
  while ( $row = mysql_fetch_array( $result ) )
  {
    $to = $row['mail_address'];
    include( PHPWG_ROOT_PATH.'language/'.$row['language'].'/admin.lang.php' );
    $subject = $lang['Mail_validation_subject'];
    $content = $lang['Mail_hello'].$row['username']"\n\n";
    $content.= $lang['Mail_validation_content'];
    $content = wordwrap( $content, 72 );
    @mail( $to, $subject, $content, $headers );
  }
}
//*************************
// End Mod validation par Mail  *
//*************************

Malheureusement, j'ai une erreur :

Parse error: parse error in ..\easyphp1-8\www\phpwebgallery-1.5.2\admin\include\functions.php on line 356

La ligne 356 du functions.php correspond chez moi à

Code:

$content = $lang['Mail_hello'].$row['username']"\n\n";

Et je ne comprend pas ou peut se trouver l'erreur...

Une idée pour m'aider à avancer ?

Dernière modification par Eric (2006-03-24 22:24:15)

Hors ligne

#5 2006-03-24 22:47:39

gopfreery
Membre
2006-03-12
40

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

Il ne manqurait pas un point de concaténation de chaine entre $row['username'] et "\n\n" ?

Code:

$content = $lang['Mail_hello'].$row['username']."\n\n";

gopfreery

Hors ligne

#6 2006-03-24 23:03:15

Eric
Équipe Piwigo
VALENCE (FR)
2005-03-25
4579

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

Rrrraaaaahhh !!!!

Mais c'est bien sur ! Cà doit être la fatigue qui me fait loucher sur des boulettes de ce genre...

Milles merci à toi !

Après avoir corrigé çà, je me retrouve avec d'autres erreurs mais je pense pouvoir les corriger aisément. Mais je je recommence à sécher misérablement, j'espère ton aide à nouveau ;)

Hors ligne

#7 2006-03-25 00:02:20

Eric
Équipe Piwigo
VALENCE (FR)
2005-03-25
4579

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

J'ai maintenant une erreur avec l'appel à la variable $collection dans PWG/admin/user_list.php. Voici mon code et l'endroit ou je l'ai inséré dans le fichier :

Après

Code:

// +-----------------------------------------------------------------------+
// |                             delete users                              |
// +-----------------------------------------------------------------------+

if (isset($_POST['delete']) and count($collection) > 0)
{
  if (in_array($conf['webmaster_id'], $collection))
  {
    array_push($page['errors'], l10n('Webmaster cannot be deleted'));
  }
  else
  {
    if (isset($_POST['confirm_deletion']) and 1 == $_POST['confirm_deletion'])
    {
      foreach ($collection as $user_id)
      {
        delete_user($user_id);
      }
      array_push(
        $page['infos'],
        sprintf(
          l10n('%d users deleted'),
          count($collection)
          )
        );
    }
    else
    {
      array_push($page['errors'], l10n('You need to confirm deletion'));
    }
  }
}

Ajouter

Code:

//**************************
// Begin Mod validation par Mail *
//**************************
if (isset($_POST['mail']) and count($collection) > 0)
{
  if (in_array($conf['webmaster_id'], $collection))
  {
    array_push($page['errors'], l10n('Webmaster cannot be notified'));
  }
  else
  {
    if (isset($_POST['confirm_mail']) and 1 == $_POST['confirm_mail'])
    {
      foreach ($collection as $user_id)
      {
        mail_user($user_id);
      }
      array_push(
        $page['infos'],
        sprintf(
        l10n('%d users mailed'),
        count($collection)
          )
        );
    }
    else
    {
      array_push($page['errors'], l10n('You need to confirm mailing'));
    }
  }
}
//*************************
// End Mod validation par Mail  *
//*************************

Ceci lié à une modif du fichier user_list.tpl dans l'admin du template que j'utilise devrait permettre le lancement de la fonction mail_user en fonction des users sélectionnés dans la liste (même principe que pour le "delete users"). Or, après avoir fait quelques sélections de users et lancé la fonction, voici le message que j'obtient :

Notice: Undefined variable: collection in ...\easyphp1-8\www\phpwebgallery-1.5.2\admin\user_list.php on line 278

Visiblement, la varaible $collection n'est pas définie dans le bloc que j'ai ajouté. La question est pourquoi ?

Hors ligne

#8 2006-03-25 06:49:21

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15126

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

Alors qu'elle le serait dans le test qui suit ton ajout?
A priori l'erreur n'est pas là.


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#9 2006-03-25 10:06:06

gopfreery
Membre
2006-03-12
40

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

Eric a écrit:

Visiblement, la varaible $collection n'est pas définie dans le bloc que j'ai ajouté. La question est pourquoi ?

Ligne 212 de admin/user_list.php tu as une condition sur le définition de la varible collection:

Code:

if (isset($_POST['delete']) or isset($_POST['pref_submit']))
{
  $collection = array();

Tu devrais mettre un truc dans le genre

Code:

if (isset($_POST['delete']) or isset($_POST['pref_submit']) or isset($_POST['mail']))
{
  $collection = array();

gopfreery

Hors ligne

#10 2006-03-25 10:25:41

VDigital
Former Piwigo Team
Montpellier (FR)
2005-05-04
15126

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

Bien vu...


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#11 2006-03-25 11:46:31

Eric
Équipe Piwigo
VALENCE (FR)
2005-03-25
4579

Re: [Avis et conseils] Mod d'info mail des utilisateurs validés

Effectivement bien vu, merci gopfreery !

Après minuit, la vision du code devient particulièrement sélective. Et ce matin, j'en suis arrivé à la même solution que toi. Cà devrait fonctionner mieux comme çà. 8-)

Bientôt le Mod complet...

Hors ligne

  •  » Plugins
  •  » [Avis et conseils] Mod d'info mail des utilisateurs validés

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2022 · Contact