partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

TemporaryImageController.php (3224B)


      1 <?php
      2 
      3 namespace PartKeepr\ImageBundle\Controller;
      4 
      5 use Dunglas\ApiBundle\Action\ActionUtilTrait;
      6 use Dunglas\ApiBundle\Api\ResourceInterface;
      7 use FOS\RestBundle\Controller\Annotations\RequestParam;
      8 use FOS\RestBundle\Controller\Annotations\View;
      9 use PartKeepr\ImageBundle\Entity\TempImage;
     10 use PartKeepr\ImageBundle\Response\TemporaryImageUploadResponse;
     11 use Symfony\Component\HttpFoundation\File\File;
     12 use Symfony\Component\HttpFoundation\File\UploadedFile;
     13 use Symfony\Component\HttpFoundation\JsonResponse;
     14 use Symfony\Component\HttpFoundation\Request;
     15 use Symfony\Component\HttpFoundation\Response;
     16 
     17 class TemporaryImageController extends ImageController
     18 {
     19     use ActionUtilTrait;
     20 
     21     /**
     22      * Handles a temporary image upload.
     23      *
     24      * @RequestParam(name="url",description="An URL where the image is located",strict=false)
     25      * ApiDoc(section="image",output="PartKeepr\ImageBundle\Response\TemporaryImageUploadResponse")
     26      * @View()
     27      *
     28      * @param Request $request The request to process
     29      *
     30      * @throws \Exception An exception if neither the userfile form parameter or an URL was given
     31      *
     32      * @return JsonResponse The JSON response from the temporary image upload
     33      */
     34     public function uploadAction(Request $request)
     35     {
     36         $image = new TempImage();
     37         $imageService = $this->get('partkeepr_image_service');
     38 
     39         if ($request->files->has('userfile') && $request->files->get('userfile') != null) {
     40             $file = $request->files->get('userfile');
     41             /*
     42              * @var $file UploadedFile
     43              */
     44             $imageService->replace($image, new File($file->getPathname()));
     45             $image->setOriginalFilename($file->getClientOriginalName());
     46         } elseif ($request->request->has('url')) {
     47             $imageService->replaceFromURL($image, $request->request->get('url'));
     48         } else {
     49             throw new \Exception('Error: No valid file given');
     50         }
     51 
     52         $this->getDoctrine()->getManager()->persist($image);
     53         $this->getDoctrine()->getManager()->flush();
     54 
     55         /**
     56          * @var ResourceInterface
     57          */
     58         list($resourceType) = $this->extractAttributes($request);
     59 
     60         $serializedData = $this->get('serializer')->normalize(
     61             $image,
     62             'jsonld',
     63             $resourceType->getNormalizationContext()
     64         );
     65 
     66         return new JsonResponse(new TemporaryImageUploadResponse($serializedData));
     67     }
     68 
     69     /**
     70      * Uploads a webcam image.
     71      *
     72      * @param Request $request The request to process
     73      *
     74      * @return Response
     75      */
     76     public function webcamUploadAction(Request $request)
     77     {
     78         $image = new TempImage();
     79         $imageService = $this->get('partkeepr_image_service');
     80 
     81         $data = $request->getContent();
     82 
     83         $base64 = explode(',', $data);
     84         $imageService->replaceFromData($image, base64_decode($base64[1]), 'webcam.png');
     85 
     86         $this->getDoctrine()->getManager()->persist($image);
     87         $this->getDoctrine()->getManager()->flush();
     88 
     89         return $image;
     90     }
     91 
     92     /**
     93      * {@inheritdoc}
     94      */
     95     protected function getEntityClass()
     96     {
     97         return 'PartKeepr\\ImageBundle\\Entity\\TempImage';
     98     }
     99 }