nineskeletor/src/DataFixtures/AppFixtures.php

374 lines
14 KiB
PHP

<?php
namespace App\DataFixtures;
use App\Entity\Niveau01;
use App\Entity\Niveau02;
use App\Entity\Niveau03;
use App\Entity\Niveau04;
use App\Entity\User;
use App\Entity\UserModo;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\ORM\Id\AssignedGenerator;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\Persistence\ObjectManager;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\HttpKernel\KernelInterface;
use LasseRafn\InitialAvatarGenerator\InitialAvatar;
use App\Service\MinioService;
use Symfony\Component\Filesystem\Filesystem;
class AppFixtures extends Fixture
{
private $kernel;
private $output;
private $minio;
private $colorbg;
private $colorft;
public function __construct(KernelInterface $kernel, MinioService $minio)
{
$this->kernel = $kernel;
$this->minio = $minio;
$this->output = new ConsoleOutput();
}
public function load(ObjectManager $manager): void
{
// Création Répertoire Avatar
$fs = new Filesystem();
$roottmp = $this->kernel->getProjectDir().'/var/tmp';
$fs->mkdir($roottmp.'/avatar');
// app:Init
$this->writeln('app:Init');
$application = new Application($this->kernel);
$application->setAutoExit(false);
$input = new ArrayInput(['command' => 'app:Init']);
$boutput = new BufferedOutput();
$application->run($input, $boutput);
$manager->flush();
// Color
$this->colorbg=$manager->getRepository("App\Entity\Config")->find("colorbgbodydark")->getValue();
$this->colorft=$manager->getRepository("App\Entity\Config")->find("colorfttitledark")->getValue();
// app:Synchro
$manager->clear();
$this->writeln('app:Synchro');
$input = new ArrayInput(['command' => 'app:Synchro']);
$boutput = new BufferedOutput();
$application->run($input, $boutput);
// Assign id
$metadata = $manager->getClassMetaData('App\Entity\Niveau01');
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new AssignedGenerator());
$metadata = $manager->getClassMetaData('App\Entity\Niveau02');
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new AssignedGenerator());
$metadata = $manager->getClassMetaData('App\Entity\Niveau03');
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new AssignedGenerator());
$metadata = $manager->getClassMetaData('App\Entity\Niveau04');
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new AssignedGenerator());
// Niveau 01
$this->writeln('Niveau01');
$csv = file_get_contents($this->kernel->getProjectDir().'/src/DataFixtures/niveau01.csv');
$tab = $this->csv_to_array($csv);
foreach ($tab as $lig) {
$niveau01 = $manager->getRepository('App\Entity\Niveau01')->find($lig['id']);
if (!$niveau01) {
$niveau01 = new Niveau01();
$niveau01->setId($lig['id']);
$manager->persist($niveau01);
}
$niveau01->setLabel($lig['label']);
$niveau01->setCode($lig['code']);
$niveau01->setPostaladress($lig['postaladress']);
$niveau01->setTelephonenumber($lig['telephonenumber']);
$niveau01->setEmail($lig['email']);
$niveau01->setApikey($lig['apikey']);
$manager->flush();
}
// Niveau 02
$this->writeln('Niveau02');
$csv = file_get_contents($this->kernel->getProjectDir().'/src/DataFixtures/niveau02.csv');
$tab = $this->csv_to_array($csv);
foreach ($tab as $lig) {
$niveau01 = $manager->getRepository('App\Entity\Niveau01')->findOneBy(['code' => $lig['codenv1']]);
if (!$niveau01) {
continue;
}
$niveau02 = $manager->getRepository('App\Entity\Niveau02')->find($lig['id']);
if (!$niveau02) {
$niveau02 = new Niveau02();
$niveau02->setId($lig['id']);
$manager->persist($niveau02);
}
$niveau02->setLabel($lig['label']);
$niveau02->setCode($lig['code']);
$niveau02->setPostaladress($lig['postaladress']);
$niveau02->setTelephonenumber($lig['telephonenumber']);
$niveau02->setEmail($lig['email']);
$niveau02->setApikey($lig['apikey']);
$niveau02->setNiveau01($niveau01);
$manager->flush();
}
// Niveau 03
$this->writeln('Niveau03');
$csv = file_get_contents($this->kernel->getProjectDir().'/src/DataFixtures/niveau03.csv');
$tab = $this->csv_to_array($csv);
foreach ($tab as $lig) {
$niveau02 = $manager->getRepository('App\Entity\Niveau02')->findOneBy(['code' => $lig['codenv2']]);
if (!$niveau02) {
continue;
}
$niveau03 = $manager->getRepository('App\Entity\Niveau03')->find($lig['id']);
if (!$niveau03) {
$niveau03 = new Niveau03();
$niveau03->setId($lig['id']);
$manager->persist($niveau03);
}
$niveau03->setLabel($lig['label']);
$niveau03->setCode($lig['code']);
$niveau03->setPostaladress($lig['postaladress']);
$niveau03->setTelephonenumber($lig['telephonenumber']);
$niveau03->setEmail($lig['email']);
$niveau03->setApikey($lig['apikey']);
$niveau03->setNiveau02($niveau02);
$manager->flush();
}
// Niveau 04
$this->writeln('Niveau04');
$csv = file_get_contents($this->kernel->getProjectDir().'/src/DataFixtures/niveau04.csv');
$tab = $this->csv_to_array($csv);
foreach ($tab as $lig) {
$niveau03 = $manager->getRepository('App\Entity\Niveau03')->findOneBy(['code' => $lig['codenv3']]);
if (!$niveau03) {
continue;
}
$niveau04 = $manager->getRepository('App\Entity\Niveau04')->find($lig['id']);
if (!$niveau04) {
$niveau04 = new Niveau04();
$niveau04->setId($lig['id']);
$manager->persist($niveau04);
}
$niveau04->setLabel($lig['label']);
$niveau04->setCode($lig['code']);
$niveau04->setPostaladress($lig['postaladress']);
$niveau04->setTelephonenumber($lig['telephonenumber']);
$niveau04->setEmail($lig['email']);
$niveau04->setApikey($lig['apikey']);
$niveau04->setNiveau03($niveau03);
$manager->flush();
}
// User MODO
$this->writeln('User Modo');
$userid = -99;
$usercpt = 0;
$niveau01s = $manager->getRepository('App\Entity\Niveau01')->findAll();
foreach ($niveau01s as $niveau01) {
$userid = $userid - 1;
$usercpt = $usercpt + 1;
$username = 'modo'.str_pad($usercpt, 3, '0', STR_PAD_LEFT);
$user = $manager->getRepository('App\Entity\User')->find($userid);
if (!$user) {
$user = new User();
$user->setId($userid);
$manager->persist($user);
$usermodo = new UserModo();
$usermodo->setUser($user);
$usermodo->setNiveau01($niveau01);
$manager->persist($usermodo);
}
$user->setUsername($username);
$user->setPassword($username);
$user->setRoles(['ROLE_MODO']);
$user->setFirstname(str_pad($usercpt, 3, '0', STR_PAD_LEFT));
$user->setLastname('Modo');
$user->setEmail($username.'@noreply.fr');
$user->setIsvisible(true);
$user->setIsactive(true);
$user->setApikey($username);
$user->setNiveau01($niveau01);
$this->generateavatar($username);
$user->setAvatar($username.'.png');
$manager->flush();
}
// User MASTER
$this->writeln('User Master');
$userid = -199;
$usercpt = 0;
$niveau02s = $manager->getRepository('App\Entity\Niveau02')->findAll();
foreach ($niveau02s as $niveau02) {
$userid = $userid - 1;
$usercpt = $usercpt + 1;
$username = 'master'.str_pad($usercpt, 3, '0', STR_PAD_LEFT);
$user = $manager->getRepository('App\Entity\User')->find($userid);
if (!$user) {
$user = new User();
$user->setId($userid);
$manager->persist($user);
}
$user->setUsername($username);
$user->setPassword($username);
$user->setRoles(['ROLE_MASTER']);
$user->setFirstname(str_pad($usercpt, 3, '0', STR_PAD_LEFT));
$user->setLastname('Master');
$user->setEmail($username.'@noreply.fr');
$user->setIsvisible(true);
$user->setIsactive(true);
$user->setApikey($username);
$user->setNiveau01($niveau02->getNiveau01());
$user->setNiveau02($niveau02);
$this->generateavatar($username);
$user->setAvatar($username.'.png');
$manager->flush();
}
// User MANAGER
$this->writeln('User Manager');
$userid = -299;
$usercpt = 0;
$niveau03s = $manager->getRepository('App\Entity\Niveau03')->findAll();
foreach ($niveau03s as $niveau03) {
$userid = $userid - 1;
$usercpt = $usercpt + 1;
$username = 'manager'.str_pad($usercpt, 3, '0', STR_PAD_LEFT);
$user = $manager->getRepository('App\Entity\User')->find($userid);
if (!$user) {
$user = new User();
$user->setId($userid);
$manager->persist($user);
}
$user->setUsername($username);
$user->setPassword($username);
$user->setRoles(['ROLE_MANAGER']);
$user->setFirstname(str_pad($usercpt, 3, '0', STR_PAD_LEFT));
$user->setLastname('Manager');
$user->setEmail($username.'@noreply.fr');
$user->setIsvisible(true);
$user->setIsactive(true);
$user->setApikey($username);
$user->setNiveau01($niveau03->getNiveau02()->getNiveau01());
$user->setNiveau02($niveau03->getNiveau02());
$user->setNiveau03($niveau03);
$this->generateavatar($username);
$user->setAvatar($username.'.png');
$manager->flush();
}
// User USER
$this->writeln('User User');
$userid = -399;
$usercpt = 0;
$niveau03s = $manager->getRepository('App\Entity\Niveau03')->findAll();
foreach ($niveau03s as $niveau03) {
$userid = $userid - 1;
$usercpt = $usercpt + 1;
$username = 'user'.str_pad($usercpt, 3, '0', STR_PAD_LEFT);
$user = $manager->getRepository('App\Entity\User')->find($userid);
if (!$user) {
$user = new User();
$user->setId($userid);
$manager->persist($user);
}
$user->setUsername($username);
$user->setPassword($username);
$user->setRoles(['ROLE_USER']);
$user->setFirstname(str_pad($usercpt, 3, '0', STR_PAD_LEFT));
$user->setLastname('User');
$user->setEmail($username.'@noreply.fr');
$user->setIsvisible(true);
$user->setIsactive(true);
$user->setApikey($username);
$user->setNiveau01($niveau03->getNiveau02()->getNiveau01());
$user->setNiveau02($niveau03->getNiveau02());
$user->setNiveau03($niveau03);
$this->generateavatar($username);
$user->setAvatar($username.'.png');
$manager->flush();
}
// app:Synchro
$manager->clear();
$this->writeln('app:Synchro');
$input = new ArrayInput(['command' => 'app:Synchro']);
$boutput = new BufferedOutput();
$application->run($input, $boutput);
}
private function writeln($string)
{
$this->output->writeln(' <fg=yellow>></> <info>'.$string.'</info>');
}
private function csv_to_array($csv, $delimiter = ';', $enclosure = '', $escape = '\\', $terminator = "\n")
{
$r = [];
$rows = explode($terminator, trim($csv));
$names = array_shift($rows);
$names = str_getcsv($names, $delimiter, $enclosure, $escape);
$nc = count($names);
foreach ($rows as $row) {
if (trim($row)) {
$values = str_getcsv($row, $delimiter, $enclosure, $escape);
if (!$values) {
$values = array_fill(0, $nc, null);
}
@$r[] = array_combine($names, $values);
}
}
return $r;
}
private function generateavatar($username) {
$avatar = new InitialAvatar();
$image = $avatar->name($username)->height(100)->width(100)->background($this->colorbg)->color($this->colorft)->generate();
file_put_contents($this->kernel->getProjectDir().'/var/tmp/avatar/'.$username.'.png',$image->stream('png', 90));
$this->minio->upload($this->kernel->getProjectDir().'/var/tmp/avatar/'.$username.'.png', 'avatar/'.$username.'.png', true);
}
}