. Je suis en train d'importer certains utilisateurs dans Drupal comme programme bloqué J'ai trouvé deux méthodes pour le faire. User_save et drupal_execute Cependant, le premier ne envoyez un courriel de notification avec le lien pour réinitialiser le mot de passe alors que l'autre méthode n'envoie le courrier, mais en cliquant sur le lien que je reçois accès refusé.
J'ai essayé le code dans 2 environnements (Ubuntu et Windows) avec une nouvelle installation. Voici le code que je suis en fait en utilisant:
// register a new user
$form_state['values']['name'] = 'username';
$form_state['values']['mail'] = '[email protected]';
// generate and assign password
$pass = user_password(8);
$form_state['values']['pass'] = array (
'pass1' => $pass,
'pass2' => $pass
);
$form_state['values']['status'] = 0; // add user as blocked
$form_state['values']['notify'] = 1; // send notification with reset link
$form_state['values']['op'] = t('Create new account');
// check if user it's not already imported
$sql = "SELECT uid FROM {users} WHERE name = '%s'";
$result = db_query($sql, $form_state['values']['name'] );
$data = db_result($result);
#print_r($data);
if (!$data) { // if the user does not exist, add it
drupal_execute('user_register', $form_state);
}
L'utilisateur est ajouté correctement dans la base de données bloquée, je reçois l'e-mail de notification, mais lorsque je clique sur le lien de réinitialisation Je reçois vu refuser l'accès (qui, en passant, il est apparaît deux fois: tous les éléments de mon thème deux fois avec l'erreur comme contenu, bug vraiment méchant ... ne sais pas pourquoi, tout le monde)?
Ici va le deuxième code:
// user details
$users = array(
'name' => 'username',
'pass' => user_password(8),
'mail' => '[email protected]',
'access' => '0',
'status' => 0,
'notify' => 1,
'timezone' => 7200,
'init' => '[email protected]'
);
$sql = "SELECT uid FROM {users} WHERE name = '%s'";
$result = db_query( $sql, $users['name'] );
$data = db_result( $result );
#print_r($data);
if (!$data)
user_save( NULL, $users, NULL );
}
Avec cette méthode, tout fonctionne bien, mais je ne reçois pas l'e-mail, ce qui est inutile parce que les utilisateurs sont bloqués.
Je ne sais pas si cela est une question difficile (uniquement pour Drupal gourous), mais je vous serais reconnaissant de toute aide.
Merci!
Je suppose que vous souhaitez que les utilisateurs cliquent sur un lien dans l'e-mail d'enregistrement pour valider l'adresse (ceci est configurable dans vos paramètres utilisateur)
Vous devez définir Status = 1 dans l'utilisateur car il s'agit du comportement par défaut et s'il est 0, le lien de connexion ne fonctionnera pas.
Si vous regardez ser_register_submit () Il y a du code pour envoyer des courriels.
Je pense que tu veux
$account = user_save( NULL, $users, NULL );
if($account) {
_user_mail_notify('register_admin_created', $account);
}
else {
// Error code
}
à la fin de votre deuxième méthode.
Voici le code final:
// setup the details
$password = user_password(8);
$user = array(
'name' => 'username',
'pass' => $password, // field to save in the database
'password' => $password, // required to send in notification mail
'mail' => '[email protected]',
'access' => '0',
'status' => 1,
'timezone' => 0,
'init' => '[email protected]'
);
$sql = "SELECT uid FROM {users} WHERE name = '%s'";
$result = db_query( $sql, $user['name'] );
$data = db_result( $result );
#print_r($data);
if (!$data) { // if the user does not exist
$account = user_save( NULL, $user, NULL );
// send notification
if ($account) {
// add profile fields
$profile = array('profile_field' => 'Value');
profile_save_profile($profile, $account, 'Profile Category');
_user_mail_notify('register_admin_created', $account);
}
}