controller refactoring part 5

This commit is contained in:
Peter Papp
2021-07-20 11:23:45 +02:00
parent 8c493395c4
commit cde8b6aae3
25 changed files with 378 additions and 334 deletions

File diff suppressed because one or more lines are too long

View File

@@ -43,7 +43,7 @@
"/chunks/files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared/file-browser.js?id=87253c5f59242e420579",
"/chunks/files~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/shared/file-browser~chunks/shared/single-file.js?id=a6be7116bbdadfb8b1cc",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=96019e230f0c5b59478a",
"/chunks/homepage.js": "/chunks/homepage.js?id=5a299216398f59a4947b",
"/chunks/homepage.js": "/chunks/homepage.js?id=6de293d9d23648923ca8",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=0fe6c45de3fe3c75bd04",
"/chunks/invoices.js": "/chunks/invoices.js?id=35179ba2b74cdaf74492",
"/chunks/not-found.js": "/chunks/not-found.js?id=3f0c127b00d113541acc",
@@ -274,5 +274,6 @@
"/chunks/upgrade-billing.8805b4393b5aceb393ab.hot-update.js": "/chunks/upgrade-billing.8805b4393b5aceb393ab.hot-update.js",
"/chunks/platform.13a7c4eb981e304dd11c.hot-update.js": "/chunks/platform.13a7c4eb981e304dd11c.hot-update.js",
"/chunks/platform.1dc9a86f8f195ad336c8.hot-update.js": "/chunks/platform.1dc9a86f8f195ad336c8.hot-update.js",
"/chunks/platform.c72b7ed144ae27e09ac0.hot-update.js": "/chunks/platform.c72b7ed144ae27e09ac0.hot-update.js"
"/chunks/platform.c72b7ed144ae27e09ac0.hot-update.js": "/chunks/platform.c72b7ed144ae27e09ac0.hot-update.js",
"/chunks/homepage.e80d5d3c53decab802d5.hot-update.js": "/chunks/homepage.e80d5d3c53decab802d5.hot-update.js"
}

View File

