src/Controller/Action/DiscussionListController.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Action;
  3. use App\Entity\Discussion;
  4. use App\Repository\DiscussionRepository;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. class DiscussionListController extends AbstractController
  10. {
  11.     public function __construct(
  12.         private readonly DiscussionRepository $discussionRepository
  13.     )
  14.     {
  15.     }
  16.     public function __invoke(Request $request): array
  17.     {
  18.         $limit $request->get('limit');
  19.         $page $request->get('page');
  20.         $siteId $request->get('site');
  21.         $type $request->get('type');
  22.         if (!$this->getUser()->isIsHotline()) {
  23.             $discussions $this->discussionRepository->findBySites($siteId$limit$page$type);
  24.             $total  $this->discussionRepository->findBySites($siteId$limit$page$type);
  25.         } else {
  26.             $discussions $this->discussionRepository->findBy([], ['updatedAt' => 'DESC'], $limit$page*$limit);
  27.             $total $this->discussionRepository->findBy([], ['updatedAt' => 'DESC']);
  28.         }
  29.         $data = [];
  30.         $nb_hotline_not_readed 0;
  31.         foreach ($discussions as $discussion) {
  32.             $messages $discussion->getMessages()->toArray();
  33.             // Sort the messages by their createdAt field in descending order
  34.             usort($messages, function ($a$b) {
  35.                 return $b->getCreatedAt() <=> $a->getCreatedAt();
  36.             });
  37.             $latestMessage $messages $messages[0] : null;
  38.             $model $discussion->getSite();
  39.             $siteNamesArray = [];
  40.             $status true;
  41.             while ($status) {
  42.                 if ($model) {
  43.                     $siteNamesArray[] = $model->getName();
  44.                     if (!$model->getParent()) {
  45.                         $siteNamesArray[] = $model?->getCustomer()?->getName();
  46.                     }
  47.                     $model $model->getParent();
  48.                 } else {
  49.                     $status false;
  50.                 };
  51.             }
  52.             if (!$latestMessage->isHotlineReaded())
  53.                 $nb_hotline_not_readed ++;
  54.             $data['discussions'][] = [
  55.                 'id' => $discussion->getId(),
  56.                 'topic' => $discussion->getTopic(),
  57.                 'documentId' => $discussion->getDocument()?->getId(),
  58.                 'createdAt' => $discussion->getCreatedAt()->format('d/m/Y H:i:s'),
  59.                 'nbMessages' => count($discussion->getMessages()),
  60.                 'lastUpdate' => $latestMessage $latestMessage->getCreatedAt()->format('d/m/Y H:i:s') : '',
  61.                 'lastMessage' => $latestMessage $latestMessage->getMessageText() : '',
  62.                 'is_hotline_readed' => $latestMessage->isHotlineReaded(),
  63.                 'last_message_id' => $latestMessage $latestMessage->getId() : '',
  64.                 'total_messages' => count($messages),
  65.                 'id_site' => $discussion->getSite()->getId(),
  66.                 'name_site' => $discussion->getSite()->getPath()['full_path'] ?? ''
  67.             ];
  68.         }
  69.         $data['total_discussions'] = count($total);
  70.         $data['nb_hotline_not_readed'] = $nb_hotline_not_readed;
  71.         return $data;
  72.     }
  73. }