fix errors and do really commit in import script

This commit is contained in:
Julien Fastré 2018-08-30 23:11:44 +02:00
parent a2ec376c61
commit 43edcfc416

View File

@ -19,6 +19,7 @@ use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Chill\MainBundle\Entity\GroupCenter; use Chill\MainBundle\Entity\GroupCenter;
use Chill\MainBundle\Entity\PermissionsGroup; use Chill\MainBundle\Entity\PermissionsGroup;
use Symfony\Component\Console\Question\ChoiceQuestion; use Symfony\Component\Console\Question\ChoiceQuestion;
use League\Csv\Writer;
class ChillImportUsersCommand extends ContainerAwareCommand class ChillImportUsersCommand extends ContainerAwareCommand
{ {
@ -92,6 +93,12 @@ class ChillImportUsersCommand extends ContainerAwareCommand
*/ */
protected $groupCenters = []; protected $groupCenters = [];
/**
*
* @var Writer
*/
protected $output = null;
public function __construct( public function __construct(
EntityManagerInterface $em, EntityManagerInterface $em,
LoggerInterface $logger, LoggerInterface $logger,
@ -118,7 +125,8 @@ class ChillImportUsersCommand extends ContainerAwareCommand
->setHelp("Import users from a csv file. Users are added to centers contained in the file. Headers are used to detect columns. Adding to multiple centers can be done by using a `grouping centers` file, which will group multiple centers into a signle alias, used in 'centers' column.") ->setHelp("Import users from a csv file. Users are added to centers contained in the file. Headers are used to detect columns. Adding to multiple centers can be done by using a `grouping centers` file, which will group multiple centers into a signle alias, used in 'centers' column.")
->addArgument('csvfile', InputArgument::REQUIRED, 'Path to the csv file. Columns are: `username`, `email`, `center` (can contain alias), `permission group`') ->addArgument('csvfile', InputArgument::REQUIRED, 'Path to the csv file. Columns are: `username`, `email`, `center` (can contain alias), `permission group`')
->addOption('grouping-centers', null, InputOption::VALUE_OPTIONAL, 'Path to a csv file to aggregate multiple centers into a single alias') ->addOption('grouping-centers', null, InputOption::VALUE_OPTIONAL, 'Path to a csv file to aggregate multiple centers into a single alias')
->addOption('dry-run', null, InputOption::VALUE_OPTIONAL, 'Do not commit the changes') ->addOption('dry-run', null, InputOption::VALUE_NONE, 'Do not commit the changes')
->addOption('csv-dump', null, InputOption::VALUE_REQUIRED, 'A path to dump a summary of the created file')
; ;
} }
@ -127,15 +135,43 @@ class ChillImportUsersCommand extends ContainerAwareCommand
$this->tempOutput = $output; $this->tempOutput = $output;
$this->tempInput = $input; $this->tempInput = $input;
if ($input->hasOption('dry-run')) { if ($input->getOption('dry-run')) {
$this->doChanges = false; $this->doChanges = false;
} }
$this->prepareWriter();
if ($input->hasOption('grouping-centers')) { if ($input->hasOption('grouping-centers')) {
$this->prepareGroupingCenters(); $this->prepareGroupingCenters();
} }
$this->loadUsers(); try {
$this->loadUsers();
}
catch(\Exception $e) {
throw $e;
}
}
protected function prepareWriter()
{
$this->output = $output = Writer::createFromPath($this->tempInput
->getOption('csv-dump'), 'a+');
$output->insertOne([
'email',
'username',
'id'
]);
}
protected function appendUserToFile(User $user)
{
$this->output->insertOne( [
$user->getEmail(),
$user->getUsername(),
$user->getId()
]);
} }
protected function loadUsers() protected function loadUsers()
@ -150,7 +186,7 @@ class ChillImportUsersCommand extends ContainerAwareCommand
if ($this->doesUserExists($r)) { if ($this->doesUserExists($r)) {
$this->tempOutput->writeln(sprintf("User with username '%s' already " $this->tempOutput->writeln(sprintf("User with username '%s' already "
. "exists, skipping")); . "exists, skipping", $r["username"]));
$this->logger->info("One user already exists, skipping creation", [ $this->logger->info("One user already exists, skipping creation", [
'username_in_file' => $r['username'], 'username_in_file' => $r['username'],
@ -161,7 +197,8 @@ class ChillImportUsersCommand extends ContainerAwareCommand
continue; continue;
} }
$this->createUser($line, $r); $user = $this->createUser($line, $r);
$this->appendUserToFile($user);
} }
} }
@ -182,8 +219,8 @@ class ChillImportUsersCommand extends ContainerAwareCommand
{ {
$user = new User(); $user = new User();
$user $user
->setEmail($data['email']) ->setEmail(\trim($data['email']))
->setUsername($data['username']) ->setUsername(\trim($data['username']))
->setEnabled(true) ->setEnabled(true)
->setPassword($this->passwordEncoder->encodePassword($user, ->setPassword($this->passwordEncoder->encodePassword($user,
\bin2hex(\random_bytes(32)))) \bin2hex(\random_bytes(32))))
@ -206,14 +243,18 @@ class ChillImportUsersCommand extends ContainerAwareCommand
foreach($pgs as $pg) { foreach($pgs as $pg) {
foreach ($centers as $center) { foreach ($centers as $center) {
$user->addGroupCenter($this->createOrGetGroupCenter($center, $pg)); $groupcenter = $this->createOrGetGroupCenter($center, $pg);
if (FALSE === $user->getGroupCenters()->contains($groupcenter)) {
$user->addGroupCenter($groupcenter);
}
} }
} }
if ($this->doChanges) { if ($this->doChanges) {
$this->em->persist($user); $this->em->persist($user);
$this->flush(); $this->em->flush();
} }
$this->logger->notice("Create user", [ $this->logger->notice("Create user", [
@ -222,6 +263,7 @@ class ChillImportUsersCommand extends ContainerAwareCommand
'nb_of_groupCenters' => $user->getGroupCenters()->count() 'nb_of_groupCenters' => $user->getGroupCenters()->count()
]); ]);
return $user;
} }
protected function getPermissionGroup($alias) protected function getPermissionGroup($alias)
@ -343,6 +385,9 @@ class ChillImportUsersCommand extends ContainerAwareCommand
*/ */
protected function getCenters($name) protected function getCenters($name)
{ {
// sanitize
$name = \trim($name);
if (\array_key_exists($name, $this->centers)) { if (\array_key_exists($name, $this->centers)) {
return $this->centers[$name]; return $this->centers[$name];
} }