<?php
/**
* Created by PhpStorm.
* User: Asus
* Date: 15/08/2018
* Time: 01:23
*/
namespace App\Controller;
use App\Entity\Wassila\Chat;
use App\Entity\Wassila\Clients;
use App\Entity\Wassila\ClientsComptes;
use App\Entity\Wassila\Intervenants;
use App\Entity\Wassila\IntervenantsComptes;
use App\Serializer\Normalizer\ChatNormalizer;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Routing\ClassResourceInterface;
use FOS\RestBundle\View\View;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\Controller\Annotations\Get;
use FOS\RestBundle\Controller\Annotations as Rest;
/**
* Class ChatController
* @package App\Controller
* @Rest\Route("api/messages")
*/
class ChatController extends FOSRestController implements ClassResourceInterface
{
/**
* Return Messages .
* @Rest\Get("/show", name="messages_intervenant_list")
* @return View
*/
public function messages(Request $request, ChatNormalizer $chatNormalizer){
ini_set('memory_limit', '-1');
$role = $request->get('t');
$u = $request->get('u');
$current = $this->getUser()->getId();
if($role == 1){
$apprenant = $this->getDoctrine()
->getRepository(ClientsComptes::class, 'default')
->findOneBy(array('idUtilisateurs' => $u));
$intervenant = $this->getDoctrine()
->getRepository(IntervenantsComptes::class, 'default')
->findOneBy(array('idUtilisateurs' => $current));
$chats = $this->getDoctrine()
->getRepository(Chat::class, 'default')
->findBy(
array(
'client' => $u,
'intervenant' => $intervenant->getIdIntervenants()->getId()
)
);
/*$chats = $this->getDoctrine()->getRepository(Chat::class)->findBy(
array(
'user' => $u,
'intervenant' => $current
)
);*/
}elseif($role == 0){
$apprenant = $this->getDoctrine()
->getRepository(ClientsComptes::class, 'default')
->findOneBy(array('idUtilisateurs' => $current));
$apprenant = $this->getDoctrine()
->getRepository(Clients::class, 'default')
->findOneBy(array('id' => $apprenant->getIdClients()));
$intervenant = $this->getDoctrine()
->getRepository(Intervenants::class, 'default')
->findOneBy(array('id' => $u));
$chats = $this->getDoctrine()
->getRepository(Chat::class, 'default')
->findBy(
array(
'client' => $apprenant,
'intervenant' => $intervenant
)
);
}
if(!$chats){
$v = View::create([], Response::HTTP_OK,[]);
}else{
$chats = $chatNormalizer->normalize($chats);
$v = View::create($chats, Response::HTTP_OK,[]);
}
return $this->handleView($v);
}
/**
* Return Messages .
* @Rest\Get("/check", name="messages_intervenant_list_check")
* @return View
*/
public function checkEmail(Request $request, ChatNormalizer $chatNormalizer){
ini_set('memory_limit', '-1');
$role = $request->get('typeuser');
$current = $this->getUser()->getId();
if($role == 1){
$intervenant = $this->getDoctrine()
->getRepository(IntervenantsComptes::class, 'default')
->findOneBy(array('idUtilisateurs' => $current));
$chats = $this->getDoctrine()
->getRepository(\App\Entity\Wassila\Chat::class, 'default')
->findBy(
array(
'vu_intervenant' => false,
'intervenant' => $intervenant->getIdIntervenants()->getId()
)
);
if(($chats)){
$chats = $chatNormalizer->normalize($chats);
if(count($chats) == 0){
$v = View::create($chats, Response::HTTP_OK,[]);
return $this->handleView($v);
}else{
$v = View::create($chats, Response::HTTP_OK,[]);
return $this->handleView($v);
}
}else{
$v = View::create([], Response::HTTP_OK,[]);
return $this->handleView($v);
}
}elseif ($role == 0){
$apprenant = $this->getDoctrine()
->getRepository(ClientsComptes::class, 'default')
->findOneBy(array('idUtilisateurs' => $current));
$apprenant = $this->getDoctrine()
->getRepository(Clients::class, 'default')
->findOneBy(array('id' => $apprenant->getIdClients()));
$chats = $this->getDoctrine()
->getRepository(Chat::class, 'default')
->findBy(
array(
'vu_apprenant' => false,
'client' => $apprenant
)
);
if(($chats)){
$chats = $chatNormalizer->normalize($chats);
if(count($chats) == 0){
$v = View::create($chats, Response::HTTP_OK,[]);
return $this->handleView($v);
}else{
$v = View::create($chats, Response::HTTP_OK,[]);
return $this->handleView($v);
}
}else{
$v = View::create([], Response::HTTP_OK,[]);
return $this->handleView($v);
}
}else{
$v = View::create(0, Response::HTTP_OK,[]);
return $this->handleView($v);
}
}
/**
*
* @param Request $request
* @Rest\Put("/new", name="new_chat")
* @return View
*/
public function newChat(Request $request){
ini_set('memory_limit', '-1');
$content = $request->get('content');
$from = $request->get('from_sender');
$intervenant = $request->get('intervenant');
$user = $request->get('user');
//$em = $this->getDoctrine()->getManager();
$em = $this->getDoctrine()->getManager('default');
$chat = new Chat();
if($intervenant == null){
//$user = $em->getRepository('App:User')->findOneBy(array('id' => $user));
$user = $this->getDoctrine()
->getRepository(Clients::class, 'default')
->findOneBy(array('id' => intval($user)));
$intervenant = $this->getUser()->getId();
$intervenant = $this->getDoctrine()
->getRepository(IntervenantsComptes::class, 'default')
->findOneBy(array('idUtilisateurs' => intval($intervenant)));
$intervenant = $intervenant->getIdIntervenants();
/*$intervenant = $this->getDoctrine()
->getRepository(Intervenants::class, 'default')
->findOneBy(array('id' => $intervenant));*/
$chat->setVuApprenant(false);
$chat->setVuIntervenant(true);
}elseif($user == null){
$user = $this->getUser()->getId();
$user = $this->getDoctrine()
->getRepository(ClientsComptes::class, 'default')
->findOneBy(array('idUtilisateurs' => intval($user)));
$user = $user->getIdClients();
/*$user = $this->getDoctrine()
->getRepository(Clients::class, 'default')
->findOneBy(array('id' => $user));*/
$intervenant = $this->getDoctrine()
->getRepository(Intervenants::class, 'default')
->find(intval($intervenant));
$chat->setVuApprenant(true);
$chat->setVuIntervenant(false);
}
//if($datas){
$chat->setContent($content);
$chat->setFromSender($from);
$chat->setDateChat(new \DateTime());
$chat->setIntervenant($intervenant);
$chat->setClient($user);
$em->persist($chat);
$em->flush();
$data = new JsonResponse(
[
'status' => 'ok',
'chat' => $chat
],JsonResponse::HTTP_CREATED
);
$v = new View($data, Response::HTTP_OK);
return $this->handleView($v);
}
/**
*
* @param Request $request
* @Rest\Post("/close", name="setchat_as_readed_chat")
* @return JsonResponse
*/
public function closeChat(Request $request){
ini_set('memory_limit', '-1');
$role = $request->get('t');
$u = $request->get('u');
$current = $this->getUser()->getId();
if($role == 1){
$intervenant = $this->getDoctrine()
->getRepository(IntervenantsComptes::class, 'default')
->findOneBy(array('idUtilisateurs' => $current));
$chats = $this->getDoctrine()
->getRepository(Chat::class, 'default')
->findBy(
array(
'client' => $u,
'intervenant' => $intervenant->getIdIntervenants()->getId(),
'vu_intervenant' => false
)
);
$em = $this->getDoctrine()->getManager('default');
if(!empty($chats)){
foreach ($chats as $chat){
$chat->setVuIntervenant(true);
$em->persist($chat);
$em->flush();
}
}
return new JsonResponse($intervenant);
}elseif($role == 0){
$apprenant = $this->getDoctrine()
->getRepository(ClientsComptes::class, 'default')
->findOneBy(array('idUtilisateurs' => $current));
$apprenant = $this->getDoctrine()
->getRepository(Clients::class, 'default')
->findOneBy(array('id' => $apprenant->getIdClients()));
$intervenant = $this->getDoctrine()
->getRepository(Intervenants::class, 'default')
->findOneBy(array('id' => $u));
$chats = $this->getDoctrine()
->getRepository(Chat::class, 'default')
->findBy(
array(
'client' => $apprenant,
'intervenant' => $intervenant
)
);
$em = $this->getDoctrine()->getManager('default');
if(!empty($chats)){
foreach ($chats as $chat){
$chat->setVuApprenant(true);
$em->persist($chat);
$em->flush();
}
}
return new JsonResponse($apprenant);
}
}
/**
*
* @param Request $request
* @Rest\Put("/{id}/readed", name="setchat_as_readed_chat_on")
* @return JsonResponse
*/
public function setAsReaded($id, Request $request){
$chat = [];
$col = $request->request->get('col');
$role = $request->get('typeuser');
//$role = 1;
$em = $this->getDoctrine()->getManager('default');
/*$chat = $this->getDoctrine()
->getRepository(Chat::class, 'default')
->findOneBy(array(
'id' => intval($col)
));*/
$chat = $this->getDoctrine()->getRepository(Chat::class)->find(intval($id));
$tt = '';
if(!empty($chat)){
if($role == 0 ){
$chat->setVuIntervenant(1);
$tt = 'role 0 ';
}elseif($role == 1){
$chat->setVuApprenant(1);
$tt = 'role 1 ';
}
}else{
return new JsonResponse('not ok hhh');
}
$em->persist($chat);
$em->flush();
return new JsonResponse($tt);
}
}