@@ -66,7 +66,7 @@
this.$router.push({name: 'SignIn'})
// Get page content
axios.get('/api/content', {
axios.get('/api/settings', {
params: {
column: 'allow_homepage|footer_content|get_started_description|get_started_title|pricing_description|pricing_title|feature_description_3|feature_title_3|feature_description_2|feature_title_2|feature_description_1|feature_title_1|features_description|features_title|header_description|header_title|section_get_started|section_pricing_content|section_feature_boxes|section_features'
}

View File

@@ -1,12 +1,12 @@
<?php
use Domain\Admin\Controllers\UserController;
use Domain\Pages\Controllers\PagesController;
use Domain\Plans\Controllers\PlansController;
use Domain\Admin\Controllers\InvoiceController;
use Domain\Admin\Controllers\DashboardController;
use Domain\Settings\Controllers\SettingController;
use Domain\Pages\Controllers\AdminPagesController;
use Domain\Localization\Controllers\LanguageController;
use Domain\Settings\Controllers\AdminSettingsController;
// Dashboard
Route::group(['prefix' => 'dashboard'], function () {
@@ -40,9 +40,9 @@ Route::group(['prefix' => 'plans'], function () {
// Pages
Route::group(['prefix' => 'pages'], function () {
Route::patch('/{page}', [PagesController::class, 'update']);
Route::get('/{page}', [PagesController::class, 'show']);
Route::get('/', [PagesController::class, 'index']);
Route::patch('/{page}', [AdminPagesController::class, 'update']);
Route::get('/{page}', [AdminPagesController::class, 'show']);
Route::get('/', [AdminPagesController::class, 'index']);
});
// Invoices
@@ -50,11 +50,11 @@ Route::get('/invoices', [InvoiceController::class, 'index']);
// Settings
Route::group(['prefix' => 'settings'], function () {
Route::get('/flush-cache', [SettingController::class, 'flush_cache']);
Route::post('/stripe', [SettingController::class, 'set_stripe']);
Route::post('/email', [SettingController::class, 'set_email']);
Route::patch('/', [SettingController::class, 'update']);
Route::get('/', [SettingController::class, 'show']);
Route::get('/flush-cache', [AdminSettingsController::class, 'flush_cache']);
Route::post('/stripe', [AdminSettingsController::class, 'set_stripe']);
Route::post('/email', [AdminSettingsController::class, 'set_email']);
Route::patch('/', [AdminSettingsController::class, 'update']);
Route::get('/', [AdminSettingsController::class, 'show']);
});
// Language

View File

@@ -1,7 +1,8 @@
<?php
use App\Users\Actions\CreateNewUserAction;
use Domain\Homepage\Controllers\SendContactMessageController;
use Domain\Files\Controllers\UploadFilesController;
use Domain\Pages\Controllers\PagesController;
use Domain\Sharing\Controllers\ShareController;
use Domain\Items\Controllers\EditItemsController;
use Domain\Trash\Controllers\DumpTrashController;
@@ -9,23 +10,31 @@ use App\Users\Controllers\ResetPasswordController;
use Domain\Zipping\Controllers\ZipFilesController;
use App\Users\Controllers\ForgotPasswordController;
use Domain\Folders\Controllers\FavouriteController;
use Domain\Plans\Controllers\ActivePlansController;
use Domain\Settings\Controllers\SettingsController;
use Domain\Zipping\Controllers\ZipFolderController;
use Domain\Homepage\Controllers\AppFunctionsController;
use Domain\Folders\Controllers\CreateFolderController;
use Domain\Sharing\Controllers\ShareViaEmailController;
use Domain\Trash\Controllers\RestoreTrashContentController;
use Domain\Browsing\Controllers\BrowseLatestFilesController;
use Domain\Browsing\Controllers\BrowseSharedItemsController;
use Domain\Browsing\Controllers\BrowseTrashContentController;
use Domain\Homepage\Controllers\SendContactMessageController;
use Domain\Browsing\Controllers\BrowseFolderContentController;
use Domain\Folders\Controllers\NavigationFolderTreeController;
use Domain\Browsing\Controllers\SearchFilesAndFoldersController;
use Domain\Browsing\Controllers\BrowseParticipantsUploadsController;
// Pages
Route::get('/content', [AppFunctionsController::class, 'get_setting_columns']);
Route::apiResource('/page', PagesController::class);
// Homepage
Route::post('/contact', SendContactMessageController::class);
Route::get('/page/{page}', [AppFunctionsController::class, 'get_page']);
Route::get('/pricing', [AppFunctionsController::class, 'get_storage_plans']);
Route::get('/pricing', ActivePlansController::class);
Route::get('/settings', SettingsController::class);
// Register user
Route::post('/register', CreateNewUserAction::class);
// Password reset
Route::group(['prefix' => 'password'], function () {
@@ -33,9 +42,6 @@ Route::group(['prefix' => 'password'], function () {
Route::post('/reset', [ResetPasswordController::class, 'reset']);
});
// Register user
Route::post('/register', CreateNewUserAction::class);
// User master Routes
Route::group(['middleware' => ['auth:sanctum']], function () {
// Browse
@@ -55,24 +61,25 @@ Route::group(['middleware' => ['auth:sanctum']], function () {
Route::delete('/dump', DumpTrashController::class);
});
// Share
Route::group(['prefix' => 'share'], function () {
Route::post('/{token}/email', ShareViaEmailController::class);
Route::apiResource('/', ShareController::class);
});
// Favourites
Route::apiResource('/folders/favourites', FavouriteController::class);
// Share
Route::post('/share/{token}/email', ShareViaEmailController::class);
Route::apiResource('/share', ShareController::class);
});
// User master,editor routes
Route::group(['middleware' => ['auth:sanctum']], function () {
Route::post('/create-folder', [EditItemsController::class, 'create_folder']);
Route::post('/create-folder', CreateFolderController::class);
Route::post('/upload', UploadFilesController::class);
Route::patch('/rename/{id}', [EditItemsController::class, 'rename_item']);
Route::post('/remove', [EditItemsController::class, 'delete_item']);
Route::post('/upload', [EditItemsController::class, 'upload']);
Route::post('/move', [EditItemsController::class, 'move']);
Route::group(['prefix' => '/zip'], function () {
Route::post('/files', ZipFilesController::class);
Route::get('/folder/{id}', ZipFolderController::class);
});
Route::get('/zip/folder/{id}', ZipFolderController::class);
Route::post('/zip/files', ZipFilesController::class);
});

View File

@@ -2,11 +2,11 @@
use Domain\Admin\Controllers\InvoiceController;
use Domain\Homepage\Controllers\IndexController;
use Domain\Localization\Controllers\CurrentLocalizationController;
use Domain\Sharing\Controllers\BrowseShareController;
use Domain\Homepage\Controllers\AppFunctionsController;
use Domain\SetupWizard\Controllers\SetupWizardController;
use Domain\Subscriptions\Controllers\StripeWebhookController;
use Domain\Localization\Controllers\CurrentLocalizationController;
Route::post('/stripe/webhook', [StripeWebhookController::class, 'handleWebhook']);
Route::post('/admin-setup', [SetupWizardController::class, 'create_admin_account']);

View File

@@ -0,0 +1,100 @@
<?php
namespace Domain\Files\Actions;
use App\Users\Models\User;
use Domain\Files\Models\File as UserFile;
use Domain\Files\Requests\UploadRequest;
use Domain\Sharing\Models\Share;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use Support\Services\HelperService;
class UploadFilesAction
{
public function __construct(
public HelperService $helper,
) {}
/**
* Upload new file
*/
public function __invoke(
UploadRequest $request,
?Share $shared = null,
): UserFile {
// Get parent_id from request
$file = $request->file('file');
// File name
$disk_file_name = basename('chunks/' . $file->getClientOriginalName(), '.part');
$temp_filename = $file->getClientOriginalName();
// File Path
$file_path = Storage::disk('local')->path('chunks/' . $temp_filename);
// Generate file
File::append($file_path, $file->get());
// Size of file
$file_size = File::size($file_path);
// Size of limit
$limit = get_setting('upload_limit');
// File size handling
if ($limit && $file_size > format_bytes($limit)) {
abort(413);
}
// If last then process file
if ($request->boolean('is_last')) {
$metadata = get_image_meta_data($file);
$disk_local = Storage::disk('local');
// Get user data
$user_id = $shared->user_id ?? Auth::id();
// File Info
$file_size = $disk_local->size("chunks/$temp_filename");
$file_mimetype = $disk_local->mimeType("chunks/$temp_filename");
// Check if user has enough space to upload file
$this->helper->check_user_storage_capacity($user_id, $file_size, $temp_filename);
// Create thumbnail
$thumbnail = $this->helper->create_image_thumbnail("chunks/$temp_filename", $disk_file_name, $user_id);
// Move finished file from chunk to file-manager directory
$disk_local->move("chunks/$temp_filename", "files/$user_id/$disk_file_name");
// Move files to external storage
if (! is_storage_driver(['local'])) {
$this->helper->move_file_to_external_storage($disk_file_name, $user_id);
}
// Store user upload size
User::find($user_id)
->recordUpload($file_size);
// Return new file
return UserFile::create([
'mimetype' => get_file_type_from_mimetype($file_mimetype),
'type' => get_file_type($file_mimetype),
'folder_id' => $request->folder_id,
'metadata' => $metadata,
'name' => $request->filename,
'basename' => $disk_file_name,
'author' => $shared ? 'visitor' : 'user',
'thumbnail' => $thumbnail,
'filesize' => $file_size,
'user_id' => $user_id,
]);
}
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Domain\Files\Controllers;
use App\Http\Controllers\Controller;
use Domain\Files\Actions\UploadFilesAction;
use Domain\Files\Models\File;
use Domain\Files\Requests\UploadRequest;
class UploadFilesController extends Controller
{
/**
* Upload file for authenticated master|editor user
*/
public function __invoke(
UploadRequest $request,
UploadFilesAction $uploadFiles,
): File {
if (is_demo_account('howdy@hi5ve.digital')) {
return $this->demo->upload($request);
}
return ($uploadFiles)($request);
}
}

View File

@@ -0,0 +1,26 @@
<?php
namespace Domain\Folders\Actions;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\Auth;
class CreateFolderAction
{
/**
* Create new directory
*/
public function __invoke(
$request,
?Share $shared = null,
): Folder | array {
return Folder::create([
'parent_id' => $request->parent_id,
'name' => $request->name,
'color' => $request->color ?? null,
'emoji' => $request->emoji ?? null,
'author' => $shared ? 'visitor' : 'user',
'user_id' => $shared ? $shared->user_id : Auth::id(),
]);
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace Domain\Folders\Controllers;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Support\Demo\Actions\DemoService;
use Domain\Folders\Actions\CreateFolderAction;
use Domain\Folders\Requests\CreateFolderRequest;
class CreateFolderController extends Controller
{
public function __construct(
public DemoService $demo
) {}
/**
* Create new folder for authenticated master|editor user
*/
public function __invoke(
CreateFolderRequest $request,
CreateFolderAction $createFolder,
): Response {
// If is demo, return fake folder
if (is_demo_account('howdy@hi5ve.digital')) {
return $this->demo->create_folder($request);
}
$folder = ($createFolder)($request);
// Create new folder
return response($folder, 201);
}
}

View File

@@ -1,42 +1,11 @@
<?php
namespace Domain\Homepage\Controllers;
use Illuminate\Http\Request;
use Domain\Pages\Models\Page;
use Illuminate\Http\Response;
use Domain\Sharing\Models\Share;
use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Cache;
use Doctrine\DBAL\Driver\PDOException;
use Illuminate\Database\QueryException;
use Domain\Localization\Models\Language;
use Domain\Pages\Resources\PageResource;
use Domain\Homepage\Mail\SendContactMessage;
use Domain\Plans\Resources\PricingCollection;
use Domain\Subscriptions\Services\StripeService;
use Illuminate\Contracts\Routing\ResponseFactory;
use Domain\Homepage\Requests\SendContactMessageRequest;
use Illuminate\Database\Eloquent\ModelNotFoundException;
class AppFunctionsController extends Controller
{
/**
* List of allowed settings to get from public request
*
* @var array
*/
private array $blacklist = [
'purchase_code',
'license',
];
public function __construct(
private StripeService $stripe
) {
}
/**
* Get og site for web crawlers
*
@@ -72,65 +41,4 @@ class AppFunctionsController extends Controller
'thumbnail' => $item->thumbnail ?? null,
]);
}
/**
* Get single page content
*
* @param Page $page
* @return PageResource
*/
public function get_page(Page $page)
{
return new PageResource($page);
}
/**
* Get selected settings from public route
*
* @param Request $request
* @return mixed
*/
public function get_setting_columns(Request $request)
{
if (strpos($request->column, '|') !== false) {
$columns = collect(explode('|', $request->column))
->each(function ($column) {
if (in_array($column, $this->blacklist)) {
abort(401);
}
});
return Setting::whereIn('name', $columns)
->pluck('value', 'name');
}
if (in_array($request->column, $this->blacklist)) {
abort(401);
}
return Setting::where('name', $request->column)
->pluck('value', 'name');
}
/**
* Get all active storage plans
*
* @return PricingCollection
*/
public function get_storage_plans()
{
// Get pricing from cache
$pricing = Cache::rememberForever('pricing', function () {
return $this->stripe->getActivePlans();
});
// Format pricing to collection
$collection = new PricingCollection($pricing);
// Sort and return pricing
return $collection
->sortBy('product.metadata.capacity')
->values()
->all();
}
}

View File

@@ -1,12 +1,9 @@
<?php
namespace Domain\Homepage\Controllers;
use Doctrine\DBAL\Driver\PDOException;
use Domain\Pages\Models\Page;
use Illuminate\View\View;
use Domain\Pages\Models\Page;
use Doctrine\DBAL\Driver\PDOException;
class IndexController
{
@@ -36,4 +33,4 @@ class IndexController
->with('legal', $pages ?? null)
->with('installation', $setup_status);
}
}
}

View File

@@ -1,14 +1,11 @@
<?php
namespace Domain\Homepage\Controllers;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Mail;
use Domain\Homepage\Mail\SendContactMessage;
use Domain\Homepage\Requests\SendContactMessageRequest;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Mail;
class SendContactMessageController extends Controller
{
@@ -26,4 +23,4 @@ class SendContactMessageController extends Controller
return response('Done', 201);
}
}
}

View File

@@ -4,7 +4,6 @@ namespace Domain\Items\Controllers;
use Exception;
use Illuminate\Http\Request;
use Domain\Files\Models\File;
use Domain\Folders\Models\Folder;
use Support\Services\HelperService;
use App\Http\Controllers\Controller;
use Support\Demo\Actions\DemoService;
@@ -14,7 +13,6 @@ use Support\Services\FileManagerService;
use Domain\Items\Requests\MoveItemRequest;
use Domain\Items\Requests\DeleteItemRequest;
use Domain\Items\Requests\RenameItemRequest;
use Domain\Folders\Requests\CreateFolderRequest;
use Illuminate\Contracts\Routing\ResponseFactory;
class EditItemsController extends Controller
@@ -26,23 +24,6 @@ class EditItemsController extends Controller
) {
}
/**
* Create new folder for authenticated master|editor user
*
* @param CreateFolderRequest $request
* @return Folder|array|Model
* @throws Exception
*/
public function create_folder(CreateFolderRequest $request)
{
if (is_demo_account('howdy@hi5ve.digital')) {
return $this->demo->create_folder($request);
}
// Create new folder
return $this->filemanager->create_folder($request);
}
/**
* Rename item for authenticated master|editor user
*
@@ -84,22 +65,6 @@ class EditItemsController extends Controller
return response('Done', 204);
}
/**
* Upload file for authenticated master|editor user
*
* @param UploadRequest $request
* @return array|Model|\Illuminate\Support\Facades\File
* @throws Exception
*/
public function upload(UploadRequest $request)
{
if (is_demo_account('howdy@hi5ve.digital')) {
return $this->demo->upload($request);
}
return $this->filemanager->upload($request);
}
/**
* Move item for authenticated master|editor user
*

View File

@@ -1,13 +1,10 @@
<?php
namespace Domain\Localization\Controllers;
use Illuminate\Support\Collection;
use Illuminate\Database\QueryException;
use Domain\Localization\Models\Language;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Database\QueryException;
use Illuminate\Support\Collection;
class CurrentLocalizationController
{
@@ -17,7 +14,6 @@ class CurrentLocalizationController
public function __invoke(
string $lang
): Collection {
$translations = cache()
->rememberForever("language-translations-$lang", function () use ($lang) {
try {
@@ -33,4 +29,4 @@ class CurrentLocalizationController
? map_language_translations($translations)
: get_default_language_translations();
}
}
}

View File

@@ -0,0 +1,62 @@
<?php
namespace Domain\Pages\Controllers;
use Illuminate\Http\Request;
use Domain\Pages\Models\Page;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Support\Demo\Actions\DemoService;
use Domain\Pages\Resources\PageResource;
use Domain\Pages\Resources\PageCollection;
use Illuminate\Contracts\Routing\ResponseFactory;
class AdminPagesController extends Controller
{
public function __construct(
private DemoService $demo,
) {
}
/**
* Get all pages
*
* @return PageCollection
*/
public function index()
{
return new PageCollection(
Page::sortable()
->paginate(10)
);
}
/**
* Get single page resource
*
* @param $page
* @return PageResource
*/
public function show(Page $page)
{
return new PageResource($page);
}
/**
* Update page content
*
* @param Request $request
* @param Page $page
* @return ResponseFactory|Response
*/
public function update(Request $request, Page $page)
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
$page->update(
make_single_input($request)
);
return response(new PageResource($page), 204);
}
}

View File

@@ -1,62 +1,17 @@
<?php
namespace Domain\Pages\Controllers;
use Illuminate\Http\Request;
use Domain\Pages\Models\Page;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Support\Demo\Actions\DemoService;
use Domain\Pages\Resources\PageResource;
use Domain\Pages\Resources\PageCollection;
use Illuminate\Contracts\Routing\ResponseFactory;
class PagesController extends Controller
{
public function __construct(
private DemoService $demo,
) {
}
/**
* Get all pages
*
* @return PageCollection
* Get single page content
*/
public function index()
{
return new PageCollection(
Page::sortable()
->paginate(10)
);
}
/**
* Get single page resource
*
* @param $page
* @return PageResource
*/
public function show(Page $page)
public function show(Page $page): PageResource
{
return new PageResource($page);
}
/**
* Update page content
*
* @param Request $request
* @param Page $page
* @return ResponseFactory|Response
*/
public function update(Request $request, Page $page)
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
$page->update(
make_single_input($request)
);
return response(new PageResource($page), 204);
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace Domain\Plans\Controllers;
use Illuminate\Support\Facades\Cache;
use Domain\Plans\Resources\PricingCollection;
use Domain\Subscriptions\Services\StripeService;
class ActivePlansController
{
/**
* Get all active storage plans
*/
public function __invoke(): PricingCollection
{
// Get pricing from cache
$pricing = Cache::rememberForever('pricing', function () {
return resolve(StripeService::class)->getActivePlans();
});
// Format pricing to collection
$collection = new PricingCollection($pricing);
// Sort and return pricing
return $collection
->sortBy('product.metadata.capacity')
->values()
->all();
}
}

View File

@@ -7,7 +7,6 @@ use Illuminate\Http\Response;
use Laravel\Cashier\Subscription;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;
use Support\Demo\Actions\DemoService;
use App\Users\Resources\UsersCollection;
use Domain\Plans\Resources\PlanResource;
use Domain\Plans\Resources\PlanCollection;
@@ -19,7 +18,6 @@ class PlansController extends Controller
{
public function __construct(
private StripeService $stripe,
private DemoService $demo,
) {
}

View File

@@ -10,7 +10,7 @@ use Support\Demo\Actions\DemoService;
use Cartalyst\Stripe\Exception\UnauthorizedException;
use Symfony\Component\HttpKernel\Exception\HttpException;
class SettingController extends Controller
class AdminSettingsController extends Controller
{
public function __construct(
private DemoService $demo

View File

@@ -0,0 +1,43 @@
<?php
namespace Domain\Settings\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Domain\Settings\Models\Setting;
class SettingsController
{
/**
* List of allowed settings to get from public request
*/
private array $blacklist = [
'purchase_code',
'license',
];
/**
* Get selected settings from public route
*/
public function __invoke(
Request $request
): Collection {
if (str_contains($request->get('column'), '|')) {
$columns = collect(explode('|', $request->get('column')))
->each(function ($column) {
if (in_array($column, $this->blacklist)) {
abort(401);
}
});
return Setting::whereIn('name', $columns)
->pluck('value', 'name');
}
if (in_array($request->get('column'), $this->blacklist)) {
abort(401);
}
return Setting::where('name', $request->get('column'))
->pluck('value', 'name');
}
}

View File

@@ -468,7 +468,8 @@ class SetupWizardController extends Controller
// Get setup_wizard status
if (Schema::hasTable('settings') && get_setting('setup_wizard_success')) {
abort(410, 'Gone');
// TODO: resolve
//abort(410, 'Gone');
}
} catch (PDOException $e) {
return false;

View File

@@ -19,25 +19,6 @@ class FileManagerService
) {
}
/**
* Create new directory
*
* @param $request
* @param null $shared
* @return Folder|\Illuminate\Database\Eloquent\Model
*/
public function create_folder($request, $shared = null)
{
return Folder::create([
'parent_id' => $request->parent_id,
'author' => $shared ? 'visitor' : 'user',
'user_id' => $shared ? $shared->user_id : Auth::id(),
'name' => $request->name,
'color' => $request->color ?? null,
'emoji' => $request->emoji ?? null,
]);
}
/**
* Rename item name
*
@@ -196,88 +177,6 @@ class FileManagerService
}
}
/**
* Upload file
*
* @param $request
* @param null $shared
* @return File|\Illuminate\Database\Eloquent\Model
* @throws \Exception
*/
public function upload($request, $shared = null)
{
// Get parent_id from request
$file = $request->file('file');
// File name
$disk_file_name = basename('chunks/' . $file->getClientOriginalName(), '.part');
$temp_filename = $file->getClientOriginalName();
// File Path
$file_path = Storage::disk('local')->path('chunks/' . $temp_filename);
// Generate file
File::append($file_path, $file->get());
// Size of file
$file_size = File::size($file_path);
// Size of limit
$limit = get_setting('upload_limit');
// File size handling
if ($limit && $file_size > format_bytes($limit)) {
abort(413);
}
// If last then process file
if ($request->boolean('is_last')) {
$metadata = get_image_meta_data($file);
$disk_local = Storage::disk('local');
// Get user data
$user_id = $shared->user_id ?? Auth::id();
// File Info
$file_size = $disk_local->size("chunks/$temp_filename");
$file_mimetype = $disk_local->mimeType("chunks/$temp_filename");
// Check if user has enough space to upload file
$this->helper->check_user_storage_capacity($user_id, $file_size, $temp_filename);
// Create thumbnail
$thumbnail = $this->helper->create_image_thumbnail("chunks/$temp_filename", $disk_file_name, $user_id);
// Move finished file from chunk to file-manager directory
$disk_local->move("chunks/$temp_filename", "files/$user_id/$disk_file_name");
// Move files to external storage
if (! is_storage_driver(['local'])) {
$this->helper->move_file_to_external_storage($disk_file_name, $user_id);
}
// Store user upload size
User::find($user_id)
->recordUpload($file_size);
// Return new file
return UserFile::create([
'mimetype' => get_file_type_from_mimetype($file_mimetype),
'type' => get_file_type($file_mimetype),
'folder_id' => $request->folder_id,
'metadata' => $metadata,
'name' => $request->filename,
'basename' => $disk_file_name,
'author' => $shared ? 'visitor' : 'user',
'thumbnail' => $thumbnail,
'filesize' => $file_size,
'user_id' => $user_id,
]);
}
}
/**
* Store folder icon
*

View File

@@ -25,7 +25,7 @@ class SettingsTest extends TestCase
'value' => 'Give me a money!',
]);
$this->getJson('/api/content?column=get_started_title|pricing_description')
$this->getJson('/api/settings?column=get_started_title|pricing_description')
->assertStatus(200)
->assertExactJson([
'get_started_title' => 'Hello World!',
@@ -63,7 +63,7 @@ class SettingsTest extends TestCase
'value' => '15a53561-d387-4e0a-8de1-5d1bff34c1ed',
]);
$this->getJson('/api/content?column=purchase_code')
$this->getJson('/api/settings?column=purchase_code')
->assertStatus(401);
}

View File

@@ -222,7 +222,7 @@ class UserShareTest extends TestCase
'id' => $folder->id,
])->assertStatus(201);
$this->deleteJson('/api/share/revoke', [
$this->delete('/api/share', [
'tokens' => [
$folder->shared->token,
],