소스 검색

ajout des vues modif pour les genres

François 6 년 전
부모
커밋
ff719db29f

+ 12 - 3
app/Resources/views/base.html.twig

@@ -29,9 +29,18 @@
 						<a class="nav-link" href="{{ path('realisateur_liste') }}">Liste des réalisateurs<span class="sr-only">(current)</span></a>
 					</li>
 					{%  if is_granted('ROLE_ADMIN') %}
-					<li class="nav-item">
-						<a class="nav-link" href="{{ path('admin_index') }}">Administration<span class="sr-only">(current)</span></a>
-					</li>
+						<ul class="navbar-nav">
+							<li class="nav-item dropdown">
+								<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownAdmin" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+									Administration
+								</a>
+								<div class="dropdown-menu" aria-labelledby="navbarDropdown">
+									<a class="dropdown-item" href="{{ path('admin_index') }}">Utilisateurs</a>
+									<div class="dropdown-divider"></div>
+									<a class="dropdown-item" href="{{ path('genre_liste') }}">Liste des genres</a>
+								</div>
+							</li>
+						</ul>
 					{%  endif %}
 				</ul>
 				{%  if not is_granted('IS_AUTHENTICATED_REMEMBERED') %}

+ 104 - 0
src/AppBundle/Controller/GenreController.php

@@ -0,0 +1,104 @@
+<?php
+
+namespace AppBundle\Controller;
+
+use AppBundle\Entity\Genre;
+use AppBundle\Form\GenreType;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+use Symfony\Component\Routing\Annotation\Route;
+use Symfony\Component\HttpFoundation\Request;
+
+class GenreController extends Controller
+{
+    /**
+     * @Route("/admin/genre/", name="genre_liste")
+     */
+    public function indexAction() {
+        $em = $this->getDoctrine()->getManager();
+        $repo = $em->getRepository('AppBundle:Genre');
+        $genres = $repo->findAll();
+
+        return $this->render('@App/genre/liste.html.twig', array(
+            'genres'  => $genres
+        ));
+    }
+
+	/**
+	 * @Route("/admin/genre/ajouter", name="genre_ajouter")
+	 */
+	public function ajouterAction(Request $request)
+	{
+		$genre = new Genre();
+		$form = $this->createForm(GenreType::class, $genre);
+
+		$form->handleRequest($request);
+		if ($form->isSubmitted() && $form->isValid())
+		{
+			$em = $this->getDoctrine()->getManager();
+			$em->persist($genre);
+			$em->flush();
+			$this->addFlash('success', 'Le genre a été ajouté');
+			return $this->redirectToRoute('genre_liste');
+		}
+
+		return $this->render('@App/genre/ajouter.html.twig', array(
+			'form'	=>	$form->createView(),
+		));
+	}
+
+	/**
+	 * @Route("/admin/genre/modifier/{id}", name="genre_modifier")
+	 */
+	public function modifierAction(Request $request, Genre $genre)
+	{
+		$form = $this->createForm(GenreType::class, $genre);
+		$form->handleRequest($request);
+        $em = $this->getDoctrine()->getManager();
+        $films = $em->getRepository('AppBundle:Film')->findFilmWithGenre(array($genre->getName()));
+
+		if ($form->isSubmitted() && $form->isValid())
+		{
+
+			$em->flush();
+			$this->addFlash('success', 'Le genre a été modifié');
+			return $this->redirectToRoute('genre_liste');
+		}
+
+
+		return $this->render('@App/genre/modifier.html.twig', array(
+			'form'	=> $form->createView(),
+            'genre'   =>  $genre,
+            'films' => $films
+		));
+	}
+
+	/**
+	 * @Route("/admin/genre/supprimer/{id}", name="genre_supprimer")
+     * @Security("has_role('ROLE_ADMIN')")
+	 */
+	public function supprimerAction(Request $request, Genre $genre)
+    {
+        $form = $this->get('form.factory')->create();
+        $form->handleRequest($request);
+        if ($form->isSubmitted() && $form->isValid())
+        {
+            $em = $this->getDoctrine()->getManager();
+            $films = $em->getRepository('AppBundle:Film')->findFilmWithGenre(array($genre->getName()));
+            foreach ($films as $film)
+            {
+                $film->removeGenre($genre);
+            }
+            $em->remove($genre);
+            $em->flush();
+            $this->addFlash('success', 'Le genre '.$genre->getName().' a bien été supprimé.');
+            return $this->redirectToRoute('genre_liste');
+        }
+
+		return $this->render('@App/genre/supprimer.html.twig', array(
+			'genre'  =>  $genre,
+            'form'  =>  $form->createView()
+		));
+	}
+
+}

