Merge pull request 'manager' (#4) from manager into master
Cadoles/nineskeletor/pipeline/head This commit looks good Details

Reviewed-on: #4
This commit is contained in:
afornerot 2022-10-04 12:04:45 +02:00
commit 3d1c5a2159
25 changed files with 760 additions and 47 deletions

12
.env
View File

@ -50,11 +50,13 @@ APP_NIVEAU04MANDATORY='[""]'
APP_GROUPUSE=1
APP_GROUPSUBMITER='["ALL"]'
APP_ANNUSCOPEADMIN=ALL
APP_ANNUSCOPEMODO=ALL
APP_ANNUSCOPEMASTER=ALL
APP_ANNUSCOPEMANAGER=ALL
APP_ANNUSCOPEUSER=ALL
APP_ANNUSCOPEADMIN=ALL # ALL or number of niveau view : 1||2||3||4
APP_ANNUSCOPEMODO=ALL # ALL or number of niveau view : 1||2||3||4
APP_ANNUSCOPEMASTER=ALL # ALL or number of niveau view : 1||2||3||4
APP_ANNUSCOPEMANAGER=ALL # ALL or number of niveau view : 1||2||3||4
APP_ANNUSCOPEUSER=ALL # ALL or number of niveau view : 1||2||3||4
APP_USERVIEWISVISIBLE=1 # Profil user with isvisible field
# Synchronisation
APP_SYNCHRO= # Synchronisation null | LDAP2NINE | NINE2LDAP | NINE2NINE

View File

@ -8,7 +8,7 @@ body {
color: var(--colorfttitledark);
}
.header a, #sidebar a, #sidebar hr{
.header h1, .header a, #sidebar a, #sidebar hr{
color: var(--colorfttitledark);
}

View File

@ -121,6 +121,7 @@
}
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.4",
"phpunit/phpunit": "^9.5",
"symfony/browser-kit": "6.1.*",
"symfony/css-selector": "6.1.*",

