mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-28 19:10:40 +00:00
controller refactoring part 25
This commit is contained in:
@@ -6,37 +6,46 @@ use Intervention\Image\ImageManagerStatic as Image;
|
||||
|
||||
class CreateImageThumbnailAction
|
||||
{
|
||||
private array $availableFormats = [
|
||||
'image/gif',
|
||||
'image/jpeg',
|
||||
'image/jpg',
|
||||
'image/png',
|
||||
'image/webp'
|
||||
];
|
||||
|
||||
/**
|
||||
* Create image thumbnail from gif, jpeg, jpg, png, webp or svg
|
||||
* Create image thumbnail from uploaded image
|
||||
*/
|
||||
public function __invoke(
|
||||
string $file_path,
|
||||
string $filename,
|
||||
string $user_id
|
||||
): string | null {
|
||||
$availableFormats = ['image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/webp'];
|
||||
|
||||
$mimeType = Storage::disk('local')->mimeType($file_path);
|
||||
|
||||
// Create thumbnail from image
|
||||
if (in_array(Storage::disk('local')->mimeType($file_path), $availableFormats)) {
|
||||
if (in_array($mimeType, $this->availableFormats)) {
|
||||
|
||||
// Get thumbnail name
|
||||
$thumbnail = "thumbnail-$filename";
|
||||
|
||||
// Create intervention image
|
||||
$image = Image::make(Storage::disk('local')->path($file_path))
|
||||
$image = Image::make(Storage::disk('local')
|
||||
->path($file_path))
|
||||
->orientate();
|
||||
|
||||
// Resize image
|
||||
$image->resize(512, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
})->stream();
|
||||
$image->resize(512, null, fn ($constraint) => $constraint->aspectRatio())->stream();
|
||||
|
||||
// Store thumbnail to disk
|
||||
Storage::put("files/$user_id/$thumbnail", $image);
|
||||
}
|
||||
|
||||
// Return thumbnail as svg file
|
||||
if (Storage::disk('local')->mimeType($file_path) === 'image/svg+xml') {
|
||||
$thumbnail = $filename;
|
||||
if ($mimeType === 'image/svg+xml') {
|
||||
return $filename;
|
||||
}
|
||||
|
||||
return $thumbnail ?? null;
|
||||
|
||||
@@ -16,7 +16,7 @@ class MoveFileToExternalStorageAction
|
||||
string $file,
|
||||
string $user_id
|
||||
): void {
|
||||
$disk_local = \Storage::disk('local');
|
||||
$disk_local = Storage::disk('local');
|
||||
|
||||
// Get file size
|
||||
$filesize = $disk_local->size("files/$user_id/$file");
|
||||
@@ -24,7 +24,7 @@ class MoveFileToExternalStorageAction
|
||||
// If file is bigger than 5.2MB then run multipart upload
|
||||
if ($filesize > 5242880) {
|
||||
// Get driver
|
||||
$driver = \Storage::getDriver();
|
||||
$driver = Storage::getDriver();
|
||||
|
||||
// Get adapter
|
||||
$adapter = $driver->getAdapter();
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Localization\Actions;
|
||||
|
||||
|
||||
use Domain\Localization\Models\Language;
|
||||
use Domain\Settings\Models\Setting;
|
||||
|
||||
class SeedDefaultLanguageAction
|
||||
{
|
||||
/**
|
||||
* Store default VueFileManager language into database
|
||||
*/
|
||||
public function __invoke(): void
|
||||
{
|
||||
Language::create([
|
||||
'name' => 'English',
|
||||
'locale' => 'en',
|
||||
]);
|
||||
|
||||
Setting::create([
|
||||
'name' => 'language',
|
||||
'value' => 'en',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Pages\Actions;
|
||||
|
||||
|
||||
use Domain\Pages\Models\Page;
|
||||
|
||||
class SeedDefaultPagesAction
|
||||
{
|
||||
/**
|
||||
* Store default pages content like Terms of Service, Privacy Policy and Cookie Policy into database
|
||||
*/
|
||||
public function __invoke(): void
|
||||
{
|
||||
collect(config('content.pages'))
|
||||
->each(fn ($page) => Page::updateOrCreate($page));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Settings\Actions;
|
||||
|
||||
|
||||
use Domain\Settings\Models\Setting;
|
||||
|
||||
class SeedDefaultSettingsAction
|
||||
{
|
||||
/**
|
||||
* Store default VueFileManager settings into database
|
||||
*/
|
||||
public function __invoke(
|
||||
string $license
|
||||
): void {
|
||||
collect(
|
||||
config('content.content.' . strtolower($license))
|
||||
)->each(fn ($content) => Setting::forceCreate($content));
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Storage;
|
||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||
use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
||||
|
||||
class GetIAppController
|
||||
class GetAppImageController
|
||||
{
|
||||
/**
|
||||
* Get system image
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\SetupWizard\Actions;
|
||||
|
||||
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class CreateDiskDirectoriesAction
|
||||
{
|
||||
/**
|
||||
* Create default folders which application to process files.
|
||||
*/
|
||||
public function __invoke(): void
|
||||
{
|
||||
collect(['avatars', 'chunks', 'system', 'files', 'temp', 'zip'])
|
||||
->each(function ($directory) {
|
||||
// Create directory for local driver
|
||||
Storage::disk('local')
|
||||
->makeDirectory($directory);
|
||||
|
||||
// Create directory for external driver
|
||||
Storage::makeDirectory($directory);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2,12 +2,14 @@
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use App\Users\Models\User;
|
||||
use Domain\Localization\Actions\SeedDefaultLanguageAction;
|
||||
use Domain\Pages\Actions\SeedDefaultPagesAction;
|
||||
use Domain\Settings\Actions\SeedDefaultSettingsAction;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\SetupWizard\Services\SetupService;
|
||||
|
||||
/**
|
||||
* Create and login admin account
|
||||
@@ -15,9 +17,10 @@ use Domain\SetupWizard\Services\SetupService;
|
||||
class CreateAdminAccountController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public SetupService $setup,
|
||||
) {
|
||||
}
|
||||
public SeedDefaultPagesAction $seedDefaultPages,
|
||||
public SeedDefaultLanguageAction $seedDefaultLanguage,
|
||||
public SeedDefaultSettingsAction $seedDefaultSettingsAction,
|
||||
) {}
|
||||
|
||||
public function __invoke(
|
||||
Request $request
|
||||
@@ -70,9 +73,9 @@ class CreateAdminAccountController extends Controller
|
||||
});
|
||||
|
||||
// Set up application
|
||||
$this->setup->seed_default_pages();
|
||||
$this->setup->seed_default_settings($request->input('license'));
|
||||
$this->setup->seed_default_language();
|
||||
($this->seedDefaultPages)();
|
||||
($this->seedDefaultSettingsAction)($request->input('license'));
|
||||
($this->seedDefaultLanguage)();
|
||||
|
||||
// Login account
|
||||
if (Auth::attempt($request->only(['email', 'password']))) {
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Services;
|
||||
|
||||
use Domain\Pages\Models\Page;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Domain\Localization\Models\Language;
|
||||
|
||||
class SetupService
|
||||
{
|
||||
/**
|
||||
* Create default folders which application to process files.
|
||||
*/
|
||||
public function create_directories()
|
||||
{
|
||||
collect(['avatars', 'chunks', 'system', 'files', 'temp', 'zip'])
|
||||
->each(function ($directory) {
|
||||
// Create directory for local driver
|
||||
Storage::disk('local')
|
||||
->makeDirectory($directory);
|
||||
|
||||
// Create directory for external driver
|
||||
Storage::makeDirectory($directory);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Store default pages content like Terms of Service, Privacy Policy and Cookie Policy into database
|
||||
*/
|
||||
public function seed_default_pages()
|
||||
{
|
||||
collect(config('content.pages'))
|
||||
->each(function ($page) {
|
||||
Page::updateOrCreate($page);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Store default VueFileManager settings into database
|
||||
*
|
||||
* @param $license
|
||||
*/
|
||||
public function seed_default_settings($license)
|
||||
{
|
||||
collect(config('content.content.' . strtolower($license)))
|
||||
->each(function ($content) {
|
||||
Setting::forceCreate($content);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Store default VueFileManager settings into database
|
||||
*/
|
||||
public function seed_default_language()
|
||||
{
|
||||
Language::create([
|
||||
'name' => 'English',
|
||||
'locale' => 'en',
|
||||
]);
|
||||
|
||||
Setting::create([
|
||||
'name' => 'language',
|
||||
'value' => 'en',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -5,8 +5,9 @@ use Domain\Sharing\Models\Share;
|
||||
|
||||
class ProtectShareRecordAction
|
||||
{
|
||||
public function __invoke(Share $shared): void
|
||||
{
|
||||
public function __invoke(
|
||||
Share $shared
|
||||
): void {
|
||||
if ($shared->is_protected) {
|
||||
$abort_message = "Sorry, you don't have permission";
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ namespace Domain\Sharing\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Zipping\Models\Zip;
|
||||
use Domain\Zip\Models\Zip;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -31,12 +31,8 @@ class ShareController extends Controller
|
||||
SendViaEmailAction $sendLinkToEmailAction,
|
||||
): ShareResource {
|
||||
$shared = Share::create([
|
||||
'password' => $request->has('password')
|
||||
? bcrypt($request->input('password'))
|
||||
: null,
|
||||
'type' => $request->input('type') === 'folder'
|
||||
? 'folder'
|
||||
: 'file',
|
||||
'password' => $request->has('password') ? bcrypt($request->input('password')) : null,
|
||||
'type' => $request->input('type') === 'folder' ? 'folder' : 'file',
|
||||
'is_protected' => $request->input('isPassword'),
|
||||
'permission' => $request->input('permission') ?? null,
|
||||
'expire_in' => $request->input('expiration') ?? null,
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
namespace Domain\Zipping\Actions;
|
||||
namespace Domain\Zip\Actions;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Domain\Zipping\Models\Zip;
|
||||
use Domain\Zip\Models\Zip;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
namespace Domain\Zipping\Actions;
|
||||
namespace Domain\Zip\Actions;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Domain\Zipping\Models\Zip;
|
||||
use Domain\Zip\Models\Zip;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Domain\Zipping\Controllers;
|
||||
namespace Domain\Zip\Controllers;
|
||||
|
||||
use Domain\Zipping\Models\Zip;
|
||||
use Domain\Zip\Models\Zip;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
namespace Domain\Zipping\Controllers;
|
||||
namespace Domain\Zip\Controllers;
|
||||
|
||||
use Domain\Zipping\Models\Zip;
|
||||
use Domain\Zip\Models\Zip;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Domain\Traffic\Actions\RecordDownloadAction;
|
||||
+4
-4
@@ -1,12 +1,12 @@
|
||||
<?php
|
||||
namespace Domain\Zipping\Controllers;
|
||||
namespace Domain\Zip\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Domain\Files\Models\File;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Zipping\Actions\ZipFilesAction;
|
||||
use Domain\Zip\Actions\ZipFilesAction;
|
||||
use Domain\Sharing\Actions\ProtectShareRecordAction;
|
||||
use Domain\Sharing\Actions\VerifyAccessToItemAction;
|
||||
|
||||
@@ -18,11 +18,11 @@ class VisitorZipFilesController extends Controller
|
||||
public function __construct(
|
||||
private ProtectShareRecordAction $protectShareRecord,
|
||||
private VerifyAccessToItemAction $verifyAccessToItem,
|
||||
private ZipFilesAction $zipFiles,
|
||||
) {
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
ZipFilesAction $zipFiles,
|
||||
Request $request,
|
||||
Share $shared,
|
||||
): Response {
|
||||
@@ -43,7 +43,7 @@ class VisitorZipFilesController extends Controller
|
||||
->whereIn('id', $request->items)
|
||||
->get();
|
||||
|
||||
$zip = ($zipFiles)($files, $shared);
|
||||
$zip = ($this->zipFiles)($files, $shared);
|
||||
|
||||
// Get file
|
||||
return response([
|
||||
+4
-4
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
namespace Domain\Zipping\Controllers;
|
||||
namespace Domain\Zip\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Zipping\Actions\ZipFolderAction;
|
||||
use Domain\Zip\Actions\ZipFolderAction;
|
||||
use Domain\Sharing\Actions\ProtectShareRecordAction;
|
||||
use Domain\Sharing\Actions\VerifyAccessToItemAction;
|
||||
|
||||
@@ -17,11 +17,11 @@ class VisitorZipFolderController extends Controller
|
||||
public function __construct(
|
||||
private ProtectShareRecordAction $protectShareRecord,
|
||||
private VerifyAccessToItemAction $verifyAccessToItem,
|
||||
private ZipFolderAction $zipFolder,
|
||||
) {
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
ZipFolderAction $zipFolder,
|
||||
string $id,
|
||||
Share $shared,
|
||||
): Response {
|
||||
@@ -39,7 +39,7 @@ class VisitorZipFolderController extends Controller
|
||||
abort(404, 'Requested folder doesn\'t exists.');
|
||||
}
|
||||
|
||||
$zip = ($zipFolder)($id, $shared);
|
||||
$zip = ($this->zipFolder)($id, $shared);
|
||||
|
||||
// Get file
|
||||
return response([
|
||||
+8
-4
@@ -1,24 +1,28 @@
|
||||
<?php
|
||||
namespace Domain\Zipping\Controllers;
|
||||
namespace Domain\Zip\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Domain\Files\Models\File;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\Zipping\Actions\ZipFilesAction;
|
||||
use Domain\Zip\Actions\ZipFilesAction;
|
||||
|
||||
class ZipFilesController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private ZipFilesAction $zipFiles,
|
||||
) {
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
Request $request,
|
||||
ZipFilesAction $zipFiles,
|
||||
): Response {
|
||||
$files = File::whereUserId(Auth::id())
|
||||
->whereIn('id', $request->input('items'))
|
||||
->get();
|
||||
|
||||
$zip = ($zipFiles)($files);
|
||||
$zip = ($this->zipFiles)($files);
|
||||
|
||||
return response([
|
||||
'url' => route('zip', $zip->id),
|
||||
+8
-4
@@ -1,17 +1,21 @@
|
||||
<?php
|
||||
namespace Domain\Zipping\Controllers;
|
||||
namespace Domain\Zip\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\Zipping\Actions\ZipFolderAction;
|
||||
use Domain\Zip\Actions\ZipFolderAction;
|
||||
|
||||
class ZipFolderController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private ZipFolderAction $zipFolder,
|
||||
) {
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
string $id,
|
||||
ZipFolderAction $zipFolder,
|
||||
): Response {
|
||||
$folder = Folder::whereUserId(Auth::id())
|
||||
->where('id', $id);
|
||||
@@ -20,7 +24,7 @@ class ZipFolderController extends Controller
|
||||
abort(404, "Requested folder doesn't exists.");
|
||||
}
|
||||
|
||||
$zip = ($zipFolder)($id);
|
||||
$zip = ($this->zipFolder)($id);
|
||||
|
||||
return response([
|
||||
'url' => route('zip', $zip->id),
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace Domain\Zipping\Models;
|
||||
namespace Domain\Zip\Models;
|
||||
|
||||
use App\Users\Models\User;
|
||||
use Illuminate\Support\Str;
|
||||
@@ -8,6 +8,9 @@ use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
|
||||
/**
|
||||
* @property mixed basename
|
||||
*/
|
||||
class Zip extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
Reference in New Issue
Block a user