remote upload implementation into file request

This commit is contained in:
Čarodej
2022-04-21 17:31:47 +02:00
parent 409ab8c03f
commit 35d89e2be1
11 changed files with 110 additions and 20 deletions

View File

@@ -1,7 +1,7 @@
{ {
"/js/main.js": "/js/main.js", "/js/main.js": "/js/main.js",
"/chunks/request.js": "/chunks/request.js?id=a255aafa7261e2ac", "/chunks/request.js": "/chunks/request.js?id=b493de3b8cf4a8f2",
"/chunks/request-upload.js": "/chunks/request-upload.js?id=c456f33bfbfd4038", "/chunks/request-upload.js": "/chunks/request-upload.js?id=efb89edeaed37404",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec", "/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec",
"/chunks/status-check.js": "/chunks/status-check.js?id=f40938d1fb43820f", "/chunks/status-check.js": "/chunks/status-check.js?id=f40938d1fb43820f",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=ba76b9a8adbfdc0b", "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=ba76b9a8adbfdc0b",
@@ -9,13 +9,13 @@
"/chunks/environment.js": "/chunks/environment.js?id=784c2442268b36dc", "/chunks/environment.js": "/chunks/environment.js?id=784c2442268b36dc",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=cbe7bfed06400736", "/chunks/app-setup.js": "/chunks/app-setup.js?id=cbe7bfed06400736",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=78d257775f5fc485", "/chunks/admin-account.js": "/chunks/admin-account.js?id=78d257775f5fc485",
"/chunks/shared.js": "/chunks/shared.js?id=e065eb78d6cc3b7d", "/chunks/shared.js": "/chunks/shared.js?id=54733651dfb0af9f",
"/chunks/shared/browser.js": "/chunks/shared/browser.js?id=d2fff07a2bc7af3f", "/chunks/shared/browser.js": "/chunks/shared/browser.js?id=d2fff07a2bc7af3f",
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=a6063bed9be75a09", "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=a6063bed9be75a09",
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=b5519d193bce2339", "/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=b5519d193bce2339",
"/chunks/not-found.js": "/chunks/not-found.js?id=d31bd699138cf828", "/chunks/not-found.js": "/chunks/not-found.js?id=d31bd699138cf828",
"/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=26798085f527d955", "/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=26798085f527d955",
"/chunks/admin.js": "/chunks/admin.js?id=361574392a095c32", "/chunks/admin.js": "/chunks/admin.js?id=780ebe14261335f6",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=5ab55a12214433c8", "/chunks/dashboard.js": "/chunks/dashboard.js?id=5ab55a12214433c8",
"/chunks/invoices.js": "/chunks/invoices.js?id=799928609f57ca10", "/chunks/invoices.js": "/chunks/invoices.js?id=799928609f57ca10",
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=a0c4f59d0ec4aee0", "/chunks/subscriptions.js": "/chunks/subscriptions.js?id=a0c4f59d0ec4aee0",
@@ -57,12 +57,12 @@
"/chunks/sign-up.js": "/chunks/sign-up.js?id=80da89f329c514fc", "/chunks/sign-up.js": "/chunks/sign-up.js?id=80da89f329c514fc",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=27cda9364b6593d8", "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=27cda9364b6593d8",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=2f0401ee2fc148c4", "/chunks/create-new-password.js": "/chunks/create-new-password.js?id=2f0401ee2fc148c4",
"/chunks/settings.js": "/chunks/settings.js?id=a0eae95a131d4fb1", "/chunks/settings.js": "/chunks/settings.js?id=c8a4915f96c762d4",
"/chunks/profile.js": "/chunks/profile.js?id=3e24bb5e1f52d4bb", "/chunks/profile.js": "/chunks/profile.js?id=3e24bb5e1f52d4bb",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=d00bf503d8126dc4", "/chunks/settings-password.js": "/chunks/settings-password.js?id=d00bf503d8126dc4",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=092e324aad54656b", "/chunks/settings-storage.js": "/chunks/settings-storage.js?id=092e324aad54656b",
"/chunks/billing.js": "/chunks/billing.js?id=115c25478cee576d", "/chunks/billing.js": "/chunks/billing.js?id=115c25478cee576d",
"/chunks/platform.js": "/chunks/platform.js?id=735f8aa44b87d0c4", "/chunks/platform.js": "/chunks/platform.js?id=907e530c6cc415bc",
"/chunks/files.js": "/chunks/files.js?id=aaea9173f7697d6e", "/chunks/files.js": "/chunks/files.js?id=aaea9173f7697d6e",
"/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=4bab41df721a6fc6", "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=4bab41df721a6fc6",
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=c62bc3eb07de20df", "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=c62bc3eb07de20df",

View File

@@ -24,17 +24,22 @@
:action="$t('create_something')" :action="$t('create_something')"
/> />
<PopoverItem name="desktop-create" side="left"> <PopoverItem name="desktop-create" side="left">
<OptionGroup :title="$t('upload')"> <OptionGroup :title="$t('frequently_used')">
<OptionUpload :title="$t('upload_files')" type="file" /> <OptionUpload :title="$t('upload_files')" type="file" />
<OptionUpload :title="$t('upload_folder')" type="folder" />
</OptionGroup>
<OptionGroup :title="$t('create')">
<Option <Option
@click.native="$createFolder" @click.native="$createFolder"
:title="$t('create_folder')" :title="$t('create_folder')"
icon="folder-plus" icon="folder-plus"
/> />
</OptionGroup> </OptionGroup>
<OptionGroup :title="$t('others')">
<OptionUpload :title="$t('upload_folder')" type="folder" />
<Option
@click.stop.native="$openRemoteUploadPopup"
:title="$t('remote_upload')"
icon="remote-upload"
/>
</OptionGroup>
</PopoverItem> </PopoverItem>
</PopoverWrapper> </PopoverWrapper>

View File

@@ -3,7 +3,7 @@
<!--Menu icon--> <!--Menu icon-->
<div <div
v-if="!isVisibleNavigationBars" v-if="!isVisibleNavigationBars"
@click="toggleNavigationBars" @click.stop="toggleNavigationBars"
class="-mt-0.5 mr-2 hidden cursor-pointer p-2 lg:block" class="-mt-0.5 mr-2 hidden cursor-pointer p-2 lg:block"
> >
<menu-icon size="17" /> <menu-icon size="17" />

View File

@@ -75,9 +75,11 @@ export default {
this.loading = true this.loading = true
let route = this.$store.getters.sharedDetail // Get route
? `/api/editor/upload/remote/${this.$router.currentRoute.params.token}` let route = {
: '/api/upload/remote' RequestUpload: `/api/upload-request/${this.$router.currentRoute.params.token}/upload/remote`,
Public: `/api/editor/upload/remote/${this.$router.currentRoute.params.token}`,
}[this.$router.currentRoute.name] || '/api/upload/remote'
let parentId = this.$store.getters.currentFolder let parentId = this.$store.getters.currentFolder
? this.$store.getters.currentFolder.data.id ? this.$store.getters.currentFolder.data.id

View File

@@ -8,6 +8,7 @@
<CreateUploadRequestPopup /> <CreateUploadRequestPopup />
<CreateTeamFolderPopup /> <CreateTeamFolderPopup />
<NotificationsPopup /> <NotificationsPopup />
<RemoteUploadPopup />
<!--Mobile Navigation--> <!--Mobile Navigation-->
<MobileNavigation /> <MobileNavigation />
@@ -86,6 +87,7 @@ import { mapGetters } from 'vuex'
import CreateUploadRequestPopup from "../components/UploadRequest/CreateUploadRequestPopup"; import CreateUploadRequestPopup from "../components/UploadRequest/CreateUploadRequestPopup";
import CreateTeamFolderPopup from "../components/Teams/CreateTeamFolderPopup"; import CreateTeamFolderPopup from "../components/Teams/CreateTeamFolderPopup";
import NotificationsPopup from "../components/Notifications/NotificationsPopup"; import NotificationsPopup from "../components/Notifications/NotificationsPopup";
import RemoteUploadPopup from "../components/RemoteUpload/RemoteUploadPopup";
export default { export default {
name: 'Admin', name: 'Admin',
@@ -190,6 +192,7 @@ export default {
}, },
}, },
components: { components: {
RemoteUploadPopup,
NotificationsPopup, NotificationsPopup,
CreateTeamFolderPopup, CreateTeamFolderPopup,
CreateUploadRequestPopup, CreateUploadRequestPopup,

View File

@@ -9,11 +9,8 @@
</MobileContextMenu> </MobileContextMenu>
<MobileCreateMenu> <MobileCreateMenu>
<OptionGroup :title="$t('upload')"> <OptionGroup :title="$t('frequently_used')">
<OptionUpload :title="$t('upload_files')" type="file" :is-hover-disabled="true" /> <OptionUpload :title="$t('upload_files')" type="file" :is-hover-disabled="true" />
<OptionUpload :title="$t('upload_folder')" type="folder" />
</OptionGroup>
<OptionGroup :title="$t('create')">
<Option <Option
@click.stop.native="createFolder" @click.stop.native="createFolder"
:title="$t('create_folder')" :title="$t('create_folder')"
@@ -21,6 +18,14 @@
:is-hover-disabled="true" :is-hover-disabled="true"
/> />
</OptionGroup> </OptionGroup>
<OptionGroup :title="$t('others')">
<OptionUpload :title="$t('upload_folder')" type="folder" />
<Option
@click.stop.native="$openRemoteUploadPopup"
:title="$t('remote_upload')"
icon="remote-upload"
/>
</OptionGroup>
</MobileCreateMenu> </MobileCreateMenu>
<MobileMultiSelectToolbar> <MobileMultiSelectToolbar>

View File

@@ -8,6 +8,7 @@
<CreateUploadRequestPopup /> <CreateUploadRequestPopup />
<CreateTeamFolderPopup /> <CreateTeamFolderPopup />
<NotificationsPopup /> <NotificationsPopup />
<RemoteUploadPopup />
<ConfirmPopup /> <ConfirmPopup />
@@ -94,10 +95,12 @@ import CreateUploadRequestPopup from "../components/UploadRequest/CreateUploadRe
import CreateTeamFolderPopup from "../components/Teams/CreateTeamFolderPopup"; import CreateTeamFolderPopup from "../components/Teams/CreateTeamFolderPopup";
import ChangeSubscriptionPopup from "../components/Subscription/Popups/ChangeSubscriptionPopup"; import ChangeSubscriptionPopup from "../components/Subscription/Popups/ChangeSubscriptionPopup";
import NotificationsPopup from "../components/Notifications/NotificationsPopup"; import NotificationsPopup from "../components/Notifications/NotificationsPopup";
import RemoteUploadPopup from "../components/RemoteUpload/RemoteUploadPopup";
export default { export default {
name: 'Settings', name: 'Settings',
components: { components: {
RemoteUploadPopup,
NotificationsPopup, NotificationsPopup,
ChangeSubscriptionPopup, ChangeSubscriptionPopup,
CreateTeamFolderPopup, CreateTeamFolderPopup,

View File

@@ -8,6 +8,7 @@
<!--Popups--> <!--Popups-->
<CreateFolderPopup /> <CreateFolderPopup />
<RemoteUploadPopup />
<RenameItemPopup /> <RenameItemPopup />
<MoveItemPopup /> <MoveItemPopup />
@@ -54,10 +55,12 @@ import Spotlight from '../components/Spotlight/Spotlight'
import DragUI from '../components/UI/Others/DragUI' import DragUI from '../components/UI/Others/DragUI'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { events } from '../bus' import { events } from '../bus'
import RemoteUploadPopup from "../components/RemoteUpload/RemoteUploadPopup";
export default { export default {
name: 'UploadRequest', name: 'UploadRequest',
components: { components: {
RemoteUploadPopup,
DesktopUploadRequestToolbar, DesktopUploadRequestToolbar,
MobileUploadRequestToolBar, MobileUploadRequestToolBar,
InfoSidebarUploadRequest, InfoSidebarUploadRequest,

View File

@@ -10,6 +10,7 @@ use Domain\UploadRequest\Controllers\MoveItemInUploadRequestController;
use Domain\UploadRequest\Controllers\SetUploadRequestAsFilledController; use Domain\UploadRequest\Controllers\SetUploadRequestAsFilledController;
use Domain\UploadRequest\Controllers\UploadFilesForUploadRequestController; use Domain\UploadRequest\Controllers\UploadFilesForUploadRequestController;
use Domain\UploadRequest\Controllers\GetFolderTreeForUploadRequestController; use Domain\UploadRequest\Controllers\GetFolderTreeForUploadRequestController;
use Domain\UploadRequest\Controllers\UploadFilesRemotelyForUploadRequestController;
Route::get('/{uploadRequest}', GetUploadRequestController::class); Route::get('/{uploadRequest}', GetUploadRequestController::class);
@@ -19,6 +20,7 @@ Route::group(['middleware' => 'upload-request'], function () {
Route::delete('/{uploadRequest}', SetUploadRequestAsFilledController::class); Route::delete('/{uploadRequest}', SetUploadRequestAsFilledController::class);
// Edit // Edit
Route::post('/{uploadRequest}/upload/remote', UploadFilesRemotelyForUploadRequestController::class);
Route::post('/{uploadRequest}/upload', UploadFilesForUploadRequestController::class); Route::post('/{uploadRequest}/upload', UploadFilesForUploadRequestController::class);
Route::patch('/{uploadRequest}/rename/{id}', RenameFileOrFolderController::class); Route::patch('/{uploadRequest}/rename/{id}', RenameFileOrFolderController::class);
Route::post('/{uploadRequest}/create-folder', CreateFolderController::class); Route::post('/{uploadRequest}/create-folder', CreateFolderController::class);

View File

@@ -1,7 +1,6 @@
<?php <?php
namespace Domain\Files\Controllers; namespace Domain\Files\Controllers;
use Illuminate\Http\Response;
use Domain\Sharing\Models\Share; use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Domain\Files\Requests\UploadRequest; use Domain\Files\Requests\UploadRequest;
@@ -33,7 +32,7 @@ class VisitorUploadFileController extends Controller
public function __invoke( public function __invoke(
UploadRequest $request, UploadRequest $request,
Share $shared, Share $shared,
): Response | array { ) {
if (is_demo_account()) { if (is_demo_account()) {
return ($this->fakeUploadFile)($request); return ($this->fakeUploadFile)($request);
} }

View File

@@ -0,0 +1,68 @@
<?php
namespace Domain\UploadRequest\Controllers;
use DB;
use Domain\Folders\Models\Folder;
use Domain\Files\Requests\RemoteUploadRequest;
use Domain\UploadRequest\Models\UploadRequest;
use Domain\Files\Actions\GetContentFromExternalSource;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
class UploadFilesRemotelyForUploadRequestController
{
public function __construct(
private GetContentFromExternalSource $getContentFromExternalSource,
) {
}
/**
* @throws FileNotFoundException
*/
public function __invoke(RemoteUploadRequest $request, UploadRequest $uploadRequest)
{
// Get upload request root folder query
$folder = Folder::where('id', $uploadRequest->id);
// Create folder if not exist
if ($folder->doesntExist()) {
$this->createFolder($uploadRequest);
}
// Set default parent_id for uploaded file
if (is_null($request->input('parent_id'))) {
$request->merge(['parent_id' => $uploadRequest->id]);
}
// Execute job for get content from url and save
($this->getContentFromExternalSource)($request->all(), $uploadRequest->user);
// Set timestamp for auto filling
cache()->set("auto-filling.$uploadRequest->id", now()->toString());
return response('Files were successfully added to the upload queue', 201);
}
/**
* Create root Upload Request folder
*/
private function createFolder(UploadRequest $uploadRequest): void
{
// Format timestamp
$timestamp = format_date($uploadRequest->created_at, 'd. M. Y');
// Create folder
DB::table('folders')->insert([
'id' => $uploadRequest->id,
'parent_id' => $uploadRequest->folder_id ?? null,
'user_id' => $uploadRequest->user_id,
'name' => $uploadRequest->name ?? __t('upload_request_default_folder', ['timestamp' => $timestamp]),
'created_at' => now(),
'updated_at' => now(),
]);
// Update upload request status
$uploadRequest->update([
'status' => 'filling',
]);
}
}