src/Controller/BookingApi/ApiAbstractController.php line 108

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Elements.at New Media Solutions GmbH
  4.  *
  5.  */
  6. namespace App\Controller\BookingApi;
  7. use App\Model\BookingApi\CartItemTicket;
  8. use App\Model\BookingApi\Image;
  9. use App\Model\BookingApi\LocalizedText;
  10. use App\Service\Shop\ProductService;
  11. use Elements\Bundle\TicketShopFrameworkBundle\Model\Shop\Cart\TicketShopCartInterface;
  12. use Elements\Bundle\TicketShopFrameworkBundle\Service\CartService;
  13. use OpenApi\Annotations as OA;
  14. use Pimcore\Bundle\EcommerceFrameworkBundle\CartManager\CartInterface;
  15. use Pimcore\Controller\FrontendController;
  16. use Pimcore\Model\Asset;
  17. use Pimcore\Model\DataObject\KeycardNumber;
  18. use Pimcore\Model\DataObject\TicketConsumerCategory;
  19. use Pimcore\Translation\Translator;
  20. use Psr\Log\LoggerInterface;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. /**
  23.  * @OA\Info(title="Matterhorn Booking API", version="1.0")
  24.  */
  25. class ApiAbstractController extends FrontendController
  26. {
  27.     /**
  28.      * @var string[]
  29.      */
  30.     protected array $languages = ['de''en''it''fr'];
  31.     public function __construct(
  32.         protected CartService $cartService,
  33.         protected ProductService $productService,
  34.         protected LoggerInterface $bookingapiLogger,
  35.         protected Translator $translator
  36.     ) {
  37.     }
  38.     /**
  39.      * @param string $cartName
  40.      *
  41.      * @return TicketShopCartInterface
  42.      */
  43.     public function getCart(string $cartName 'cart'): TicketShopCartInterface
  44.     {
  45.         return $this->cartService->getCart($cartName);
  46.     }
  47.     /**
  48.      * @param CartInterface $cart
  49.      *
  50.      * @return void
  51.      */
  52.     protected function clearCartData(CartInterface $cart): void
  53.     {
  54.         //cart clear - api is not session aware
  55.         $cart->clear();
  56.         $cart->setCheckoutData('cashback''');
  57.         $cart->setCheckoutData('address''');
  58.         $cart->setCheckoutData('productData''');
  59.     }
  60.     /**
  61.      * @param string[] $errors
  62.      * @param int $code
  63.      *
  64.      * @return JsonResponse
  65.      */
  66.     protected function sendErrors(array $errorsint $code 400): JsonResponse
  67.     {
  68.         $response = new JsonResponse([
  69.             'success' => false,
  70.             'errors' => $errors,
  71.         ]);
  72.         $response->setStatusCode($code);
  73.         return $response;
  74.     }
  75.     /**
  76.      * @param Asset\Image $image
  77.      *
  78.      * @return Image
  79.      */
  80.     protected function formatImage(Asset\Image $image): Image
  81.     {
  82.         $host \Pimcore\Tool::getHostUrl();
  83.         $title = new LocalizedText();
  84.         $description = new LocalizedText();
  85.         $alt = new LocalizedText();
  86.         if ($image->getHasMetaData()) {
  87.             foreach ($this->languages as $language) {
  88.                 $title->$language $image->getMetadata('title'$language) ?: '';
  89.                 $description->$language $image->getMetadata('description'$language) ?: '';
  90.                 $alt->$language $image->getMetadata('alt'$language) ?: '';
  91.             }
  92.         }
  93.         return new Image(
  94.             $host $image->getThumbnail('bookingapi-images')->getPath(),
  95.             $image->getModificationDate() * 1000,
  96.             $title,
  97.             $description,
  98.             $alt
  99.         );
  100.     }
  101.     /**
  102.      * @param $price
  103.      *
  104.      * @return mixed
  105.      */
  106.     protected function formatPrice(mixed $price): mixed
  107.     {
  108.         if ($price instanceof \Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem\Price) {
  109.             $price $price->getGrossAmount()->asNumeric();
  110.         }
  111.         if ($price instanceof \Pimcore\Bundle\EcommerceFrameworkBundle\Type\Decimal) {
  112.             $price $price->asNumeric();
  113.         }
  114.         return $price;
  115.     }
  116.     /**
  117.      * @param TicketConsumerCategory[] $consumerCategories
  118.      *
  119.      * @return \App\Model\BookingApi\TicketConsumerCategory[]
  120.      */
  121.     protected function getConsumerCategories(array $consumerCategories = []): array
  122.     {
  123.         $apiConsumerCategories = [];
  124.         foreach ($consumerCategories as $consumerCategory) {
  125.             $apiConsumerCategory = new \App\Model\BookingApi\TicketConsumerCategory();
  126.             $apiConsumerCategory->id $consumerCategory->getId();
  127.             $localizedText = new LocalizedText();
  128.             $localizedInfoText = new LocalizedText();
  129.             $localizedGroupName = new LocalizedText();
  130.             foreach ($this->languages as $language) {
  131.                 $localizedText->$language $consumerCategory->getName($language) ?: '';
  132.                 $localizedInfoText->$language $consumerCategory->getInfoText($language) ?: '';
  133.                 $localizedGroupName->$language $consumerCategory->getParent() instanceof TicketConsumerCategory && $consumerCategory->getParent()->getName($language) ? $consumerCategory->getParent()->getName($language) : '';
  134.             }
  135.             $apiConsumerCategory->name $localizedText;
  136.             $apiConsumerCategory->infoText $localizedInfoText;
  137.             $apiConsumerCategory->ageFrom intval($consumerCategory->getYearFrom());
  138.             $apiConsumerCategory->ageTo intval($consumerCategory->getYearTo());
  139.             $apiConsumerCategory->groupId intval($consumerCategory->getParent() instanceof TicketConsumerCategory $consumerCategory->getParent()->getId() : 0);
  140.             $apiConsumerCategory->groupName $localizedGroupName;
  141.             $apiConsumerCategories[] = $apiConsumerCategory;
  142.         }
  143.         return $apiConsumerCategories;
  144.     }
  145.     /**
  146.      * @param CartItemTicket $cartItemTicket
  147.      *
  148.      * @return bool
  149.      */
  150.     protected function keyCardNumberShortToLongCheck(CartItemTicket $cartItemTicket): bool
  151.     {
  152.         if($cartItemTicket->getKeycardShortnumber() && empty($cartItemTicket->getKeycardNumber())) {
  153.             //requires mapping keycard short number to keycard number
  154.             $keycardNumberObj KeycardNumber::getByShortNumber($cartItemTicket->getKeycardShortnumber(), 1);
  155.             if($keycardNumberObj && $keycardNumberObj->getNumber()) {
  156.                 $cartItemTicket->setKeycardNumber($keycardNumberObj->getNumber());
  157.             } else {
  158.                 return false;
  159.             }
  160.         } elseif ($cartItemTicket->getKeycardShortnumber() && $cartItemTicket->getKeycardNumber()) {
  161.             //keycard number and short number given - are they known as identical keycard?
  162.             $keycardNumberObj KeycardNumber::getByShortNumber($cartItemTicket->getKeycardShortnumber(), 1);
  163.             if(!$keycardNumberObj || $keycardNumberObj->getNumber() != $cartItemTicket->getKeycardNumber()) {
  164.                 return false;
  165.             }
  166.         }
  167.         return true;
  168.     }
  169. }