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",
"/chunks/request.js": "/chunks/request.js?id=a255aafa7261e2ac",
"/chunks/request-upload.js": "/chunks/request-upload.js?id=c456f33bfbfd4038",
"/chunks/request.js": "/chunks/request.js?id=b493de3b8cf4a8f2",
"/chunks/request-upload.js": "/chunks/request-upload.js?id=efb89edeaed37404",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec",
"/chunks/status-check.js": "/chunks/status-check.js?id=f40938d1fb43820f",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=ba76b9a8adbfdc0b",
@@ -9,13 +9,13 @@
"/chunks/environment.js": "/chunks/environment.js?id=784c2442268b36dc",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=cbe7bfed06400736",
"/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/single-file.js": "/chunks/shared/single-file.js?id=a6063bed9be75a09",
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=b5519d193bce2339",
"/chunks/not-found.js": "/chunks/not-found.js?id=d31bd699138cf828",
"/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/invoices.js": "/chunks/invoices.js?id=799928609f57ca10",
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=a0c4f59d0ec4aee0",
@@ -57,12 +57,12 @@
"/chunks/sign-up.js": "/chunks/sign-up.js?id=80da89f329c514fc",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=27cda9364b6593d8",
"/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/settings-password.js": "/chunks/settings-password.js?id=d00bf503d8126dc4",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=092e324aad54656b",
"/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/recent-uploads.js": "/chunks/recent-uploads.js?id=4bab41df721a6fc6",
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=c62bc3eb07de20df",

View File

@@ -24,17 +24,22 @@
:action="$t('create_something')"
/>
<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_folder')" type="folder" />
</OptionGroup>
<OptionGroup :title="$t('create')">
<Option
@click.native="$createFolder"
:title="$t('create_folder')"
icon="folder-plus"
/>
</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>
</PopoverWrapper>

View File

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

View File

@@ -75,9 +75,11 @@ export default {
this.loading = true
let route = this.$store.getters.sharedDetail
? `/api/editor/upload/remote/${this.$router.currentRoute.params.token}`
: '/api/upload/remote'
// Get route
let route = {
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
? this.$store.getters.currentFolder.data.id

View File

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

View File

@@ -9,11 +9,8 @@
</MobileContextMenu>
<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_folder')" type="folder" />
</OptionGroup>
<OptionGroup :title="$t('create')">
<Option
@click.stop.native="createFolder"
:title="$t('create_folder')"
@@ -21,6 +18,14 @@
:is-hover-disabled="true"
/>
</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>
<MobileMultiSelectToolbar>

View File

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

View File

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

View File

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

View File

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