From e751a6bc90e1bad9436fb56bf020a8c52234a4ae Mon Sep 17 00:00:00 2001 From: Peter Papp Date: Mon, 30 Aug 2021 09:16:48 +0200 Subject: [PATCH] team folder generator --- composer.json | 1 + composer.lock | 76 ++++++++++++++++++- public/mix-manifest.json | 21 +++-- .../js/components/Spotlight/Spotlight.vue | 2 +- resources/js/store/modules/fileBrowser.js | 6 +- resources/js/store/modules/sharing.js | 2 +- resources/js/views/FileView/TeamFolders.vue | 1 - .../Console/Commands/SetupDevEnvironment.php | 68 ++++++++++++++--- 8 files changed, 153 insertions(+), 24 deletions(-) diff --git a/composer.json b/composer.json index cf815888..13413112 100644 --- a/composer.json +++ b/composer.json @@ -12,6 +12,7 @@ "ext-json": "*", "brianium/paratest": "^6.3", "cartalyst/stripe-laravel": "^13.1", + "cocur/slugify": "^4.0", "doctrine/dbal": "^2.13.2", "fideloper/proxy": "^4.4.1", "fruitcake/laravel-cors": "^2.0.4", diff --git a/composer.lock b/composer.lock index ce641e62..3a64b375 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b97469c2ea6b8b1e89c432391ec6ffc2", + "content-hash": "bcd10f3eae3b80b155c555c14b6c1224", "packages": [ { "name": "amphp/amp", @@ -645,6 +645,80 @@ }, "time": "2020-12-23T13:33:41+00:00" }, + { + "name": "cocur/slugify", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/cocur/slugify.git", + "reference": "3f1ffc300f164f23abe8b64ffb3f92d35cec8307" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cocur/slugify/zipball/3f1ffc300f164f23abe8b64ffb3f92d35cec8307", + "reference": "3f1ffc300f164f23abe8b64ffb3f92d35cec8307", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=7.0" + }, + "conflict": { + "symfony/config": "<3.4 || >=4,<4.3", + "symfony/dependency-injection": "<3.4 || >=4,<4.3", + "symfony/http-kernel": "<3.4 || >=4,<4.3", + "twig/twig": "<2.12.1" + }, + "require-dev": { + "laravel/framework": "~5.1", + "latte/latte": "~2.2", + "league/container": "^2.2.0", + "mikey179/vfsstream": "~1.6.8", + "mockery/mockery": "^1.3", + "nette/di": "~2.4", + "phpunit/phpunit": "^5.7.27", + "pimple/pimple": "~1.1", + "plumphp/plum": "~0.1", + "symfony/config": "^3.4 || ^4.3 || ^5.0", + "symfony/dependency-injection": "^3.4 || ^4.3 || ^5.0", + "symfony/http-kernel": "^3.4 || ^4.3 || ^5.0", + "twig/twig": "^2.12.1 || ~3.0", + "zendframework/zend-modulemanager": "~2.2", + "zendframework/zend-servicemanager": "~2.2", + "zendframework/zend-view": "~2.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cocur\\Slugify\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florian Eckerstorfer", + "email": "florian@eckerstorfer.co", + "homepage": "https://florian.ec" + }, + { + "name": "Ivo Bathke", + "email": "ivo.bathke@gmail.com" + } + ], + "description": "Converts a string into a slug.", + "keywords": [ + "slug", + "slugify" + ], + "support": { + "issues": "https://github.com/cocur/slugify/issues", + "source": "https://github.com/cocur/slugify/tree/master" + }, + "time": "2019-12-14T13:04:14+00:00" + }, { "name": "composer/package-versions-deprecated", "version": "1.11.99.2", diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 49af1e6f..8e1ecb02 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -7,12 +7,12 @@ "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~39825672.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~39825672.js?id=6c16b40191c43d6bd8ee", "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~3e4fdd8b.js": "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~3e4fdd8b.js?id=d36b3eb20b4899f2d899", "/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~6fce3876.js": "/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~6fce3876.js?id=3dc49e837aec52b13e76", - "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~26d67489.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~26d67489.js?id=f2b55e546b918c1df018", - "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~d04310d2.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~d04310d2.js?id=35e4681bc1b7641bfb8e", + "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~26d67489.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~26d67489.js?id=977bdac1e4c42dee619d", + "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~d04310d2.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~d04310d2.js?id=8bf2a8d179ff6f44542a", "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~f312a84e.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~f312a84e.js?id=004c11df35e63517608d", "/chunks/admin~chunks/platform.js": "/chunks/admin~chunks/platform.js?id=0e511f0ceaac7257bf25", "/chunks/admin~chunks/platform~chunks/settings.js": "/chunks/admin~chunks/platform~chunks/settings.js?id=f3bc2f8030f1dd06472a", - "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js?id=10dfcdaf479cf0f947e4", + "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js?id=853c70dd666e6efffbf8", "/chunks/app-appearance.js": "/chunks/app-appearance.js?id=5f8d3e698c1fd5b9b5a5", "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js?id=055d17c4463d3ef30218", "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js?id=fd6936cca8f3b8b4de9a", @@ -38,11 +38,11 @@ "/chunks/email-verified.js": "/chunks/email-verified.js?id=dc4aa33310fc98be6749", "/chunks/environment-setup.js": "/chunks/environment-setup.js?id=a547f8b4e9a83935a777", "/chunks/files.js": "/chunks/files.js?id=e67d0bb15c66cd46cf65", - "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks~ad7e36b9.js": "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks~ad7e36b9.js?id=be2d7938bf33c26784fd", + "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks~ad7e36b9.js": "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared/files~chunks~ad7e36b9.js?id=edc7990c82c3758e3f85", "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~chunks/share~b068369d.js": "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~chunks/share~b068369d.js?id=e04827456ff09a9c4c4d", "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/settings-subscription~chunks/shared~ab58556a.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/settings-subscription~chunks/shared~ab58556a.js?id=afa7d2dd8e1cc9c5947c", "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/shared/single-f~f04cfcbc.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/shared/single-f~f04cfcbc.js?id=443ca519270fc6d80879", - "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/team-folders~ch~ba7d6097.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/team-folders~ch~ba7d6097.js?id=6748bd741a6c96c1344e", + "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/team-folders~ch~ba7d6097.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared/files~chunks/team-folders~ch~ba7d6097.js?id=074a6044bcb3a4db65e1", "/chunks/files~chunks/shared/files~chunks/team-folders.js": "/chunks/files~chunks/shared/files~chunks/team-folders.js?id=ed4e72b9cb1946e582c8", "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=61fb98fd41324af9cfea", "/chunks/homepage.js": "/chunks/homepage.js?id=6f2aac612b4c6eaabf61", @@ -83,7 +83,7 @@ "/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=2802cde66f7d12ec8442", "/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=5dbfd83cfacad270a636", "/chunks/subscription-service.js": "/chunks/subscription-service.js?id=721e855dff920e5e6996", - "/chunks/team-folders.js": "/chunks/team-folders.js?id=7ce1c2d563d466ad1c7e", + "/chunks/team-folders.js": "/chunks/team-folders.js?id=2ea9d0795842c8de2349", "/chunks/trash.js": "/chunks/trash.js?id=b098bf0e2f2df3e67539", "/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=8879f5c458f08648405a", "/chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/upgrade-billing~chunks/upgrade-plan.js?id=e365ae16373be9dbd458", @@ -343,5 +343,12 @@ "/chunks/platform~chunks/shared.5de1f71813311f7ec30a.hot-update.js": "/chunks/platform~chunks/shared.5de1f71813311f7ec30a.hot-update.js", "/chunks/platform~chunks/shared.dc0f077c261e70697cd3.hot-update.js": "/chunks/platform~chunks/shared.dc0f077c261e70697cd3.hot-update.js", "/js/main.57a6d75d4f2764f144f8.hot-update.js": "/js/main.57a6d75d4f2764f144f8.hot-update.js", - "/chunks/platform.27acd412f4f57a1fed1c.hot-update.js": "/chunks/platform.27acd412f4f57a1fed1c.hot-update.js" + "/chunks/platform.27acd412f4f57a1fed1c.hot-update.js": "/chunks/platform.27acd412f4f57a1fed1c.hot-update.js", + "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.78f96d663e96f01fde20.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.78f96d663e96f01fde20.hot-update.js", + "/js/main.a6306b78051d324b08e5.hot-update.js": "/js/main.a6306b78051d324b08e5.hot-update.js", + "/chunks/team-folders.a6306b78051d324b08e5.hot-update.js": "/chunks/team-folders.a6306b78051d324b08e5.hot-update.js", + "/js/main.6209473d318a6d0edd65.hot-update.js": "/js/main.6209473d318a6d0edd65.hot-update.js", + "/js/main.a9a32bc3bfbcba7d9a42.hot-update.js": "/js/main.a9a32bc3bfbcba7d9a42.hot-update.js", + "/js/main.3048df27c3901574fdb2.hot-update.js": "/js/main.3048df27c3901574fdb2.hot-update.js", + "/js/main.82197a4600cc46177a7c.hot-update.js": "/js/main.82197a4600cc46177a7c.hot-update.js" } diff --git a/resources/js/components/Spotlight/Spotlight.vue b/resources/js/components/Spotlight/Spotlight.vue index 0edfbb02..7c1f17eb 100644 --- a/resources/js/components/Spotlight/Spotlight.vue +++ b/resources/js/components/Spotlight/Spotlight.vue @@ -89,7 +89,7 @@ export default { methods: { proceedToSelect(e) { // Preserve select and reload native shortcut - if (! ['a', 'r'].includes(e.key)) { + if (! ['a', 'r', 'v'].includes(e.key)) { e.preventDefault() } diff --git a/resources/js/store/modules/fileBrowser.js b/resources/js/store/modules/fileBrowser.js index c33993e6..d55c5e39 100644 --- a/resources/js/store/modules/fileBrowser.js +++ b/resources/js/store/modules/fileBrowser.js @@ -52,8 +52,8 @@ const actions = { axios .get(`${getters.api}/teams/folders/${id}/${getters.sorting.URI}`) .then(response => { - commit('LOADING_STATE', {loading: false, data: response.data.content}) - commit('SET_CURRENT_FOLDER', response.data.folder) + commit('LOADING_STATE', {loading: false, data: response.data.folders.data}) + commit('SET_CURRENT_FOLDER', response.data.root) events.$emit('scrollTop') }) @@ -116,7 +116,7 @@ const actions = { let files = response.data.files.data commit('LOADING_STATE', {loading: false, data: folders.concat(files)}) - commit('SET_CURRENT_FOLDER', response.data.folder) + commit('SET_CURRENT_FOLDER', response.data.root) events.$emit('scrollTop') }) diff --git a/resources/js/store/modules/sharing.js b/resources/js/store/modules/sharing.js index 9a8822d5..105b1ffc 100644 --- a/resources/js/store/modules/sharing.js +++ b/resources/js/store/modules/sharing.js @@ -28,7 +28,7 @@ const actions = { .get(`/api/browse/folders/${id}/${router.currentRoute.params.token}${getters.sorting.URI}`) .then(response => { commit('LOADING_STATE', {loading: false, data: response.data.content}) - commit('SET_CURRENT_FOLDER', response.data.folder) + commit('SET_CURRENT_FOLDER', response.data.root) events.$emit('scrollTop') diff --git a/resources/js/views/FileView/TeamFolders.vue b/resources/js/views/FileView/TeamFolders.vue index 6f5990a4..5e3c1a13 100644 --- a/resources/js/views/FileView/TeamFolders.vue +++ b/resources/js/views/FileView/TeamFolders.vue @@ -199,7 +199,6 @@ this.$store.dispatch('removeFromFavourites', this.item) } }, - }, createFolder() { events.$emit('popup:open', {name: 'create-folder'}) }, diff --git a/src/App/Console/Commands/SetupDevEnvironment.php b/src/App/Console/Commands/SetupDevEnvironment.php index a6405758..d92e741d 100644 --- a/src/App/Console/Commands/SetupDevEnvironment.php +++ b/src/App/Console/Commands/SetupDevEnvironment.php @@ -1,7 +1,10 @@ setUpFaker(); } @@ -66,8 +70,9 @@ class SetupDevEnvironment extends Command $this->info('Creating demo users...'); $this->create_demo_users(); - $this->info('Creating default admin content...'); + $this->info('Creating default demo content...'); $this->create_admin_default_content(); + $this->create_team_folders_content(); $this->create_share_records(); $this->info('Clearing application cache...'); @@ -166,10 +171,10 @@ class SetupDevEnvironment extends Command // 1. $shared_folder = Folder::factory(Folder::class) ->create([ - 'user_id' => $user->id, - 'author' => 'user', - 'name' => 'Shared Folder', - 'emoji' => [ + 'user_id' => $user->id, + 'author' => 'user', + 'name' => 'Shared Folder', + 'emoji' => [ 'codes' => '1F680', 'char' => '🚀', 'name' => 'rocket', @@ -202,10 +207,10 @@ class SetupDevEnvironment extends Command // 2. $random_pics = Folder::factory(Folder::class) ->create([ - 'user_id' => $user->id, - 'author' => 'user', - 'name' => 'Random Pics', - 'emoji' => [ + 'user_id' => $user->id, + 'author' => 'user', + 'name' => 'Random Pics', + 'emoji' => [ 'codes' => '1F4F7', 'char' => '📷', 'name' => 'camera', @@ -702,6 +707,49 @@ class SetupDevEnvironment extends Command }); } + private function create_team_folders_content(): void + { + $user = User::whereEmail('howdy@hi5ve.digital') + ->first(); + + $teamProjectFolder = Folder::factory() + ->create([ + 'user_id' => $user->id, + 'team_folder' => true, + 'name' => 'Company Project', + ]); + + // Attach members + $members = User::whereNotIn('email', ['howdy@hi5ve.digital']) + ->get(); + + $members->each(fn($member) => DB::table('team_folder_members') + ->insert([ + 'folder_id' => $teamProjectFolder->id, + 'user_id' => $member->id, + 'permission' => 'can-edit', + ]) + ); + + // Create invitations + $users = User::factory() + ->count(2) + ->create([ + 'password' => bcrypt('vuefilemanager'), + 'email_verified_at' => now(), + ]); + + $users->each(fn($user) => TeamFolderInvitation::factory() + ->create([ + 'email' => $user->email, + 'folder_id' => $teamProjectFolder->id, + 'status' => 'pending', + 'permission' => 'can-edit', + ]) + ); + + } + private function create_share_records(): void { $user = User::whereEmail('howdy@hi5ve.digital')