Browse Source

Ajoute les projets populaires

master
vincent 16 hours ago
parent
commit
7e21caf661
6 changed files with 53 additions and 4 deletions
  1. +1
    -1
      TODO.md
  2. +1
    -1
      composer.json
  3. +5
    -1
      src/Controller/HomeController.php
  4. +16
    -0
      src/Repository/ProjectRepository.php
  5. +29
    -0
      templates/home/index.html.twig
  6. +1
    -1
      templates/project/index.html.twig

+ 1
- 1
TODO.md View File

@ -2,6 +2,6 @@
* [ ] Mettre plus d’aide directement sur le site, avec des liens vers le forum, les sources, etc. * [ ] Mettre plus d’aide directement sur le site, avec des liens vers le forum, les sources, etc.
* [ ] Se faire héberger sur <openstreetmap.fr> histoire d’avoir une adresse web mémorisable * [ ] Se faire héberger sur <openstreetmap.fr> 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 * [X] Mettre des raccourcis clavier sur les boutons
* [ ] Internationaliser tout ça et y localiser au moins en anglais * [ ] Internationaliser tout ça et y localiser au moins en anglais

+ 1
- 1
composer.json View File

@ -1,6 +1,6 @@
{ {
"name": "caboulot/omo", "name": "caboulot/omo",
"version": "0.0.0",
"version": "0.0.1",
"type": "project", "type": "project",
"license": "WTFPL", "license": "WTFPL",
"minimum-stability": "stable", "minimum-stability": "stable",


+ 5
- 1
src/Controller/HomeController.php View File

@ -2,6 +2,7 @@
namespace App\Controller; namespace App\Controller;
use App\Repository\ProjectRepository;
use KnpU\OAuth2ClientBundle\Client\ClientRegistry; use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\SecurityBundle\Security; use Symfony\Bundle\SecurityBundle\Security;
@ -14,9 +15,12 @@ class HomeController extends AbstractController
{ {
// Page d’accueil du site // Page d’accueil du site
#[Route('/', name: 'app_home')] #[Route('/', name: 'app_home')]
public function index(): Response
public function index(ProjectRepository $projectRepository): Response
{ {
$popularProjects = $projectRepository->findSomeOrderedByPopularity();
return $this->render('home/index.html.twig', [ return $this->render('home/index.html.twig', [
'popularProjects' => $popularProjects,
]); ]);
} }


+ 16
- 0
src/Repository/ProjectRepository.php View File

@ -3,6 +3,7 @@
namespace App\Repository; namespace App\Repository;
use App\Entity\Project; use App\Entity\Project;
use App\Entity\Task;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry; 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 // public function findOneBySomeField($value): ?Project
// { // {
// return $this->createQueryBuilder('p') // return $this->createQueryBuilder('p')


+ 29
- 0
templates/home/index.html.twig View File

@ -13,4 +13,33 @@
</div> </div>
</div> </div>
</div> </div>
{% if popularProjects is not empty %}
<section class="container">
<div class="row">
<div class="col mb-3">
<h2>Projets populaires</h2>
</div>
</div>
<div class="row">
{% for project in popularProjects %}
<div class="col-12 col-md-4 mb-3">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title">
{{ project.name }}
{% for tag in project.tags %}
<span class="badge text-bg-info ms-2">{{ tag.name }}</span>
{% endfor %}
</h3>
<p class="card-subtitle mb-2 text-muted">{% include 'partials/_project-metadata.html.twig' %}</p>
{% if project.description %}<p class="card-text">{{ project.description|markdown_to_html }}</p>{% endif %}
<a href="{{ path('app_project_show', {'slug': project.slug}) }}" class="btn btn-primary">En savoir plus</a>
</div>
</div>
</div>
{% endfor %}
</div>
</section>
{% endif %}
{% endblock %} {% endblock %}

+ 1
- 1
templates/project/index.html.twig View File

@ -20,7 +20,7 @@
{% if projects is not empty %} {% if projects is not empty %}
<div class="row"> <div class="row">
{% for project in projects %} {% for project in projects %}
<div class="col col-md-4 mb-3">
<div class="col-12 col-md-4 mb-3">
<div class="card h-100"> <div class="card h-100">
<div class="card-body"> <div class="card-body">
<h2 class="card-title"> <h2 class="card-title">


Loading…
Cancel
Save