8768 sujets

Développement web côté serveur, CMS

Bonjour,

j’ai la fonction suivante qui permet de verifier qu’un utilisateur se loguer (dans un espace membre wordpress).

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.";
		}
	    }	
	
		$user_role = array_shift($user->roles);
		if ($user_role !== 'mitglieder_partnerlieferanten' ) 
		 {	
				if ($user_role == 'mitglieder_mitglieder' ) 
				{
					$admission = $user->usermitglieder_admission;
					
				}
				if ($user_role == 'mitglieder_partnerorganisationen' ) 
				{
					$admission = $user->userpartnerorga_admission;
				}
				if ($user_role == 'administrator' ) 
				{
					$admission = ja;
				}
				// AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrator = admis direct)
			   //if (($admission == 'ja' ) || ($user_role == 'administrator' ) )
				//{
				//return $result;
				//}
				//if (($user_role == 'administrator') || (2>3)) // ne fonctionne pas
				//if ((1<2) || (2>3))                      //  MARCHE 
			    //if ($user_role == administrator )       // ne fonctionne pas
				//if ($user_role == "administrator" )     // ne fonctionne pas
				//if (strcmp($admission, 'ja') !== 0  )   // ne fonctionne pas
				if (strcmp($admission, 'ja') !== 0  )
				{
					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 
}	


Tout se passe au niveau du test if (strcmp($admission, ‘ja’) !== 0 )

La variable $admission est bien égale à ‘ja’ quand je la fais afficher juste avant….mais je ne rentre pas dans la condition et le user ne se loggue pas.

A savoir que quand je fais afficher la variable avec un echo juste avant, ça fait planter aussi le programme, et le user ne se loggue pas.

Quand je ne met pas cette condition, il n’y a pas de problème.



aurais je fait une erreur dans l’écriture de la condition ?

je ne comprends pas….. il y a des choses bizarre qui se passe comme le plantage lors de l’affichage par echo…



merci pour votre aide par avance…..j’en ai besoin….je ne comprend pas et je ne vois plus rien…
Tu te compliques la vie, il faut utiliser les booleans

$admission = true;

if ($admission)
{
  return $result;
}


Concernant ton code, il manque les guillemets autour de ja donc tu assignes la valeur d'une constante a ta variable
$admission = 'ja';


Pour ton test, je suppose que tu veux que les valeurs soient égales donc cela devrait être
if (strcmp($admission, 'ja') === 0  )

Modifié par bzh (27 Jan 2017 - 18:26)
merci beaucoup bzh

c'est vrai, il y a ces erreurs de 'ja'... ça à pas l'air d'être ça...

pour
if (strcmp($admission, 'ja') === 0  )

exact....... j'ai fait des erreurs banales en essayant plein de choses..

merci pour tes corrections....

bon, ça marche toujours pas...le test sur $admission si maintenant avec ton aide Smiley cligne

En fait, il semblerait que c’est la condition if ($user_role == ‘administrator’ ) qui ne fonctionne pas…..
et quand je regarde dans le user, c’est bizarre car

[« roles »]=> array(0) { }

pourtant c’est un role de wordpress….. je ne vois pas pourquoi il est vide !

hummmm je continue à chercher….
en fait il fallait séparer les conditions de la fonction de validation , soit créer une nouvelle fonction qui teste les données de connexion :


/*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 = $entry[1];;
	$pass = $entry[2];;
	$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 );
}


/*Gform field validation hook*/
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;
		
}	


add_filter('gform_validation_124', 'msk_gform_user_registration_validation');
function msk_gform_user_registration_validation($validation_result){
	global $user;
	
	$form = $validation_result['form'];
	$user_id = $user->ID;
	$user1 = get_userdata( $user_id );
	$user_role = array_shift($user1->roles);
	
	if ($user_role != 'mitglieder_partnerlieferanten'  )
	 {
				if ($user_role == 'mitglieder_mitglieder' ) 
				{
					$admission = $user->usermitglieder_admission;
					
				}
				if ($user_role == 'mitglieder_partnerorganisationen' ) 
				{
					$admission = $user->userpartnerorga_admission;
				}
				
				// AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrato = admis direct)
			   if (($admission == 'ja' ) OR ($user_role == 'administrator' ))
				{
				}
				else
				{
				echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
				}
	}
	else
	{ 
		/*$validation_result['is_valid'] = false;
		$field['failed_validation'] = true;
		$field['validation_message'] = 'Sie können nur in Lieferantenbereich anmelden!';*/
		echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden ");
		 </script>';
	}
	$validation_result['form'] = $form;
	return $validation_result;
}

/* déconnexion */
function wpa_remove_menu_item( $items, $menu, $args ) {
    if ( is_admin() || ! is_user_logged_in() ) 
        return $items;
		
    foreach ( $items as $key => $item ) {
        if ( 'Abmelden' == $item->title ) {
            $items[$key]->url = wp_logout_url('http://www.kmuzentrale.de');
        }
    }
    return $items;
}
add_filter( 'wp_get_nav_menu_items', 'wpa_remove_menu_item', 10, 3 );


la fonction gform_field_validation est parcourue 2 fois, ce qui fait que cela posait des problèmes au niveau de la récupération de données comme

$user_role qui était rempli au premier tour mais vide au deuxième…..

D’où extraire les conditions de tests afin de ne parcourir qu’une seule fois la fonction avec les tests.

resolu ! Smiley smile