diff --git a/app/Http/Controllers/Admin/PhotoController.php b/app/Http/Controllers/Admin/PhotoController.php index 004bd98..66319bf 100644 --- a/app/Http/Controllers/Admin/PhotoController.php +++ b/app/Http/Controllers/Admin/PhotoController.php @@ -2,12 +2,14 @@ namespace App\Http\Controllers\Admin; +use App\Helpers\MiscHelper; use App\Photo; use App\Upload; use App\UploadPhoto; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Http\UploadedFile; +use Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator; use Symfony\Component\HttpFoundation\File\File; class PhotoController extends Controller @@ -87,6 +89,72 @@ class PhotoController extends Controller ])); } + public function storeBulk(Request $request) + { + $this->authorize('admin-access'); + + $archiveFile = UploadedFile::createFromBase($request->files->get('archive')); + + // Load the linked album + $album = AlbumController::loadAlbum($request->get('album_id')); + + // Create a temporary folder to hold the extracted files + $tempFolder = sprintf('%s/btw_upload_%s', env('TEMP_FOLDER', '/tmp'), MiscHelper::randomString()); + mkdir($tempFolder); + + switch (strtolower($archiveFile->getMimeType())) + { + case 'application/zip': + $zip = new \ZipArchive(); + $zip->open($archiveFile->getPathname()); + $zip->extractTo($tempFolder); + $zip->close(); + break; + } + + $upload = new Upload(); + $upload->album_id = $album->id; + $upload->is_completed = false; + $upload->is_processing = false; + $upload->is_ready = false; + $upload->number_photos = 0; + $upload->save(); + + $di = new \RecursiveDirectoryIterator($tempFolder, \RecursiveDirectoryIterator::SKIP_DOTS); + + /** @var \SplFileInfo $fileInfo */ + foreach ($di as $fileInfo) + { + $photoFile = new File($fileInfo->getPathname()); + + /** @var File $savedFile */ + $savedFile = $album->getAlbumSource()->saveUploadedPhoto($album, $photoFile); + + $photo = new Photo(); + $photo->album_id = $album->id; + $photo->name = $photoFile->getFilename(); + $photo->file_name = $savedFile->getFilename(); + $photo->mime_type = $savedFile->getMimeType(); + $photo->file_size = $savedFile->getSize(); + $photo->save(); + + $upload->number_photos++; + + $uploadPhoto = new UploadPhoto(); + $uploadPhoto->upload_id = $upload->id; + $uploadPhoto->photo_id = $photo->id; + $uploadPhoto->save(); + } + + $upload->is_ready = true; + $upload->save(); + + return redirect(route('albums.monitorUpload', [ + 'id' => $album->id, + 'upload_id' => $upload->id + ])); + } + /** * Display the specified resource. * diff --git a/resources/views/themes/base/admin/show_album.blade.php b/resources/views/themes/base/admin/show_album.blade.php index 0e0bd66..36db8d9 100644 --- a/resources/views/themes/base/admin/show_album.blade.php +++ b/resources/views/themes/base/admin/show_album.blade.php @@ -32,6 +32,21 @@ {!! Form::submit(trans('forms.upload_action'), ['class' => 'btn btn-success']) !!} {!! Form::close() !!} + +