Annonce

Écrire une réponse

Veuillez écrire votre message et l'envoyer

Cliquez dans la zone sombre de l'image pour envoyer votre message.

Retour

Résumé de la discussion (messages les plus récents en premier)

Eric
2006-03-25 11:46:31

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...

VDigital
2006-03-25 10:25:41

Bien vu...

gopfreery
2006-03-25 10:06:06

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();
VDigital
2006-03-25 06:49:21

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

Eric
2006-03-25 00:02:20

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 ?

Eric
2006-03-24 23:03:15

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 ;)

gopfreery
2006-03-24 22:47:39

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";
Eric
2006-03-24 22:11:38

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 ?

Eric
2006-03-16 20:57:04

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.

VDigital
2006-02-27 23:15:49

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

Eric
2006-02-26 17:04:32

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.

Pied de page des forums

Propulsé par FluxBB

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