Browse Source

dashboard + icone menu + email password + listing collectifdata

master
Charly 3 years ago
parent
commit
8a679bdec7
10 changed files with 174 additions and 14 deletions
  1. +8
    -1
      public/build/adminlte-common.css
  2. +9
    -1
      src/Controller/Admin/CollectifDataCrudController.php
  3. +24
    -6
      src/Controller/Admin/DashboardAnimatorController.php
  4. +38
    -0
      src/Controller/Admin/DashboardController.php
  5. +13
    -6
      src/Controller/Admin/UserCrudController.php
  6. +20
    -0
      src/Entity/CollectifData.php
  7. +11
    -0
      templates/adminlte/dashboard-animator.html.twig
  8. +38
    -0
      templates/adminlte/dashboard.html.twig
  9. +9
    -0
      templates/emails/password.html.twig
  10. +4
    -0
      translations/admin.fr.yaml

+ 8
- 1
public/build/adminlte-common.css
File diff suppressed because it is too large
View File


+ 9
- 1
src/Controller/Admin/CollectifDataCrudController.php View File

{ {
$fields = array(); $fields = array();


$fields[] = TextField::new('resume');
$fields[] = AssociationField::new('territory') $fields[] = AssociationField::new('territory')
->setTemplatePath('crud/field/association.html.twig'); ->setTemplatePath('crud/field/association.html.twig');
$fields[] = IntegerField::new('nbParticipant'); $fields[] = IntegerField::new('nbParticipant');
$fields[] = TextField::new('nbDreams')
->onlyOnIndex();
$fields[] = TextField::new('nbRevolts')
->onlyOnIndex();
$fields[] = TextField::new('nbProjectsBoost')
->onlyOnIndex();
$fields[] = TextField::new('nbProjectsInspiring')
->onlyOnIndex();
$fields[] = CollectionField::new('revolts') $fields[] = CollectionField::new('revolts')
->setFormTypeOption('entry_type', RevoltsType::class) ->setFormTypeOption('entry_type', RevoltsType::class)
->setFormTypeOption('by_reference', false) ->setFormTypeOption('by_reference', false)


public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void
{ {
$entityInstance->setUser($this->getUser());
$entityManager->persist($entityInstance); $entityManager->persist($entityInstance);
$entityManager->flush(); $entityManager->flush();



+ 24
- 6
src/Controller/Admin/DashboardAnimatorController.php View File



class DashboardAnimatorController extends SovDashboardController class DashboardAnimatorController extends SovDashboardController
{ {
private $adminUrlGenerator;
protected $adminUrlGenerator;


public function __construct(AdminUrlGenerator $adminUrlGenerator) public function __construct(AdminUrlGenerator $adminUrlGenerator)
{ {
$this->adminUrlGenerator = $adminUrlGenerator; $this->adminUrlGenerator = $adminUrlGenerator;
} }


public function index(): Response
{
$urlCreate = $this->adminUrlGenerator
->setController(CollectifDataCrudController::class)
->setAction(Action::NEW)
->generateUrl();

$nbForm = $this->getDoctrine()
->getRepository(CollectifData::class)
->findByUser($this->getUser());

return $this->render('/adminlte/dashboard-animator.html.twig',
[
'urlCreate' => $urlCreate,
'nbForm' => count($nbForm),
]);
}

public function configureMenuItems(): iterable public function configureMenuItems(): iterable
{ {
$urlCreate = $this->adminUrlGenerator $urlCreate = $this->adminUrlGenerator
->setAction(Action::NEW) ->setAction(Action::NEW)
->generateUrl(); ->generateUrl();


yield MenuItem::linkToDashboard('dashboard', 'circle');
yield MenuItem::linkToUrl('data_collectif_create', '', $urlCreate);
yield MenuItem::subMenu('account', 'user')
yield MenuItem::linkToDashboard('dashboard', 'far fa-circle');
yield MenuItem::linkToUrl('data_collectif_create', 'fas fa-plus', $urlCreate);
yield MenuItem::subMenu('account', 'fas fa-user')
->setSubItems( ->setSubItems(
[ [
MenuItem::linkToRoute('account_profile', '', 'sov_admin_account_profile'),
MenuItem::linkToRoute('account_password', '', 'sov_admin_account_password'),
MenuItem::linkToRoute('account_profile', 'fas fa-user-cog', 'sov_admin_account_profile'),
MenuItem::linkToRoute('account_password', 'fas fa-key', 'sov_admin_account_password'),
] ]
); );



+ 38
- 0
src/Controller/Admin/DashboardController.php View File

use App\Entity\CollectifData; use App\Entity\CollectifData;
use App\Entity\Common\TaxRate; use App\Entity\Common\TaxRate;
use App\Entity\Configuration; use App\Entity\Configuration;
use App\Entity\Dreams;
use App\Entity\IndividualData; use App\Entity\IndividualData;
use App\Entity\ProjectsBoost;
use App\Entity\ProjectsInspiring;
use App\Entity\Revolts;
use App\Entity\Site\Page; use App\Entity\Site\Page;
use App\Entity\Territory; use App\Entity\Territory;
use App\Entity\Thematic; use App\Entity\Thematic;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem; use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator; use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
use Lc\SovBundle\Controller\Dashboard\DashboardController as SovDashboardController; use Lc\SovBundle\Controller\Dashboard\DashboardController as SovDashboardController;
use Symfony\Component\HttpFoundation\Response;


class DashboardController extends SovDashboardController class DashboardController extends SovDashboardController
{ {
const ROLE_ADMIN = "ROLE_ADMIN"; const ROLE_ADMIN = "ROLE_ADMIN";
const ROLE_SUPER_ADMIN = "ROLE_SUPER_ADMIN"; const ROLE_SUPER_ADMIN = "ROLE_SUPER_ADMIN";
const ROLE_ANIMATOR = "ROLE_ANIMATOR";


private $adminUrlGenerator; private $adminUrlGenerator;


$this->adminUrlGenerator = $adminUrlGenerator; $this->adminUrlGenerator = $adminUrlGenerator;
} }


public function index(): Response
{
$repoCollectifData = $this->getDoctrine()->getRepository(CollectifData::class);
$repoDreams = $this->getDoctrine()->getRepository(Dreams::class);
$repoRevolts = $this->getDoctrine()->getRepository(Revolts::class);
$repoProjectsBoost = $this->getDoctrine()->getRepository(ProjectsBoost::class);
$repoProjectsInsp = $this->getDoctrine()->getRepository(ProjectsInspiring::class);
$repoUser = $this->getDoctrine()->getRepository(User::class);

$formUnvalid = $repoCollectifData->findByStatus(0);

$formValid = $repoCollectifData->findByStatus(1);

$dreams = $repoDreams->findAll();
$revolts = $repoRevolts->findAll();
$projectsBoost = $repoProjectsBoost->findAll();
$projectsInsp = $repoProjectsInsp->findAll();

$animators = $repoUser->findByRole(self::ROLE_ANIMATOR);

return $this->render('/adminlte/dashboard.html.twig',
[
'nbFormUnvalid' => count($formUnvalid),
'nbFormValid' => count($formValid),
'nbDreams' => count($dreams),
'nbRevolts' => count($revolts),
'nbProjectsBoost' => count($projectsBoost),
'nbProjectsInsp' => count($projectsInsp),
'nbAnimator' => count($animators)
]);
}

public function configureMenuItems(): iterable public function configureMenuItems(): iterable
{ {
$urlNewCollectif = $this->adminUrlGenerator $urlNewCollectif = $this->adminUrlGenerator

+ 13
- 6
src/Controller/Admin/UserCrudController.php View File

use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField; use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use Lc\SovBundle\Controller\User\UserAdminController as AbstractUserCrudController; use Lc\SovBundle\Controller\User\UserAdminController as AbstractUserCrudController;
use Lc\SovBundle\Definition\RolesDefinitionInterface;
use Lc\SovBundle\Doctrine\EntityManager; use Lc\SovBundle\Doctrine\EntityManager;
use Lc\SovBundle\Translation\TranslatorAdmin; use Lc\SovBundle\Translation\TranslatorAdmin;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Mailer\MailerInterface; use Symfony\Component\Mailer\MailerInterface;
RequestStack $request, RequestStack $request,
EntityManager $em, EntityManager $em,
TranslatorAdmin $translatorAdmin, TranslatorAdmin $translatorAdmin,
Environment $twig,
RolesDefinitionInterface $rolesDefinition,
UserPasswordEncoderInterface $passwordEncoder, UserPasswordEncoderInterface $passwordEncoder,
EntityManager $entityManager, EntityManager $entityManager,
MailerInterface $mailerInterface MailerInterface $mailerInterface
$this->entityManager = $entityManager; $this->entityManager = $entityManager;
$this->mailerInterface = $mailerInterface; $this->mailerInterface = $mailerInterface;


parent::__construct($session, $request, $em, $translatorAdmin ,$twig);
parent::__construct($session, $request, $em, $translatorAdmin, $rolesDefinition);
} }


public static function getEntityFqcn(): string public static function getEntityFqcn(): string
$this->entityManager->create($entityInstance); $this->entityManager->create($entityInstance);
$this->entityManager->flush(); $this->entityManager->flush();


$email = (new Email())
$email = (new TemplatedEmail())
->from('contact@laclic.fr') ->from('contact@laclic.fr')
->to('charly@laclic.fr') ->to('charly@laclic.fr')
->subject('Password')
->html($plainPassword);
->subject('Mot de passe Aux Actes Citoyens')
->htmlTemplate('emails/password.html.twig')
->context([
'password' => $plainPassword,
'firstname' => $entityInstance->getFirstname(),
'lastname' => $entityInstance->getLastname(),
]);


$this->mailerInterface->send($email); $this->mailerInterface->send($email);


parent::persistEntity($entityManager, $entityInstance); // TODO: Change the autogenerated stub
parent::persistEntity($entityManager, $entityInstance);
} }


function generatePassword($caracteres = 12, $chaine = 'azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN123456789#!?+=-/%') function generatePassword($caracteres = 12, $chaine = 'azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN123456789#!?+=-/%')

+ 20
- 0
src/Entity/CollectifData.php View File

return count($this->getRevolts()) . " révolte(s) - " . count($this->getDreams()) . " rêve(s) - " . count($this->getProjectsBoost()) . " projet(s) boosté(s) - " . count($this->getProjectsInspiring()) . " projets inspirants"; return count($this->getRevolts()) . " révolte(s) - " . count($this->getDreams()) . " rêve(s) - " . count($this->getProjectsBoost()) . " projet(s) boosté(s) - " . count($this->getProjectsInspiring()) . " projets inspirants";
} }


public function getNbDreams():string
{
return count($this->getDreams());
}

public function getNbRevolts():string
{
return count($this->getRevolts());
}

public function getNbProjectsBoost():string
{
return count($this->getProjectsBoost());
}

public function getNbProjectsInspiring():string
{
return count($this->getProjectsInspiring());
}

public function getId(): ?int public function getId(): ?int
{ {
return $this->id; return $this->id;

+ 11
- 0
templates/adminlte/dashboard-animator.html.twig View File

{% extends '@LcSov/adminlte/layout.html.twig' %}
{% import '@LcSov/adminlte/macro/infobox.html.twig' as minfobox %}
{% block content_title %}
{{ 'dashboard'|lc_trans_admin_title }}
{% endblock %}

{% block main %}
<a class="btn btn-primary" style="margin-bottom: 40px;" href="{{ urlCreate }}" role="button" title="formulaire collectif">Accéder au formulaire collectif</a>

{{ minfobox.infobox("Nombre de formulaires collectifs", nbForm, "red", "fas fa-database") }}
{% endblock %}

+ 38
- 0
templates/adminlte/dashboard.html.twig View File

{% extends '@LcSov/adminlte/layout.html.twig' %}
{% import '@LcSov/adminlte/macro/infobox.html.twig' as minfobox %}

{% block content_title %}
{{ 'dashboard'|lc_trans_admin_title }}
{% endblock %}

{% block main %}
<div class="row">
<div class="col-sm-3 col-xs-12">
{{ minfobox.infobox("Nombre d'animateurs", nbAnimator, "blue", "fas fa-user") }}
</div>
</div>
<div class="row">
<div class="col-sm-6 col-xs-12">
{{ minfobox.infobox("Formulaires collectifs en attente de validation", nbFormUnvalid, "red", "fas fa-database") }}
</div>
<div class="col-sm-6 col-xs-12">
{{ minfobox.infobox("Formulaires collectifs validés", nbFormValid, "green", "fas fa-database") }}
</div>
</div>
<div class="row">
<div class="col-sm-6 col-xs-12">
{{ minfobox.infobox("Nombre de rêves ", nbDreams, "blue", "far fa-lightbulb") }}
</div>
<div class="col-sm-6 col-xs-12">
{{ minfobox.infobox("Nombre de révoltes ", nbRevolts, "red", "fas fa-bullhorn") }}
</div>
</div>
<div class="row">
<div class="col-sm-6 col-xs-12">
{{ minfobox.infobox("Nombre de projets boostés ", nbProjectsBoost, "indigo", "fas fa-thumbs-up") }}
</div>
<div class="col-sm-6 col-xs-12">
{{ minfobox.infobox("Nombre de projets inspirants ", nbProjectsInsp, "blue", "fas fa-smile") }}
</div>
</div>
{% endblock %}

+ 9
- 0
templates/emails/password.html.twig View File

<h1>Bonjour {{ firstname }} {{ lastname }}!</h1>

<p>
Vous trouverez ci-dessous vos informations de connexion pour accéder a votre compte.
</p>
<p>
Nom d'utilisateur : {{ email.to[0].address }}<br>
Mot de passe : {{ password }}
</p>

+ 4
- 0
translations/admin.fr.yaml View File

projectsboost: Les projets boostés projectsboost: Les projets boostés
projectsinspiring: Les projets inspirants projectsinspiring: Les projets inspirants
resume: Résumé resume: Résumé
nbDreams: Rêve(s)
nbRevolts: Révolte(s)
nbProjectsBoost: Projet(s) boosté(s)
nbProjectsInspiring: Projet(s) inspirant(s)
IndividualData: IndividualData:
label: Données individuel label: Données individuel
label_plurial: Données du formulaire individuel label_plurial: Données du formulaire individuel

Loading…
Cancel
Save