mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-26 02:20:39 +00:00
controller refactoring part 20
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Folders\Actions;
|
||||
|
||||
|
||||
use Domain\Folders\Models\Folder;
|
||||
|
||||
class UpdateFolderPropertyAction
|
||||
{
|
||||
/**
|
||||
* Update folder icon or style
|
||||
*/
|
||||
public function __invoke($request, string $id): void
|
||||
{
|
||||
// Get folder
|
||||
$folder = Folder::find($id);
|
||||
|
||||
// Set default folder icon
|
||||
if ($request->emoji === 'default') {
|
||||
$folder->update([
|
||||
'emoji' => null,
|
||||
'color' => null,
|
||||
]);
|
||||
}
|
||||
|
||||
// Set emoji
|
||||
if ($request->filled('emoji')) {
|
||||
$folder->update([
|
||||
'emoji' => $request->emoji,
|
||||
'color' => null,
|
||||
]);
|
||||
}
|
||||
|
||||
// Set color
|
||||
if ($request->filled('color')) {
|
||||
$folder->update([
|
||||
'emoji' => null,
|
||||
'color' => $request->color,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Items\Actions;
|
||||
|
||||
|
||||
use DB;
|
||||
use Domain\Files\Models\File as UserFile;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class DeleteFileOrFolderAction
|
||||
{
|
||||
/**
|
||||
* Delete file or folder
|
||||
*/
|
||||
public function __invoke(
|
||||
array $item,
|
||||
string $id,
|
||||
?Share $shared = null
|
||||
): void {
|
||||
// Delete folder
|
||||
if ($item['type'] === 'folder') {
|
||||
// Get folder
|
||||
$folder = Folder::withTrashed()
|
||||
->with('folders')
|
||||
->find($id);
|
||||
|
||||
// Get folder shared record
|
||||
$shared = Share::where('type', 'folder')
|
||||
->where('item_id', $id)
|
||||
->first();
|
||||
|
||||
// Delete folder shared record
|
||||
if ($shared) {
|
||||
$shared->delete();
|
||||
}
|
||||
|
||||
// Remove folder from user favourites
|
||||
DB::table('favourite_folder')
|
||||
->where('folder_id', $folder->id)
|
||||
->delete();
|
||||
|
||||
// Soft delete items
|
||||
if (! $item['force_delete']) {
|
||||
// Soft delete folder record
|
||||
$folder->delete();
|
||||
}
|
||||
|
||||
// Force delete children files
|
||||
if ($item['force_delete']) {
|
||||
// Get children folder ids
|
||||
$child_folders = filter_folders_ids($folder->trashedFolders, 'id');
|
||||
|
||||
// Get children files
|
||||
$files = UserFile::onlyTrashed()
|
||||
->whereIn('folder_id', Arr::flatten([$id, $child_folders]))
|
||||
->get();
|
||||
|
||||
// Remove all children files
|
||||
foreach ($files as $file) {
|
||||
// Delete file
|
||||
Storage::delete("/files/$file->user_id/$file->basename");
|
||||
|
||||
// Delete thumbnail if exist
|
||||
if ($file->thumbnail) {
|
||||
Storage::delete(
|
||||
"/files/$file->user_id/{$file->getRawOriginal('thumbnail')}"
|
||||
);
|
||||
}
|
||||
|
||||
// Delete file permanently
|
||||
$file->forceDelete();
|
||||
}
|
||||
|
||||
// Delete folder record
|
||||
$folder->forceDelete();
|
||||
}
|
||||
}
|
||||
|
||||
// Delete item
|
||||
if ($item['type'] !== 'folder') {
|
||||
// Get file
|
||||
$file = UserFile::withTrashed()
|
||||
->find($id);
|
||||
|
||||
// Get folder shared record
|
||||
$shared = Share::where('type', 'file')
|
||||
->where('item_id', $id)
|
||||
->first();
|
||||
|
||||
// Delete file shared record
|
||||
if ($shared) {
|
||||
$shared->delete();
|
||||
}
|
||||
|
||||
// Force delete file
|
||||
if ($item['force_delete']) {
|
||||
// Delete file
|
||||
Storage::delete("/files/$file->user_id/$file->basename");
|
||||
|
||||
// Delete thumbnail if exist
|
||||
if ($file->thumbnail) {
|
||||
Storage::delete(
|
||||
"/files/$file->user_id/{$file->getRawOriginal('thumbnail')}"
|
||||
);
|
||||
}
|
||||
|
||||
// Delete file permanently
|
||||
$file->forceDelete();
|
||||
}
|
||||
|
||||
// Soft delete file
|
||||
if (! $item['force_delete']) {
|
||||
// Soft delete file
|
||||
$file->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Items\Actions;
|
||||
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Files\Models\File as UserFile;
|
||||
use Domain\Folders\Models\Folder;
|
||||
|
||||
class MoveFileOrFolderAction
|
||||
{
|
||||
/**
|
||||
* Move folder or file to new location
|
||||
*/
|
||||
public function __invoke($request, string $to_id): void
|
||||
{
|
||||
foreach ($request->items as $item) {
|
||||
// Move folder
|
||||
if ($item['type'] === 'folder') {
|
||||
Folder::find($item['id'])
|
||||
->update(['parent_id' => $to_id]);
|
||||
}
|
||||
|
||||
// Move file
|
||||
if ($item['type'] !== 'folder') {
|
||||
UserFile::find($item['id'])
|
||||
->update(['folder_id' => $to_id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Items\Actions;
|
||||
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Items\Requests\RenameItemRequest;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class RenameFileOrFolderAction
|
||||
{
|
||||
/**
|
||||
* Rename item name
|
||||
*/
|
||||
public function __invoke(
|
||||
RenameItemRequest $request,
|
||||
string $id,
|
||||
): Model {
|
||||
|
||||
// Get item
|
||||
$item = get_item($request->input('type'), $id);
|
||||
|
||||
// Rename item
|
||||
$item->update([
|
||||
'name' => $request->input('name'),
|
||||
]);
|
||||
|
||||
// Return updated item
|
||||
return $item;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Items\Controllers;
|
||||
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Auth;
|
||||
use Domain\Items\Actions\DeleteFileOrFolderAction;
|
||||
use Domain\Items\Requests\DeleteItemRequest;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class DeleteFileOrFolderController extends Controller
|
||||
{
|
||||
/**
|
||||
* Delete item for authenticated master|editor user
|
||||
*/
|
||||
public function __invoke(
|
||||
DeleteItemRequest $request,
|
||||
DeleteFileOrFolderAction $deleteFileOrFolder,
|
||||
): Response{
|
||||
abort_if(
|
||||
is_demo_account(Auth::user()?->email), 204, 'Done.'
|
||||
);
|
||||
|
||||
foreach ($request->input('items') as $item) {
|
||||
($deleteFileOrFolder)($item, $item['id']);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php
|
||||
namespace Domain\Items\Controllers;
|
||||
|
||||
use Exception;
|
||||
use Illuminate\Http\Request;
|
||||
use Support\Services\HelperService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Support\Demo\Actions\DemoService;
|
||||
use Support\Services\FileManagerService;
|
||||
use Domain\Items\Requests\MoveItemRequest;
|
||||
use Domain\Items\Requests\DeleteItemRequest;
|
||||
use Domain\Items\Requests\RenameItemRequest;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
|
||||
class EditItemsController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private FileManagerService $filemanager,
|
||||
private HelperService $helper,
|
||||
private DemoService $demo,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename item for authenticated master|editor user
|
||||
*
|
||||
* @param RenameItemRequest $request
|
||||
* @param $id
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
public function rename_item(RenameItemRequest $request, $id)
|
||||
{
|
||||
if (is_demo_account('howdy@hi5ve.digital')) {
|
||||
return $this->demo->rename_item($request, $id);
|
||||
}
|
||||
|
||||
// If request contain icon or color, then change it
|
||||
if ($request->filled('emoji') || $request->filled('color')) {
|
||||
$this->filemanager->edit_folder_properties($request, $id);
|
||||
}
|
||||
|
||||
// Rename Item
|
||||
return $this->filemanager->rename_item($request, $id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete item for authenticated master|editor user
|
||||
*
|
||||
* @param DeleteItemRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
* @throws Exception
|
||||
*/
|
||||
public function delete_item(DeleteItemRequest $request)
|
||||
{
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
foreach ($request->input('items') as $item) {
|
||||
$this->filemanager->delete_item($item, $item['id']);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move item for authenticated master|editor user
|
||||
*
|
||||
* @param MoveItemRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function move(MoveItemRequest $request)
|
||||
{
|
||||
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
|
||||
|
||||
$this->filemanager->move($request, $request->to_id);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Items\Controllers;
|
||||
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Auth;
|
||||
use Domain\Files\Models\File as UserFile;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Domain\Items\Actions\MoveFileOrFolderAction;
|
||||
use Domain\Items\Requests\MoveItemRequest;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class MoveFileOrFolderController extends Controller
|
||||
{
|
||||
/**
|
||||
* Move item for authenticated master|editor user
|
||||
*/
|
||||
public function __invoke(
|
||||
MoveItemRequest $request,
|
||||
MoveFileOrFolderAction $moveFileOrFolder,
|
||||
): Response {
|
||||
|
||||
abort_if(
|
||||
is_demo_account(Auth::user()?->email), 204, 'Done.'
|
||||
);
|
||||
|
||||
($moveFileOrFolder)(
|
||||
$request, $request->input('to_id')
|
||||
);
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Domain\Items\Controllers;
|
||||
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Auth;
|
||||
use Domain\Folders\Actions\UpdateFolderPropertyAction;
|
||||
use Domain\Items\Actions\RenameFileOrFolderAction;
|
||||
use Domain\Items\Requests\RenameItemRequest;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class RenameFileOrFolderController extends Controller
|
||||
{
|
||||
/**
|
||||
* Rename item for authenticated master|editor user
|
||||
*/
|
||||
public function __invoke(
|
||||
RenameItemRequest $request,
|
||||
string $id,
|
||||
RenameFileOrFolderAction $renameFileOrFolder,
|
||||
UpdateFolderPropertyAction $updateFolderProperty
|
||||
): Model {
|
||||
|
||||
if (is_demo_account(Auth::user()?->email)) {
|
||||
return $this->demo->rename_item($request, $id);
|
||||
}
|
||||
|
||||
// If request contain icon or color, then change it
|
||||
if ($request->filled('emoji') || $request->filled('color')) {
|
||||
($updateFolderProperty)($request, $id);
|
||||
}
|
||||
|
||||
// Rename Item
|
||||
return ($renameFileOrFolder)($request, $id);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user