PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / trunk
Booking for Appointments and Events Calendar – Amelia vtrunk
2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / src / Application / Commands / Notification / GetNotificationsCommandHandler.php
ameliabooking / src / Application / Commands / Notification Last commit date
GetNotificationsCommand.php 1 year ago GetNotificationsCommandHandler.php 6 months ago GetSMSNotificationsHistoryCommand.php 1 year ago GetSMSNotificationsHistoryCommandHandler.php 6 months ago SendAmeliaSmsApiRequestCommand.php 1 year ago SendAmeliaSmsApiRequestCommandHandler.php 2 years ago SendTestEmailCommand.php 1 year ago SendTestEmailCommandHandler.php 6 months ago SendUndeliveredNotificationsCommand.php 1 year ago SendUndeliveredNotificationsCommandHandler.php 2 years ago UpdateNotificationCommand.php 1 year ago UpdateNotificationCommandHandler.php 2 weeks ago UpdateNotificationStatusCommand.php 1 year ago UpdateNotificationStatusCommandHandler.php 6 months ago UpdateSMSNotificationHistoryCommand.php 1 year ago UpdateSMSNotificationHistoryCommandHandler.php 6 months ago UpdateSMSNotificationHistoryDirectlyCommand.php 6 months ago UpdateSMSNotificationHistoryDirectlyCommandHandler.php 6 months ago ValidateSMTPCredentialsCommand.php 4 months ago ValidateSMTPCredentialsCommandHandler.php 4 months ago
GetNotificationsCommandHandler.php
106 lines
1 <?php
2
3 namespace AmeliaBooking\Application\Commands\Notification;
4
5 use AmeliaBooking\Application\Commands\CommandResult;
6 use AmeliaBooking\Application\Commands\CommandHandler;
7 use AmeliaBooking\Application\Common\Exceptions\AccessDeniedException;
8 use AmeliaBooking\Application\Services\Notification\AbstractWhatsAppNotificationService;
9 use AmeliaBooking\Domain\Collection\AbstractCollection;
10 use AmeliaBooking\Domain\Collection\Collection;
11 use AmeliaBooking\Domain\Common\Exceptions\InvalidArgumentException;
12 use AmeliaBooking\Domain\Entity\Entities;
13 use AmeliaBooking\Domain\Entity\Notification\Notification;
14 use AmeliaBooking\Domain\ValueObjects\String\Html;
15 use AmeliaBooking\Domain\ValueObjects\String\Name;
16 use AmeliaBooking\Infrastructure\Common\Exceptions\QueryExecutionException;
17 use AmeliaBooking\Infrastructure\Repository\Notification\NotificationRepository;
18 use AmeliaBooking\Infrastructure\Repository\Notification\NotificationsToEntitiesRepository;
19 use AmeliaBooking\Domain\Services\Settings\SettingsService;
20
21 /**
22 * Class GetNotificationsCommandHandler
23 *
24 * @package AmeliaBooking\Application\Commands\Notification
25 */
26 class GetNotificationsCommandHandler extends CommandHandler
27 {
28 /**
29 * @return CommandResult
30 * @throws \Slim\Exception\ContainerValueNotFoundException
31 * @throws AccessDeniedException
32 * @throws InvalidArgumentException
33 * @throws QueryExecutionException
34 */
35 public function handle(GetNotificationsCommand $command)
36 {
37 if (!$command->getPermissionService()->currentUserCanRead(Entities::NOTIFICATIONS)) {
38 throw new AccessDeniedException('You are not allowed to read notifications');
39 }
40
41 $result = new CommandResult();
42
43 /** @var NotificationRepository $notificationRepo */
44 $notificationRepo = $this->container->get('domain.notification.repository');
45 /** @var NotificationsToEntitiesRepository $notificationEntitiesRepo */
46 $notificationEntitiesRepo = $this->container->get('domain.notificationEntities.repository');
47 /** @var AbstractWhatsAppNotificationService $whatsAppNotificationService */
48 $whatsAppNotificationService = $this->container->get('application.whatsAppNotification.service');
49 /** @var SettingsService $settingsService */
50 $settingsService = $this->container->get('domain.settings.service');
51
52 $whatsAppTemplates = [];
53 if ($whatsAppNotificationService->checkRequiredFields()) {
54 $whatsAppTemplates = $whatsAppNotificationService->getTemplates();
55 }
56
57 // Check if custom notifications feature is enabled
58 $isCustomNotificationsEnabled = $settingsService->isFeatureEnabled('customNotifications');
59
60 /** @var Collection $notifications */
61 $notifications = $notificationRepo->getAll($isCustomNotificationsEnabled);
62
63 /** @var Notification $notification */
64 foreach ($notifications->getItems() as $notification) {
65 if ($notification->getCustomName()) {
66 $notification->setEntityIds($notificationEntitiesRepo->getEntities($notification->getId()->getValue()));
67 $notification->setEntityIds(array_map('intval', $notification->getEntityIds()));
68 }
69 if (!empty($whatsAppTemplates[0]) && !empty($notification->getWhatsAppTemplate()) && !empty($whatsAppTemplates[0])) {
70 if (!in_array($notification->getWhatsAppTemplate(), array_column($whatsAppTemplates[0], 'name'))) {
71 $notification->setWhatsAppTemplate('');
72 $notification->setSubject(new Name(''));
73 $notification->setContent(new Html(''));
74 $notificationRepo->updateFieldById($notification->getId()->getValue(), null, 'whatsAppTemplate');
75 $notificationRepo->updateFieldById($notification->getId()->getValue(), '', 'subject');
76 $notificationRepo->updateFieldById($notification->getId()->getValue(), '', 'content');
77 }
78 }
79 }
80
81 if (!$notifications instanceof AbstractCollection) {
82 $result->setResult(CommandResult::RESULT_ERROR);
83 $result->setMessage('Could not get notifications');
84
85 return $result;
86 }
87
88 $notificationsArray = $notifications->toArray();
89
90 $notificationsArray = apply_filters('amelia_get_notifications_filter', $notificationsArray);
91
92 do_action('amelia_get_notifications', $notificationsArray);
93
94 $result->setResult(CommandResult::RESULT_SUCCESS);
95 $result->setMessage('Successfully retrieved notifications.');
96 $result->setData(
97 [
98 Entities::NOTIFICATIONS => $notificationsArray,
99 'whatsAppTemplates' => !empty($whatsAppTemplates[1]) ? $whatsAppTemplates[1] : []
100 ]
101 );
102
103 return $result;
104 }
105 }
106