Browse Source

correctif envoie de mails, début interface management

garthh 2 days ago
parent
commit
59708d0597

+ 1 - 0
config/packages/mailer.yaml

@@ -1,3 +1,4 @@
 framework:
     mailer:
         dsn: '%env(MAILER_DSN)%'
+        message_bus: false

+ 1 - 0
config/packages/security.yaml

@@ -52,6 +52,7 @@ security:
     access_control:
         - { path: ^/admin, roles: ROLE_ADMIN }
         - { path: ^/profile, roles: ROLE_USER }
+        - { path: ^/manage, roles: ROLE_MANAGER }
 
 when@test:
     security:

+ 51 - 0
src/Controller/ManageController.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Requirement\Requirement;
+use Symfony\Component\Routing\Attribute\Route;
+
+use App\Repository\EventRepository;
+use App\Entity\Event;
+use App\Entity\Gamemaster;
+
+final class ManageController extends AbstractController
+{
+    #[Route('/manage', name: 'app_manage')]
+    public function manage(EventRepository $repository): Response
+    {
+
+        // Récupérer la liste des événements visibles
+        $events = $repository->findEventsToCome();
+        if (!$events) {
+            $this->addFlash('info', 'Aucun d\'événement n\'est plannifié pour le moment.');
+            return $this->redirectToRoute('app_main');
+        }
+        $event = $events[0];
+
+        return $this->render('manage/manage.html.twig', [
+            'event' => $event,
+            'events' => $events
+        ]);
+    }
+
+    #[Route('/manage/{id}', name: 'app_manage_planning', requirements: ['id' => Requirement::UUID_V7], methods: ['GET', 'POST'])]
+    public function managePlanning(?Event $event, EventRepository $repository): Response
+    {
+        // Contrôler qu'un événement est bien ok
+        if (!$event) {
+            $this->addFlash('danger', 'Événement inconnu !');
+            $this->redirectToRoute('app_manage');
+        }
+
+        // Récupérer la liste des événements visibles
+        $events = $repository->findEventsToCome();
+
+        return $this->render('manage/manage.html.twig', [
+            'event' => $event,
+            'events' => $events
+        ]);
+    }
+}

+ 1 - 1
templates/bulma.html.twig

@@ -52,7 +52,7 @@
               <a class="navbar-item" href="{{ path('app_main') }}">Accueil</a>
               <a class="navbar-item" href="{{ path('app_main_booking_main') }}">Réserver</a>
               {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_MANAGER') %}
-              <a class="navbar-item" href="#">Gérer</a>
+              <a class="navbar-item" href="{{ path('app_manage') }}">Gérer</a>
               {% endif %}
             </div>
 

+ 18 - 1
templates/main/_modal.gamemaster.html.twig

@@ -20,12 +20,29 @@
       </p>
       <hr/>
       <p>
-        <em>Je peux animer des parties des jeux suivants : </em>
+        <em>Je peux animer des parties des jeux suivants : </em><br/>
        {{ gamemaster.gamesCanMaster|map(game => game.name)|join(', ') }}
 
       </p>
+
     </div>
   </div>
 </article>
+{% if is_granted('ROLE_MANAGER') or is_granted('ROLE_ADMIN') %}
+  <div class="box">
+    <div class="columns">
+      {% if gamemaster.phone %}
+      <div class="column has-text-centered">
+        <a class="button is-primary" href="tel:{{ gamemaster.phone }}"><span class="icon-text"><span class="icon mr-3"><twig:ux:icon name="bi:telephone-fill"/></span>Appeler</a>
+      </div>
+      {% endif %}
+      <div class="column has-text-centered">
+        <a class="button is-primary" href="tel:{{ gamemaster.phone }}"><span class="icon-text"><span class="icon mr-3"><twig:ux:icon name="bi:envelope-fill"/></span>Mail</a>
+      </div>
+    </div>
+  </div>
+{% endif %}
+
+
 {% endblock %}
 

+ 76 - 0
templates/manage/manage.html.twig

@@ -0,0 +1,76 @@
+{% extends 'bulma.html.twig' %}
+
+{% block title %}Gestion pour {{ event.name }}{% endblock %}
+
+{% block content %}
+
+{{ component('Modal')}}
+
+
+<div class="card" {{ stimulus_controller('dropdown')}} >
+  <div class="card-footer">
+    <div class="dropdown card-footer-item is-flex is-justify-content-space-between is-align-items-center" data-action="click->dropdown#toggle">
+      <button>
+        <span><strong>{{ event.name }} - du {{ event.startOn|date('d/m/y à H:i', app_timezone) }} au {{ event.endOn|date('d/m/y à H:i', app_timezone)}}</strong></span>        
+      </button>
+      <span class="icon is-small">
+        <twig:ux:icon name="bi:chevron-down" />&nbsp;
+      </span>
+      <div data-dropdown-target="menu" class="dropdown-menu">
+        <div class="dropdown-content">
+          {% for evt in events %}
+          {% if event.id != evt.id %}
+          <a href="{{ path('app_manage_planning', {id: evt.id})}}" class="dropdown-item"><strong>{{ evt.name }}</strong><small> du {{ evt.startOn|date('d/m/y H:i', app_timezone) }} au {{ evt.endOn|date('d/m/y H:i', app_timezone)}}</small></a>
+          {% endif %}
+          {% endfor %}
+        </div>
+      </div>
+    </div>
+  </div>
+
+
+
+
+
+</div>
+
+<div class="box is-clearfix">
+  <div class="columns">
+    {% if not event.isHiddenPlanning %}
+    <div class="column">
+      <p>{{ event.getParties()|length }} parties proposées</p>
+    </div>
+    {% endif %}
+    <div class="column">
+      <p class="is-inline-block icon-text">{{ event.getGamemastersAssigned|length }} meneur(euse)s de jeu
+        {% for gamemaster in event.getGamemastersAssigned %}
+          <span class="icon">
+              <a href="{{ path('app_gamemaster_public_profile', {id: gamemaster.id}) }}" class="open-modal"><figure class="image is-24x24 is-inline-block">
+              {% if gamemaster.picture %}
+              <img class="is-rounded" src="/images/gamemasters/{{ gamemaster.picture }}" />
+              {% else %}
+              <twig:ux:icon name="bi:person-fill"/>
+              {% endif %}
+              </figure></a>
+          </span>   
+        {% endfor %}
+      </p>
+    </div>
+    {% if event.isEveryoneCanAskForGame %}
+    <div class="column">
+      <a href="#" class="button is-primary open-modal">Demander une partie</a>
+    </div>
+    {% endif %}
+  </div>
+
+</div>
+
+
+
+<section>
+  <div id="planning">
+    {{ component('Planning', {event: event,pathFullSlot: 'app_participation'}) }}
+  </div>
+</section>
+
+{% endblock %}