Added display_on_site flag to media uploads

Change-Id: I83930c471de152f2d88e252f8a7d04abd1e4e692
Signed-off-by: smarcet <smarcet@gmail.com>
This commit is contained in:
smarcet 2020-10-06 16:20:51 -03:00
parent f0c49c8f83
commit af76b67c8f
5 changed files with 122 additions and 48 deletions

View File

@ -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', '');

View File

@ -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){

View File

@ -0,0 +1,53 @@
<?php namespace App\Models\Foundation\Summit\Factories;
/**
* Copyright 2020 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
use models\summit\Presentation;
use models\summit\PresentationMediaUpload;
use models\summit\SummitMediaUploadType;
/**
* Class PresentationMediaUploadFactory
* @package App\Models\Foundation\Summit\Factories
*/
class PresentationMediaUploadFactory
{
/**
* @param array $data
* @return PresentationMediaUpload
*/
public static function build(array $data){
return self::populate(new PresentationMediaUpload, $data);
}
/**
* @param PresentationMediaUpload $media_upload
* @param array $data
* @return PresentationMediaUpload
*/
public static function populate(PresentationMediaUpload $media_upload, array $data){
if(isset($data['display_on_site']))
$media_upload->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;
}
}

View File

@ -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;
/**

View File

@ -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.");
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));
}
$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);
}
$payload['file_name'] = $fileName;
}
$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));
}
$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);
}
$mediaUpload->setFilename($fileName);
return $mediaUpload;
return PresentationMediaUploadFactory::populate($mediaUpload, $payload);
});
}