Loading config/merged/api-mail.config.php 0 → 100644 +87 −0 Original line number Diff line number Diff line <?php use UnicaenMail\Controller\MailApiController; use UnicaenMail\Controller\MailApiControllerFactory; use UnicaenMail\Provider\Privilege\MailPrivileges; use UnicaenMail\Service\Mail\MailService; use UnicaenMail\Service\Mail\MailServiceFactory; use UnicaenMail\View\Helper\MailsViewHelper; use UnicaenMail\View\Helper\MailViewHelper; use UnicaenPrivilege\Guard\PrivilegeController; use Laminas\Router\Http\Literal; use Laminas\Router\Http\Segment; return array( 'bjyauthorize' => [ 'guards' => [ PrivilegeController::class => [ [ 'controller' => MailApiController::class, 'privileges' => [ MailPrivileges::MAIL_AFFICHER, ], ], [ 'controller' => MailApiController::class, 'action' => [ 'reenvoi', ], 'privileges' => [ MailPrivileges::MAIL_REENVOI, ], ], [ 'controller' => MailApiController::class, 'action' => [ 'test', ], 'privileges' => [ MailPrivileges::MAIL_TEST, ], ], [ 'controller' => MailApiController::class, 'action' => [ 'delete', ], 'privileges' => [ MailPrivileges::MAIL_SUPPRIMER, ], ], ], ], ], 'router' => [ 'routes' => [ 'mail-api' => [ 'type' => Segment::class, 'options' => [ 'route' => '/mail-api[/:action[/:id]][/:id]', 'constraints' => [ 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 'id' => '[0-9]+', ], 'defaults' => [ 'controller' => MailApiController::class, ], ], ], 'mail-vue' => [ 'type' => Literal::class, 'options' => [ 'route' => '/mail-vue', 'defaults' => [ 'controller' => MailApiController::class, 'action' => 'index-vue', ], ], ], ], ], 'controllers' => [ 'factories' => [ MailApiController::class => MailApiControllerFactory::class, ], ], ); src/UnicaenMail/Controller/MailApiController.php 0 → 100644 +92 −0 Original line number Diff line number Diff line <?php namespace UnicaenMail\Controller; use Laminas\Http\Response; use Laminas\Mvc\Controller\AbstractRestfulController; use Laminas\Mvc\MvcEvent; use Laminas\View\Model\JsonModel; use UnicaenMail\Service\Mail\MailServiceAwareTrait; use Laminas\View\Model\ViewModel; use UnicaenVue\View\Model\VueModel; class MailApiController extends AbstractRestfulController { use MailServiceAwareTrait; public function indexVueAction() : ViewModel { $vm = new VueModel([ ]); $vm->setTemplate('mail/main'); return $vm; } public function get(mixed $id): JsonModel { $params = $this->params()->fromQuery(); $id = $params['id']; $mail = $this->getMailService()->getMail($id); return new JsonModel($mail->jsonSerialize()); } public function getList(): JsonModel { $filtre['date'] = '1Y'; $mails = $this->getMailService()->getMailsWithFiltre($filtre); $mailsArray = []; foreach ($mails as $mail) { $mailsArray[] = $mail->jsonSerialize(); } return new JsonModel($mailsArray); } public function reenvoiAction() : JsonModel { $request = $this->getRequest(); $data = $request->getPost(); if(!isset($data['id'])) { return new JsonModel(['error' => "Mauvais paramètres"]); } $mail = $this->getMailService()->getMail($data['id']); if($mail) { $nMail = $this->getMailService()->reenvoi($mail); } return new JsonModel($nMail->jsonSerialize()); } public function testAction(): JsonModel { $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); if(!isset($data['mail-to']) || !filter_var($data['mail-to'], FILTER_VALIDATE_EMAIL)) { return new JsonModel(['error' => "L'adresse mail saisie n'est pas valide."]); } $mail = $this->getMailService()->sendMail($data['mail-to'], 'Mail de test', 'Ceci est un mail de test. <br/> <hr/>Merci de ne pas en tenir compte.'); if ($mail){ $mail->setMotsClefs(['TEST']); $this->getMailService()->update($mail); return new JsonModel($mail->jsonSerialize()); } } $this->response->setStatusCode(500); return new JsonModel(['error' => 'Une erreur est survenue']); } public function delete(mixed $id): JsonModel { if($id && is_numeric($id)) { $mail = $this->getMailService()->getMail($id); if($mail) { $this->getMailService()->delete($mail); return new JsonModel(['success' => 'Mail supprimé']); } } $this->response->setStatusCode(400); return new JsonModel(['error' => 'Mail non trouvé']); } } No newline at end of file src/UnicaenMail/Controller/MailApiControllerFactory.php 0 → 100644 +30 −0 Original line number Diff line number Diff line <?php namespace UnicaenMail\Controller; use Interop\Container\ContainerInterface; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; use UnicaenMail\Service\Mail\MailService; class MailApiControllerFactory { /** * @param ContainerInterface $container * @return MailApiController * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function __invoke(ContainerInterface $container): MailApiController { /** * @var MailService $mailService */ $mailService = $container->get(MailService::class); $controller = new MailApiController(); $controller->setMailService($mailService); return $controller; } } No newline at end of file src/UnicaenMail/Entity/Db/Mail.php +17 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ namespace UnicaenMail\Entity\Db; use DateTime; class Mail { class Mail implements \JsonSerializable { const PENDING = 'PENDING'; const SUCCESS = 'SUCCESS'; Loading Loading @@ -131,4 +131,20 @@ class Mail { $this->log = $log; } public function jsonSerialize() { return [ 'id' => $this->id, 'destinataires' => $this->destinataires, 'destinatairesInitials' => $this->destinatairesInitials, 'copies' => $this->copies, 'sujet' => $this->sujet, 'corps' => $this->corps, 'motsClefs' => $this->motsClefs, 'dateEnvoi' => $this->dateEnvoi->getTimestamp(), 'statusEnvoi' => $this->statusEnvoi, 'log' => $this->log, ]; } } No newline at end of file src/UnicaenMail/Provider/Privilege/MailPrivileges.php +1 −0 Original line number Diff line number Diff line Loading @@ -14,4 +14,5 @@ class MailPrivileges extends Privileges const MAIL_TEST = 'mail-mail_test'; const MAIL_REENVOI = 'mail-mail_reenvoi'; const MAIL_SUPPRIMER = 'mail-mail_supprimer'; const MAIL_API = 'mail-mail_api'; } No newline at end of file Loading
config/merged/api-mail.config.php 0 → 100644 +87 −0 Original line number Diff line number Diff line <?php use UnicaenMail\Controller\MailApiController; use UnicaenMail\Controller\MailApiControllerFactory; use UnicaenMail\Provider\Privilege\MailPrivileges; use UnicaenMail\Service\Mail\MailService; use UnicaenMail\Service\Mail\MailServiceFactory; use UnicaenMail\View\Helper\MailsViewHelper; use UnicaenMail\View\Helper\MailViewHelper; use UnicaenPrivilege\Guard\PrivilegeController; use Laminas\Router\Http\Literal; use Laminas\Router\Http\Segment; return array( 'bjyauthorize' => [ 'guards' => [ PrivilegeController::class => [ [ 'controller' => MailApiController::class, 'privileges' => [ MailPrivileges::MAIL_AFFICHER, ], ], [ 'controller' => MailApiController::class, 'action' => [ 'reenvoi', ], 'privileges' => [ MailPrivileges::MAIL_REENVOI, ], ], [ 'controller' => MailApiController::class, 'action' => [ 'test', ], 'privileges' => [ MailPrivileges::MAIL_TEST, ], ], [ 'controller' => MailApiController::class, 'action' => [ 'delete', ], 'privileges' => [ MailPrivileges::MAIL_SUPPRIMER, ], ], ], ], ], 'router' => [ 'routes' => [ 'mail-api' => [ 'type' => Segment::class, 'options' => [ 'route' => '/mail-api[/:action[/:id]][/:id]', 'constraints' => [ 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 'id' => '[0-9]+', ], 'defaults' => [ 'controller' => MailApiController::class, ], ], ], 'mail-vue' => [ 'type' => Literal::class, 'options' => [ 'route' => '/mail-vue', 'defaults' => [ 'controller' => MailApiController::class, 'action' => 'index-vue', ], ], ], ], ], 'controllers' => [ 'factories' => [ MailApiController::class => MailApiControllerFactory::class, ], ], );
src/UnicaenMail/Controller/MailApiController.php 0 → 100644 +92 −0 Original line number Diff line number Diff line <?php namespace UnicaenMail\Controller; use Laminas\Http\Response; use Laminas\Mvc\Controller\AbstractRestfulController; use Laminas\Mvc\MvcEvent; use Laminas\View\Model\JsonModel; use UnicaenMail\Service\Mail\MailServiceAwareTrait; use Laminas\View\Model\ViewModel; use UnicaenVue\View\Model\VueModel; class MailApiController extends AbstractRestfulController { use MailServiceAwareTrait; public function indexVueAction() : ViewModel { $vm = new VueModel([ ]); $vm->setTemplate('mail/main'); return $vm; } public function get(mixed $id): JsonModel { $params = $this->params()->fromQuery(); $id = $params['id']; $mail = $this->getMailService()->getMail($id); return new JsonModel($mail->jsonSerialize()); } public function getList(): JsonModel { $filtre['date'] = '1Y'; $mails = $this->getMailService()->getMailsWithFiltre($filtre); $mailsArray = []; foreach ($mails as $mail) { $mailsArray[] = $mail->jsonSerialize(); } return new JsonModel($mailsArray); } public function reenvoiAction() : JsonModel { $request = $this->getRequest(); $data = $request->getPost(); if(!isset($data['id'])) { return new JsonModel(['error' => "Mauvais paramètres"]); } $mail = $this->getMailService()->getMail($data['id']); if($mail) { $nMail = $this->getMailService()->reenvoi($mail); } return new JsonModel($nMail->jsonSerialize()); } public function testAction(): JsonModel { $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); if(!isset($data['mail-to']) || !filter_var($data['mail-to'], FILTER_VALIDATE_EMAIL)) { return new JsonModel(['error' => "L'adresse mail saisie n'est pas valide."]); } $mail = $this->getMailService()->sendMail($data['mail-to'], 'Mail de test', 'Ceci est un mail de test. <br/> <hr/>Merci de ne pas en tenir compte.'); if ($mail){ $mail->setMotsClefs(['TEST']); $this->getMailService()->update($mail); return new JsonModel($mail->jsonSerialize()); } } $this->response->setStatusCode(500); return new JsonModel(['error' => 'Une erreur est survenue']); } public function delete(mixed $id): JsonModel { if($id && is_numeric($id)) { $mail = $this->getMailService()->getMail($id); if($mail) { $this->getMailService()->delete($mail); return new JsonModel(['success' => 'Mail supprimé']); } } $this->response->setStatusCode(400); return new JsonModel(['error' => 'Mail non trouvé']); } } No newline at end of file
src/UnicaenMail/Controller/MailApiControllerFactory.php 0 → 100644 +30 −0 Original line number Diff line number Diff line <?php namespace UnicaenMail\Controller; use Interop\Container\ContainerInterface; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; use UnicaenMail\Service\Mail\MailService; class MailApiControllerFactory { /** * @param ContainerInterface $container * @return MailApiController * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function __invoke(ContainerInterface $container): MailApiController { /** * @var MailService $mailService */ $mailService = $container->get(MailService::class); $controller = new MailApiController(); $controller->setMailService($mailService); return $controller; } } No newline at end of file
src/UnicaenMail/Entity/Db/Mail.php +17 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ namespace UnicaenMail\Entity\Db; use DateTime; class Mail { class Mail implements \JsonSerializable { const PENDING = 'PENDING'; const SUCCESS = 'SUCCESS'; Loading Loading @@ -131,4 +131,20 @@ class Mail { $this->log = $log; } public function jsonSerialize() { return [ 'id' => $this->id, 'destinataires' => $this->destinataires, 'destinatairesInitials' => $this->destinatairesInitials, 'copies' => $this->copies, 'sujet' => $this->sujet, 'corps' => $this->corps, 'motsClefs' => $this->motsClefs, 'dateEnvoi' => $this->dateEnvoi->getTimestamp(), 'statusEnvoi' => $this->statusEnvoi, 'log' => $this->log, ]; } } No newline at end of file
src/UnicaenMail/Provider/Privilege/MailPrivileges.php +1 −0 Original line number Diff line number Diff line Loading @@ -14,4 +14,5 @@ class MailPrivileges extends Privileges const MAIL_TEST = 'mail-mail_test'; const MAIL_REENVOI = 'mail-mail_reenvoi'; const MAIL_SUPPRIMER = 'mail-mail_supprimer'; const MAIL_API = 'mail-mail_api'; } No newline at end of file