Source of file UploadController.php
Size: 4,223 Bytes - Last Modified: 2021-12-23T10:01:49+00:00
/var/www/docs.ssmods.com/process/src/src/UploadController.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | <?php namespace Level51\Cloudinary; use Exception; use SilverStripe\Control\Controller; /** * Controller for Cloudinary upload/image specific admin actions. * * Listens on the /admin/cloudinary route and handles the creation of * Image objects and also delete actions. */ class UploadController extends Controller { private static $allowed_actions = ['onAfterUpload', 'onAfterMultiUpload', 'deleteImage', 'deleteImages', 'generateSignature']; private static $url_handlers = [ 'onAfterUpload' => 'onAfterUpload', 'onAfterMultiUpload' => 'onAfterMultiUpload', 'deleteImage' => 'deleteImage', 'deleteImages' => 'deleteImages', 'generateSignature' => 'generateSignature' ]; /** * @throws \SilverStripe\Control\HTTPResponse_Exception */ public function index() { return $this->httpError(403); } private function createImageObject($vars) { // Try to get a thumbnail, either directly from the "thumbnail_url" if set (non-private upload) // Or use the first eager transformation if set $thumbnail = null; if ($vars['type'] === 'upload' && isset($vars['thumbnail_url']) && $vars['thumbnail_url']) $thumbnail = $vars['thumbnail_url']; else if (isset($vars['eager']) && is_array($vars['eager']) && !empty($vars['eager'])) $thumbnail = $vars['eager'][0]['secure_url']; $image = new Image(); $image->PublicID = $vars['public_id']; $image->Version = $vars['version']; $image->Format = $vars['format']; $image->eTag = $vars['etag']; $image->URL = $vars['secure_url']; $image->Filename = $vars['original_filename']; $image->ThumbnailURL = $thumbnail; $image->Size = $vars['bytes']; $image->Width = $vars['width']; $image->Height = $vars['height']; if (isset($vars['asset_id'])) $image->AssetID = $vars['asset_id']; $this->extend('onBeforeImageCreated', $image, $vars); try { $image->write(); } catch (Exception $e) { // TODO logging //SS_Log::log($e->getMessage(), SS_Log::ERR); } $this->extend('onAfterImageCreated', $image, $postVars); return $image; } /** * Create a CloudinaryImage object after successful upload. * * @return array|bool Flat version of the newly created image object, linked to the actual object as soon as this is saved. */ public function onAfterUpload() { $body = $this->getRequest()->getBody(); if (!$body || !($postVars = json_decode($body, true)) || !$postVars || empty($postVars)) return false; $image = $this->createImageObject($postVars); return json_encode($image->flatten()); } public function onAfterMultiUpload() { $body = $this->getRequest()->getBody(); if (!$body || !($postVars = json_decode($body, true)) || !$postVars || empty($postVars)) return false; $relField = $postVars['relation']['field']; $relId = $postVars['relation']['id']; $response = []; foreach ($postVars['files'] as $imageVars) { $image = $this->createImageObject($imageVars['uploadInfo']); $image->$relField = $relId; $image->write(); $response[] = $image->flatten(); } return json_encode($response); } /** * Delete the given CloudinaryImage object. Triggers the remote delete in the onBeforeDelete function. */ public function deleteImage() { $body = $this->getRequest()->getBody(); if (!$body) return false; $body = json_decode($body, true); if (!$body || empty($body) || !isset($body['id'])) return false; if ($image = Image::get()->byID($body['id'])) { $image->delete(); return true; } return false; } /** * @return string Generate a signature needed for signed uploads */ public function generateSignature() { return Service::inst()->sign($this->getRequest()->getVars()); } } |