{ | { | ||||
$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(); | ||||
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'), | |||||
] | ] | ||||
); | ); | ||||
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 |
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#!?+=-/%') |
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; |
{% 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 %} |
{% 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 %} |
<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> |
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 |