src/YEDIBundle/Controller/Admin/APIController.php line 47

Open in your IDE?
  1. <?php declare(strict_types 1);
  2. namespace App\YEDIBundle\Controller\Admin;
  3. use App\YEDIBundle\Controller\Rest\AbstractRestController;
  4. use Pimcore\Bundle\AdminBundle\Security\User\TokenStorageUserResolver;
  5. use Pimcore\Controller\Controller;
  6. use Pimcore\Http\Exception\ResponseException;
  7. use Pimcore\Kernel;
  8. use Pimcore\Model\AbstractModel;
  9. use Pimcore\Model\DataObject\Concrete;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use App\YEDIBundle\Services\API\ActionService;
  15. use App\YEDIBundle\Services\FormatterService;
  16. use App\YEDIBundle\Services\ResponseService;
  17. use App\YEDIBundle\YEDIBundle;
  18. use Pimcore\Version;
  19. class APIController extends AbstractRestController
  20. {
  21.     private ActionService $actionService;
  22.     private FormatterService $formatterService;
  23.     /**
  24.      * @param ActionService $actionService
  25.      * @param FormatterService $formatterService
  26.      * @param TokenStorageUserResolver $resolver
  27.      */
  28.     public function __construct(ActionService $actionServiceFormatterService $formatterServiceRequestStack $requestStack)
  29.     {
  30.         $this->actionService $actionService;
  31.         $this->formatterService $formatterService;
  32.         parent::__construct($requestStack);
  33.     }
  34.     /**
  35.      * @Route("webservice/yedi/data-object")
  36.      *
  37.      * @param Request $request
  38.      * @return JsonResponse
  39.      * @throws ResponseException
  40.      */
  41.     public function dataObjectAction(Request $request)
  42.     {
  43.         $this->checkPermission('objects');
  44.         return $this->entityAction($requestActionService::DATA_OBJECT_ACTION);
  45.     }
  46.     /**
  47.      * @Route("/webservice/yedi/asset")
  48.      *
  49.      * @param Request $request
  50.      * @return JsonResponse
  51.      * @throws ResponseException
  52.      */
  53.     public function assetActionRequest $request)
  54.     {
  55.         $this->checkPermission('assets');
  56.         return $this->entityAction($requestActionService::ASSET_ACTION);
  57.     }
  58.     /**
  59.      * @param Request $request
  60.      * @param string $actionType
  61.      * @return JsonResponse
  62.      * @throws ResponseException
  63.      */
  64.     private function entityAction(Request $requeststring $actionType)
  65.     {
  66.         $content json_decode($request->getContent(), true);
  67.         $body $content['body'];
  68.         $detailed $content['detailed'] ?? false;
  69.         if($body === null){
  70.             throw new ResponseException($this->container->get(ResponseService::class)->createErrorResponse(
  71.                 'Missing body parameter.'422
  72.             ));
  73.         } else if (count(array_filter(array_keys($body), 'is_string')) > 0) {
  74.             throw new ResponseException($this->container->get(ResponseService::class)->createErrorResponse(
  75.                 'Provide an array of entities.'422
  76.             ));
  77.         }
  78.         try {
  79.             $response $this->actionService->process($body$actionType);
  80.         } catch (\Throwable $e) {
  81.             return new JsonResponse([
  82.                 'data' => 'Action could not be processed correctly.',
  83.                 'errors' => [
  84.                     [
  85.                         'message' => $e->getMessage(),
  86.                         'stack' => $e->getTraceAsString()
  87.                     ],
  88.                 ]
  89.             ]);
  90.         }
  91.         return new JsonResponse($this->formatResponse($response$detailed));
  92.     }
  93.     /**
  94.      * @Route("/webservice/yedi/version")
  95.      *
  96.      * @param Kernel $kernel
  97.      * @return JsonResponse
  98.      */
  99.     public function versionAction(Kernel $kernel)
  100.     {
  101.         $this->checkPermission('objects');
  102.         /** @var YEDIBundle $bundle */
  103.         $bundle $kernel->getBundle('YEDIBundle');
  104.         $yediBundle = [
  105.             'version' => $bundle->getVersion()
  106.         ];
  107.         $pimcore = [
  108.             'version' => Version::getVersion(),
  109.             'revision' => Version::getRevision(),
  110.             'constants' => array_filter((array)get_defined_constants(), function($key) {
  111.                 return strpos($key'PIMCORE_') === 0;
  112.             }, ARRAY_FILTER_USE_KEY),
  113.         ];
  114.         return new JsonResponse([
  115.             'success' => true,
  116.             'yediBundle' => $yediBundle,
  117.             'pimcore' => $pimcore
  118.         ]);
  119.     }
  120.     /**
  121.      * @param array $response
  122.      * @param bool $detailed
  123.      * @return array
  124.      */
  125.     private function formatResponse(array $responsebool $detailed false): array
  126.     {
  127.         ['data' => $data'errors' => $errors] = $response;
  128.         foreach ($data as &$queryResults) {
  129.             /** @var Concrete $result */
  130.             foreach ($queryResults as &$result) {
  131.                 if ($detailed && $result instanceof AbstractModel) {
  132.                     $result $this->formatterService->format($resulttrue);
  133.                 } else {
  134.                     $result $result->getId();
  135.                 }
  136.             }
  137.         }
  138.         return ['data' => $data'errors' => $errors];
  139.     }
  140. }