commit af76b67c8fdcdae843b701c5209d3dbe4c43d22b Author: smarcet Date: Tue Oct 6 16:20:51 2020 -0300 Added display_on_site flag to media uploads Change-Id: I83930c471de152f2d88e252f8a7d04abd1e4e692 Signed-off-by: smarcet diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationApiController.php index eda225e..887f06f 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationApiController.php @@ -1097,6 +1097,7 @@ final class OAuth2PresentationApiController extends OAuth2ProtectedController $rules = [ 'media_upload_type_id' => 'required|integer', + 'display_on_site' => 'sometimes|boolean', ]; // Creates a Validator instance and validates the data. @@ -1177,13 +1178,28 @@ final class OAuth2PresentationApiController extends OAuth2ProtectedController return $this->error403(); } + $data = $request->all(); + + $rules = [ + 'display_on_site' => 'sometimes|boolean', + ]; + + // Creates a Validator instance and validates the data. + $validation = Validator::make($data, $rules); + + if ($validation->fails()) { + $ex = new ValidationException; + $ex->setMessages($validation->messages()->toArray()); + throw $ex; + } $mediaUpload = $this->presentation_service->updateMediaUploadFrom ( $request, $summit, intval($presentation_id), - intval($media_upload_id) + intval($media_upload_id), + $data ); $fields = Request::input('fields', ''); diff --git a/app/ModelSerializers/Summit/Presentation/PresentationMediaUploadSerializer.php b/app/ModelSerializers/Summit/Presentation/PresentationMediaUploadSerializer.php index 97df0c0..4e86aee 100644 --- a/app/ModelSerializers/Summit/Presentation/PresentationMediaUploadSerializer.php +++ b/app/ModelSerializers/Summit/Presentation/PresentationMediaUploadSerializer.php @@ -39,11 +39,10 @@ class PresentationMediaUploadSerializer extends PresentationMaterialSerializer $values = parent::serialize($expand, $fields, $relations, $params); $mediaUpload = $this->object; if(!$mediaUpload instanceof PresentationMediaUpload) return []; + // these values are calculated unset($values['name']); unset($values['description']); - unset($values['display_on_site']); unset($values['featured']); - $values['display_on_site'] = false; $mediaUploadType = $mediaUpload->getMediaUploadType(); if(!is_null($mediaUploadType)){ @@ -53,7 +52,6 @@ class PresentationMediaUploadSerializer extends PresentationMaterialSerializer $strategy = FileDownloadStrategyFactory::build($mediaUploadType->getPublicStorageType()); if (!is_null($strategy)) { $values['public_url'] = $strategy->getUrl($mediaUpload->getRelativePath()); - $values['display_on_site'] = true; } } catch (\Exception $ex){ diff --git a/app/Models/Foundation/Summit/Factories/PresentationMediaUploadFactory.php b/app/Models/Foundation/Summit/Factories/PresentationMediaUploadFactory.php new file mode 100644 index 0000000..885bc94 --- /dev/null +++ b/app/Models/Foundation/Summit/Factories/PresentationMediaUploadFactory.php @@ -0,0 +1,53 @@ +setDisplayOnSite(isset($data['display_on_site']) ? boolval($data['display_on_site']) : true); + + if(isset($data['file_name'])) + $media_upload->setFilename(trim($data['file_name'])); + + if(isset($data['presentation']) && $data['presentation'] instanceof Presentation) + $media_upload->setPresentation($data['presentation']); + + if(isset($data['media_upload_type']) && $data['media_upload_type'] instanceof SummitMediaUploadType) + $media_upload->setMediaUploadType($data['media_upload_type']); + + return $media_upload; + } +} \ No newline at end of file diff --git a/app/Services/Model/IPresentationService.php b/app/Services/Model/IPresentationService.php index 40ea9f2..fe9f6e1 100644 --- a/app/Services/Model/IPresentationService.php +++ b/app/Services/Model/IPresentationService.php @@ -181,6 +181,7 @@ interface IPresentationService * @param Summit $summit * @param int $presentation_id * @param int $media_upload_id + * @param array $payload * @return PresentationMediaUpload * @throws \Exception */ @@ -189,7 +190,8 @@ interface IPresentationService LaravelRequest $request, Summit $summit, int $presentation_id, - int $media_upload_id + int $media_upload_id, + array $payload ): PresentationMediaUpload; /** diff --git a/app/Services/Model/Imp/PresentationService.php b/app/Services/Model/Imp/PresentationService.php index b2bef6e..70bd16a 100644 --- a/app/Services/Model/Imp/PresentationService.php +++ b/app/Services/Model/Imp/PresentationService.php @@ -17,6 +17,7 @@ use App\Http\Utils\IFileUploader; use App\Jobs\Emails\PresentationSubmissions\PresentationCreatorNotificationEmail; use App\Jobs\Emails\PresentationSubmissions\PresentationSpeakerNotificationEmail; use App\Models\Foundation\Summit\Factories\PresentationLinkFactory; +use App\Models\Foundation\Summit\Factories\PresentationMediaUploadFactory; use App\Models\Foundation\Summit\Factories\PresentationSlideFactory; use App\Models\Foundation\Summit\Factories\PresentationVideoFactory; use App\Models\Foundation\Summit\SelectionPlan; @@ -1042,9 +1043,13 @@ final class PresentationService ); } - $mediaUpload = new PresentationMediaUpload(); - $mediaUpload->setMediaUploadType($media_upload_type); - $mediaUpload->setPresentation($presentation); + $mediaUpload = PresentationMediaUploadFactory::build(array_merge( + $payload, + [ + 'media_upload_type' => $media_upload_type, + 'presentation' => $presentation + ] + )); $strategy = FileUploadStrategyFactory::build($media_upload_type->getPrivateStorageType()); if(!is_null($strategy)){ @@ -1068,6 +1073,7 @@ final class PresentationService * @param Summit $summit * @param int $presentation_id * @param int $media_upload_id + * @param array $payload * @return PresentationMediaUpload * @throws \Exception */ @@ -1076,14 +1082,16 @@ final class PresentationService LaravelRequest $request, Summit $summit, int $presentation_id, - int $media_upload_id + int $media_upload_id, + array $payload ): PresentationMediaUpload { return $this->tx_service->transaction(function () use ( $request, $summit, $presentation_id, - $media_upload_id + $media_upload_id, + $payload ) { $presentation = $this->presentation_repository->getById($presentation_id); @@ -1098,46 +1106,43 @@ final class PresentationService $hasFile = $request->hasFile('file'); - if(!$hasFile){ - throw new ValidationException("You must provide a file."); - } - - $file = $request->file('file'); - // get in bytes should be converted to KB - $size = $file->getSize(); - if($size == 0) - throw new ValidationException("File size is zero."); - $size = $size/1024; - $fileName = $file->getClientOriginalName(); - $fileExt = pathinfo($fileName, PATHINFO_EXTENSION); - // normalize fileName - $fileName = FileNameSanitizer::sanitize($fileName); - - $mediaUploadType = $mediaUpload->getMediaUploadType(); - if(is_null($mediaUploadType)) - throw new ValidationException("Media Upload Type is not set."); - - if($mediaUploadType->getMaxSize() < $size){ - throw new ValidationException(sprintf("Max Size is %s KB.", $mediaUploadType->getMaxSize())); - } + if($hasFile) { + $file = $request->file('file'); + // get in bytes should be converted to KB + $size = $file->getSize(); + if ($size == 0) + throw new ValidationException("File size is zero."); + $size = $size / 1024; + $fileName = $file->getClientOriginalName(); + $fileExt = pathinfo($fileName, PATHINFO_EXTENSION); + // normalize fileName + $fileName = FileNameSanitizer::sanitize($fileName); + + $mediaUploadType = $mediaUpload->getMediaUploadType(); + if (is_null($mediaUploadType)) + throw new ValidationException("Media Upload Type is not set."); + + if ($mediaUploadType->getMaxSize() < $size) { + throw new ValidationException(sprintf("Max Size is %s KB.", $mediaUploadType->getMaxSize())); + } - if(!$mediaUploadType->isValidExtension($fileExt)){ - throw new ValidationException(sprintf("File Extension %s is not valid", $fileExt)); - } + if (!$mediaUploadType->isValidExtension($fileExt)) { + throw new ValidationException(sprintf("File Extension %s is not valid", $fileExt)); + } - $strategy = FileUploadStrategyFactory::build($mediaUploadType->getPrivateStorageType()); - if(!is_null($strategy)){ - $strategy->save($file, $mediaUpload->getPath(IStorageTypesConstants::PrivateType), $fileName); - } + $strategy = FileUploadStrategyFactory::build($mediaUploadType->getPrivateStorageType()); + if (!is_null($strategy)) { + $strategy->save($file, $mediaUpload->getPath(IStorageTypesConstants::PrivateType), $fileName); + } - $strategy = FileUploadStrategyFactory::build($mediaUploadType->getPublicStorageType()); - if(!is_null($strategy)){ - $strategy->save($file, $mediaUpload->getPath(IStorageTypesConstants::PublicType), $fileName); + $strategy = FileUploadStrategyFactory::build($mediaUploadType->getPublicStorageType()); + if (!is_null($strategy)) { + $strategy->save($file, $mediaUpload->getPath(IStorageTypesConstants::PublicType), $fileName); + } + $payload['file_name'] = $fileName; } - $mediaUpload->setFilename($fileName); - - return $mediaUpload; + return PresentationMediaUploadFactory::populate($mediaUpload, $payload); }); }