mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-05 18:23:48 +00:00
upgrade functionality for v2.0.10
This commit is contained in:
@@ -60,4 +60,8 @@ return [
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'updates' => [
|
||||
'2_0_10',
|
||||
],
|
||||
];
|
||||
|
||||
93
package-lock.json
generated
93
package-lock.json
generated
@@ -1231,9 +1231,9 @@
|
||||
}
|
||||
},
|
||||
"@stripe/stripe-js": {
|
||||
"version": "1.24.0",
|
||||
"resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.24.0.tgz",
|
||||
"integrity": "sha512-8CEILOpzoRhGwvgcf6y+BlPyEq1ZqxAv3gsX7LvokFYvbcyH72GRcHQMGXuZS3s7HqfYQuTSFrvZNL/qdkgA9Q=="
|
||||
"version": "1.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.26.0.tgz",
|
||||
"integrity": "sha512-4R1vC75yKaCVFARW3bhelf9+dKt4NP4iZY/sIjGK7AAMBVvZ47eG74NvsAIUdUnhOXSWFMjdFWqv+etk5BDW4g=="
|
||||
},
|
||||
"@trysound/sax": {
|
||||
"version": "0.2.0",
|
||||
@@ -2088,17 +2088,50 @@
|
||||
"dev": true
|
||||
},
|
||||
"autoprefixer": {
|
||||
"version": "10.4.2",
|
||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
|
||||
"integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
|
||||
"version": "10.4.4",
|
||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz",
|
||||
"integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"browserslist": "^4.19.1",
|
||||
"caniuse-lite": "^1.0.30001297",
|
||||
"fraction.js": "^4.1.2",
|
||||
"browserslist": "^4.20.2",
|
||||
"caniuse-lite": "^1.0.30001317",
|
||||
"fraction.js": "^4.2.0",
|
||||
"normalize-range": "^0.1.2",
|
||||
"picocolors": "^1.0.0",
|
||||
"postcss-value-parser": "^4.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"browserslist": {
|
||||
"version": "4.20.2",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
|
||||
"integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"caniuse-lite": "^1.0.30001317",
|
||||
"electron-to-chromium": "^1.4.84",
|
||||
"escalade": "^3.1.1",
|
||||
"node-releases": "^2.0.2",
|
||||
"picocolors": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001322",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz",
|
||||
"integrity": "sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew==",
|
||||
"dev": true
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.4.101",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.101.tgz",
|
||||
"integrity": "sha512-XJH+XmJjACx1S7ASl/b//KePcda5ocPnFH2jErztXcIS8LpP0SE6rX8ZxiY5/RaDPnaF1rj0fPaHfppzb0e2Aw==",
|
||||
"dev": true
|
||||
},
|
||||
"node-releases": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
|
||||
"integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"aws-sign2": {
|
||||
@@ -4159,9 +4192,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"fraction.js": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz",
|
||||
"integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==",
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
|
||||
"integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
|
||||
"dev": true
|
||||
},
|
||||
"fresh": {
|
||||
@@ -5252,9 +5285,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"laravel-echo": {
|
||||
"version": "1.11.3",
|
||||
"resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.11.3.tgz",
|
||||
"integrity": "sha512-VNTnnoF8gK29ovxslnrFDt3xgrKiKKW1kTnKKO1A4kYVj4UCKmNO4x2ehRlfg2UTrG/oggwk95p+S9ftQYjXdw==",
|
||||
"version": "1.11.4",
|
||||
"resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.11.4.tgz",
|
||||
"integrity": "sha512-zoWMT7Cb3QVYEq+gyZ/hQvE3sSIiFxZH6c2Wg6tAwg9hukwyOLbDLpy9XT5U1mIC0lK+HFLzetnbfCtrl00jEg==",
|
||||
"dev": true
|
||||
},
|
||||
"laravel-mix": {
|
||||
@@ -5980,9 +6013,9 @@
|
||||
"integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
|
||||
},
|
||||
"nanoid": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
|
||||
"integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
|
||||
"integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==",
|
||||
"dev": true
|
||||
},
|
||||
"negotiator": {
|
||||
@@ -6657,9 +6690,9 @@
|
||||
}
|
||||
},
|
||||
"postcss": {
|
||||
"version": "8.4.8",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz",
|
||||
"integrity": "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==",
|
||||
"version": "8.4.12",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
|
||||
"integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"nanoid": "^3.3.1",
|
||||
@@ -7029,9 +7062,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"prettier": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz",
|
||||
"integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==",
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.1.tgz",
|
||||
"integrity": "sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A==",
|
||||
"dev": true
|
||||
},
|
||||
"prettier-plugin-import-sort": {
|
||||
@@ -8461,9 +8494,9 @@
|
||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
|
||||
},
|
||||
"twemoji": {
|
||||
"version": "13.1.0",
|
||||
"resolved": "https://registry.npmjs.org/twemoji/-/twemoji-13.1.0.tgz",
|
||||
"integrity": "sha512-e3fZRl2S9UQQdBFLYXtTBT6o4vidJMnpWUAhJA+yLGR+kaUTZAt3PixC0cGvvxWSuq2MSz/o0rJraOXrWw/4Ew==",
|
||||
"version": "13.1.1",
|
||||
"resolved": "https://registry.npmjs.org/twemoji/-/twemoji-13.1.1.tgz",
|
||||
"integrity": "sha512-IIIoq+n1lk1M1+evBKZD3DO0ud02fDQ4ssbgAv8rp3YBWUeNmskjlisFUPPDacQ50XS3bhrd4Kq9Q2gqhxb0dg==",
|
||||
"requires": {
|
||||
"fs-extra": "^8.0.1",
|
||||
"jsonfile": "^5.0.0",
|
||||
@@ -8664,9 +8697,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"vue-i18n": {
|
||||
"version": "8.27.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.27.0.tgz",
|
||||
"integrity": "sha512-SX35iJHL5PJ4Gfh0Mo/q0shyHiI2V6Zkh51c+k8E9O1RKv5BQyYrCxRzpvPrsIOJEnLaeiovet3dsUB0e/kDzw=="
|
||||
"version": "8.27.1",
|
||||
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.27.1.tgz",
|
||||
"integrity": "sha512-lWrGm4F25qReJ7XxSnFVb2h3PfW54ldnM4C+YLBGGJ75+Myt/kj4hHSTKqsyDLamvNYpvINMicSOdW+7yuqgIQ=="
|
||||
},
|
||||
"vue-loader": {
|
||||
"version": "15.9.8",
|
||||
|
||||
14
package.json
14
package.json
@@ -10,13 +10,13 @@
|
||||
"production": "mix --production"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.2",
|
||||
"autoprefixer": "^10.4.4",
|
||||
"axios": "^0.21.4",
|
||||
"cross-env": "^5.1",
|
||||
"laravel-echo": "^1.11.3",
|
||||
"laravel-echo": "^1.11.4",
|
||||
"laravel-mix": "^6.0.43",
|
||||
"postcss": "^8.4.8",
|
||||
"prettier": "^2.5.1",
|
||||
"postcss": "^8.4.12",
|
||||
"prettier": "^2.6.1",
|
||||
"prettier-plugin-import-sort": "0.0.7",
|
||||
"prettier-plugin-tailwindcss": "^0.1.8",
|
||||
"pusher-js": "^7.0.6",
|
||||
@@ -30,17 +30,17 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@paypal/paypal-js": "^4.2.2",
|
||||
"@stripe/stripe-js": "^1.24.0",
|
||||
"@stripe/stripe-js": "^1.26.0",
|
||||
"lodash": "^4.17.21",
|
||||
"node-sass": "^4.14.1",
|
||||
"pdfvuer": "^1.9.2",
|
||||
"tailwind-scrollbar-hide": "^1.1.7",
|
||||
"twemoji": "^13.1.0",
|
||||
"twemoji": "^13.1.1",
|
||||
"v-click-outside": "^3.1.2",
|
||||
"vee-validate": "^3.4.14",
|
||||
"vue": "^2.6.14",
|
||||
"vue-feather-icons": "^5.1.0",
|
||||
"vue-i18n": "^8.27.0",
|
||||
"vue-i18n": "^8.27.1",
|
||||
"vue-recaptcha-v3": "^1.9.0",
|
||||
"vue-router": "^3.5.3",
|
||||
"vuex": "^3.6.2"
|
||||
|
||||
@@ -53,6 +53,18 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--New language strings alert-->
|
||||
<div
|
||||
v-if="true"
|
||||
class="mb-6 flex items-center rounded-xl dark:bg-green-700/30 bg-green-200 p-5 shadow-card cursor-pointer"
|
||||
@click="upgradeSystem"
|
||||
>
|
||||
<alert-octagon-icon size="18" class="vue-feather mr-4 shrink-0 dark:text-green-500 text-green-700" />
|
||||
<p class="text-sm dark:text-green-500 text-green-700">
|
||||
There is a new update that need upgrade some stuff on your backend. Please click on this box to upgrade.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!--New language strings alert-->
|
||||
<div
|
||||
v-if="data.app.shouldUpgradeTranslations"
|
||||
@@ -261,6 +273,21 @@ export default {
|
||||
message: this.$t('popup_error.message'),
|
||||
})
|
||||
})
|
||||
},
|
||||
upgradeSystem() {
|
||||
axios.get('/upgrade/system')
|
||||
.then(() => {
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your app was upgraded successfully.'),
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
events.$emit('alert:open', {
|
||||
title: this.$t('popup_error.title'),
|
||||
message: this.$t('popup_error.message'),
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
use Domain\Maintenance\Controllers\MaintenanceModeController;
|
||||
use Domain\Maintenance\Controllers\UpgradeDatabaseController;
|
||||
use Domain\Maintenance\Controllers\UpgradeTranslationsController;
|
||||
use Domain\Maintenance\Controllers\MaintenanceModeController;
|
||||
use Domain\Maintenance\Controllers\UpgradeSystemController;
|
||||
|
||||
Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||
Route::get('/down', [MaintenanceModeController::class, 'down']);
|
||||
@@ -10,6 +10,6 @@ Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||
|
||||
Route::group(['prefix' => 'upgrade'], function () {
|
||||
Route::get('/translations', UpgradeTranslationsController::class);
|
||||
Route::get('/database', UpgradeDatabaseController::class);
|
||||
Route::get('/system', UpgradeSystemController::class);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -21,8 +21,8 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
/**
|
||||
* @method static whereUserId(int|string|null $id)
|
||||
* @method static find(mixed $id)
|
||||
* @method static where(string $string, string $user_id)
|
||||
* @method static findOrFail(string $root_id)
|
||||
* @method static where(string $key, string $value)
|
||||
* @method static findOrFail(string $id)
|
||||
* @method static create(array $array)
|
||||
* @property string id
|
||||
* @property string user_id
|
||||
|
||||
18
src/Domain/Maintenance/Actions/UpgradeDatabaseAction.php
Normal file
18
src/Domain/Maintenance/Actions/UpgradeDatabaseAction.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
namespace Domain\Maintenance\Actions;
|
||||
|
||||
use Gate;
|
||||
use Artisan;
|
||||
|
||||
class UpgradeDatabaseAction
|
||||
{
|
||||
public function __invoke(): bool
|
||||
{
|
||||
// Check admin permission
|
||||
Gate::authorize('maintenance');
|
||||
|
||||
return Artisan::call('migrate', [
|
||||
'--force' => true,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
namespace Domain\Maintenance\Controllers;
|
||||
|
||||
use Gate;
|
||||
use Artisan;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class UpgradeDatabaseController extends Controller
|
||||
{
|
||||
public function __invoke(): mixed
|
||||
{
|
||||
// Check admin permission
|
||||
Gate::authorize('maintenance');
|
||||
|
||||
$command = Artisan::call('migrate', [
|
||||
'--force' => true,
|
||||
]);
|
||||
|
||||
if ($command === 0) {
|
||||
echo 'Operation was successful.';
|
||||
}
|
||||
|
||||
if ($command === 1) {
|
||||
echo 'Operation failed.';
|
||||
}
|
||||
|
||||
return $command;
|
||||
}
|
||||
}
|
||||
105
src/Domain/Maintenance/Controllers/UpgradeSystemController.php
Normal file
105
src/Domain/Maintenance/Controllers/UpgradeSystemController.php
Normal file
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Maintenance\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use DB;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Domain\Maintenance\Actions\UpgradeDatabaseAction;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
use Storage;
|
||||
|
||||
ini_set('max_execution_time', -1);
|
||||
|
||||
class UpgradeSystemController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public UpgradeDatabaseAction $upgradeDatabase,
|
||||
) {}
|
||||
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
// Get already updated versions
|
||||
// TODO: get from database
|
||||
$alreadyUpdated = ['2_0_8', '2_0_7'];
|
||||
|
||||
// Get versions which has to be upgraded
|
||||
$needToUpgrade = array_diff(config('vuefilemanager.updates'), $alreadyUpdated);
|
||||
|
||||
// Iterate and upgrade
|
||||
foreach ($needToUpgrade as $version) {
|
||||
|
||||
// Get method name
|
||||
$method = "upgrade_to_$version";
|
||||
|
||||
if (method_exists($this, $method)) {
|
||||
$this->{$method}($request);
|
||||
|
||||
return response('Done', 201);
|
||||
}
|
||||
}
|
||||
|
||||
return response('Whooops, something went wrong!', 500);
|
||||
}
|
||||
|
||||
private function upgrade_to_2_0_10(): void
|
||||
{
|
||||
($this->upgradeDatabase)();
|
||||
|
||||
Folder::where('parent_id', null)
|
||||
->where('team_folder', true)
|
||||
->cursor()
|
||||
->each(function ($teamFolder) {
|
||||
|
||||
// Get all inherited folder from team folder
|
||||
$childrenFolderIds = Folder::with('folders:id,parent_id')
|
||||
->where('id', $teamFolder->id)
|
||||
->get('id');
|
||||
|
||||
$teamFolderIds = Arr::flatten(filter_folders_ids($childrenFolderIds));
|
||||
|
||||
// Replace user content ownership for author of team folder
|
||||
DB::table('files')
|
||||
->whereIn('parent_id', $teamFolderIds)
|
||||
->cursor()
|
||||
->each(function ($file) use ($teamFolder) {
|
||||
// Move image thumbnails
|
||||
if ($file->type === 'image') {
|
||||
// Get image thumbnail list
|
||||
$thumbnailList = getThumbnailFileList($file->basename);
|
||||
|
||||
// move thumbnails to the new location
|
||||
$thumbnailList->each(function ($basename) use ($file, $teamFolder) {
|
||||
$oldPath = "files/$file->user_id/$basename";
|
||||
$newPath = "files/$teamFolder->user_id/$basename";
|
||||
|
||||
if (Storage::exists($oldPath)) {
|
||||
Storage::move($oldPath, $newPath);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Get single file path
|
||||
$filePath = "files/$file->user_id/$file->basename";
|
||||
|
||||
// Move single file
|
||||
if (Storage::exists($filePath)) {
|
||||
Storage::move($filePath, "files/$teamFolder->user_id/$file->basename");
|
||||
}
|
||||
|
||||
// Update file permission
|
||||
File::find($file->id)->update([
|
||||
'user_id' => $teamFolder->user_id,
|
||||
'author_id' => $teamFolder->user_id !== $file->user_id ? $file->user_id : null,
|
||||
]);
|
||||
});
|
||||
|
||||
// Update folder ownership
|
||||
DB::table('folders')
|
||||
->whereIn('parent_id', $teamFolderIds)
|
||||
->update(['user_id' => $teamFolder->user_id]);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user