Selaa lähdekoodia

Merge branch 'clement-at-rt' into 'master'

ajout gestion @ et #

See merge request clement.krebs/twyrael!7
KREBS-CHEVRESSON CLEMENT 4 vuotta sitten
vanhempi
sitoutus
8ff77f0b83

+ 35 - 0
src/Controller/HashtagController.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Controller;
+
+use App\Entity\Hashtag;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Annotation\Route;
+
+class HashtagController extends AbstractController
+{
+    private function cmp_array($a, $b): int {
+        if ($a == $b) {
+            return 0;
+        }
+        return ($a > $b) ? -1 : 1;
+    }
+
+    #[Route('/hashtag/{name}', name: 'hashtag')]
+    public function index($name): Response
+    {
+        $em = $this->getDoctrine()->getManager();
+        $repository_hashtag = $em->getRepository(Hashtag::class);
+        $hashtag = $repository_hashtag->findOneBy(array("name" => $name));
+        if ($hashtag) {
+            $messages = $hashtag->getMessage()->getValues();
+            usort($messages, array($this, "cmp_array"));
+            return $this->render('hashtag/index.html.twig', [
+                'controller_name' => 'HashtagController',
+                'messages' => $messages
+            ]);
+        }
+        return new Response("Hashtag non existant");
+    }
+}

+ 31 - 1
src/Controller/HomeController.php

@@ -2,6 +2,7 @@
 
 namespace App\Controller;
 
+use App\Entity\Hashtag;
 use App\Entity\Message;
 use App\Entity\User;
 use Doctrine\DBAL\Types\TextType;
@@ -42,7 +43,36 @@ class HomeController extends AbstractController
                 $repository_profile = $em->getRepository(User::class);
                 $profile = $repository_profile->findOneBy(array('username' => $session->get('user')));
                 $message = new Message();
-                $message->setText($form->get('text')->getData());
+                $text = $form->get('text')->getData();
+                $mentions = array();
+                $hashtags = array();
+                preg_match_all("~@([a-zA-Z0-9_]*)~", $text, $mentions);
+                preg_match_all("~#([a-zA-Z0-9_]*)~", $text, $hashtags);
+                for($i=0; $i < sizeof($mentions[0]); $i++) {
+                    $user = $repository_profile->findOneBy(array('username' => $mentions[1][$i]));
+                    if ($user) {
+                        $message->addMention($user);
+                        $mentions[1][$i] = "<a href='/profile/" . $mentions[1][$i] . "'>" . $mentions[0][$i] . "</a>";
+                        $mentions[0][$i] = "~" . $mentions[0][$i] . "~";
+                    } else {
+                        unset($mentions[1][$i]);
+                        unset($mentions[0][$i]);
+                    }
+                }
+                $repository_hashtag = $em->getRepository(Hashtag::class);
+                for($i=0; $i < sizeof($hashtags[0]); $i++) {
+                    $hashtag = $repository_hashtag->findOneBy(array('name' => $hashtags[1][$i]));
+                    if (!$hashtag) {
+                        $hashtag = new Hashtag();
+                        $hashtag->setName($hashtags[1][$i]);
+                    }
+                    $hashtag->addMessage($message);
+                    $hashtags[1][$i] = "<a href='/hashtag/" . $hashtags[1][$i] . "'>" . $hashtags[0][$i] . "</a>";
+                    $hashtags[0][$i] = "~" . $hashtags[0][$i] . "~";
+                    $em->persist($hashtag);
+                }
+                $text = preg_replace($mentions[0], $mentions[1], $text);
+                $message->setText(preg_replace($hashtags[0], $hashtags[1], $text));
                 $message->setSender($profile);
                 $message->setDate(new \DateTime("now"));
                 $em->persist($message);

+ 14 - 0
templates/hashtag/index.html.twig

@@ -0,0 +1,14 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello HashtagController!{% endblock %}
+
+{% block body %}
+    <ul>
+{% for msg in messages %}
+    <li>
+        <a href={{ path('profile', {'username': msg.sender.getUsername() }) }}>{{ msg.sender.getUsername() }}</a>
+        <div>{{ msg.text | striptags('<a>') | raw }}</div>
+    </li>
+{% endfor %}
+    </ul>
+{% endblock %}

+ 2 - 2
templates/home/index.html.twig

@@ -11,8 +11,8 @@
     {% for msg in messages %}
 
                 <li>
-                    <div>{{ msg.sender.getUsername() }}</div>
-                    <div>{{ msg.text }}</div>
+                    <a href={{ path('profile', {'username': msg.sender.getUsername() }) }}>{{ msg.sender.getUsername() }}</a>
+                    <div>{{ msg.text | striptags('<a>') | raw }}</div>
                 </li>
     {% endfor %}
     </ul>