File manager - Edit - /home/premiey/www/wp-content/plugins/ameliabooking/src/Application/Commands/Entities/GetEntitiesCommandHandler.php
Back
<?php namespace AmeliaBooking\Application\Commands\Entities; use AmeliaBooking\Application\Commands\CommandHandler; use AmeliaBooking\Application\Commands\CommandResult; use AmeliaBooking\Application\Common\Exceptions\AccessDeniedException; use AmeliaBooking\Application\Services\Bookable\BookableApplicationService; use AmeliaBooking\Application\Services\Bookable\PackageApplicationService; use AmeliaBooking\Application\Services\Helper\HelperService; use AmeliaBooking\Application\Services\User\ProviderApplicationService; use AmeliaBooking\Application\Services\User\UserApplicationService; use AmeliaBooking\Domain\Collection\Collection; use AmeliaBooking\Domain\Common\Exceptions\AuthorizationException; use AmeliaBooking\Domain\Common\Exceptions\InvalidArgumentException; use AmeliaBooking\Domain\Entity\Booking\Event\Event; use AmeliaBooking\Domain\Entity\Coupon\Coupon; use AmeliaBooking\Domain\Entity\Entities; use AmeliaBooking\Domain\Entity\User\AbstractUser; use AmeliaBooking\Domain\Entity\User\Customer; use AmeliaBooking\Domain\Entity\User\Provider; use AmeliaBooking\Domain\Services\Booking\EventDomainService; use AmeliaBooking\Domain\Services\DateTime\DateTimeService; use AmeliaBooking\Domain\Services\Settings\SettingsService; use AmeliaBooking\Domain\Services\User\ProviderService; use AmeliaBooking\Infrastructure\Common\Exceptions\NotFoundException; use AmeliaBooking\Infrastructure\Common\Exceptions\QueryExecutionException; use AmeliaBooking\Infrastructure\Repository\Bookable\Service\CategoryRepository; use AmeliaBooking\Infrastructure\Repository\Bookable\Service\PackageRepository; use AmeliaBooking\Infrastructure\Repository\Bookable\Service\ResourceRepository; use AmeliaBooking\Infrastructure\Repository\Bookable\Service\ServiceRepository; use AmeliaBooking\Infrastructure\Repository\Booking\Appointment\AppointmentRepository; use AmeliaBooking\Infrastructure\Repository\Booking\Event\EventRepository; use AmeliaBooking\Infrastructure\Repository\Booking\Event\EventTagsRepository; use AmeliaBooking\Infrastructure\Repository\Coupon\CouponRepository; use AmeliaBooking\Infrastructure\Repository\CustomField\CustomFieldRepository; use AmeliaBooking\Infrastructure\Repository\Location\LocationRepository; use AmeliaBooking\Infrastructure\Repository\User\ProviderRepository; use AmeliaBooking\Infrastructure\Repository\User\UserRepository; use AmeliaBooking\Infrastructure\Services\LessonSpace\LessonSpaceService; use Interop\Container\Exception\ContainerException; /** * Class GetEntitiesCommandHandler * * @package AmeliaBooking\Application\Commands\Entities */ class GetEntitiesCommandHandler extends CommandHandler { /** * @param GetEntitiesCommand $command * * @return CommandResult * @throws AccessDeniedException * @throws ContainerException * @throws InvalidArgumentException * @throws NotFoundException * @throws QueryExecutionException */ public function handle(GetEntitiesCommand $command) { /** @var UserApplicationService $userAS */ $userAS = $this->container->get('application.user.service'); /** @var EventDomainService $eventDS */ $eventDS = $this->container->get('domain.booking.event.service'); /** @var ProviderApplicationService $providerAS */ $providerAS = $this->container->get('application.user.provider.service'); /** @var ProviderService $providerService */ $providerService = $this->container->get('domain.user.provider.service'); try { /** @var AbstractUser $currentUser */ $currentUser = $userAS->authorization( $command->getPage() === 'cabinet' ? $command->getToken() : null, $command->getCabinetType() ); } catch (AuthorizationException $e) { $currentUser = null; } $params = $command->getField('params'); $result = new CommandResult(); $this->checkMandatoryFields($command); /** @var Collection $services */ $services = new Collection(); /** @var Collection $locations */ $locations = new Collection(); /** @var Collection $categories */ $categories = new Collection(); /** @var Collection $events */ $events = new Collection(); $resultData = [ 'packages' => [], 'locations' => [], 'customFields' => [], 'tags' => [], 'employees' => [] ]; if (!isset($params['types'])) { $params['types'] = []; } /** Events */ if (in_array(Entities::EVENTS, $params['types'], true)) { /** @var EventRepository $eventRepository */ $eventRepository = $this->container->get('domain.booking.event.repository'); $dateFilter = ['dates' => [DateTimeService::getNowDateTime()]]; /** @var Collection $events */ $events = $eventRepository->getFiltered($dateFilter); /** @var Event $event */ foreach ($events->getItems() as $event) { $event->setBookings(new Collection()); } $resultData['events'] = $events->toArray(); $resultData['events'] = $eventDS->getShortcodeForEventList($this->container, $resultData['events']); } /** Event Tags */ if (in_array(Entities::TAGS, $params['types'], true)) { /** @var EventTagsRepository $eventTagsRepository */ $eventTagsRepository = $this->container->get('domain.booking.event.tag.repository'); /** @var Collection $eventsTags */ $eventsTags = $eventTagsRepository->getAllDistinctByCriteria( $events->length() ? ['eventIds' => array_column($events->toArray(), 'id')] : [] ); $resultData['tags'] = $eventsTags->toArray(); } if (in_array(Entities::LOCATIONS, $params['types'], true) || in_array(Entities::EMPLOYEES, $params['types'], true) ) { /** @var LocationRepository $locationRepository */ $locationRepository = $this->getContainer()->get('domain.locations.repository'); /** @var Collection $locations */ $locations = $locationRepository->getAllOrderedByName(); } /** Locations */ if (in_array(Entities::LOCATIONS, $params['types'], true)) { $resultData['locations'] = $locations->toArray(); } if (in_array(Entities::CATEGORIES, $params['types'], true) || in_array(Entities::EMPLOYEES, $params['types'], true) || in_array(Entities::COUPONS, $params['types'], true) ) { /** @var ServiceRepository $serviceRepository */ $serviceRepository = $this->container->get('domain.bookable.service.repository'); /** @var CategoryRepository $categoryRepository */ $categoryRepository = $this->container->get('domain.bookable.category.repository'); /** @var BookableApplicationService $bookableAS */ $bookableAS = $this->container->get('application.bookable.service'); /** @var Collection $services */ $services = $serviceRepository->getAllArrayIndexedById(); /** @var Collection $categories */ $categories = $categoryRepository->getAllIndexedById(); $bookableAS->addServicesToCategories($categories, $services); } /** Categories */ if (in_array(Entities::CATEGORIES, $params['types'], true)) { $resultData['categories'] = $categories->toArray(); } $resultData['customers'] = []; /** Customers */ if (in_array(Entities::CUSTOMERS, $params['types'], true)) { /** @var UserRepository $userRepo */ $userRepo = $this->getContainer()->get('domain.users.repository'); $resultData['customers'] = []; if ($currentUser) { switch ($currentUser->getType()) { case (AbstractUser::USER_ROLE_CUSTOMER): if ($currentUser->getId()) { /** @var Customer $customer */ $customer = $userRepo->getById($currentUser->getId()->getValue()); $resultData['customers'] = [$customer->toArray()]; } break; case (AbstractUser::USER_ROLE_PROVIDER): $resultData['customers'] = $providerAS->getAllowedCustomers($currentUser)->toArray(); break; default: /** @var Collection $customers */ $customers = $userRepo->getAllWithAllowedBooking(); $resultData['customers'] = $customers->toArray(); } } } /** Providers */ if (in_array(Entities::EMPLOYEES, $params['types'], true)) { /** @var ProviderRepository $providerRepository */ $providerRepository = $this->container->get('domain.users.providers.repository'); /** @var Collection $testProviders */ $providers = $providerRepository->getWithSchedule([]); /** @var Provider $provider */ foreach ($providers->getItems() as $provider) { $providerService->setProviderServices($provider, $services, true); } if (array_key_exists('page', $params) && in_array($params['page'], [Entities::CALENDAR, Entities::APPOINTMENTS]) && $userAS->isAdminAndAllowedToBookAtAnyTime() ) { $providerService->setProvidersAlwaysAvailable($providers); } $resultData['entitiesRelations'] = []; /** @var Provider $provider */ foreach ($providers->getItems() as $providerId => $provider) { if ($data = $providerAS->getProviderServiceLocations($provider, $locations, $services)) { $resultData['entitiesRelations'][$providerId] = $data; } } $resultData['employees'] = $providerAS->removeAllExceptUser( $providers->toArray(), (array_key_exists('page', $params) && $params['page'] === Entities::BOOKING) ? null : $currentUser ); if ($currentUser === null || $currentUser->getType() === AbstractUser::USER_ROLE_CUSTOMER) { foreach ($resultData['employees'] as &$employee) { unset( $employee['birthday'], $employee['email'], $employee['externalId'], $employee['phone'], $employee['note'] ); if (isset($params['page']) && $params['page'] !== Entities::CALENDAR) { unset( $employee['weekDayList'], $employee['specialDayList'], $employee['dayOffList'] ); } } } } $resultData[Entities::APPOINTMENTS] = [ 'futureAppointments' => [], ]; if (in_array(Entities::APPOINTMENTS, $params['types'], true)) { $userParams = [ 'dates' => [null, null] ]; if (!$this->getContainer()->getPermissionsService()->currentUserCanReadOthers(Entities::APPOINTMENTS)) { if ($currentUser->getId() === null) { $userParams[$currentUser->getType() . 'Id'] = 0; } else { $userParams[$currentUser->getType() . 'Id'] = $currentUser->getId()->getValue(); } } /** @var AppointmentRepository $appointmentRepo */ $appointmentRepo = $this->container->get('domain.booking.appointment.repository'); /** @var Collection $appointments */ $appointments = $appointmentRepo->getFiltered($userParams); $resultData[Entities::APPOINTMENTS] = [ 'futureAppointments' => $appointments->toArray(), ]; } /** Custom Fields */ if (in_array(Entities::CUSTOM_FIELDS, $params['types'], true) || in_array('customFields', $params['types'], true) ) { /** @var CustomFieldRepository $customFieldRepository */ $customFieldRepository = $this->container->get('domain.customField.repository'); /** @var Collection $customFields */ $customFields = $customFieldRepository->getAll(); $resultData['customFields'] = $customFields->toArray(); } /** Coupons */ if (in_array(Entities::COUPONS, $params['types'], true) && $this->getContainer()->getPermissionsService()->currentUserCanRead(Entities::COUPONS) ) { /** @var CouponRepository $couponRepository */ $couponRepository = $this->container->get('domain.coupon.repository'); /** @var Collection $coupons */ $coupons = $couponRepository->getAllIndexedById(); /** @var CouponRepository $couponRepository */ $couponRepository = $this->container->get('domain.coupon.repository'); /** @var EventRepository $eventRepository */ $eventRepository = $this->container->get('domain.booking.event.repository'); /** @var PackageRepository $packageRepository */ $packageRepository = $this->container->get('domain.bookable.package.repository'); foreach ($couponRepository->getCouponsServicesIds($coupons->keys()) as $ids) { /** @var Coupon $coupon */ $coupon = $coupons->getItem($ids['couponId']); $coupon->getServiceList()->addItem( $services->getItem($ids['serviceId']), $ids['serviceId'] ); } /** @var Collection $allEvents */ $allEvents = $eventRepository->getAllIndexedById(); foreach ($couponRepository->getCouponsEventsIds($coupons->keys()) as $ids) { /** @var Coupon $coupon */ $coupon = $coupons->getItem($ids['couponId']); $coupon->getEventList()->addItem( $allEvents->getItem($ids['eventId']), $ids['eventId'] ); } /** @var Collection $allPackages */ $allPackages = $packageRepository->getAllIndexedById(); foreach ($couponRepository->getCouponsPackagesIds($coupons->keys()) as $ids) { /** @var Coupon $coupon */ $coupon = $coupons->getItem($ids['couponId']); $coupon->getPackageList()->addItem( $allPackages->getItem($ids['packageId']), $ids['packageId'] ); } $resultData['coupons'] = $coupons->toArray(); } /** @var SettingsService $settingsDS */ $settingsDS = $this->container->get('domain.settings.service'); /** Settings */ if (in_array(Entities::SETTINGS, $params['types'], true)) { /** @var HelperService $helperService */ $helperService = $this->container->get('application.helper.service'); $languages = $helperService->getLanguages(); usort( $languages, function ($x, $y) { return strcasecmp($x['name'], $y['name']); } ); $languagesSorted = []; foreach ($languages as $language) { $languagesSorted[$language['wp_locale']] = $language; } /** @var \AmeliaBooking\Application\Services\Settings\SettingsService $settingsAS*/ $settingsAS = $this->container->get('application.settings.service'); $daysOff = $settingsAS->getDaysOff(); $resultData['settings'] = [ 'general' => [ 'usedLanguages' => $settingsDS->getSetting('general', 'usedLanguages'), ], 'languages' => $languagesSorted, 'daysOff' => $daysOff, ]; } /** Packages */ if (in_array(Entities::PACKAGES, $params['types'], true)) { /** @var PackageApplicationService $packageApplicationService */ $packageApplicationService = $this->container->get('application.bookable.package'); $resultData['packages'] = $packageApplicationService->getPackagesArray(); } /** Resources */ if (in_array(Entities::RESOURCES, $params['types'], true)) { /** @var ResourceRepository $resourceRepository */ $resourceRepository = $this->getContainer()->get('domain.bookable.resource.repository'); /** @var Collection $resources */ $resources = $resourceRepository->getByCriteria([]); $resultData['resources'] = []; } /** Lesson Spaces */ if (in_array('lessonSpace_spaces', $params['types'], true)) { $lessonSpaceApiKey = $settingsDS->getSetting('lessonSpace', 'apiKey'); $lessonSpaceEnabled = $settingsDS->getSetting('lessonSpace', 'enabled'); $lessonSpaceCompanyId = $settingsDS->getSetting('lessonSpace', 'companyId'); if ($lessonSpaceEnabled && $lessonSpaceApiKey) { /** @var LessonSpaceService $lessonSpaceService */ $lessonSpaceService = $this->container->get('infrastructure.lesson.space.service'); if (empty($lessonSpaceCompanyId)) { $companyDetails = $lessonSpaceService->getCompanyId($lessonSpaceApiKey); $lessonSpaceCompanyId = !empty($companyDetails) && $companyDetails['id'] ? $companyDetails['id'] : null; } $resultData['spaces'] = $lessonSpaceService->getAllSpaces( $lessonSpaceApiKey, $lessonSpaceCompanyId, !empty($params['lessonSpaceSearch']) ? $params['lessonSpaceSearch'] : null ); } } $result->setResult(CommandResult::RESULT_SUCCESS); $result->setMessage('Successfully retrieved entities'); $result->setData($resultData); return $result; } }
| ver. 1.4 |
Github
|
.
| PHP 5.4.45 | Generation time: 0 |
proxy
|
phpinfo
|
Settings