:.     Home     .:.     Cours     .:.     Faits divers     .:.     Blagues     .:.     Liens     .:.     Perso     .:

 

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