Updated validation for slides

Change-Id: Ia81b03706480cccc8c2a9f5c6d93aa7490f6778c
This commit is contained in:
smarcet 2019-04-25 12:53:24 -03:00
parent 2cd6096a0f
commit da95ec094c
3 changed files with 36 additions and 3 deletions

View File

@ -678,7 +678,7 @@ final class OAuth2PresentationApiController extends OAuth2ProtectedController
$data = $request->all();
$rules = [
'link' => 'sometimes|required|url',
'link' => 'nullable|url',
'name' => 'sometimes|required|text:512',
'description' => 'sometimes|required|string',
'display_on_site' => 'sometimes|required|boolean',
@ -691,7 +691,7 @@ final class OAuth2PresentationApiController extends OAuth2ProtectedController
if ($validation->fails()) {
$ex = new ValidationException;
$ex->setMessages($validation->messaupdateSlideges()->toArray());
$ex->setMessages($validation->messages()->toArray());
throw $ex;
}

View File

@ -50,6 +50,10 @@ class PresentationSlide extends PresentationMaterial
return $this->slide;
}
public function clearSlide(){
$this->slide = null;
}
/**
* @param File $slide
*/
@ -74,6 +78,11 @@ class PresentationSlide extends PresentationMaterial
$this->link = $link;
}
public function clearLink():void
{
$this->link = "";
}
/**
* @return bool
*/

View File

@ -23,6 +23,7 @@ use App\Models\Foundation\Summit\Events\Presentations\TrackQuestions\TrackAnswer
use Illuminate\Support\Facades\Event;
use models\exceptions\EntityNotFoundException;
use models\exceptions\ValidationException;
use models\main\IFolderRepository;
use models\main\ITagRepository;
use models\main\Member;
use models\summit\ISpeakerRepository;
@ -70,6 +71,11 @@ final class PresentationService
*/
private $file_uploader;
/**
* @var IFolderRepository
*/
private $folder_repository;
/**
* PresentationService constructor.
* @param ISummitEventRepository $presentation_repository
@ -77,6 +83,7 @@ final class PresentationService
* @param ITagRepository $tag_repository
* @param IFolderService $folder_service
* @param IFileUploader $file_uploader
* @param IFolderRepository $folder_repository
* @param ITransactionService $tx_service
*/
public function __construct
@ -86,6 +93,7 @@ final class PresentationService
ITagRepository $tag_repository,
IFolderService $folder_service,
IFileUploader $file_uploader,
IFolderRepository $folder_repository,
ITransactionService $tx_service
)
{
@ -95,6 +103,7 @@ final class PresentationService
$this->tag_repository = $tag_repository;
$this->folder_service = $folder_service;
$this->file_uploader = $file_uploader;
$this->folder_repository = $folder_repository;
}
/**
@ -707,10 +716,24 @@ final class PresentationService
if (!$slide instanceof PresentationSlide)
throw new EntityNotFoundException('slide not found!');
$hasLink = isset($slide_data['link']);
$hasFile = $request->hasFile('file');
if($hasFile && $hasLink){
throw new ValidationException("you must set a file or a link, not both!");
}
PresentationSlideFactory::populate($slide, $slide_data);
if($hasLink && $slide->hasSlide()){
// drop file
$file = $slide->getSlide();
$this->folder_repository->delete($file);
$slide->clearSlide();
}
// check if there is any file sent
if($request->hasFile('file')){
if($hasFile){
$file = $request->file('file');
if (!in_array($file->extension(), $allowed_extensions)) {
throw new ValidationException(
@ -723,6 +746,7 @@ final class PresentationService
$slideFile = $this->file_uploader->build($file, sprintf('summits/%s/presentations/%s/slides/', $presentation->getSummitId(), $presentation_id), false);
$slide->setSlide($slideFile);
$slide->clearLink();
}
if (isset($data['order']) && intval($slide_data['order']) != $slide->getOrder()) {