mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 08:12:15 +00:00
controller refactoring part 20
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Users\Actions\CreateNewUserAction;
|
use App\Users\Actions\CreateNewUserAction;
|
||||||
|
use Domain\Items\Controllers\DeleteFileOrFolderController;
|
||||||
|
use Domain\Items\Controllers\MoveFileOrFolderController;
|
||||||
|
use Domain\Items\Controllers\RenameFileOrFolderController;
|
||||||
use Domain\Pages\Controllers\PagesController;
|
use Domain\Pages\Controllers\PagesController;
|
||||||
use Domain\Sharing\Controllers\ShareController;
|
use Domain\Sharing\Controllers\ShareController;
|
||||||
use Domain\Items\Controllers\EditItemsController;
|
use Domain\Items\Controllers\EditItemsController;
|
||||||
@@ -74,9 +77,9 @@ Route::group(['middleware' => ['auth:sanctum']], function () {
|
|||||||
Route::post('/create-folder', CreateFolderController::class);
|
Route::post('/create-folder', CreateFolderController::class);
|
||||||
Route::post('/upload', UploadFileController::class);
|
Route::post('/upload', UploadFileController::class);
|
||||||
|
|
||||||
Route::patch('/rename/{id}', [EditItemsController::class, 'rename_item']);
|
Route::patch('/rename/{id}', RenameFileOrFolderController::class);
|
||||||
Route::post('/remove', [EditItemsController::class, 'delete_item']);
|
Route::post('/remove', DeleteFileOrFolderController::class);
|
||||||
Route::post('/move', [EditItemsController::class, 'move']);
|
Route::post('/move', MoveFileOrFolderController::class);
|
||||||
|
|
||||||
Route::get('/zip/folder/{id}', ZipFolderController::class);
|
Route::get('/zip/folder/{id}', ZipFolderController::class);
|
||||||
Route::post('/zip/files', ZipFilesController::class);
|
Route::post('/zip/files', ZipFilesController::class);
|
||||||
|
|||||||
43
src/Domain/Folders/Actions/UpdateFolderPropertyAction.php
Normal file
43
src/Domain/Folders/Actions/UpdateFolderPropertyAction.php
Normal file
@@ -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,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,60 +1,26 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Support\Services;
|
|
||||||
|
|
||||||
|
namespace Domain\Items\Actions;
|
||||||
|
|
||||||
|
|
||||||
use DB;
|
use DB;
|
||||||
use App\Users\Models\User;
|
|
||||||
use Illuminate\Support\Arr;
|
|
||||||
use Domain\Sharing\Models\Share;
|
|
||||||
use Domain\Folders\Models\Folder;
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
use Illuminate\Support\Facades\File;
|
|
||||||
use Illuminate\Support\Facades\Storage;
|
|
||||||
use Domain\Files\Models\File as UserFile;
|
use Domain\Files\Models\File as UserFile;
|
||||||
use Domain\Items\Requests\RenameItemRequest;
|
use Domain\Folders\Models\Folder;
|
||||||
|
use Domain\Sharing\Models\Share;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class FileManagerService
|
class DeleteFileOrFolderAction
|
||||||
{
|
{
|
||||||
public function __construct(
|
|
||||||
private HelperService $helper,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rename item name
|
|
||||||
*
|
|
||||||
* @param RenameItemRequest $request
|
|
||||||
* @param $id
|
|
||||||
* @param null $shared
|
|
||||||
* @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
public function rename_item($request, $id, $shared = null)
|
|
||||||
{
|
|
||||||
// Get user id
|
|
||||||
$user_id = $shared ? $shared->user_id : Auth::id();
|
|
||||||
|
|
||||||
// Get item
|
|
||||||
$item = get_item($request->type, $id, $user_id);
|
|
||||||
|
|
||||||
// Rename item
|
|
||||||
$item->update([
|
|
||||||
'name' => $request->name,
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Return updated item
|
|
||||||
return $item;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete file or folder
|
* Delete file or folder
|
||||||
*
|
|
||||||
* @param $item
|
|
||||||
* @param $id
|
|
||||||
* @param null $shared
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
*/
|
||||||
public function delete_item($item, $id, $shared = null)
|
public function __invoke(
|
||||||
{
|
array $item,
|
||||||
|
string $id,
|
||||||
|
?Share $shared = null
|
||||||
|
): void {
|
||||||
// Delete folder
|
// Delete folder
|
||||||
if ($item['type'] === 'folder') {
|
if ($item['type'] === 'folder') {
|
||||||
// Get folder
|
// Get folder
|
||||||
@@ -153,63 +119,4 @@ class FileManagerService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/**
|
|
||||||
* Move folder or file to new location
|
|
||||||
*
|
|
||||||
* @param $request
|
|
||||||
* @param $to_id
|
|
||||||
*/
|
|
||||||
public function move($request, $to_id)
|
|
||||||
{
|
|
||||||
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]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store folder icon
|
|
||||||
*
|
|
||||||
* @param $request
|
|
||||||
* @param $id
|
|
||||||
*/
|
|
||||||
public function edit_folder_properties($request, $id)
|
|
||||||
{
|
|
||||||
// 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,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
32
src/Domain/Items/Actions/MoveFileOrFolderAction.php
Normal file
32
src/Domain/Items/Actions/MoveFileOrFolderAction.php
Normal file
@@ -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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
32
src/Domain/Items/Actions/RenameFileOrFolderAction.php
Normal file
32
src/Domain/Items/Actions/RenameFileOrFolderAction.php
Normal file
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
36
src/Domain/Items/Controllers/MoveFileOrFolderController.php
Normal file
36
src/Domain/Items/Controllers/MoveFileOrFolderController.php
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,6 +25,6 @@ abstract class TestCase extends BaseTestCase
|
|||||||
|
|
||||||
resolve(SetupService::class)->create_directories();
|
resolve(SetupService::class)->create_directories();
|
||||||
|
|
||||||
//$this->withoutExceptionHandling();
|
$this->withoutExceptionHandling();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user