<?php
namespace App\Controller\Client\v2;
use App\Entity\Client;
use App\Entity\Company;
use App\Entity\Segmentation;
use App\Entity\User;
use App\Form\Client\SegmentationType;
use App\Repository\ArticleRepository;
use App\Repository\ChannelRepository;
use App\Repository\ProgramRepository;
use App\Repository\RegistrationRepository;
use App\Repository\SlideRepository;
use App\Repository\TeamplayRepository;
use App\Repository\TeamRepository;
use App\Repository\VideoRepository;
use App\Service\LogService;
use App\Service\SegmentationService;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @isGranted("ROLE_CLIENT")
*/
class DashController extends AbstractController
{
private $em;
private $teamRepository;
private $teamplayRepository;
private $registrationRepository;
private $slideRepository;
private $programRepository;
private $channelRepository;
private $videoRepository;
private $articleRepository;
private $segmentationService;
/**
* @var LogService
*/
private $logService;
public function __construct(
EntityManagerInterface $em,
TeamRepository $teamRepository,
TeamplayRepository $teamplayRepository,
RegistrationRepository $registrationRepository,
SlideRepository $slideRepository,
ProgramRepository $programRepository,
ChannelRepository $channelRepository,
VideoRepository $videoRepository,
ArticleRepository $articleRepository,
SegmentationService $segmentationService,
LogService $logService
)
{
$this->em = $em;
$this->teamRepository = $teamRepository;
$this->teamplayRepository = $teamplayRepository;
$this->registrationRepository = $registrationRepository;
$this->slideRepository = $slideRepository;
$this->programRepository = $programRepository;
$this->channelRepository = $channelRepository;
$this->videoRepository = $videoRepository;
$this->articleRepository = $articleRepository;
$this->segmentationService = $segmentationService;
$this->logService = $logService;
}
/**
* @Route("/", name="dashboard")
*/
public function index(Request $request): Response
{
$client = $allowedSegmentations = null;
$formView = null;
$showSegmentationForm = false;
/**
* @var Client
*/
$client = $this->em->getRepository(Client::class)->find($this->getUser()->getClient()->getId());
// Ajout log d'utilisation de la plateforme
$this->logService->postLogForUser($this->getUser()->getId(), $client->getCompany()->getId(), "NULL");
if($client instanceof Client) {
// Redirection vers "Informations" si pas de "Nom" et "Prénom ou si pas de cgu"
if(empty($client->getFirstName()) || empty($client->getLastName())) {
return $this->redirectToRoute('client_myaccount', ["error" => "no_name"]);
}
if(empty($client->getIsCgu())) {
return $this->redirectToRoute('client_myaccount', ["error" => "no_cgu"]);
}
if($client->getSegmentation() instanceof Segmentation) {
if($client->getSegmentation()->getParent() instanceof Segmentation && !$client->getSegmentation()->isAlone()) {
$allowedSegmentations = $client->getSegmentation()->getParent()->getChildren()->toArray();
} else {
$allowedSegmentations = [$client->getSegmentation()];
}
}else{
if ($client->getCompany()->getForceSegmentation() == true) {
$showSegmentationForm = true;
/**
* @var User
*/
$user = $this->em->getRepository(User::class)->find($this->getUser());
$company = $this->em->getRepository(Company::class)->find($client->getCompany()->getId());
$segmentationChoices = [];
if (!empty($company->getSegmentations()->toArray())) {
foreach ($company->getSegmentations()->toArray() as $key => $segmentation) {
if (empty($segmentation->getChildren()->toArray())) {
$segmentationKey = ($segmentation->getParent() != null) ? ($segmentation->getParent()->getName()) : "Autre" ;
$segmentationChoices[$segmentationKey][$this->segmentationService->getSegmentationName($segmentation->getName())] = $segmentation;
}
}
$form = $this->createForm(SegmentationType::class, $client, ['segmentationChoices' => $segmentationChoices]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setSegmentation($client->getSegmentation());
$this->em->persist($client);
$this->em->persist($user);
$this->em->flush();
return $this->redirectToRoute('client_dashboard');
}
}
$formView = $form->createView();
}
}
}
$teamplay = $this->teamplayRepository->findTeamplayInProgressForDesktop($client->getCompany());
$team = null;
if ($teamplay) {
$team = $this->teamRepository->getTeamByUserAndTeamplay($this->getUser(), $teamplay);
}
$registrations = $this->registrationRepository->getRegistrationsForClient($client, 'start', true);
$hpSlides = $this->slideRepository->getHpSlide($client->getCompany(), 'homepage_slide');
$programs = $this->programRepository->getRandomProgramsDql(3);
$expressPrograms = $this->channelRepository->findRandomExpressProgramsBy([], 3 );
$dailyVideo = $this->videoRepository->getDailyVideo();
$randomVideos = $this->videoRepository->customGetVideosRandom(['is_recipe' => 0, 'forthcoming' => 0], 10);
$dailySlideArray = array_merge($programs, $expressPrograms);
$articles = $this->articleRepository->findBy([
'homepage' => 1,
'active' => 1
]);
return $this->render('client/v2/dashboard.html.twig', [
'registrations' => $registrations,
'showSegmentationForm' => $showSegmentationForm,
'hpSlides' => $hpSlides,
'dailySlideContent' => $dailySlideArray,
"dailyVideo" => $dailyVideo,
'randomVideos' => $randomVideos,
'articles' => $articles,
'teamplay' => $teamplay,
'team' => $team,
'allowedSegmentations' => $allowedSegmentations,
'formView' => $formView,
]);
}
}