Feature: add cc users in workflow: move isNotificationCc to WorkflowNotificationHandler

This commit is contained in:
nobohan 2023-03-29 11:18:23 +02:00
parent e45952f28c
commit a8c2750ac8
6 changed files with 28 additions and 28 deletions

View File

@ -14,7 +14,6 @@ namespace Chill\MainBundle\Controller;
use Chill\MainBundle\Entity\Notification; use Chill\MainBundle\Entity\Notification;
use Chill\MainBundle\Entity\NotificationComment; use Chill\MainBundle\Entity\NotificationComment;
use Chill\MainBundle\Entity\User; use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
use Chill\MainBundle\Form\NotificationCommentType; use Chill\MainBundle\Form\NotificationCommentType;
use Chill\MainBundle\Form\NotificationType; use Chill\MainBundle\Form\NotificationType;
use Chill\MainBundle\Notification\Exception\NotificationHandlerNotFound; use Chill\MainBundle\Notification\Exception\NotificationHandlerNotFound;
@ -22,7 +21,6 @@ use Chill\MainBundle\Notification\NotificationHandlerManager;
use Chill\MainBundle\Pagination\PaginatorFactory; use Chill\MainBundle\Pagination\PaginatorFactory;
use Chill\MainBundle\Repository\NotificationRepository; use Chill\MainBundle\Repository\NotificationRepository;
use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Repository\UserRepository;
use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository;
use Chill\MainBundle\Security\Authorization\NotificationVoter; use Chill\MainBundle\Security\Authorization\NotificationVoter;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -70,8 +68,7 @@ class NotificationController extends AbstractController
NotificationHandlerManager $notificationHandlerManager, NotificationHandlerManager $notificationHandlerManager,
PaginatorFactory $paginatorFactory, PaginatorFactory $paginatorFactory,
TranslatorInterface $translator, TranslatorInterface $translator,
UserRepository $userRepository, UserRepository $userRepository
EntityWorkflowRepository $entityWorkflowRepository
) { ) {
$this->em = $em; $this->em = $em;
$this->logger = $logger; $this->logger = $logger;
@ -82,7 +79,6 @@ class NotificationController extends AbstractController
$this->paginatorFactory = $paginatorFactory; $this->paginatorFactory = $paginatorFactory;
$this->translator = $translator; $this->translator = $translator;
$this->userRepository = $userRepository; $this->userRepository = $userRepository;
$this->entityWorkflowRepository = $entityWorkflowRepository;
} }
/** /**
@ -349,7 +345,6 @@ class NotificationController extends AbstractController
'appendCommentForm' => isset($appendCommentForm) ? $appendCommentForm->createView() : null, 'appendCommentForm' => isset($appendCommentForm) ? $appendCommentForm->createView() : null,
'editedCommentForm' => isset($editedCommentForm) ? $editedCommentForm->createView() : null, 'editedCommentForm' => isset($editedCommentForm) ? $editedCommentForm->createView() : null,
'editedCommentId' => $commentId ?? null, 'editedCommentId' => $commentId ?? null,
'notificationCc' => $this->isNotificationCc($notification),
]); ]);
// we mark the notification as read after having computed the response // we mark the notification as read after having computed the response
@ -369,21 +364,6 @@ class NotificationController extends AbstractController
]; ];
} }
private function isNotificationCc(Notification $notification): bool
{
$notificationCc = false;
if ($notification->getRelatedEntityClass() === EntityWorkflow::class) {
$relatedEntity = $this->entityWorkflowRepository->findOneBy(['id' => $notification->getRelatedEntityId()]);
if ($relatedEntity->getCurrentStepCreatedBy() !== $this->security->getUser()) {
$notificationCc = true;
}
}
return $notificationCc;
}
private function itemsForTemplate(array $notifications): array private function itemsForTemplate(array $notifications): array
{ {
$templateData = []; $templateData = [];
@ -393,7 +373,6 @@ class NotificationController extends AbstractController
'template' => $this->notificationHandlerManager->getTemplate($notification), 'template' => $this->notificationHandlerManager->getTemplate($notification),
'template_data' => $this->notificationHandlerManager->getTemplateData($notification), 'template_data' => $this->notificationHandlerManager->getTemplateData($notification),
'notification' => $notification, 'notification' => $notification,
'isNotificationCc' => $this->isNotificationCc($notification),
]; ];
} }

View File

@ -76,7 +76,6 @@ class NotificationTwigExtensionRuntime implements RuntimeExtensionInterface
return $environment->render('@ChillMain/Notification/extension_list_notifications_for.html.twig', [ return $environment->render('@ChillMain/Notification/extension_list_notifications_for.html.twig', [
'notifications' => $notifications, 'notifications' => $notifications,
'appendCommentForms' => $appendCommentForms, 'appendCommentForms' => $appendCommentForms,
'notificationCc' => false,
]); ]);
} }
} }

View File

@ -6,7 +6,6 @@
'full_content': true, 'full_content': true,
'fold_item': true, 'fold_item': true,
'action_button': true, 'action_button': true,
'notification_cc': notificationCc,
} %}{# } %}{#
#} #}
{% endfor %} {% endfor %}

View File

@ -51,7 +51,7 @@
{% set notification = data.notification %} {% set notification = data.notification %}
{% include 'ChillMainBundle:Notification:_list_item.html.twig' with { {% include 'ChillMainBundle:Notification:_list_item.html.twig' with {
'fold_item': true, 'fold_item': true,
'notification_cc': data.isNotificationCc 'notification_cc': data.template_data.notificationCc is defined ? data.template_data.notificationCc : false
} %} } %}
{% endfor %} {% endfor %}
</div> </div>

View File

@ -28,7 +28,7 @@
'action_button': false, 'action_button': false,
'full_content': true, 'full_content': true,
'fold_item': false, 'fold_item': false,
'notification_cc': notificationCc 'notification_cc': handler.getTemplateData(notification).notificationCc is defined ? handler.getTemplateData(notification).notificationCc : false
} %} } %}
</div> </div>

View File

@ -16,6 +16,7 @@ use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
use Chill\MainBundle\Notification\NotificationHandlerInterface; use Chill\MainBundle\Notification\NotificationHandlerInterface;
use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository; use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository;
use Chill\MainBundle\Workflow\EntityWorkflowManager; use Chill\MainBundle\Workflow\EntityWorkflowManager;
use Symfony\Component\Security\Core\Security;
class WorkflowNotificationHandler implements NotificationHandlerInterface class WorkflowNotificationHandler implements NotificationHandlerInterface
{ {
@ -23,10 +24,17 @@ class WorkflowNotificationHandler implements NotificationHandlerInterface
private EntityWorkflowRepository $entityWorkflowRepository; private EntityWorkflowRepository $entityWorkflowRepository;
public function __construct(EntityWorkflowRepository $entityWorkflowRepository, EntityWorkflowManager $entityWorkflowManager) private Security $security;
public function __construct(
EntityWorkflowRepository $entityWorkflowRepository,
EntityWorkflowManager $entityWorkflowManager,
Security $security
)
{ {
$this->entityWorkflowRepository = $entityWorkflowRepository; $this->entityWorkflowRepository = $entityWorkflowRepository;
$this->entityWorkflowManager = $entityWorkflowManager; $this->entityWorkflowManager = $entityWorkflowManager;
$this->security = $security;
} }
public function getTemplate(Notification $notification, array $options = []): string public function getTemplate(Notification $notification, array $options = []): string
@ -37,13 +45,28 @@ class WorkflowNotificationHandler implements NotificationHandlerInterface
public function getTemplateData(Notification $notification, array $options = []): array public function getTemplateData(Notification $notification, array $options = []): array
{ {
$entityWorkflow = $this->entityWorkflowRepository->find($notification->getRelatedEntityId()); $entityWorkflow = $this->entityWorkflowRepository->find($notification->getRelatedEntityId());
return [ return [
'entity_workflow' => $entityWorkflow, 'entity_workflow' => $entityWorkflow,
'handler' => $this->entityWorkflowManager->getHandler($entityWorkflow), 'handler' => $this->entityWorkflowManager->getHandler($entityWorkflow),
'notificationCc' => $this->isNotificationCc($notification),
]; ];
} }
private function isNotificationCc(Notification $notification): bool
{
$notificationCc = false;
if ($notification->getRelatedEntityClass() === EntityWorkflow::class) {
$relatedEntity = $this->entityWorkflowRepository->findOneBy(['id' => $notification->getRelatedEntityId()]);
if ($relatedEntity->getCurrentStepCreatedBy() !== $this->security->getUser()) {
$notificationCc = true;
}
}
return $notificationCc;
}
public function supports(Notification $notification, array $options = []): bool public function supports(Notification $notification, array $options = []): bool
{ {
return $notification->getRelatedEntityClass() === EntityWorkflow::class; return $notification->getRelatedEntityClass() === EntityWorkflow::class;