ninegate/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Controller/ChatController.php

202 lines
7.8 KiB
PHP
Raw Normal View History

2019-07-16 12:10:32 +02:00
<?php
namespace Cadoles\WebsocketBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Form\FormError;
use Ramsey\Uuid\Uuid;
2019-07-17 11:50:37 +02:00
use Cadoles\WebsocketBundle\Form\ChatType;
2019-07-16 12:10:32 +02:00
class ChatController extends Controller
{
public function clientAction($id, Request $request)
{
$user=$this->getUser();
if(!$user) {
die();
}
else {
2019-07-17 11:50:37 +02:00
$framed=$request->query->get('framed');
if($framed) {
$border=$request->query->get('border');
if($border) {
$colorbodyback=$request->query->get('colorbodyfont');
$colorbodyfont=$request->query->get('colorbodyback');
}
else {
$colorbodyback=$request->query->get('colorbodyback');
$colorbodyfont=$request->query->get('colorbodyfont');
}
2020-06-23 12:21:45 +02:00
$colorbody=$request->query->get('colorbody');
$colormain=$request->query->get('colormain');
2019-07-17 11:50:37 +02:00
}
else {
$border=false;
$colorbodyback=$this->get('session')->get('color')["main"];
$colorbodyfont=$this->get('session')->get('color')["fontcolorhover"];
2020-06-23 12:21:45 +02:00
$colorbody=$this->get('session')->get('color')["colorbody"];
$colormain=$this->get('session')->get('color')["main"];
2019-07-17 11:50:37 +02:00
}
$em = $this->getDoctrine()->getManager();
// On récupère les 100 derniers message du groupe
$group=$em->getRepository("CadolesCoreBundle:Group")->find($id);
if(!$group) die();
2019-07-16 12:10:32 +02:00
// Génération d'une clé temporaire d'accès au chat
2019-07-17 11:50:37 +02:00
$usergroup=$em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["group"=>$group,"user"=>$user]);
$key=null;
2019-09-30 16:30:52 +02:00
if($usergroup) {
$key=$usergroup->getKeyvalue();
if(is_null($key)) {
$key = Uuid::uuid4();
$usergroup->setKeyvalue($key);
$em->persist($usergroup);
$em->flush();
}
2019-09-30 16:30:52 +02:00
}
2019-07-16 12:10:32 +02:00
// Récupération des message parent du groupe
2021-03-25 15:56:36 +01:00
$messages=$em->getRepository("CadolesWebsocketBundle:Message")->findBy(["group"=>$group,"parent"=>null],["submitdate"=>"DESC"]);
foreach($messages as $message) {
$haveread = ($message->getReaders()->contains($user));
$havesee = ($message->getSees()->contains($user));
$message->setHaveread($haveread);
$message->setHavesee($havesee);
if(!$haveread) {
$message->addReader($this->getUser());
$em->persist($message);
$em->flush();
}
foreach($message->getChilds() as $child) {
$haveread = ($child->getReaders()->contains($user));
$havesee = ($child->getSees()->contains($user));
$child->setHaveread($haveread);
$child->setHavesee($havesee);
if(!$haveread) {
$child->addReader($this->getUser());
$em->persist($child);
$em->flush();
}
}
}
2019-07-17 11:50:37 +02:00
// Création du formulaire
$form = $this->createForm(ChatType::class,null,[]);
2019-07-16 12:10:32 +02:00
// Affichage du chat
return $this->render('CadolesWebsocketBundle:Chat:client.html.twig',[
'useheader' => false,
'usemenu' => false,
'usesidebar' => false,
'userkey' => $key,
'groupid' => $id,
2019-07-24 13:41:35 +02:00
'group' => $group,
2019-07-17 11:50:37 +02:00
'messages' => $messages,
'framed' => $framed,
'border' => $border,
'colorbodyback' => $colorbodyback,
'colorbodyfont' => $colorbodyfont,
2020-06-23 12:21:45 +02:00
'colorbody' => $colorbody,
'colormain' => $colormain,
2019-09-30 16:30:52 +02:00
'ingroup' => ($usergroup),
2021-03-25 15:56:36 +01:00
'canmanage' => ($usergroup&&($usergroup->getRolegroup()>=90||$user->getRole()=="ROLE_ADMIN"||$user->getRole()=="ROLE_MODO")),
2019-07-17 11:50:37 +02:00
'form' => $form->createView()
2019-07-16 12:10:32 +02:00
]);
}
}
2019-09-23 16:17:15 +02:00
public function seeAction(Request $request)
{
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Interdit'), 400);
}
$em = $this->getDoctrine()->getManager();
$output=array();
$id=$request->request->get('id');
$user=$this->getUser();
if($user) {
$message=$em->getRepository("CadolesWebsocketBundle:Message")->find($id);
$message->addSee($user);
// Sauvegarde
$em->persist($message);
$em->flush();
}
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
public function listAction(Request $request) {
// S'assurer que c'est un appel ajax
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'Interdit'), 400);
}
$em = $this->getDoctrine()->getManager();
$id=$request->request->get('id');
$output=array();
// On récupère le groupe
$group=$em->getRepository("CadolesCoreBundle:Group")->find($id);
if(!$group) die();
// On récupere le user
$user=$this->getUser();
if(!$user) die();
// On récupère le lien usergroup
$usergroup=$em->getRepository("CadolesCoreBundle:UserGroup")->findOneBy(["group"=>$group,"user"=>$user]);
if(!$usergroup) die();
// On récupere les messages parent
$messages=$em->getRepository("CadolesWebsocketBundle:Message")->findBy(["group"=>$group,"parent"=>null],["submitdate"=>"DESC"],10);
foreach($messages as $message) {
$tmp=[];
$tmp["id"]=$message->getId();
$tmp["message"]=$message->getTopic();
$tmp["submitdate"]=$message->getSubmitdate();
$tmp["userid"]=$message->getUser()->getId();
$tmp["userlastname"]=$message->getUser()->getLastname()." ".$message->getUser()->getFirstname();
$tmp["useravatar"]=$message->getUser()->getAvatar();
$tmp["childs"]=[];
foreach($message->getChilds() as $child) {
$tmpchild=[];
$tmpchild["id"]=$child->getId();
$tmpchild["message"]=$child->getTopic();
$tmpchild["submitdate"]=$child->getSubmitdate();
$tmpchild["userid"]=$child->getUser()->getId();
$tmpchild["userlastname"]=$child->getUser()->getLastname()." ".$child->getUser()->getFirstname();
$tmpchild["useravatar"]=$child->getUser()->getAvatar();
array_push($tmp["childs"],$tmpchild);
}
array_push($output,$tmp);
}
$response = new Response(json_encode($output));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
2019-07-16 12:10:32 +02:00
}