Petit script drupal 8 de création de comptes
Sujet : Écrire un script php qui va lire des informations d'authentification (login et mot de passe) dans un fichier texte (csv) et les insérer dans la BD de drupal 8.
C'est mon premier script PHP depuis au moins 9 ans, c'est peut être laid, mais ca fait la job (comme on dit ici).
1- Voici un extrait du fichier source :
userName;password
user1;pass1
user2;pass2
user3;pass3
user4;pass4
user5;pass5
2- Le script en question :
<?php
// Recuperation du fichier csv
$filename = "/tmp/users.csv";
//Tests d'utilisation du fichier csv
if (!file_exists($filename)) {
exit("ALERT : Le fichier $filename n'existe pas.\n");
}
if (!is_readable($filename)) {
exit("Le fichier n'est pas lisible\n");
}
if (!$handle = fopen($filename, "r"))
{
exit("Impossible de traiter le fichier\n");
}
// A ce niveau, le fichier est bon
// On active Drupal
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;
$autoloader = require_once '/www/monregime/autoload.php';
$kernel = new DrupalKernel('prod', $autoloader);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
use Drupal\user\Entity\User;
// Trouver le max uid avant de commencer
$uids = \Drupal::entityManager()->getStorage('user')->getQuery()
->sort('uid', 'DESC')
->range(0, 1)
->execute();
//$max_uid = reset($uids);
$new_uid = reset($uids) +1 ;
//$new_uid = $max_uid + 1 ;
// On va commencer avec new_uid
// Lancement de notre boucle pour le traitement du fichier
while ($buffer = fgets($handle)) {
if (preg_match('/userName;password/',$buffer)) {
continue;
}
preg_match('/(.*);(.*)/', $buffer, $output);
$login = preg_replace('/\s+/', '', $output[1]);
$password = $output[2];
/*
echo "OUPUT0=$output[0]\n";
echo "OUPUT1=$login\n";
echo "OUPUT2=$password\n";
*/
// Tester l'existence ou non de l'utilisateur
$user = user_load_by_name($login);
if($user) continue;
// sleep a enlever en prod
sleep(1);
// Si on est ici, => user inexistant
// Donc, le creer
$user = User::create([
'name' => $login,
'uid' => $new_uid,
'mail' => 'user@yerbynet.com',
'pass' => $password,
'status' => 1,
'init' => 'NULL',
'timezone' => 'America/Montreal',
'roles' => array(
DRUPAL_AUTHENTICATED_RID => 'authenticated user',
),
]);
$user->enforceIsNew();
$user->save();
$new_uid = $new_uid + 1 ;
}
fclose($handle);
echo "FIN\n";
?>
Sources :
http://drupal.stackexchange.com/questions/197484/how-do-i-programmatically-create-users
https://www.drupal.org/node/2445521
L'information, n'est-elle pas précieuse ? Partageons la tous ensemble !
© Juin2016
Roger YERBANGA
www.yerbynet.com