Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage double dans une fonction

récupération de données

Sujet résolu
    24 janvier 2017 à 17:05:30

    Bonjour,

    J'ai un fonction de validation de formulaire. Cette fonctionn est parcourue 2 fois (pour chacune des données de connexion : login et mot de passe).

    La fonction est

    add_filter( "gform_field_validation_124", "login_validate_field_124", 10, 4 );
    function login_validate_field_124($result, $value, $form, $field) {
    // make sure this variable is global
    	global $user;
    	// validate username
    	if ( $field['cssClass'] === 'benutzername' ) {
    		$user = get_user_by( 'login', $value );
    		if ( empty( $user->user_login ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid username provided.";
    		}
    	}
    	// validate pass
    	if ( $field['cssClass'] === 'passwort' ) {
    		if ( !$user or !wp_check_password( $value, $user->data->user_pass, $user->ID ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid password provided.";
    		}
    	}	
    		return $result;
    		
    }	

    A partir de cette fonction, je dois faire un test de connexion pour savoir si mon utilisateur à un role particulier ou est admis.

    Le problème est que comme cette fonction est parcourue 2 fois, les données que je cherche à récupérer ont une valeur un coup puis l'autre sont vide.

    Du coup, quand je fais mes tests cela ne fonctionne pas vu que je n'ai pas les bonnes valeurs.

    Par exemple si j'essai le test pour savoir si le user est Lieferanten

    add_filter( "gform_field_validation_124", "login_validate_field_124", 10, 4 );
    function login_validate_field_124($result, $value, $form, $field) {
    // make sure this variable is global
    	global $user;
    	// validate username
    	if ( $field['cssClass'] === 'benutzername' ) {
    		$user = get_user_by( 'login', $value );
    		if ( empty( $user->user_login ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid username provided.";
    		}
    	}
    	// validate pass
    	if ( $field['cssClass'] === 'passwort' ) {
    		if ( !$user or !wp_check_password( $value, $user->data->user_pass, $user->ID ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid password provided.";
    		}
    	}	
    	
    	// AJOUT TEST POUR SAVOIR SI LE USER n'est pas LIEFERANTEN
    	$user_role = array_shift($user->roles);
    	echo 'user_role=' .$user_role;?> </br> <?php
    	if ($user_role !== 'mitglieder_partnerlieferanten' ) 
    	 {	
    		return $result;
    	}
    		else
    	 {
    	 echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden ");</script>';
    	}
    }	
    

    le $user_role prend donc 2 valeurs :

    $user_role = administrator

    $user_role =

    malgré la 2ème valeur vide, la connexion se fait.

    (et si le user est lieferanten, il y a bien le message " Sie können nur in Lieferantenbereich anmelden " qui s'affiche.

    SI j'ajoute une condition supplémentaire, comme savoir si mon user est admis ou pas :

    add_filter( "gform_field_validation_124", "login_validate_field_124", 10, 4 );
    function login_validate_field_124($result, $value, $form, $field) {
    // make sure this variable is global
    	global $user;
    	// validate username
    	if ( $field['cssClass'] === 'benutzername' ) {
    		$user = get_user_by( 'login', $value );
    		if ( empty( $user->user_login ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid username provided.";
    		}
    	}
    	// validate pass
    	if ( $field['cssClass'] === 'passwort' ) {
    		if ( !$user or !wp_check_password( $value, $user->data->user_pass, $user->ID ) ) {
    			$result["is_valid"] = false;
    			$result["message"] = "Invalid password provided.";
    		}
    	}	
    	
    	// AJOUT TEST POUR SAVOIR SI LE USER EST LIEFERANTEN
    	$user_role = array_shift($user->roles);
    	echo 'user_role=' .$user_role;?> </br> <?php
    	if ($user_role !== 'mitglieder_partnerlieferanten' ) 
    	 {	
    			if ($user_role == 'mitglieder_mitglieder' ) 
    			{
    				$admission = $user->usermitglieder_admission;
    				
    			}
    			if ($user_role == 'mitglieder_partnerorganisationen' ) 
    			{
    				$admission = $user->userpartnerorga_admission;
    			}
    		        echo 'admission=' .$admission;?> </br> <?php
    // AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrato = admis direct) if (($admission == 'ja' ) OR ($user_role == 'administrator' ) ) {
      echo 'PASSAGE admission ja ou administrator';
    return $result; } else { echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>'; } } else { echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden ");</script>'; } }

    quand je me logue en tant qu'administrator, il me met direct le message " Sie sind nicht Miglieder "

    et les affichages de données donnent

    user_role=administrator
    admission=
    PASSAGE admission ja ou administrator
    user_role=
    admission=

    Il n'y a pas de connexion (il me dit même qu'il y a un pb de mot de passe..qui est bon)

    Quand je me connecte en tant que lieferanten

    Il m'affiche bien " Sie können nur in Lieferantenbereich anmelden " mais aussi " Sie sind nicht Miglieder " juste après, et l'affichage des données donnent

    user_role=mitglieder_partnerlieferanten
    user_role=
    admission=

    avec pas de connexion et une erreur sur le login et mot de passe........(qui sont bons, bien sûr).

    Auriez vous un conseil à me donner ?

    je suis perdu avec les retours de données que j'ai . je n'arrive pas à gérer les datas vide et mes conditions....

    merci par avance de vos conseils...

    Timama



    • Partager sur Facebook
    • Partager sur Twitter
      25 janvier 2017 à 18:33:13

      en fait il fallait bien mettre les paramètres au bon endroit

      /*Gform after submission hook*/
      add_action( "gform_after_submission_124", "login_form_after_submission_124", 10, 2 );
      function login_form_after_submission_124($entry, $form) {
          // get the username and pass
          $username = $_POST['user_login'];
          $pass = $_POST['user_password'];
          $creds = array();
             
          // create the credentials array
          $creds['user_login'] = $username;
          $creds['user_password'] = $pass;
         
          // sign in the user and set him as the logged in user
          $user = wp_signon( $creds );
          wp_set_current_user( $user->ID );
      }
      
      
      add_filter( "gform_field_validation_124", "login_validate_field_124", 10, 4 );
      function login_validate_field_124($result, $value, $form, $field) {
      // make sure this variable is global
          global $user;
          // validate username
          if ( $field['cssClass'] === 'benutzername' ) {
              $user = get_user_by( 'login', $value );
              if ( empty( $user->user_login ) ) {
                  $result["is_valid"] = false;
                  $result["message"] = "Invalid username provided.";
              }
              // AJOUT TEST POUR SAVOIR SI LE USER EST LIEFERANTEN
              $user_role = array_shift($user->roles);
              //echo 'user_role=' .$user_role;?> </br> <?php
              if ($user_role !== 'mitglieder_partnerlieferanten' )
               {   
                      if ($user_role == 'mitglieder_mitglieder' )
                      {
                          $admission = $user->usermitglieder_admission;
                         
                      }
                      if ($user_role == 'mitglieder_partnerorganisationen' )
                      {
                          $admission = $user->userpartnerorga_admission;
                      }
                      //echo 'admission=' .$admission;?> </br> <?php
                      // AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrato = admis direct)
                     if (($admission == 'ja' ) OR ($user_role == 'administrator' ) )
                      {
                      //echo 'PASSAGE admission ja  ou administrator ';
                      var_dump(is_user_logged_in());
                      return $result;
                      }
                      else
                      {
                      echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
                      }
               }
                  else
               {
               echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden ");
               </script>';
              }
          // FIN AJOUT
             
          }
          // validate pass
          if ( $field['cssClass'] === 'passwort' ) {
              if ( !$user or !wp_check_password( $value, $user->data->user_pass, $user->ID ) ) {
                  $result["is_valid"] = false;
                  $result["message"] = "Invalid password provided.";
              }
          return $result;
          }   
      
      }   



      et là ça fonctionne !

      • Partager sur Facebook
      • Partager sur Twitter

      Passage double dans une fonction

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown