<?php
namespace App\Controller\Action;
use App\Entity\Discussion;
use App\Repository\DiscussionRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DiscussionListController extends AbstractController
{
public function __construct(
private readonly DiscussionRepository $discussionRepository
)
{
}
public function __invoke(Request $request): array
{
$limit = $request->get('limit');
$page = $request->get('page');
$siteId = $request->get('site');
$type = $request->get('type');
if (!$this->getUser()->isIsHotline()) {
$discussions = $this->discussionRepository->findBySites($siteId, $limit, $page, $type);
$total = $this->discussionRepository->findBySites($siteId, $limit, $page, $type);
} else {
$discussions = $this->discussionRepository->findBy([], ['updatedAt' => 'DESC'], $limit, $page*$limit);
$total = $this->discussionRepository->findBy([], ['updatedAt' => 'DESC']);
}
$data = [];
foreach ($discussions as $discussion) {
$messages = $discussion->getMessages()->toArray();
// Sort the messages by their createdAt field in descending order
usort($messages, function ($a, $b) {
return $b->getCreatedAt() <=> $a->getCreatedAt();
});
$latestMessage = $messages ? $messages[0] : null;
$model = $discussion->getSite();
$siteNamesArray = [];
$status = true;
while ($status) {
if ($model) {
$siteNamesArray[] = $model->getName();
if (!$model->getParent()) {
$siteNamesArray[] = $model?->getCustomer()?->getName();
}
$model = $model->getParent();
} else {
$status = false;
};
}
$data['discussions'][] = [
'id' => $discussion->getId(),
'topic' => $discussion->getTopic(),
'documentId' => $discussion->getDocument()?->getId(),
'createdAt' => $discussion->getCreatedAt()->format('d/m/Y H:i:s'),
'nbMessages' => count($discussion->getMessages()),
'lastUpdate' => $latestMessage ? $latestMessage->getCreatedAt()->format('d/m/Y H:i:s') : '',
'lastMessage' => $latestMessage ? $latestMessage->getMessageText() : '',
'is_hotline_readed' => $latestMessage->isHotlineReaded(),
'last_message_id' => $latestMessage ? $latestMessage->getId() : '',
'total_messages' => count($messages),
'id_site' => $discussion->getSite()->getId(),
'name_site' => $discussion->getSite()->getPath()['full_path'] ?? ''
];
}
$data['total_discussions'] = count($total);
return $data;
}
}