Next major version 2 with PHP 8.1, Symfony 6, Tabler UI, 2FA ... (#2902)
This commit is contained in:
@@ -11,6 +11,7 @@ namespace App\DataFixtures;
|
||||
|
||||
use Doctrine\Bundle\FixturesBundle\Fixture;
|
||||
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
|
||||
use Doctrine\Common\DataFixtures\FixtureInterface;
|
||||
use Doctrine\Persistence\ObjectManager;
|
||||
|
||||
/**
|
||||
@@ -18,25 +19,24 @@ use Doctrine\Persistence\ObjectManager;
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class AllFixtures extends Fixture implements DependentFixtureInterface
|
||||
final class AllFixtures extends Fixture implements DependentFixtureInterface
|
||||
{
|
||||
/**
|
||||
* @return class-string[]
|
||||
* @return array<class-string<FixtureInterface>>
|
||||
*/
|
||||
public function getDependencies()
|
||||
public function getDependencies(): array
|
||||
{
|
||||
return [
|
||||
UserFixtures::class,
|
||||
CustomerFixtures::class,
|
||||
TeamFixtures::class,
|
||||
TagFixtures::class,
|
||||
TimesheetFixtures::class,
|
||||
InvoiceFixtures::class,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load(ObjectManager $manager)
|
||||
public function load(ObjectManager $manager): void
|
||||
{
|
||||
// this is a fake fixture class, it only exists to make developers life easier
|
||||
// if we use the DependentFixtureInterface on the TimesheetFixture directly,
|
||||
|
||||
@@ -26,7 +26,7 @@ use Faker\Generator;
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class CustomerFixtures extends Fixture
|
||||
final class CustomerFixtures extends Fixture
|
||||
{
|
||||
public const MIN_CUSTOMERS = 5;
|
||||
public const MAX_CUSTOMERS = 15;
|
||||
@@ -41,69 +41,56 @@ class CustomerFixtures extends Fixture
|
||||
public const MIN_ACTIVITIES_PER_PROJECT = 0;
|
||||
public const MAX_ACTIVITIES_PER_PROJECT = 25;
|
||||
|
||||
/**
|
||||
* @param ObjectManager $manager
|
||||
*/
|
||||
public function load(ObjectManager $manager)
|
||||
public function load(ObjectManager $manager): void
|
||||
{
|
||||
$faker = Factory::create('at_AT');
|
||||
|
||||
$amountCustomers = rand(self::MIN_CUSTOMERS, self::MAX_CUSTOMERS);
|
||||
for ($c = 1; $c <= $amountCustomers; $c++) {
|
||||
$visibleCustomer = 0 != $c % 5;
|
||||
$visibleCustomer = 0 !== $c % 5;
|
||||
$customer = $this->createCustomer($faker, $visibleCustomer);
|
||||
$manager->persist($customer);
|
||||
|
||||
$projectForCustomer = rand(self::MIN_PROJECTS_PER_CUSTOMER, self::MAX_PROJECTS_PER_CUSTOMER);
|
||||
for ($p = 1; $p <= $projectForCustomer; $p++) {
|
||||
$visibleProject = 0 != $p % 7;
|
||||
$visibleProject = 0 !== $p % 7;
|
||||
$project = $this->createProject($faker, $customer, $visibleProject);
|
||||
$manager->persist($project);
|
||||
|
||||
$activityForProject = rand(self::MIN_ACTIVITIES_PER_PROJECT, self::MAX_ACTIVITIES_PER_PROJECT);
|
||||
for ($a = 1; $a <= $activityForProject; $a++) {
|
||||
$visibleActivity = 0 != $a % 6;
|
||||
$visibleActivity = 0 !== $a % 6;
|
||||
$activity = $this->createActivity($faker, $project, $visibleActivity);
|
||||
$manager->persist($activity);
|
||||
}
|
||||
}
|
||||
|
||||
$manager->flush();
|
||||
$manager->clear(Activity::class);
|
||||
$manager->clear();
|
||||
}
|
||||
|
||||
$amountGlobalActivities = rand(self::MIN_GLOBAL_ACTIVITIES, self::MAX_GLOBAL_ACTIVITIES);
|
||||
for ($c = 1; $c <= $amountGlobalActivities; $c++) {
|
||||
$visibleActivity = 0 != $c % 4;
|
||||
$visibleActivity = 0 !== $c % 4;
|
||||
$activity = $this->createActivity($faker, null, $visibleActivity);
|
||||
$manager->persist($activity);
|
||||
}
|
||||
|
||||
$manager->flush();
|
||||
$manager->clear(Activity::class);
|
||||
$manager->clear(Project::class);
|
||||
$manager->clear(Customer::class);
|
||||
$manager->clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Generator $faker
|
||||
* @param bool $visible
|
||||
* @return Customer
|
||||
*/
|
||||
private function createCustomer(Generator $faker, $visible)
|
||||
private function createCustomer(Generator $faker, bool $visible): Customer
|
||||
{
|
||||
$entry = new Customer();
|
||||
$entry
|
||||
->setCurrency($faker->currencyCode())
|
||||
->setName($faker->company())
|
||||
->setAddress($faker->address())
|
||||
->setEmail($faker->safeEmail())
|
||||
->setComment($faker->text())
|
||||
->setNumber('C-' . $faker->ean8())
|
||||
->setCountry($faker->countryCode())
|
||||
->setTimezone($faker->timezone())
|
||||
->setVisible($visible)
|
||||
;
|
||||
$entry = new Customer($faker->company());
|
||||
$entry->setCurrency($faker->currencyCode());
|
||||
$entry->setAddress($faker->address());
|
||||
$entry->setEmail($faker->safeEmail());
|
||||
$entry->setComment($faker->text());
|
||||
$entry->setNumber('C-' . $faker->ean8());
|
||||
$entry->setCountry($faker->countryCode());
|
||||
$entry->setTimezone($faker->timezone());
|
||||
$entry->setVisible($visible);
|
||||
$entry->setVatId($faker->creditCardNumber());
|
||||
|
||||
if (rand(0, 3) % 3) {
|
||||
@@ -117,26 +104,18 @@ class CustomerFixtures extends Fixture
|
||||
return $entry;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Generator $faker
|
||||
* @param Customer $customer
|
||||
* @param bool $visible
|
||||
* @return Project
|
||||
*/
|
||||
private function createProject(Generator $faker, Customer $customer, $visible)
|
||||
private function createProject(Generator $faker, Customer $customer, bool $visible): Project
|
||||
{
|
||||
$entry = new Project();
|
||||
|
||||
/** @var string $name */
|
||||
$name = $faker->words(2, true);
|
||||
|
||||
$entry
|
||||
->setName(ucfirst($name))
|
||||
->setComment($faker->text())
|
||||
->setCustomer($customer)
|
||||
->setOrderNumber('P-' . $faker->ean8())
|
||||
->setVisible($visible)
|
||||
;
|
||||
$entry->setName(ucfirst($name));
|
||||
$entry->setComment($faker->text());
|
||||
$entry->setCustomer($customer);
|
||||
$entry->setOrderNumber('P-' . $faker->ean8());
|
||||
$entry->setVisible($visible);
|
||||
|
||||
if (rand(0, 3) % 3) {
|
||||
$entry->setBudget(rand(self::MIN_BUDGET, self::MAX_BUDGET));
|
||||
@@ -149,24 +128,16 @@ class CustomerFixtures extends Fixture
|
||||
return $entry;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Generator $faker
|
||||
* @param Project|null $project
|
||||
* @param bool $visible
|
||||
* @return Activity
|
||||
*/
|
||||
private function createActivity(Generator $faker, ?Project $project, $visible)
|
||||
private function createActivity(Generator $faker, ?Project $project, bool $visible): Activity
|
||||
{
|
||||
/** @var string $name */
|
||||
$name = $faker->words(2, true);
|
||||
|
||||
$entry = new Activity();
|
||||
$entry
|
||||
->setName(ucfirst($name))
|
||||
->setProject($project)
|
||||
->setComment($faker->text())
|
||||
->setVisible($visible)
|
||||
;
|
||||
$entry->setName(ucfirst($name));
|
||||
$entry->setProject($project);
|
||||
$entry->setComment($faker->text());
|
||||
$entry->setVisible($visible);
|
||||
|
||||
if (rand(0, 3) % 3) {
|
||||
$entry->setBudget(rand(self::MIN_BUDGET, self::MAX_BUDGET));
|
||||
|
||||
@@ -24,33 +24,28 @@ use Faker\Generator;
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class InvoiceFixtures extends Fixture
|
||||
final class InvoiceFixtures extends Fixture
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load(ObjectManager $manager)
|
||||
public function load(ObjectManager $manager): void
|
||||
{
|
||||
$faker = Factory::create('at_AT');
|
||||
$faker = Factory::create('en_US');
|
||||
|
||||
foreach ($this->getInvoiceConfigs($faker) as $invoiceConfig) {
|
||||
$template = new InvoiceTemplate();
|
||||
|
||||
// name, title, renderer, calculator, numberGenerator, company, vat, dueDays, address, paymentTerms
|
||||
$template
|
||||
->setName($invoiceConfig[0])
|
||||
->setTitle($invoiceConfig[1])
|
||||
->setRenderer($invoiceConfig[2])
|
||||
->setCalculator($invoiceConfig[3])
|
||||
->setNumberGenerator($invoiceConfig[4])
|
||||
->setCompany($invoiceConfig[5])
|
||||
->setVat($invoiceConfig[6])
|
||||
->setDueDays($invoiceConfig[7])
|
||||
->setPaymentTerms($invoiceConfig[8])
|
||||
->setAddress($this->generateAddress($faker))
|
||||
->setContact($this->generateContact($faker))
|
||||
->setPaymentDetails($this->generatePaymentDetails($faker))
|
||||
;
|
||||
$template = new InvoiceTemplate();
|
||||
$template->setName($invoiceConfig[0]);
|
||||
$template->setTitle($invoiceConfig[1]);
|
||||
$template->setRenderer($invoiceConfig[2]);
|
||||
$template->setCalculator($invoiceConfig[3]);
|
||||
$template->setNumberGenerator($invoiceConfig[4]);
|
||||
$template->setCompany($invoiceConfig[5]);
|
||||
$template->setVat($invoiceConfig[6]);
|
||||
$template->setDueDays($invoiceConfig[7]);
|
||||
$template->setPaymentTerms($invoiceConfig[8]);
|
||||
$template->setLanguage('en');
|
||||
$template->setAddress($this->generateAddress($faker));
|
||||
$template->setContact($this->generateContact($faker));
|
||||
$template->setPaymentDetails($this->generatePaymentDetails($faker));
|
||||
$template->setVatId($faker->creditCardNumber());
|
||||
|
||||
$manager->persist($template);
|
||||
@@ -58,7 +53,11 @@ class InvoiceFixtures extends Fixture
|
||||
}
|
||||
}
|
||||
|
||||
private function getInvoiceConfigs(Generator $faker)
|
||||
/**
|
||||
* @param Generator $faker
|
||||
* @return array
|
||||
*/
|
||||
private function getInvoiceConfigs(Generator $faker): array
|
||||
{
|
||||
$paymentTerms =
|
||||
'I would like to thank you for your confidence and will gladly be there for you in the future.' .
|
||||
@@ -86,11 +85,10 @@ class InvoiceFixtures extends Fixture
|
||||
|
||||
// name, title, renderer, calculator, numberGenerator, company, vat, dueDays, address, paymentTerms
|
||||
return [
|
||||
['Invoice (PDF)', 'Invoice', 'default-pdf', 'default', 'default', $faker->company(), 16, 10, $paymentTerms],
|
||||
['Invoice (HTML)', 'Company name', 'default', 'default', 'default', $faker->company(), 19, 30, $paymentTerms],
|
||||
['Freelancer (HTML, short)', 'Invoice', 'freelancer', 'short', 'default', $faker->company(), 19, 14, $paymentTerms_de],
|
||||
['Timesheet (HTML)', 'Timesheet', 'timesheet', 'default', 'default', $faker->company(), 19, 7, $paymentTerms_alt],
|
||||
['Company invoice (DOCX)', 'Invoice', 'company', 'default', 'default', 'Kimai Inc.', 19, 14, $paymentTerms_alt],
|
||||
['Default (PDF)', 'Invoice', 'default', 'default', 'default', $faker->company(), 16, 10, $paymentTerms],
|
||||
['Invoice (HTML)', 'Company name', 'invoice', 'default', 'default', $faker->company(), 19, 30, $paymentTerms],
|
||||
['Single service date (PDF)', 'Invoice', 'service-date', 'short', 'default', $faker->company(), 19, 14, $paymentTerms_de],
|
||||
['Timesheet (HTML)', 'Timesheet', 'timesheet', 'default', 'default', $faker->company(), 19, 7, $paymentTerms_alt],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -23,17 +23,13 @@ use Faker\Factory;
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class TagFixtures extends Fixture
|
||||
final class TagFixtures extends Fixture
|
||||
{
|
||||
public const MIN_TAGS = 50;
|
||||
public const MAX_TAGS = 2000;
|
||||
|
||||
public const BATCH_SIZE = 100;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load(ObjectManager $manager)
|
||||
public function load(ObjectManager $manager): void
|
||||
{
|
||||
$faker = Factory::create();
|
||||
$amount = rand(self::MIN_TAGS, self::MAX_TAGS);
|
||||
@@ -43,18 +39,18 @@ class TagFixtures extends Fixture
|
||||
$tag = new Tag();
|
||||
|
||||
$tagName = null;
|
||||
if ($i % 18 == 0) {
|
||||
$tagName = $faker->firstName;
|
||||
} elseif ($i % 7 == 0) {
|
||||
$tagName = $faker->lastName;
|
||||
} elseif ($i % 5 == 0) {
|
||||
$tagName = $faker->city;
|
||||
} elseif ($i % 4 == 0) {
|
||||
$tagName = $faker->word;
|
||||
} elseif ($i % 3 == 0) {
|
||||
$tagName = $faker->streetName;
|
||||
} elseif ($i % 2 == 0) {
|
||||
$tagName = $faker->colorName;
|
||||
if ($i % 18 === 0) {
|
||||
$tagName = $faker->firstName();
|
||||
} elseif ($i % 7 === 0) {
|
||||
$tagName = $faker->lastName();
|
||||
} elseif ($i % 5 === 0) {
|
||||
$tagName = $faker->city();
|
||||
} elseif ($i % 4 === 0) {
|
||||
$tagName = $faker->word();
|
||||
} elseif ($i % 3 === 0) {
|
||||
$tagName = $faker->streetName();
|
||||
} elseif ($i % 2 === 0) {
|
||||
$tagName = $faker->colorName();
|
||||
} else {
|
||||
$tagName = $faker->text(rand(5, 10));
|
||||
}
|
||||
@@ -70,10 +66,10 @@ class TagFixtures extends Fixture
|
||||
|
||||
if ($i % self::BATCH_SIZE === 0) {
|
||||
$manager->flush();
|
||||
$manager->clear(Tag::class);
|
||||
$manager->clear();
|
||||
}
|
||||
}
|
||||
$manager->flush();
|
||||
$manager->clear(Tag::class);
|
||||
$manager->clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ use Faker\Factory;
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class TeamFixtures extends Fixture
|
||||
final class TeamFixtures extends Fixture
|
||||
{
|
||||
public const AMOUNT_TEAMS = 10;
|
||||
public const MAX_USERS_PER_TEAM = 15;
|
||||
@@ -69,10 +69,7 @@ class TeamFixtures extends Fixture
|
||||
return $all;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load(ObjectManager $manager)
|
||||
public function load(ObjectManager $manager): void
|
||||
{
|
||||
$allUsers = $this->getAllUsers($manager);
|
||||
$allProjects = $this->getAllProjects($manager);
|
||||
@@ -91,10 +88,10 @@ class TeamFixtures extends Fixture
|
||||
}
|
||||
$projectCount = mt_rand(0, $maxProjects);
|
||||
|
||||
$team = new Team();
|
||||
$team->setName($faker->company . ' ' . $i);
|
||||
$team = new Team($faker->company() . ' ' . $i);
|
||||
$team->addTeamlead($allUsers[array_rand($allUsers)]);
|
||||
|
||||
/* @phpstan-ignore-next-line */
|
||||
if ($userCount > 0) {
|
||||
$userKeys = array_rand($allUsers, $userCount);
|
||||
if (!\is_array($userKeys)) {
|
||||
@@ -119,6 +116,6 @@ class TeamFixtures extends Fixture
|
||||
}
|
||||
|
||||
$manager->flush();
|
||||
$manager->clear(Team::class);
|
||||
$manager->clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
namespace App\DataFixtures;
|
||||
|
||||
use App\Entity\Activity;
|
||||
use App\Entity\Customer;
|
||||
use App\Entity\Project;
|
||||
use App\Entity\Tag;
|
||||
use App\Entity\Timesheet;
|
||||
@@ -33,11 +34,11 @@ use Faker\Factory;
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
final class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
{
|
||||
public const MIN_TIMESHEETS_PER_USER = 50;
|
||||
public const MAX_TIMESHEETS_PER_USER = 500;
|
||||
public const MAX_TIMESHEETS_TOTAL = 200;
|
||||
public const MIN_TIMESHEETS_PER_USER = 100;
|
||||
public const MAX_TIMESHEETS_PER_USER = 1000;
|
||||
public const MAX_TIMESHEETS_TOTAL = 10000;
|
||||
public const MIN_MINUTES_PER_ENTRY = 15;
|
||||
public const MAX_MINUTES_PER_ENTRY = 840; // 14h
|
||||
public const MAX_DESCRIPTION_LENGTH = 200;
|
||||
@@ -45,8 +46,6 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
public const ADD_TAGS_MAX_ENTRIES = 1000;
|
||||
public const MAX_TAG_PER_ENTRY = 3;
|
||||
|
||||
public const BATCH_SIZE = 100;
|
||||
|
||||
public static function getGroups(): array
|
||||
{
|
||||
return ['timesheet'];
|
||||
@@ -57,26 +56,24 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
return new \DateTime(rand(-1095, 14) . ' days');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load(ObjectManager $manager)
|
||||
public function load(ObjectManager $manager): void
|
||||
{
|
||||
$results = $this->findRandom($manager, Customer::class, 50);
|
||||
|
||||
$allUser = $this->getAllUsers($manager);
|
||||
$activities = $this->getAllActivities($manager);
|
||||
$projects = $this->getAllProjects($manager);
|
||||
$allTags = $this->getAllTags($manager);
|
||||
|
||||
$faker = Factory::create();
|
||||
|
||||
// by using array_pop we make sure that at least one activity has NO entry!
|
||||
array_pop($activities);
|
||||
|
||||
$all = 0;
|
||||
|
||||
foreach ($allUser as $user) {
|
||||
$user = $manager->find(User::class, $user->getId());
|
||||
// random amount of timesheet entries for every user
|
||||
$timesheetForUser = rand(self::MIN_TIMESHEETS_PER_USER, self::MAX_TIMESHEETS_PER_USER);
|
||||
|
||||
$activities = $this->getAllActivities($manager);
|
||||
$projects = $this->getAllProjects($manager);
|
||||
|
||||
for ($i = 1; $i <= $timesheetForUser; $i++) {
|
||||
if ($all > self::MAX_TIMESHEETS_TOTAL && $i > self::MIN_TIMESHEETS_PER_USER) {
|
||||
break;
|
||||
@@ -96,19 +93,13 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
$description,
|
||||
true
|
||||
);
|
||||
|
||||
$all++;
|
||||
|
||||
$manager->persist($entry);
|
||||
|
||||
if ($all % self::BATCH_SIZE === 0) {
|
||||
$manager->flush();
|
||||
$manager->clear(Timesheet::class);
|
||||
}
|
||||
}
|
||||
|
||||
// create active recordings for test user
|
||||
if (rand(0, 10) >= 5) {
|
||||
// create active records
|
||||
if ($all % 3 === 0) {
|
||||
$entry = $this->createTimesheetEntry(
|
||||
$user,
|
||||
$activities[array_rand($activities)],
|
||||
@@ -122,11 +113,11 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
}
|
||||
|
||||
$manager->flush();
|
||||
$manager->clear(Timesheet::class);
|
||||
$manager->clear();
|
||||
}
|
||||
$manager->flush();
|
||||
|
||||
$entries = $manager->getRepository(Timesheet::class)->findBy([], [], min($all, self::ADD_TAGS_MAX_ENTRIES));
|
||||
$allTags = $this->getAllTags($manager);
|
||||
$entries = $this->findRandom($manager, Timesheet::class, min($all, self::ADD_TAGS_MAX_ENTRIES));
|
||||
foreach ($entries as $temp) {
|
||||
$tagAmount = rand(0, self::MAX_TAG_PER_ENTRY);
|
||||
for ($iTag = 0; $iTag < $tagAmount; $iTag++) {
|
||||
@@ -136,10 +127,34 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
}
|
||||
}
|
||||
}
|
||||
$manager->flush();
|
||||
|
||||
$manager->clear(Timesheet::class);
|
||||
$manager->clear(Tag::class);
|
||||
$manager->flush();
|
||||
$manager->clear();
|
||||
}
|
||||
|
||||
private function findRandom(ObjectManager $manager, string $class, int $amount)
|
||||
{
|
||||
$qb = $manager->getRepository($class)->createQueryBuilder('entity');
|
||||
$limits = $qb
|
||||
->select('MIN(entity.id)', 'MAX(entity.id)')
|
||||
->getQuery()
|
||||
->getOneOrNullResult();
|
||||
|
||||
$ids = [];
|
||||
for ($i = 0; $i < $amount; $i++) {
|
||||
$rand = rand($limits[1], $limits[2]);
|
||||
if (!\in_array($rand, $ids)) {
|
||||
$ids[] = $rand;
|
||||
}
|
||||
}
|
||||
|
||||
$qb = $manager->getRepository($class)->createQueryBuilder('entity');
|
||||
|
||||
return $qb
|
||||
->where($qb->expr()->in('entity.id', $ids))
|
||||
->setMaxResults($amount)
|
||||
->getQuery()
|
||||
->getResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -148,14 +163,7 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
*/
|
||||
protected function getAllTags(ObjectManager $manager): array
|
||||
{
|
||||
$all = [];
|
||||
/** @var Tag[] $entries */
|
||||
$entries = $manager->getRepository(Tag::class)->findAll();
|
||||
foreach ($entries as $temp) {
|
||||
$all[$temp->getId()] = $temp;
|
||||
}
|
||||
|
||||
return $all;
|
||||
return $this->findRandom($manager, Tag::class, 50);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -180,14 +188,7 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
*/
|
||||
protected function getAllProjects(ObjectManager $manager): array
|
||||
{
|
||||
$all = [];
|
||||
/** @var Project[] $entries */
|
||||
$entries = $manager->getRepository(Project::class)->findAll();
|
||||
foreach ($entries as $temp) {
|
||||
$all[$temp->getId()] = $temp;
|
||||
}
|
||||
|
||||
return $all;
|
||||
return $this->findRandom($manager, Project::class, 50);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -196,14 +197,7 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
*/
|
||||
protected function getAllActivities(ObjectManager $manager): array
|
||||
{
|
||||
$all = [];
|
||||
/** @var Activity[] $entries */
|
||||
$entries = $manager->getRepository(Activity::class)->findAll();
|
||||
foreach ($entries as $temp) {
|
||||
$all[$temp->getId()] = $temp;
|
||||
}
|
||||
|
||||
return $all;
|
||||
return $this->findRandom($manager, Activity::class, 50);
|
||||
}
|
||||
|
||||
private function createTimesheetEntry(User $user, Activity $activity, Project $project, ?string $description, bool $setEndDate)
|
||||
@@ -213,12 +207,11 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
$start->setTimezone(new \DateTimeZone($user->getTimezone()));
|
||||
|
||||
$entry = new Timesheet();
|
||||
$entry
|
||||
->setActivity($activity)
|
||||
->setProject($activity->getProject() ?? $project)
|
||||
->setDescription($description)
|
||||
->setUser($user)
|
||||
->setBegin($start);
|
||||
$entry->setActivity($activity);
|
||||
$entry->setProject($activity->getProject() ?? $project);
|
||||
$entry->setDescription($description);
|
||||
$entry->setUser($user);
|
||||
$entry->setBegin($start);
|
||||
|
||||
if ($setEndDate) {
|
||||
$end = clone $start;
|
||||
@@ -228,10 +221,9 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
$hourlyRate = (float) $user->getPreferenceValue(UserPreference::HOURLY_RATE);
|
||||
$rate = Util::calculateRate($hourlyRate, $duration);
|
||||
|
||||
$entry
|
||||
->setEnd($end)
|
||||
->setRate($rate)
|
||||
->setDuration($duration);
|
||||
$entry->setEnd($end);
|
||||
$entry->setRate($rate);
|
||||
$entry->setDuration($duration);
|
||||
} else {
|
||||
// running entries should be short
|
||||
$newBegin = clone $entry->getBegin();
|
||||
|
||||
@@ -15,7 +15,7 @@ use Doctrine\Bundle\FixturesBundle\Fixture;
|
||||
use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
|
||||
use Doctrine\Persistence\ObjectManager;
|
||||
use Faker\Factory;
|
||||
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
|
||||
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
|
||||
|
||||
/**
|
||||
* Defines the sample data to load in the database when running the unit and
|
||||
@@ -26,7 +26,7 @@ use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class UserFixtures extends Fixture implements FixtureGroupInterface
|
||||
final class UserFixtures extends Fixture implements FixtureGroupInterface
|
||||
{
|
||||
public const DEFAULT_PASSWORD = 'kitten';
|
||||
public const DEFAULT_API_TOKEN = 'api_kitten';
|
||||
@@ -42,31 +42,19 @@ class UserFixtures extends Fixture implements FixtureGroupInterface
|
||||
public const MIN_RATE = 30;
|
||||
public const MAX_RATE = 120;
|
||||
|
||||
/**
|
||||
* @var UserPasswordEncoderInterface
|
||||
*/
|
||||
private $encoder;
|
||||
|
||||
/**
|
||||
* @param UserPasswordEncoderInterface $encoder
|
||||
*/
|
||||
public function __construct(UserPasswordEncoderInterface $encoder)
|
||||
public function __construct(private UserPasswordHasherInterface $passwordHasher)
|
||||
{
|
||||
$this->encoder = $encoder;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load(ObjectManager $manager)
|
||||
{
|
||||
$this->loadDefaultAccounts($manager);
|
||||
$this->loadTestUsers($manager);
|
||||
}
|
||||
|
||||
public static function getGroups(): array
|
||||
{
|
||||
return ['user', 'users'];
|
||||
return ['user'];
|
||||
}
|
||||
|
||||
public function load(ObjectManager $manager): void
|
||||
{
|
||||
$this->loadDefaultAccounts($manager);
|
||||
$this->loadTestUsers($manager);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -76,33 +64,31 @@ class UserFixtures extends Fixture implements FixtureGroupInterface
|
||||
*/
|
||||
private function loadDefaultAccounts(ObjectManager $manager)
|
||||
{
|
||||
$passwordEncoder = $this->encoder;
|
||||
|
||||
$allUsers = $this->getUserDefinition();
|
||||
foreach ($allUsers as $userData) {
|
||||
$user = new User();
|
||||
$user
|
||||
->setAlias($userData[0])
|
||||
->setTitle($userData[1])
|
||||
->setUsername($userData[2])
|
||||
->setEmail($userData[3])
|
||||
->setRoles([$userData[4]])
|
||||
->setAvatar($userData[5])
|
||||
->setEnabled($userData[6])
|
||||
->setPassword($passwordEncoder->encodePassword($user, self::DEFAULT_PASSWORD))
|
||||
->setApiToken($passwordEncoder->encodePassword($user, self::DEFAULT_API_TOKEN))
|
||||
;
|
||||
$user->setAlias($userData[0]);
|
||||
$user->setTitle($userData[1]);
|
||||
$user->setUserIdentifier($userData[2]);
|
||||
$user->setEmail($userData[3]);
|
||||
$user->setRoles([$userData[4]]);
|
||||
$user->setAvatar($userData[5]);
|
||||
$user->setEnabled($userData[6]);
|
||||
$user->setPassword($this->passwordHasher->hashPassword($user, self::DEFAULT_PASSWORD));
|
||||
$user->setApiToken($this->passwordHasher->hashPassword($user, self::DEFAULT_API_TOKEN));
|
||||
$manager->persist($user);
|
||||
|
||||
$prefs = $this->getUserPreferences($user, $userData[7]);
|
||||
$user->setPreferences($prefs);
|
||||
foreach (User::WIZARDS as $wizard) {
|
||||
$user->setWizardAsSeen($wizard);
|
||||
}
|
||||
$manager->persist($prefs[0]);
|
||||
$manager->persist($prefs[1]);
|
||||
}
|
||||
|
||||
$manager->flush();
|
||||
$manager->clear(User::class);
|
||||
$manager->clear(UserPreference::class);
|
||||
$manager->clear();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -110,21 +96,17 @@ class UserFixtures extends Fixture implements FixtureGroupInterface
|
||||
* @param string|null $timezone
|
||||
* @return array
|
||||
*/
|
||||
private function getUserPreferences(User $user, string $timezone = null)
|
||||
private function getUserPreferences(User $user, string $timezone = null): array
|
||||
{
|
||||
$preferences = [];
|
||||
|
||||
$prefHourlyRate = new UserPreference();
|
||||
$prefHourlyRate->setName(UserPreference::HOURLY_RATE);
|
||||
$prefHourlyRate->setValue(rand(self::MIN_RATE, self::MAX_RATE));
|
||||
$prefHourlyRate->setUser($user);
|
||||
$prefHourlyRate = new UserPreference(UserPreference::HOURLY_RATE, rand(self::MIN_RATE, self::MAX_RATE));
|
||||
$user->addPreference($prefHourlyRate);
|
||||
$preferences[] = $prefHourlyRate;
|
||||
|
||||
if (null !== $timezone) {
|
||||
$prefTimezone = new UserPreference();
|
||||
$prefTimezone->setName(UserPreference::TIMEZONE);
|
||||
$prefTimezone->setValue($timezone);
|
||||
$prefTimezone->setUser($user);
|
||||
$prefTimezone = new UserPreference(UserPreference::TIMEZONE, $timezone);
|
||||
$user->addPreference($prefTimezone);
|
||||
$preferences[] = $prefTimezone;
|
||||
}
|
||||
|
||||
@@ -138,14 +120,13 @@ class UserFixtures extends Fixture implements FixtureGroupInterface
|
||||
*/
|
||||
private function loadTestUsers(ObjectManager $manager)
|
||||
{
|
||||
$passwordEncoder = $this->encoder;
|
||||
$faker = Factory::create();
|
||||
$existingName = [];
|
||||
$existingEmail = [];
|
||||
|
||||
for ($i = 1; $i <= self::AMOUNT_EXTRA_USER; $i++) {
|
||||
$username = $faker->userName;
|
||||
$email = $faker->email;
|
||||
$username = $faker->userName();
|
||||
$email = $faker->email();
|
||||
|
||||
if (\in_array($username, $existingName)) {
|
||||
continue;
|
||||
@@ -159,15 +140,13 @@ class UserFixtures extends Fixture implements FixtureGroupInterface
|
||||
$existingEmail[] = $email;
|
||||
|
||||
$user = new User();
|
||||
$user
|
||||
->setAlias($faker->name)
|
||||
->setTitle(substr($faker->jobTitle, 0, 49))
|
||||
->setUsername($username)
|
||||
->setEmail($email)
|
||||
->setRoles([User::ROLE_USER])
|
||||
->setEnabled(true)
|
||||
->setPassword($passwordEncoder->encodePassword($user, self::DEFAULT_PASSWORD))
|
||||
;
|
||||
$user->setAlias($faker->name());
|
||||
$user->setTitle(substr($faker->jobTitle(), 0, 49));
|
||||
$user->setUserIdentifier($username);
|
||||
$user->setEmail($email);
|
||||
$user->setRoles([User::ROLE_USER]);
|
||||
$user->setEnabled(true);
|
||||
$user->setPassword($this->passwordHasher->hashPassword($user, self::DEFAULT_PASSWORD));
|
||||
$manager->persist($user);
|
||||
|
||||
$prefs = $this->getUserPreferences($user);
|
||||
@@ -176,14 +155,13 @@ class UserFixtures extends Fixture implements FixtureGroupInterface
|
||||
}
|
||||
|
||||
$manager->flush();
|
||||
$manager->clear(User::class);
|
||||
$manager->clear(UserPreference::class);
|
||||
$manager->clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function getUserDefinition()
|
||||
protected function getUserDefinition(): array
|
||||
{
|
||||
// alias = $userData[0]
|
||||
// title = $userData[1]
|
||||
@@ -244,7 +222,7 @@ class UserFixtures extends Fixture implements FixtureGroupInterface
|
||||
self::USERNAME_SUPER_ADMIN,
|
||||
'susan_super@example.com',
|
||||
User::ROLE_SUPER_ADMIN,
|
||||
'/build/images/default_avatar.png',
|
||||
'/touch-icon-192x192.png',
|
||||
true,
|
||||
'Europe/Berlin',
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user