+ 13 - 0
src/AppBundle/Repository/FilmRepository.php

@@ -19,4 +19,17 @@ class FilmRepository extends \Doctrine\ORM\EntityRepository
             ->getQuery();
         return $query->getSingleResult();
     }
+
+    public function findFilmWithGenre(array $genreNames) {
+        $qb = $this->createQueryBuilder('f');
+        $qb
+            ->innerJoin('f.genres', 'g')
+            ->addSelect('g');
+
+        $qb->where($qb->expr()->in('g.name', $genreNames));
+
+        return $qb
+            ->getQuery()
+            ->getResult();
+    }
 }

+ 2 - 0
src/AppBundle/Repository/GenreRepository.php

@@ -2,6 +2,8 @@
 
 namespace AppBundle\Repository;
 
+use AppBundle\Entity\Genre;
+
 /**
  * GenreRepository
  *

+ 11 - 0
src/AppBundle/Resources/views/genre/ajouter.html.twig

@@ -0,0 +1,11 @@
+{% extends "base.html.twig" %}
+
+{% block title %}Ajouter un genre{% endblock %}
+{% block titre %}Genre - Ajouter{% endblock %}
+{% block body %}
+    {{  form_start(form) }}
+    {{ form_rest(form) }}
+	<button class="btn btn-primary" type="submit" formmethod="post">Enregistrer</button>
+    {{  form_end(form) }}
+
+{% endblock %}

+ 27 - 0
src/AppBundle/Resources/views/genre/liste.html.twig

@@ -0,0 +1,27 @@
+{% extends "@App/videotheque/base.html.twig" %}
+
+{% block body %}
+	<p><a href="{{ path('genre_ajouter') }}" class="btn btn-primary" role="button">Ajouter un Genre</a></p>
+<table class="table table-bordered table-hover table-sm">
+	<thead class="thead-dark">
+		<tr>
+			<th>Genre</th>
+			{#<th>Films</th>#}
+			<th>Actions</th>
+		</tr>
+	</thead>
+	<tbody>
+		{% for genre in genres %}
+		<tr>
+			<td>{{ genre.name }}</td>
+			<td>
+				{% if is_granted('ROLE_ADMIN') %}
+				<a href="{{ path('genre_supprimer', {'id': genre.id})  }}"><i class="fas fa-trash", style="color:Tomato;"></i></a>
+				{% endif %}
+				<a href="{{ path('genre_modifier', {'id': genre.id})  }}"><i class="fas fa-edit", style="color:DodgerBlue;"></i></a>
+			</td>
+		</tr>
+		{% endfor %}
+	</tbody>
+</table>
+{% endblock %}

+ 26 - 0
src/AppBundle/Resources/views/genre/modifier.html.twig

@@ -0,0 +1,26 @@
+{% extends "base.html.twig" %}
+
+{% block title %}Modifier un genre{% endblock %}
+{% block titre %}Genre - Modifier{% endblock %}
+
+{% block body %}
+	<div class="row">
+		<div class="col">
+			{{  form_start(form) }}
+			{{ form_rest(form) }}
+			<button class="btn btn-primary" type="submit" formmethod="post">Enregistrer</button>
+			<a class="btn btn-danger" href="{{ path('genre_supprimer', {'id': genre.id}) }}">Supprimer</a>
+			{{  form_end(form) }}
+
+		</div>
+		<div class="col">
+			<h2>Liste des films de ce genre</h2>
+			<ul>
+				{% for film in films %}
+					<li><a href="{{ path('videotheque_voirfilm', {'id': film.id}) }}">{{ film.titre }}</a></li>
+				{% endfor %}
+			</ul>
+		</div>
+	</div>
+
+{% endblock %}

+ 19 - 0
src/AppBundle/Resources/views/genre/supprimer.html.twig

@@ -0,0 +1,19 @@
+{% extends "base.html.twig" %}
+
+{% block title %}Supprimer un genre{% endblock %}
+{% block titre %}Genre - Supprimer{% endblock %}
+
+{% block body %}
+    <h2>Confirmation ?</h2>
+    <p>Êtes vous certain de vouloir supprimer le genre "{{ genre.name }}" ?</p>
+    <form action="{{ path('genre_supprimer', {'id': genre.id}) }}" method="post">
+        <a href="{{ path('genre_liste', {'id': genre.id}) }}" class="btn btn-secondary">
+            <i class="fas fa-chevron-circle-left"></i>
+            Retour à la liste des genres
+        </a>
+        {# Ici j'ai écrit le bouton de soumission à la main #}
+        <input type="submit" value="Supprimer" class="btn btn-danger" />
+        {# Ceci va générer le champ CSRF #}
+        {{ form_rest(form) }}
+    </form>
+{% endblock %}