<?php
namespace App\DataFixtures;
use App\Entity\User;
use App\Trait\GenerateRandomStringTrait;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\Console\Event\ConsoleCommandEvent;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
class UserFixtures extends Fixture implements DependentFixtureInterface, EventSubscriberInterface, FixtureGroupInterface {
use GenerateRandomStringTrait;
/** @var string */
private $superAdminEmail = 'admin@localhost';
/** @var string */
private $tenantAdminEmail = 'tenant@localhost';
/** @var OutputInterface */
private $output;
/** @var string */
private $superAdminPassword;
/** @var string */
private $tenantAdminPassword;
/** @var UserPasswordHasherInterface */
private $passwordHasher;
/**
* @param UserPasswordHasherInterface $passwordHasher
*/
public function __construct(UserPasswordHasherInterface $passwordHasher) {
$this->passwordHasher = $passwordHasher;
}
/**
* @return string[]
*/
public static function getSubscribedEvents(): array {
return [
ConsoleEvents::COMMAND => 'init',
];
}
/**
* @param ConsoleCommandEvent $event
*
* @return void
*/
public function init(ConsoleCommandEvent $event): void {
$this->output = $event->getOutput();
}
/**
* @param ObjectManager $manager
*
* @return void
*/
public function load(ObjectManager $manager): void {
// Generate random string for use as passwords
$this->superAdminPassword = $this->generateRandomString();
$this->tenantAdminPassword = $this->generateRandomString();
$superAdminUser = new User();
$superAdminUser
->setFirstname('Super')
->setLastname('Admin')
->setEmail($this->superAdminEmail)
->setUsername($this->superAdminEmail)
->setRoles(
[
'ROLE_SUPER_ADMIN',
]
);
$superAdminUser->setPassword(
$this->passwordHasher->hashPassword(
$superAdminUser,
$this->superAdminPassword
)
);
$manager->persist($superAdminUser);
$manager->flush();
$tenantAdminUser = new User();
$tenantAdminUser
->setFirstname('ARZ')
->setLastname('Digital')
->setEmail($this->tenantAdminEmail)
->setUsername($this->tenantAdminEmail)
->setRoles(
[
'ROLE_TENANT_ADMIN',
]
)
/** @phpstan-ignore-next-line */
->setTenant($this->getReference(TenantFixtures::TENANT_REFERENCE));
$tenantAdminUser->setPassword(
$this->passwordHasher->hashPassword(
$tenantAdminUser,
$this->tenantAdminPassword
)
);
$manager->persist($tenantAdminUser);
$manager->flush();
// Display login user data to console
$this->output->writeln('');
$this->output->writeln("<comment>User <fg=yellow;options=bold>{$this->superAdminEmail}</> created with password <fg=yellow;options=bold>{$this->superAdminPassword}</></comment>");
$this->output->writeln('');
$this->output->writeln("<comment>User <fg=yellow;options=bold>{$this->tenantAdminEmail}</> created with password <fg=yellow;options=bold>{$this->tenantAdminPassword}</></comment>");
$this->output->writeln('');
}
/**
* @return string[]
*/
public function getDependencies(): array {
return [
TenantFixtures::class,
];
}
/**
* @return string[]
*/
public static function getGroups(): array {
return ['prod', 'test'];
}
}