auto
This commit is contained in:
parent
1c61cec992
commit
a98aa394ac
|
@ -2,21 +2,18 @@
|
||||||
|
|
||||||
namespace Bluesquare\NotificationsBundle\Controller;
|
namespace Bluesquare\NotificationsBundle\Controller;
|
||||||
|
|
||||||
use Bluesquare\NotificationsBundle\Service\NotificationsService;
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
|
|
||||||
class MainController extends AbstractController
|
class MainController extends AbstractController
|
||||||
{
|
{
|
||||||
/**
|
public function myUser()
|
||||||
* @param Request $request
|
|
||||||
*/
|
|
||||||
public function index(Request $request)
|
|
||||||
{
|
{
|
||||||
// ON PEUT PAS INJECTER UN SERVICE DU BUNDLE EN QUESTION DANS LES ARGS DONC ON LE récupère ainsi :
|
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
|
||||||
/** @var NotificationsService $notifssrv */
|
|
||||||
$notifssrv = $this->get('bluesquare.notifications_bundle.notifssrv');
|
$notifssrv = $this->get('bluesquare.notifications_bundle.notifssrv');
|
||||||
$r = $notifssrv->notifyUsers();
|
$user = $this->getUser();
|
||||||
die($r);
|
|
||||||
|
$notifs = $notifssrv->getForUser($user, true);
|
||||||
|
return $this->json($notifs);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,3 +1,3 @@
|
||||||
bluesquare_notifications_bundle_notifications:
|
bluesquare_notifications_bundle_notifications:
|
||||||
path: /test-notifs
|
path: /my-user
|
||||||
controller: Bluesquare\NotificationsBundle\Controller\MainController::index
|
controller: Bluesquare\NotificationsBundle\Controller\MainController::myUser
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace Bluesquare\NotificationsBundle\Service;
|
namespace Bluesquare\NotificationsBundle\Service;
|
||||||
|
|
||||||
|
use Bluesquare\NotificationsBundle\Entity\Notification;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
|
||||||
class NotificationsService
|
class NotificationsService
|
||||||
|
@ -13,8 +14,86 @@ class NotificationsService
|
||||||
$this->em = $em;
|
$this->em = $em;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function notifyUsers()
|
/**
|
||||||
|
* Assigne une notification $notification à tous les users de $users
|
||||||
|
* La notification sera dupliquée pour chaque user
|
||||||
|
*
|
||||||
|
* @param iterable $users
|
||||||
|
* @param Notification $notification
|
||||||
|
*/
|
||||||
|
public function notifyUsers(iterable $users, Notification $notification)
|
||||||
{
|
{
|
||||||
return 'bar';
|
foreach ($users as $user)
|
||||||
|
{
|
||||||
|
$notif = $this->duplicateNotification($notification);
|
||||||
|
$notif->setUser($user);
|
||||||
|
$this->em->persist($notif);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->em->flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Duplicates a notification object. Doesn't copy ID, deleted_at, and seen_at values.
|
||||||
|
*
|
||||||
|
* @param Notification $notification
|
||||||
|
* @return Notification
|
||||||
|
*/
|
||||||
|
public function duplicateNotification(Notification $notification)
|
||||||
|
{
|
||||||
|
$notif = new Notification();
|
||||||
|
$notif->setTitle($notification->getTitle());
|
||||||
|
$notif->setUser($notification->getUser());
|
||||||
|
$notif->setDescription($notification->getDescription());
|
||||||
|
$notif->setData($notification->getData());
|
||||||
|
|
||||||
|
return $notif;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Little shortcut to get all notification for a user
|
||||||
|
* This way you don't need to have a mnager or import notification.
|
||||||
|
*
|
||||||
|
* If you want the return value to be associative arrays, set assoc to true
|
||||||
|
*
|
||||||
|
* @param $user
|
||||||
|
* @param bool $assoc
|
||||||
|
* @return object[]
|
||||||
|
*/
|
||||||
|
public function getForUser($user, $assoc = false)
|
||||||
|
{
|
||||||
|
$ret = $this->em->getRepository(Notification::class)->findBy(['user' => $user]);
|
||||||
|
|
||||||
|
if ($assoc)
|
||||||
|
{
|
||||||
|
$arr = [];
|
||||||
|
foreach ($ret as $n)
|
||||||
|
{
|
||||||
|
$arr[] = $this->toArray($n);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret = $arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transforms entity to assoc array
|
||||||
|
*
|
||||||
|
* @param Notification $notification
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray(Notification $notification)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'title' => $notification->getTitle(),
|
||||||
|
'description' => $notification->getDescription(),
|
||||||
|
'data' => $notification->getData(),
|
||||||
|
'user' => $notification->getUser()->getId(),
|
||||||
|
'seen_at' => $notification->getSeenAt(),
|
||||||
|
'deleted_at' => $notification->getDeletedAt(),
|
||||||
|
'id' => $notification->getId()
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
41
README.md
41
README.md
|
@ -3,6 +3,11 @@ Notifications bundle
|
||||||
|
|
||||||
Ajout de notifications pour les users (backend seulement)
|
Ajout de notifications pour les users (backend seulement)
|
||||||
|
|
||||||
|
## Restrictions
|
||||||
|
|
||||||
|
Votre classe User doit absoluement être dans le namespace \App\Entity et s'appeler User, soit etre
|
||||||
|
\App\Entity\User.
|
||||||
|
|
||||||
## Routes:
|
## Routes:
|
||||||
|
|
||||||
Pour installer les routes, ajouter ceci:
|
Pour installer les routes, ajouter ceci:
|
||||||
|
@ -15,11 +20,37 @@ notifications:
|
||||||
|
|
||||||
à votre config/routes.yaml
|
à votre config/routes.yaml
|
||||||
|
|
||||||
* **GET** /notifications/by-user/{id}
|
Pour créer des notifs, il faut utiliser le service. Effectivement on ne veut pas permettre
|
||||||
|
aux clients de spammer les routes de notifications ou lire les notifs de toute le monde.
|
||||||
|
Vous pouvez ajouter des routes dans votre application pour plus de flexibilité.
|
||||||
|
|
||||||
A faire
|
|
||||||
|
|
||||||
## Restrictions
|
* **GET** /notifications/my-user
|
||||||
|
|
||||||
Votre classe User doit absoluement être dans le namespace \App\Entity et s'appeler User, soit etre
|
Récupère toutes les notifications de l'utilisateur courant.
|
||||||
\App\Entity\User.
|
|
||||||
|
## Service
|
||||||
|
|
||||||
|
La classe est `NotificationsService`. Toutes les méthodes sont commentées, veuillez vous
|
||||||
|
référer aux comentaires sur les méthodes plutot que ce README qui ne fait office que de
|
||||||
|
listing de features.
|
||||||
|
|
||||||
|
Méthdodes:
|
||||||
|
|
||||||
|
* notifyUsers:
|
||||||
|
* Ajoute des notifications aux users
|
||||||
|
|
||||||
|
* getForUser
|
||||||
|
* Récupère toutes les notifications pour un user, sous format d'entité ou array
|
||||||
|
TODO: ajouter des flags pour filtrer
|
||||||
|
|
||||||
|
* toArray
|
||||||
|
* Convertit un objet Notification en Array
|
||||||
|
|
||||||
|
* duplicateNotification
|
||||||
|
* Clone une notif (pour notifier un batch d'user)
|
||||||
|
Normalement il n'y a aucun besoin d'utiliser cette méthode en dehors du bundle.
|
||||||
|
|
||||||
|
## Entités
|
||||||
|
|
||||||
|
* Notification: représente une notification pour un seul utilisateur
|
Loading…
Reference in New Issue