diff --git a/TODO.md b/TODO.md index 92bc36d..2b18d04 100644 --- a/TODO.md +++ b/TODO.md @@ -2,6 +2,6 @@ * [ ] Mettre plus d’aide directement sur le site, avec des liens vers le forum, les sources, etc. * [ ] Se faire héberger sur histoire d’avoir une adresse web mémorisable -* [ ] Mettre des projets en avant sur la page d’accueil (genre ceux pour lesquels il y a eu de l’activité récemment, ceux qui viennent d’être créés, etc) +* [X] Mettre des projets en avant sur la page d’accueil (genre ceux pour lesquels il y a eu de l’activité récemment, ceux qui viennent d’être créés, etc) * [X] Mettre des raccourcis clavier sur les boutons * [ ] Internationaliser tout ça et y localiser au moins en anglais diff --git a/composer.json b/composer.json index b4796d0..decbab2 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "caboulot/omo", - "version": "0.0.0", + "version": "0.0.1", "type": "project", "license": "WTFPL", "minimum-stability": "stable", diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index 08f05b5..1d04bea 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -2,6 +2,7 @@ namespace App\Controller; +use App\Repository\ProjectRepository; use KnpU\OAuth2ClientBundle\Client\ClientRegistry; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\SecurityBundle\Security; @@ -14,9 +15,12 @@ class HomeController extends AbstractController { // Page d’accueil du site #[Route('/', name: 'app_home')] - public function index(): Response + public function index(ProjectRepository $projectRepository): Response { + $popularProjects = $projectRepository->findSomeOrderedByPopularity(); + return $this->render('home/index.html.twig', [ + 'popularProjects' => $popularProjects, ]); } diff --git a/src/Repository/ProjectRepository.php b/src/Repository/ProjectRepository.php index 64f792a..d4cbbc2 100644 --- a/src/Repository/ProjectRepository.php +++ b/src/Repository/ProjectRepository.php @@ -3,6 +3,7 @@ namespace App\Repository; use App\Entity\Project; +use App\Entity\Task; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; @@ -28,6 +29,21 @@ class ProjectRepository extends ServiceEntityRepository ; } + public function findSomeOrderedByPopularity($limit = 3): array + { + $entityManager = $this->getEntityManager(); + $query = $entityManager->createQuery(" +SELECT p +FROM ".Project::class." p +JOIN ".Task::class." t +GROUP BY p.id +ORDER BY MAX(t.finishAt) +") + ->setMaxResults($limit); + + return $query->getResult(); + } + // public function findOneBySomeField($value): ?Project // { // return $this->createQueryBuilder('p') diff --git a/templates/home/index.html.twig b/templates/home/index.html.twig index f6e36fc..d655b56 100644 --- a/templates/home/index.html.twig +++ b/templates/home/index.html.twig @@ -13,4 +13,33 @@ +{% if popularProjects is not empty %} +
+
+
+

Projets populaires

+
+
+
+ {% for project in popularProjects %} +
+
+
+

+ {{ project.name }} + {% for tag in project.tags %} + {{ tag.name }} + {% endfor %} +

+

{% include 'partials/_project-metadata.html.twig' %}

+ {% if project.description %}

{{ project.description|markdown_to_html }}

{% endif %} + En savoir plus +
+
+
+ {% endfor %} +
+
+{% endif %} + {% endblock %} diff --git a/templates/project/index.html.twig b/templates/project/index.html.twig index 2c3a77e..e2cd7ed 100644 --- a/templates/project/index.html.twig +++ b/templates/project/index.html.twig @@ -20,7 +20,7 @@ {% if projects is not empty %}
{% for project in projects %} -
+