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.         foreach ($discussions as $discussion) {
  31.             $messages $discussion->getMessages()->toArray();
  32.             // Sort the messages by their createdAt field in descending order
  33.             usort($messages, function ($a$b) {
  34.                 return $b->getCreatedAt() <=> $a->getCreatedAt();
  35.             });
  36.             $latestMessage $messages $messages[0] : null;
  37.             $model $discussion->getSite();
  38.             $siteNamesArray = [];
  39.             $status true;
  40.             while ($status) {
  41.                 if ($model) {
  42.                     $siteNamesArray[] = $model->getName();
  43.                     if (!$model->getParent()) {
  44.                         $siteNamesArray[] = $model?->getCustomer()?->getName();
  45.                     }
  46.                     $model $model->getParent();
  47.                 } else {
  48.                     $status false;
  49.                 };
  50.             }
  51.             $data['discussions'][] = [
  52.                 'id' => $discussion->getId(),
  53.                 'topic' => $discussion->getTopic(),
  54.                 'documentId' => $discussion->getDocument()?->getId(),
  55.                 'createdAt' => $discussion->getCreatedAt()->format('d/m/Y H:i:s'),
  56.                 'nbMessages' => count($discussion->getMessages()),
  57.                 'lastUpdate' => $latestMessage $latestMessage->getCreatedAt()->format('d/m/Y H:i:s') : '',
  58.                 'lastMessage' => $latestMessage $latestMessage->getMessageText() : '',
  59.                 'is_hotline_readed' => $latestMessage->isHotlineReaded(),
  60.                 'last_message_id' => $latestMessage $latestMessage->getId() : '',
  61.                 'total_messages' => count($messages),
  62.                 'id_site' => $discussion->getSite()->getId(),
  63.                 'name_site' => $discussion->getSite()->getPath()['full_path'] ?? ''
  64.             ];
  65.         }
  66.         $data['total_discussions'] = count($total);
  67.         return $data;
  68.     }
  69. }