•  » Plugins
  •  » [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

#1 2009-04-29 22:01:02

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

[Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Bonsoir à tous.

Je suis à nouveau en train de m'arracher les cheveux pour résoudre un problème sur le code d'un plugin (Register_FluxBB pour ne pas le citer). Le code en question fonctionne parfaitement dans sa version pour PWG 1.7.x. Mais là, pour Piwigo 2.x, il y a eu des changements que je n'arrive pas à cerner.

Le contexte : Je souhaite affecter des actions (fonctions) supplémentaires au moment de la mise à jour du profil d'un utilisateur (profile.php).

Le problème : Lorsque je valide la mise à jour d'un profil, même sans rien avoir changé dedans, j'ai un message d'insulte php m'indiquant qu'un index n'est pas défini. Alors que cet index passait bien tel quel sous 1.7.x. Et çà me met le bazar dans le reste de mon code. Ci-dessous le message d'insulte :

[29-Apr-2009 21:57:11] PHP Notice:  Undefined variable: userdata in E:\www\test\phpwebgallery\plugins\Register_FluxBB\main.inc.php on line 128
[29-Apr-2009 21:57:11] PHP Notice:  Undefined variable: userdata in E:\www\test\phpwebgallery\plugins\Register_FluxBB\main.inc.php on line 166
[29-Apr-2009 21:57:11] PHP Notice:  Undefined variable: userdata in E:\www\test\phpwebgallery\plugins\Register_FluxBB\main.inc.php on line line 170

Et voici le code en cause :

Code:

add_event_handler('init', 'Register_FluxBB_InitPage');
 
function Register_FluxBB_InitPage()
{
  global $conf;
  include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
  include_once (Register_FluxBB_PATH.'include/functions_Register_FluxBB.inc.php');
/* user update */
  if (script_basename() == 'profile')
  {
    if (isset($_POST['validate']))
    {
      $errors = array();

      $int_pattern = '/^\d+$/';
      if (empty($_POST['nb_image_line'])
          or (!preg_match($int_pattern, $_POST['nb_image_line'])))
      {
        $errors[] = l10n('nb_image_line_error');
      }
    
      if (empty($_POST['nb_line_page'])
          or (!preg_match($int_pattern, $_POST['nb_line_page'])))
      {
        $errors[] = l10n('nb_line_page_error');
      }
    
      if ($_POST['maxwidth'] != ''
          and (!preg_match($int_pattern, $_POST['maxwidth'])
               or $_POST['maxwidth'] < 50))
      {
        $errors[] = l10n('maxwidth_error');
      }
      if ($_POST['maxheight']
           and (!preg_match($int_pattern, $_POST['maxheight'])
                 or $_POST['maxheight'] < 50))
      {
        $errors[] = l10n('maxheight_error');
      }
      // periods must be integer values, they represents number of days
      if (!preg_match($int_pattern, $_POST['recent_period'])
          or $_POST['recent_period'] <= 0)
      {
        $errors[] = l10n('periods_error') ;
      }
    
      if (isset($_POST['mail_address']))
      {
        $mail_error = validate_mail_address($userdata['id'],$_POST['mail_address']);
        if (!empty($mail_error))
        {
          $errors[] = $mail_error;
        }
      }
    
      if (!empty($_POST['use_new_pwd']))
      {
        // password must be the same as its confirmation
        if ($_POST['use_new_pwd'] != $_POST['passwordConf'])
        {
          $errors[] = l10n('New password confirmation does not correspond');
        }
    
        if ( !defined('IN_ADMIN') )
        {// changing password requires old password
          $query = '
            SELECT '.$conf['user_fields']['password'].' AS password
            FROM '.USERS_TABLE.'
            WHERE '.$conf['user_fields']['id'].' = \''.$userdata['id'].'\'
          ;';
          list($current_password) = mysql_fetch_row(pwg_query($query));
      
          if ($conf['pass_convert']($_POST['password']) != $current_password)
          {
            $errors[] = l10n('Current password is wrong');
          }
        }
      }
    
      if (count($errors) == 0)
      {
        include_once (Register_FluxBB_PATH.'include/functions_Register_FluxBB.inc.php');
      
        $query = '
          SELECT '.$conf['user_fields']['username'].' AS username
          FROM '.USERS_TABLE.'
          WHERE '.$conf['user_fields']['id'].' = \''.$userdata['id'].'\'
        ;';
        list($username) = mysql_fetch_row(pwg_query($query));

        FluxBB_Updateuser($userdata['id'], $username, $conf['pass_convert']($_POST['use_new_pwd']), $_POST['mail_address']);
      }
    }
  }
}

Un oeil averti comprendra que "$userdata['id']" est sensé être l'ID de l'utilisateur qui modifie son profil. En fait, je n'ai rien inventé mais inspiré de ce qui est fait dans profile.php. Mais faut croire que j'ai une poutre dans l'oeil pour ne pas voir ce qui cloche...

Merci d'avance à ceux qui voudront bien m'aider à arranger cela. Cà me permettra de corriger un gros problème sur le plugin actuel.

Dernière modification par Eric (2009-04-30 21:25:47)

Hors ligne

#2 2009-04-29 22:09:10

Criss
Former Piwigo Team
Calvi
2008-03-31
325

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Question con: tu l'initialise où ton userdata ? C'est une globale ? Il ne manque pas sa déclaration ?


Enregistrez vous pour obtenir une galerie Piwigo hébergée. Venez nous aider à faire du beta-test !

Hors ligne

#3 2009-04-29 22:15:39

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Criss a écrit:

Question con: tu l'initialise où ton userdata ? C'est une globale ? Il ne manque pas sa déclaration ?

J'y ai pensé... Je me suis basé sur le code de profile.php et je n'y ai pas trouvé l'endroit où la variable est initialisée. J'en ai conclu qu'elle l'était alors au travers des fonctions globales. Logiquement, elle devrait être initialisée au même titre que les autres variables du code (tels que, au hasard, $current_password, $_POST['use_new_pwd'], etc...). Mais ce n'est pas le cas...

J'ai encore du chemin à faire en php :(

Dernière modification par Eric (2009-04-29 22:16:17)

Hors ligne

#4 2009-04-29 22:16:31

Criss
Former Piwigo Team
Calvi
2008-03-31
325

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Je ne sais pas justement, je cherche des pistes...


Enregistrez vous pour obtenir une galerie Piwigo hébergée. Venez nous aider à faire du beta-test !

Hors ligne

#5 2009-04-29 22:17:35

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Je sais :)

Et je t'en remercie !

Hors ligne

#6 2009-04-29 22:20:00

Criss
Former Piwigo Team
Calvi
2008-03-31
325

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Essaye de remplacer :

Code:

  global $conf;
  include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
  include_once (Register_FluxBB_PATH.'include/functions_Register_FluxBB.inc.php');

par

Code:

  include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
  include_once (Register_FluxBB_PATH.'include/functions_Register_FluxBB.inc.php');
  global $conf, $userdata ;

Enregistrez vous pour obtenir une galerie Piwigo hébergée. Venez nous aider à faire du beta-test !

Hors ligne

#7 2009-04-29 22:31:30

Criss
Former Piwigo Team
Calvi
2008-03-31
325

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Sinon tu peux, dans ton code d'origine, remplacer

include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );

