mirror of
https://github.com/jbcr/core.git
synced 2026-03-31 21:32:09 +02:00
128 lines
4.0 KiB
PHP
128 lines
4.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Bolt\DataFixtures;
|
|
|
|
use Bolt\Common\Str;
|
|
use Bolt\Entity\User;
|
|
use Bolt\Repository\UserRepository;
|
|
use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
|
|
use Doctrine\Common\Persistence\ObjectManager;
|
|
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
|
|
|
|
class UserFixtures extends BaseFixture implements FixtureGroupInterface
|
|
{
|
|
/** @var UserPasswordEncoderInterface */
|
|
private $passwordEncoder;
|
|
|
|
/** @var UserRepository */
|
|
private $users;
|
|
|
|
private $append = false;
|
|
|
|
/** @var array */
|
|
private $allUsers = [];
|
|
|
|
public function __construct(UserPasswordEncoderInterface $passwordEncoder, UserRepository $users)
|
|
{
|
|
$this->passwordEncoder = $passwordEncoder;
|
|
|
|
// If ran with `--append` we append users, and use random passwords for them
|
|
if ($this->getOption('--append')) {
|
|
$this->append = true;
|
|
}
|
|
$this->users = $users;
|
|
}
|
|
|
|
public function load(ObjectManager $manager): void
|
|
{
|
|
$this->getCurrentUsers();
|
|
$this->loadUsers($manager);
|
|
|
|
$manager->flush();
|
|
}
|
|
|
|
public static function getGroups(): array
|
|
{
|
|
return ['with-images', 'without-images'];
|
|
}
|
|
|
|
private function loadUsers(ObjectManager $manager): void
|
|
{
|
|
foreach ($this->getUserData() as $userData) {
|
|
/** @var User $allUser */
|
|
foreach ($this->allUsers as $allUser) {
|
|
if (($allUser->getUsername() === $userData['username']) || ($allUser->getEmail() === $userData['username'])) {
|
|
continue 2;
|
|
}
|
|
}
|
|
|
|
$user = new User();
|
|
$user->setDisplayName($userData['displayname']);
|
|
$user->setUsername($userData['username']);
|
|
$user->setPassword($this->passwordEncoder->encodePassword($user, $userData['password']));
|
|
$user->setEmail($userData['email']);
|
|
$user->setRoles($userData['roles']);
|
|
$user->setLocale('en');
|
|
$user->setBackendTheme('default');
|
|
|
|
$manager->persist($user);
|
|
$this->addReference('user_' . $userData['username'], $user);
|
|
}
|
|
|
|
$manager->flush();
|
|
}
|
|
|
|
private function getCurrentUsers(): void
|
|
{
|
|
$this->allUsers = $this->users->findBy([], ['username' => 'ASC'], 100);
|
|
|
|
/** @var User $user */
|
|
foreach ($this->allUsers as $user) {
|
|
$this->addReference('user_' . $user->getUsername(), $user);
|
|
}
|
|
}
|
|
|
|
private function getUserData(): array
|
|
{
|
|
return [
|
|
[
|
|
'displayname' => 'Admin',
|
|
'username' => 'admin',
|
|
'password' => $this->append ? Str::generatePassword(10) : 'admin%1',
|
|
'email' => 'admin@example.org',
|
|
'roles' => ['ROLE_ADMIN'],
|
|
],
|
|
[
|
|
'displayname' => 'Gekke Henkie',
|
|
'username' => 'henkie',
|
|
'password' => $this->append ? Str::generatePassword(10) : 'henkie%1',
|
|
'email' => 'henkie@example.org',
|
|
'roles' => ['ROLE_EDITOR'],
|
|
],
|
|
[
|
|
'displayname' => 'Jane Doe',
|
|
'username' => 'jane_admin',
|
|
'password' => $this->append ? Str::generatePassword(10) : 'jane%1',
|
|
'email' => 'jane_admin@example.org',
|
|
'roles' => ['ROLE_ADMIN'],
|
|
],
|
|
[
|
|
'displayname' => 'Tom Doe',
|
|
'username' => 'tom_admin',
|
|
'password' => $this->append ? Str::generatePassword(10) : 'tom%1',
|
|
'email' => 'tom_admin@example.org',
|
|
'roles' => ['ROLE_ADMIN'],
|
|
],
|
|
[
|
|
'displayname' => 'John Doe',
|
|
'username' => 'john_user',
|
|
'password' => $this->append ? Str::generatePassword(10) : 'john%1',
|
|
'email' => 'john_user@example.org',
|
|
'roles' => ['ROLE_USER'],
|
|
],
|
|
];
|
|
}
|
|
}
|