167
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "8d7631f5e9055ef66369d9d0ea7d116e",
"content-hash": "d3be737db4f7ce5089c83be63c8dbf09",
"packages": [
{
"name": "aws/aws-crt-php",
@ -10931,6 +10931,171 @@
}
],
"packages-dev": [
{
"name": "doctrine/data-fixtures",
"version": "1.5.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/data-fixtures.git",
"reference": "ba37bfb776de763c5bf04a36d074cd5f5a083c42"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/ba37bfb776de763c5bf04a36d074cd5f5a083c42",
"reference": "ba37bfb776de763c5bf04a36d074cd5f5a083c42",
"shasum": ""
},
"require": {
"doctrine/common": "^2.13|^3.0",
"doctrine/persistence": "^1.3.3|^2.0|^3.0",
"php": "^7.2 || ^8.0"
},
"conflict": {
"doctrine/dbal": "<2.13",
"doctrine/phpcr-odm": "<1.3.0"
},
"require-dev": {
"doctrine/coding-standard": "^9.0",
"doctrine/dbal": "^2.13 || ^3.0",
"doctrine/mongodb-odm": "^1.3.0 || ^2.0.0",
"doctrine/orm": "^2.7.0",
"ext-sqlite3": "*",
"jangregor/phpstan-prophecy": "^1",
"phpstan/phpstan": "^1.5",
"phpunit/phpunit": "^8.5 || ^9.5",
"symfony/cache": "^5.0 || ^6.0",
"vimeo/psalm": "^4.10"
},
"suggest": {
"alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)",
"doctrine/mongodb-odm": "For loading MongoDB ODM fixtures",
"doctrine/orm": "For loading ORM fixtures",
"doctrine/phpcr-odm": "For loading PHPCR ODM fixtures"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
}
],
"description": "Data Fixtures for all Doctrine Object Managers",
"homepage": "https://www.doctrine-project.org",
"keywords": [
"database"
],
"support": {
"issues": "https://github.com/doctrine/data-fixtures/issues",
"source": "https://github.com/doctrine/data-fixtures/tree/1.5.3"
},
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdata-fixtures",
"type": "tidelift"
}
],
"time": "2022-04-19T10:01:44+00:00"
},
{
"name": "doctrine/doctrine-fixtures-bundle",
"version": "3.4.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineFixturesBundle.git",
"reference": "601988c5b46dbd20a0f886f967210aba378a6fd5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/601988c5b46dbd20a0f886f967210aba378a6fd5",
"reference": "601988c5b46dbd20a0f886f967210aba378a6fd5",
"shasum": ""
},
"require": {
"doctrine/data-fixtures": "^1.3",
"doctrine/doctrine-bundle": "^1.11|^2.0",
"doctrine/orm": "^2.6.0",
"doctrine/persistence": "^1.3.7|^2.0|^3.0",
"php": "^7.1 || ^8.0",
"symfony/config": "^3.4|^4.3|^5.0|^6.0",
"symfony/console": "^3.4|^4.3|^5.0|^6.0",
"symfony/dependency-injection": "^3.4.47|^4.3|^5.0|^6.0",
"symfony/doctrine-bridge": "^3.4|^4.1|^5.0|^6.0",
"symfony/http-kernel": "^3.4|^4.3|^5.0|^6.0"
},
"require-dev": {
"doctrine/coding-standard": "^9",
"phpstan/phpstan": "^1.4.10",
"phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20",
"symfony/phpunit-bridge": "^6.0.8",
"vimeo/psalm": "^4.22"
},
"type": "symfony-bundle",
"autoload": {
"psr-4": {
"Doctrine\\Bundle\\FixturesBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Doctrine Project",
"homepage": "https://www.doctrine-project.org"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony DoctrineFixturesBundle",
"homepage": "https://www.doctrine-project.org",
"keywords": [
"Fixture",
"persistence"
],
"support": {
"issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues",
"source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.2"
},
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-fixtures-bundle",
"type": "tidelift"
}
],
"time": "2022-04-28T17:58:29+00:00"
},
{
"name": "masterminds/html5",
"version": "2.7.6",

View File

@ -21,4 +21,5 @@ return [
FOS\RestBundle\FOSRestBundle::class => ['all' => true],
Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['all' => true],
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
];

View File

@ -738,6 +738,37 @@ app_modo_user_delete:
controller: App\Controller\UserController::delete
defaults: { access: modo }
#-- Access manager
app_manager_user:
path: /manager/user
controller: App\Controller\UserController::list
defaults: { access: manager }
app_manager_user_tablelist:
path: /manager/user/tablelist
controller: App\Controller\UserController::tablelist
defaults: { access: manager }
app_manager_user_selectlist:
path: /manager/user/selectlist
controller: App\Controller\UserController::selectlist
defaults: { access: manager }
app_manager_user_submit:
path: /manager/user/submit
controller: App\Controller\UserController::submit
defaults: { access: manager }
app_manager_user_update:
path: /manager/user/update/{id}
controller: App\Controller\UserController::update
defaults: { access: manager }
app_manager_user_delete:
path: /manager/user/delete/{id}
controller: App\Controller\UserController::delete
defaults: { access: manager }
#-- Access all
app_all_user:
path: /all/update

View File

@ -40,6 +40,8 @@ parameters:
appAnnuscopemanager: '%env(resolve:APP_ANNUSCOPEMANAGER)%'
appAnnuscopeuser: '%env(resolve:APP_ANNUSCOPEUSER)%'
appUserviewisvisible: '%env(resolve:APP_USERVIEWISVISIBLE)%'
appSynchro: '%env(resolve:APP_SYNCHRO)%'
appSynchroPurgeNiveau01: '%env(resolve:APP_SYNDCHROPURGENIVEAU01)%'
appSynchroPurgeNiveau02: '%env(resolve:APP_SYNDCHROPURGENIVEAU02)%'

View File

@ -8,18 +8,39 @@ use Symfony\Component\HttpFoundation\Response;
class HomeController extends AbstractController
{
public function home(Request $request): Response
public function home(Request $request)
{
if ($request->getSession()->get('fgforceconnect')) {
if ($request->getSession()->get('fgforceconnect') && !$this->getUser()) {
return $this->redirectToRoute('app_login');
}
if (!$this->getUser()) {
return $this->render('Home/home.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'maxsize' => 1000,
]);
}
if ($this->getUser()->hasRole('ROLE_USER')) {
return $this->redirectToRoute('app_user_home');
}
return $this->render('Home/home.html.twig', [
'useheader' => true,
'usemenu' => true,
'usesidebar' => false,
'maxsize' => 1000,
]);
if ($this->getUser()->hasRole('ROLE_MANAGER')) {
return $this->redirectToRoute('app_manager_home');
}
if ($this->getUser()->hasRole('ROLE_MASTER')) {
return $this->redirectToRoute('app_master_home');
}
if ($this->getUser()->hasRole('ROLE_MODO')) {
return $this->redirectToRoute('app_modo_home');
}
if ($this->getUser()->hasRole('ROLE_ADMIN')) {
return $this->redirectToRoute('app_admin_home');
}
}
public function homeuser($access): Response
@ -32,9 +53,19 @@ class HomeController extends AbstractController
]);
}
public function homeadmin($access): Response
public function homemaster($access): Response
{
return $this->redirectToRoute('app_admin_config');
return $this->render('Home/home.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'maxsize' => 1000,
]);
}
public function homemanager($access): Response
{
return $this->redirectToRoute('app_manager_user');
}
public function homemodo($access): Response
@ -42,6 +73,11 @@ class HomeController extends AbstractController
return $this->redirectToRoute('app_modo_niveau02');
}
public function homeadmin($access): Response
{
return $this->redirectToRoute('app_admin_config');
}
public function docrest(): Response
{
return $this->render('Home/docrest.html.twig', [

View File

@ -72,14 +72,15 @@ class UserController extends AbstractController
->from("App\Entity\UserModo", 'usermodo')
->where('usermodo.niveau01 = entity.niveau01')
->andWhere('usermodo.user = :user')
->where('entity.isactive = :isactive')
->andwhere('entity.isactive = :isactive')
->setParameter('isactive', $isactive)
->setParameter('user', $this->getUser())
->getQuery()->getSingleScalarResult();
break;
default:
$isactive = true;
$isactive = ('manager' == $access ? $em->getRepository($this->entity)->getPreference($this->getUser(), 'userisactive', true) : true);
$niveau01 = $this->getUser()->getNiveau01();
$niveau02 = $this->getUser()->getNiveau02();
$niveau03 = $this->getUser()->getNiveau03();
@ -89,7 +90,7 @@ class UserController extends AbstractController
->select('COUNT(entity)')
->from($this->entity, 'entity')
->where('entity.isvisible=true')
->where('entity.isactive = :isactive')
->andwhere('entity.isactive = :isactive')
->setParameter('isactive', $isactive);
switch ($request->getSession()->get('scopeannu')) {
@ -247,7 +248,7 @@ class UserController extends AbstractController
}
if ($ordercolumn) {
if ('admin' == $access || 'modo' == $access) {
if ('admin' == $access || 'modo' == $access || 'manager' == $access) {
$ordercolumn = $ordercolumn - 1;
}
@ -298,6 +299,15 @@ class UserController extends AbstractController
case 'modo':
$action .= "<a href='".$this->generateUrl(str_replace('_admin_', '_modo_', $this->route).'_update', ['id' => $data->getId()])."'><i class='fa fa-file fa-fw fa-2x'></i></a>";
break;
case 'manager':
if ($this->getUser()->getNiveau03() && $this->getUser()->getNiveau03() == $data->getNiveau03()) {
$action .= "<a href='".$this->generateUrl(str_replace('_admin_', '_manager_', $this->route).'_update', ['id' => $data->getId()])."'><i class='fa fa-file fa-fw fa-2x'></i></a>";
} elseif (!$this->getUser()->getNiveau03() && $this->getUser()->getNiveau02() && $this->getUser()->getNiveau02() == $data->getNiveau02()) {
$action .= "<a href='".$this->generateUrl(str_replace('_admin_', '_manager_', $this->route).'_update', ['id' => $data->getId()])."'><i class='fa fa-file fa-fw fa-2x'></i></a>";
} elseif (!$this->getUser()->getNiveau02() && $this->getUser()->getNiveau01() && $this->getUser()->getNiveau01() == $data->getNiveau01()) {
$action .= "<a href='".$this->generateUrl(str_replace('_admin_', '_manager_', $this->route).'_update', ['id' => $data->getId()])."'><i class='fa fa-file fa-fw fa-2x'></i></a>";
}
break;
}
// Groupes
@ -313,7 +323,7 @@ class UserController extends AbstractController
}
$tmp = [];
if ('admin' == $access || 'modo' == $access) {
if ('admin' == $access || 'modo' == $access || 'manager' == $access) {
array_push($tmp, $action);
}
@ -381,6 +391,14 @@ class UserController extends AbstractController
$data->setIsactive(true);
$data->setApikey(Uuid::uuid4());
// If manager set same niveau to usertosubmit
if ('manager' == $access) {
$data->setNiveau01($this->getUser()->getNiveau01());
$data->setNiveau02($this->getUser()->getNiveau02());
$data->setNiveau03($this->getUser()->getNiveau03());
$data->setRoles(['ROLE_USER']);
}
// Création du formulaire
$form = $this->createForm(Form::class, $data, [
'mode' => 'submit',
@ -395,6 +413,7 @@ class UserController extends AbstractController
'appNiveau04use' => $this->GetParameter('appNiveau04use'),
'appNiveau04label' => $this->GetParameter('appNiveau04label'),
'appNiveauupdatable' => $this->GetParameter('appNiveauupdatable'),
'appUserviewisvisible' => $this->GetParameter('appUserviewisvisible'),
]);
// Récupération des data du formulaire
@ -514,6 +533,7 @@ class UserController extends AbstractController
'appNiveau04use' => $this->GetParameter('appNiveau04use'),
'appNiveau04label' => $this->GetParameter('appNiveau04label'),
'appNiveauupdatable' => $this->GetParameter('appNiveauupdatable'),
'appUserviewisvisible' => $this->GetParameter('appUserviewisvisible'),
]);
// Récupération des data du formulaire
@ -678,6 +698,8 @@ class UserController extends AbstractController
break;
case 'modo': return true;
break;
case 'manager': return true;
break;
}
throw $this->createAccessDeniedException('Permission denied');
}
@ -687,6 +709,7 @@ class UserController extends AbstractController
switch ($access) {
case 'admin': return true;
break;
case 'modo':
$usermodo = $em->getRepository("App\Entity\UserModo")->findOneBy(['user' => $this->getUser(), 'niveau01' => $entity->getNiveau01()]);
if (!$usermodo) {
@ -695,6 +718,19 @@ class UserController extends AbstractController
return true;
break;
case 'manager':
if ($this->getUser()->getNiveau03() && $this->getUser()->getNiveau03() == $entity->getNiveau03()) {
return true;
} elseif ($this->getUser()->getNiveau02() && $this->getUser()->getNiveau02() == $entity->getNiveau02()) {
return true;
} elseif ($this->getUser()->getNiveau01() && $this->getUser()->getNiveau01() == $entity->getNiveau01()) {
return true;
}
throw $this->createAccessDeniedException('Permission denied');
break;
case 'all':
if ($this->getUser()->getId() != $entity->getId()) {
throw $this->createAccessDeniedException('Permission denied');

View File

@ -0,0 +1,340 @@
<?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;
class AppFixtures extends Fixture
{
private $kernel;
private $output;
public function __construct(KernelInterface $kernel)
{
$this->kernel = $kernel;
$this->output = new ConsoleOutput();
}
public function load(ObjectManager $manager): void
{
// 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();
// 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->setAvatar('noavatar.png');
$user->setApikey($username);
$user->setNiveau01($niveau01);
$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->setAvatar('noavatar.png');
$user->setApikey($username);
$user->setNiveau01($niveau02->getNiveau01());
$user->setNiveau02($niveau02);
$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->setAvatar('noavatar.png');
$user->setApikey($username);
$user->setNiveau01($niveau03->getNiveau02()->getNiveau01());
$user->setNiveau02($niveau03->getNiveau02());
$user->setNiveau03($niveau03);
$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->setAvatar('noavatar.png');
$user->setApikey($username);
$user->setNiveau01($niveau03->getNiveau02()->getNiveau01());
$user->setNiveau02($niveau03->getNiveau02());
$user->setNiveau03($niveau03);
$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;
}
}

View File

@ -0,0 +1,4 @@
id;label;code;postaladress;telephonenumber;email;apikey
-1;Nv01;Nv01;;;;Nv01
-2;Nv02;Nv02;;;;Nv02
-3;Nv03;Nv03;;;;Nv03
1 id label code postaladress telephonenumber email apikey
2 -1 Nv01 Nv01 Nv01
3 -2 Nv02 Nv02 Nv02
4 -3 Nv03 Nv03 Nv03

View File

@ -0,0 +1,7 @@
id;label;code;postaladress;telephonenumber;email;apikey;codenv1
-1;Nv01Nv01;Nv01Nv01;;;;Nv01Nv01;Nv01
-2;Nv01Nv02;Nv01Nv02;;;;Nv01Nv02;Nv01
-3;Nv02Nv01;Nv02Nv01;;;;Nv02Nv01;Nv02
-4;Nv02Nv02;Nv02Nv02;;;;Nv02Nv02;Nv02
-5;Nv03Nv01;Nv03Nv01;;;;Nv03Nv01;Nv03
-6;Nv03Nv02;Nv03Nv02;;;;Nv03Nv02;Nv03
1 id label code postaladress telephonenumber email apikey codenv1
2 -1 Nv01Nv01 Nv01Nv01 Nv01Nv01 Nv01
3 -2 Nv01Nv02 Nv01Nv02 Nv01Nv02 Nv01
4 -3 Nv02Nv01 Nv02Nv01 Nv02Nv01 Nv02
5 -4 Nv02Nv02 Nv02Nv02 Nv02Nv02 Nv02
6 -5 Nv03Nv01 Nv03Nv01 Nv03Nv01 Nv03
7 -6 Nv03Nv02 Nv03Nv02 Nv03Nv02 Nv03

View File

@ -0,0 +1,13 @@
id;label;code;postaladress;telephonenumber;email;apikey;codenv2
-1;Nv01Nv01Nv01;Nv01Nv01Nv01;;;;Nv01Nv01Nv01;Nv01Nv01
-2;Nv01Nv01Nv02;Nv01Nv01Nv02;;;;Nv01Nv01Nv02;Nv01Nv01
-3;Nv01Nv02Nv01;Nv01Nv02Nv01;;;;Nv01Nv02Nv01;Nv01Nv02
-4;Nv01Nv02Nv02;Nv01Nv02Nv02;;;;Nv01Nv02Nv02;Nv01Nv02
-5;Nv02Nv01Nv01;Nv02Nv01Nv01;;;;Nv02Nv01Nv01;Nv02Nv01
-6;Nv02Nv01Nv02;Nv02Nv01Nv02;;;;Nv02Nv01Nv02;Nv02Nv01
-7;Nv02Nv02Nv01;Nv02Nv02Nv01;;;;Nv02Nv02Nv01;Nv02Nv02
-8;Nv02Nv02Nv02;Nv02Nv02Nv02;;;;Nv02Nv02Nv02;Nv02Nv02
-9;Nv03Nv01Nv01;Nv03Nv01Nv01;;;;Nv03Nv01Nv01;Nv03Nv01
-10;Nv03Nv01Nv02;Nv03Nv01Nv02;;;;Nv03Nv01Nv02;Nv03Nv01
-11;Nv03Nv02Nv01;Nv03Nv02Nv01;;;;Nv03Nv02Nv01;Nv03Nv02
-12;Nv03Nv02Nv02;Nv03Nv02Nv02;;;;Nv03Nv02Nv02;Nv03Nv02
1 id label code postaladress telephonenumber email apikey codenv2
2 -1 Nv01Nv01Nv01 Nv01Nv01Nv01 Nv01Nv01Nv01 Nv01Nv01
3 -2 Nv01Nv01Nv02 Nv01Nv01Nv02 Nv01Nv01Nv02 Nv01Nv01
4 -3 Nv01Nv02Nv01 Nv01Nv02Nv01 Nv01Nv02Nv01 Nv01Nv02
5 -4 Nv01Nv02Nv02 Nv01Nv02Nv02 Nv01Nv02Nv02 Nv01Nv02
6 -5 Nv02Nv01Nv01 Nv02Nv01Nv01 Nv02Nv01Nv01 Nv02Nv01
7 -6 Nv02Nv01Nv02 Nv02Nv01Nv02 Nv02Nv01Nv02 Nv02Nv01
8 -7 Nv02Nv02Nv01 Nv02Nv02Nv01 Nv02Nv02Nv01 Nv02Nv02
9 -8 Nv02Nv02Nv02 Nv02Nv02Nv02 Nv02Nv02Nv02 Nv02Nv02
10 -9 Nv03Nv01Nv01 Nv03Nv01Nv01 Nv03Nv01Nv01 Nv03Nv01
11 -10 Nv03Nv01Nv02 Nv03Nv01Nv02 Nv03Nv01Nv02 Nv03Nv01
12 -11 Nv03Nv02Nv01 Nv03Nv02Nv01 Nv03Nv02Nv01 Nv03Nv02
13 -12 Nv03Nv02Nv02 Nv03Nv02Nv02 Nv03Nv02Nv02 Nv03Nv02

View File

@ -0,0 +1,25 @@
id;label;code;postaladress;telephonenumber;email;apikey;codenv3
-1;Nv01Nv01Nv01Nv01;Nv01Nv01Nv01Nv01;;;;Nv01Nv01Nv01Nv01;Nv01Nv01Nv01
-2;Nv01Nv01Nv01Nv02;Nv01Nv01Nv01Nv02;;;;Nv01Nv01Nv01Nv02;Nv01Nv01Nv01
-3;Nv01Nv01Nv02Nv01;Nv01Nv01Nv02Nv01;;;;Nv01Nv01Nv02Nv01;Nv01Nv01Nv02
-4;Nv01Nv01Nv02Nv02;Nv01Nv01Nv02Nv02;;;;Nv01Nv01Nv02Nv02;Nv01Nv01Nv02
-5;Nv01Nv02Nv01Nv01;Nv01Nv02Nv01Nv01;;;;Nv01Nv02Nv01Nv01;Nv01Nv02Nv01
-6;Nv01Nv02Nv01Nv02;Nv01Nv02Nv01Nv02;;;;Nv01Nv02Nv01Nv02;Nv01Nv02Nv01
-7;Nv01Nv02Nv02Nv01;Nv01Nv02Nv02Nv01;;;;Nv01Nv02Nv02Nv01;Nv01Nv02Nv02
-8;Nv01Nv02Nv02Nv02;Nv01Nv02Nv02Nv02;;;;Nv01Nv02Nv02Nv02;Nv01Nv02Nv02
-9;Nv02Nv01Nv01Nv01;Nv02Nv01Nv01Nv01;;;;Nv02Nv01Nv01Nv01;Nv02Nv01Nv01
-10;Nv02Nv01Nv01Nv02;Nv02Nv01Nv01Nv02;;;;Nv02Nv01Nv01Nv02;Nv02Nv01Nv01
-11;Nv02Nv01Nv02Nv01;Nv02Nv01Nv02Nv01;;;;Nv02Nv01Nv02Nv01;Nv02Nv01Nv02
-12;Nv02Nv01Nv02Nv02;Nv02Nv01Nv02Nv02;;;;Nv02Nv01Nv02Nv02;Nv02Nv01Nv02
-13;Nv02Nv02Nv01Nv01;Nv02Nv02Nv01Nv01;;;;Nv02Nv02Nv01Nv01;Nv02Nv02Nv01
-14;Nv02Nv02Nv01Nv02;Nv02Nv02Nv01Nv02;;;;Nv02Nv02Nv01Nv02;Nv02Nv02Nv01
-15;Nv02Nv02Nv02Nv01;Nv02Nv02Nv02Nv01;;;;Nv02Nv02Nv02Nv01;Nv02Nv02Nv02
-16;Nv02Nv02Nv02Nv02;Nv02Nv02Nv02Nv02;;;;Nv02Nv02Nv02Nv02;Nv02Nv02Nv02
-17;Nv03Nv01Nv01Nv01;Nv03Nv01Nv01Nv01;;;;Nv03Nv01Nv01Nv01;Nv03Nv01Nv01
-18;Nv03Nv01Nv01Nv02;Nv03Nv01Nv01Nv02;;;;Nv03Nv01Nv01Nv02;Nv03Nv01Nv01
-19;Nv03Nv01Nv02Nv01;Nv03Nv01Nv02Nv01;;;;Nv03Nv01Nv02Nv01;Nv03Nv01Nv02
-20;Nv03Nv01Nv02Nv02;Nv03Nv01Nv02Nv02;;;;Nv03Nv01Nv02Nv02;Nv03Nv01Nv02
-21;Nv03Nv02Nv01Nv01;Nv03Nv02Nv01Nv01;;;;Nv03Nv02Nv01Nv01;Nv03Nv02Nv01
-22;Nv03Nv02Nv01Nv02;Nv03Nv02Nv01Nv02;;;;Nv03Nv02Nv01Nv02;Nv03Nv02Nv01
-23;Nv03Nv02Nv02Nv01;Nv03Nv02Nv02Nv01;;;;Nv03Nv02Nv02Nv01;Nv03Nv02Nv02
-24;Nv03Nv02Nv02Nv02;Nv03Nv02Nv02Nv02;;;;Nv03Nv02Nv02Nv02;Nv03Nv02Nv02
1 id label code postaladress telephonenumber email apikey codenv3
2 -1 Nv01Nv01Nv01Nv01 Nv01Nv01Nv01Nv01 Nv01Nv01Nv01Nv01 Nv01Nv01Nv01
3 -2 Nv01Nv01Nv01Nv02 Nv01Nv01Nv01Nv02 Nv01Nv01Nv01Nv02 Nv01Nv01Nv01
4 -3 Nv01Nv01Nv02Nv01 Nv01Nv01Nv02Nv01 Nv01Nv01Nv02Nv01 Nv01Nv01Nv02
5 -4 Nv01Nv01Nv02Nv02 Nv01Nv01Nv02Nv02 Nv01Nv01Nv02Nv02 Nv01Nv01Nv02
6 -5 Nv01Nv02Nv01Nv01 Nv01Nv02Nv01Nv01 Nv01Nv02Nv01Nv01 Nv01Nv02Nv01
7 -6 Nv01Nv02Nv01Nv02 Nv01Nv02Nv01Nv02 Nv01Nv02Nv01Nv02 Nv01Nv02Nv01
8 -7 Nv01Nv02Nv02Nv01 Nv01Nv02Nv02Nv01 Nv01Nv02Nv02Nv01 Nv01Nv02Nv02
9 -8 Nv01Nv02Nv02Nv02 Nv01Nv02Nv02Nv02 Nv01Nv02Nv02Nv02 Nv01Nv02Nv02
10 -9 Nv02Nv01Nv01Nv01 Nv02Nv01Nv01Nv01 Nv02Nv01Nv01Nv01 Nv02Nv01Nv01
11 -10 Nv02Nv01Nv01Nv02 Nv02Nv01Nv01Nv02 Nv02Nv01Nv01Nv02 Nv02Nv01Nv01
12 -11 Nv02Nv01Nv02Nv01 Nv02Nv01Nv02Nv01 Nv02Nv01Nv02Nv01 Nv02Nv01Nv02
13 -12 Nv02Nv01Nv02Nv02 Nv02Nv01Nv02Nv02 Nv02Nv01Nv02Nv02 Nv02Nv01Nv02
14 -13 Nv02Nv02Nv01Nv01 Nv02Nv02Nv01Nv01 Nv02Nv02Nv01Nv01 Nv02Nv02Nv01
15 -14 Nv02Nv02Nv01Nv02 Nv02Nv02Nv01Nv02 Nv02Nv02Nv01Nv02 Nv02Nv02Nv01
16 -15 Nv02Nv02Nv02Nv01 Nv02Nv02Nv02Nv01 Nv02Nv02Nv02Nv01 Nv02Nv02Nv02
17 -16 Nv02Nv02Nv02Nv02 Nv02Nv02Nv02Nv02 Nv02Nv02Nv02Nv02 Nv02Nv02Nv02
18 -17 Nv03Nv01Nv01Nv01 Nv03Nv01Nv01Nv01 Nv03Nv01Nv01Nv01 Nv03Nv01Nv01
19 -18 Nv03Nv01Nv01Nv02 Nv03Nv01Nv01Nv02 Nv03Nv01Nv01Nv02 Nv03Nv01Nv01
20 -19 Nv03Nv01Nv02Nv01 Nv03Nv01Nv02Nv01 Nv03Nv01Nv02Nv01 Nv03Nv01Nv02
21 -20 Nv03Nv01Nv02Nv02 Nv03Nv01Nv02Nv02 Nv03Nv01Nv02Nv02 Nv03Nv01Nv02
22 -21 Nv03Nv02Nv01Nv01 Nv03Nv02Nv01Nv01 Nv03Nv02Nv01Nv01 Nv03Nv02Nv01
23 -22 Nv03Nv02Nv01Nv02 Nv03Nv02Nv01Nv02 Nv03Nv02Nv01Nv02 Nv03Nv02Nv01
24 -23 Nv03Nv02Nv02Nv01 Nv03Nv02Nv02Nv01 Nv03Nv02Nv02Nv01 Nv03Nv02Nv02
25 -24 Nv03Nv02Nv02Nv02 Nv03Nv02Nv02Nv02 Nv03Nv02Nv02Nv02 Nv03Nv02Nv02

View File

@ -104,14 +104,6 @@ class Niveau01
*/
private $modos;
public function __construct()
{
$this->niveau02s = new ArrayCollection();
$this->registrations = new ArrayCollection();
$this->users = new ArrayCollection();
$this->modos = new ArrayCollection();
}
// == CODE A NE PAS REGENERER
public function setId(int $id): self
{
@ -121,6 +113,14 @@ class Niveau01
}
// == FIN DU CODE A NE PAS REGENERER
public function __construct()
{
$this->niveau02s = new ArrayCollection();
$this->registrations = new ArrayCollection();
$this->users = new ArrayCollection();
$this->modos = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;

View File

@ -87,6 +87,15 @@ class Niveau02
*/
private $users;
// == CODE A NE PAS REGENERER
public function setId(int $id): self
{
$this->id = $id;
return $this;
}
// == FIN DU CODE A NE PAS REGENERER
public function __construct()
{
$this->niveau03s = new ArrayCollection();

View File

@ -101,7 +101,14 @@ class Niveau03
return $this;
}
// ==
public function setId(int $id): self
{
$this->id = $id;
return $this;
}
// == FIN DU CODE A NE PAS REGENERER
public function __construct()
{

View File

@ -108,7 +108,13 @@ class Niveau04
return $this;
}
// ==
public function setId(int $id): self
{
$this->id = $id;
return $this;
}
// == FIN DU CODE A NE PAS REGENERER
public function __construct()
{

View File

@ -181,13 +181,15 @@ class UserType extends AbstractType
);
}
$choices = ['oui' => '1', 'non' => '0'];
$builder->add('isvisible',
ChoiceType::class, [
'label' => 'Visible',
'choices' => $choices,
]
);
if (('all' != $access && 'manager' != $access) || $options['appUserviewisvisible']) {
$choices = ['oui' => '1', 'non' => '0'];
$builder->add('isvisible',
ChoiceType::class, [
'label' => 'Visible',
'choices' => $choices,
]
);
}
$builder->add('postaladress',
TextareaType::class, [
@ -285,6 +287,7 @@ class UserType extends AbstractType
'appNiveau04use' => 'string',
'appNiveau04label' => 'string',
'appNiveauupdatable' => 'string',
'appUserviewisvisible' => 'string',
]);
}
}

View File

@ -44,6 +44,10 @@ class AppSession
$session->set('colorbgbodydark-darkrgb', $this->hexToRgb($session->get('colorbgbodydark-darker')));
$session->set('colorbgbodydark-lightrgb', $this->hexToRgb($session->get('colorbgbodydark-lighter')));
// Préférence par défaut
$session->set('fgheader', true);
$session->set('fgaudit', false);
// Current user
$token = $this->token->getToken();
if (!$token) {
@ -51,10 +55,6 @@ class AppSession
}
$curentuser = $token->getUser();
// Préférence par défaut
$session->set('fgheader', true);
$session->set('fgaudit', false);
// Préférence
if ('anon.' != $curentuser) {
$preference = $curentuser->getPreference();

View File

@ -22,6 +22,18 @@
"src/Repository/.gitignore"
]
},
"doctrine/doctrine-fixtures-bundle": {
"version": "3.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "3.0",
"ref": "1f5514cfa15b947298df4d771e694e578d4c204d"
},
"files": [
"src/DataFixtures/AppFixtures.php"
]
},
"doctrine/doctrine-migrations-bundle": {
"version": "3.2",
"recipe": {

View File

@ -13,5 +13,13 @@
{{ render(path("app_publish_sample",{id:2})) }}
</div>
</div>
{% else %}
<div style="text-align:center">
<img src="{{ path('app_minio_image',{file:"logo/"~app.session.get("logolight")}) }}" style="height:120px;margin-top:10px;margin-bottom:20px;">
<h1 style="border:none">{{app.session.get('appname')}}</h1>
<div style="max-width:600px; text-align:justify; margin:auto ">{{app.session.get('appdescription')|raw}}</div>
</div>
{% endif %}
{% endblock %}

View File

@ -11,7 +11,7 @@
{% block body %}
{{ form_start(form) }}
<h1 class="page-header">
{% if access=="admin" or access=="modo" %}
{% if access=="admin" or access=="modo" or access=="manager" %}
{% if mode=="update" %}
Modification Utilisateur = {{ user.username}}
{% else %}
@ -191,7 +191,7 @@
{{ form_row(form.firstname) }}
{{ form_row(form.lastname) }}
{{ form_row(form.email) }}
{{ form_row(form.isvisible) }}
{%if form.isvisible is defined %}{{ form_row(form.isvisible) }}{%endif%}
</div>
</div>

View File

@ -29,7 +29,7 @@
<table class="table table-striped table-bordered table-hover wrap" id="dataTables" style="width:100%; font-size:11px;">
<thead>
<tr>
{% if access=="admin" or access=="modo"%}
{% if access=="admin" or access=="modo" or access=="manager"%}
<th class="no-sort">Action</th>
{% endif %}
@ -67,6 +67,9 @@
{% elseif access=="modo" %}
order: [[ 2, "asc" ]],
ajax: "{{ path('app_modo_user_tablelist') }}",
{% elseif access=="manager" %}
order: [[ 2, "asc" ]],
ajax: "{{ path('app_manager_user_tablelist') }}",
{% else %}
order: [[ 1, "asc" ]],
ajax: "{{ path('app_all_user_tablelist') }}",

View File

@ -3,6 +3,8 @@
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<title>{% block title %}{{app.session.get("appname")}}{% endblock %}</title>
<meta name="description" content="{{app.session.get("appdescription")|striptags|raw}}">
<link rel="shortcut icon" href="{{ path('app_minio_image',{file:"logo/"~app.session.get("logodark")}) }}" />
@ -33,7 +35,7 @@
{{app.session.get("appname")}}
</a>
<br>
<small>{{app.session.get("appsubname")}}</small>
<small><a href="{{ path('app_home')}}">{{app.session.get("appsubname")}}</a></small>
</h1>
<div class="pe-3">