par

include(PHPWG_ROOT_PATH.'include/common.inc.php' );


J'ai eu un soucis dans mon plugin à cause du include_once, réglé comme ça (pas beau mais comme c'est pour la partie admin...)


Enregistrez vous pour obtenir une galerie Piwigo hébergée. Venez nous aider à faire du beta-test !

Hors ligne

#8 2009-04-29 22:38:21

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Y a du changement mais c'est pas encore çà. En appliquant ta modif, j'initialise effectivement la variable $userdata mais elle ne retourne pas les valeurs attendues et çà fait planter la requête :

[29-Apr-2009 22:30:12] PHP Warning:  [mysql error 1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3


    SELECT id_user_FluxBB as FluxBB_id

    FROM phpwebgallery_Register_FluxBB_id

    WHERE id_user_pwg =

  ; in E:\www\test\phpwebgallery\include\functions.inc.php on line 918

[29-Apr-2009 22:30:12] PHP Warning:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\www\test\phpwebgallery\plugins\Register_FluxBB\include\functions_Register_FluxBB.inc.php on line 211

Elle est issue du code d'une autre partie du script appelée par FluxBB_Updateuser($userdata['id'], $username, $conf['pass_convert']($_POST['use_new_pwd']), $_POST['mail_address']);

Je commence à avoir les yeux qui font des 8. Je crois que je vais faire une pause pour ce soir et reprendre demain soir (en plus c'est le week-end !).

Merci encore, Criss, pour tes pistes. Si tu as d'autres idées, n'hésites pas ;-)

Hors ligne

#9 2009-04-29 22:40:25

Criss
Former Piwigo Team
Calvi
2008-03-31
325

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Jouons à Mastermind alors. :D


Code:

global $conf, $userdata ;
include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
include_once (Register_FluxBB_PATH.'include/functions_Register_FluxBB.inc.php');

?


Enregistrez vous pour obtenir une galerie Piwigo hébergée. Venez nous aider à faire du beta-test !

Hors ligne

#10 2009-04-29 22:41:07

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Criss a écrit:

Sinon tu peux, dans ton code d'origine, remplacer

include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );

par

include(PHPWG_ROOT_PATH.'include/common.inc.php' );

Avec çà, j'ai carrément :

Fatal error: Cannot redeclare sanitize_mysql_kv() (previously declared in E:\www\test\phpwebgallery\include\common.inc.php:39)

:(

Hors ligne

#11 2009-04-29 22:42:52

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Criss a écrit:

Code:

global $conf, $userdata ;
include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
include_once (Register_FluxBB_PATH.'include/functions_Register_FluxBB.inc.php');

Je l'ai tenté aussi et pas mieux...

Hors ligne

#12 2009-04-29 22:44:05

Criss
Former Piwigo Team
Calvi
2008-03-31
325

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Bon bah je vois pas mieux. En gros elle est déclarée mais vide. Faudrait voir qui / où elle est remplie...


Enregistrez vous pour obtenir une galerie Piwigo hébergée. Venez nous aider à faire du beta-test !

Hors ligne

#13 2009-04-29 22:45:57

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Là est toute la question... Mais demain sera un nouveau jour ! Dodo, boulot et je reprends ce *@$£ de code.

Hors ligne

#14 2009-04-29 23:14:42

repie38
Former Piwigo Team
grenoble
2006-05-23
678

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

c'est pas global $user; plutot que userdata ?

Dernière modification par repie38 (2009-04-29 23:55:17)

Hors ligne

#15 2009-04-29 23:38:53

P@t
Ex Equipe Piwigo
Nice
2007-06-13
5695

Re: [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Première chose, pourquoi un include sur le fichier include/common.inc.php???
Ta fonction se lance sur le trigger 'init' situé dans ce meme fichier!
L'include_once ne sert donc à rien...

Ensuite, comme l'a dit repie38, il faut faire un global $user, et utiliser $user['id'], $user['name'], etc...


P@t

Hors ligne

  •  » Plugins
  •  » [Dev-Plugin] [Resolu] Besoin d'un coup de main (encore...)

Pied de page des forums

Propulsé par FluxBB

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