<?php
namespace Bundles\Messenger\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Controller\ParentController;
use Doctrine\DBAL\Connection;
use Bundles\Messenger\Entity\Notification;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\QueryBuilder;
use App\Entity\Customer;
use Doctrine\ORM\Query\Expr\Join;
use App\Entity\User;
use Bundles\Messenger\Entity\Article;
class NotificationController extends ParentController {
protected $options = [];
/** @var Connection */
protected $connection;
/**
* @param $entityClass
* @param $sortDirection
* @param $sortField
* @param $dqlFilter
* @return QueryBuilder
*/
protected function createListQueryBuilder($entityClass, $sortDirection, $sortField = null, $dqlFilter = null) {
$userId = $this->getUser()->getId();
$type = $this->request->get('type') ?? '';
$show = $this->request->get('show') ?? '';
/* @var EntityManager */
$em = $this->getDoctrine()->getManagerForClass($this->entity['class']);
/* @var QueryBuilder */
$queryBuilder = $em->createQueryBuilder()
->select('entity')
->from($this->entity['class'], 'entity')
->orderBy('entity.id', 'DESC');
if (!$this->getUser()->isAdmin() || $show != 'all') {
$queryBuilder->andWhere('entity.User = '.$userId);
}
if (!empty($type)) {
$queryBuilder->andWhere('entity.type = \''.$type.'\'');
}
return $queryBuilder;
}
public function newMessages($type) {
$this->em = $this->getDoctrine()->getManager();
$user = $this->getUser();
if ($type == 'articles') {
$messages = $this->em->getRepository(Article::class)->findByValidDates();
} else {
$messages = $this->em->getRepository(Notification::class)->findWithCashflowBy($user, $type);
}
$data = [
'messages' => $messages,
'count' => count($messages),
];
$content = $this->render('@messenger/new_'.$type.'.html.twig', $data)->getContent();
return new JsonResponse($content, 200);
}
public function setAsSeen($id) {
$this->em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$status = 'false';
$message = $this->em->getRepository(Notification::class)->findOneBy(['User' => $user, 'id' => $id]);
if (!empty($message)) {
$message->setSeen(true);
$this->em->persist($message);
$this->em->flush();
$status = 'ok';
}
return new JsonResponse($status, 200);
}
}