diff --git a/.env.testing b/.env.testing
index a7ad9c25..8c705736 100644
--- a/.env.testing
+++ b/.env.testing
@@ -1,6 +1,6 @@
APP_NAME=Laravel
APP_ENV=local
-APP_KEY=base64:zJANxvpTkxQwXRdrlTxjTYyFQ0vTv0DZRE7yNtVXmIA=
+APP_KEY=base64:qpZihuLxIkDkK3rsQND5Ksv10zVWQ3yih2KiuY6IfXk=
APP_DEBUG=true
APP_URL=http://localhost
APP_DEMO=false
diff --git a/README.md b/README.md
index e0086d82..226316d9 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,7 @@
- [Installation](#installation)
- [Nginx Configuration](#nginx-configuration)
- [Apache Configuration](#apache-configuration)
+- [Updating Application](#updating-application)
- [Developers](#developers)
- [Running Environment On Your Localhost](#running-environment-on-your-localhost)
- [Express Installation](#express-installation)
@@ -163,6 +164,11 @@ Make sure you have enabled mod_rewrite. There is an example config for running V
```
+# Updating Application
+1. Replace all files where the app is located except `/storage` folder and `.env` file.
+2. Clear the application cache (Admin / Settings / Application).
+3. In 5 minutes the app update stuff automatically on the background if needed.
+
# Developers
## Running Environment On Your Localhost
diff --git a/public/mix-manifest.json b/public/mix-manifest.json
index dc01a6cc..4e0eb408 100644
--- a/public/mix-manifest.json
+++ b/public/mix-manifest.json
@@ -16,7 +16,7 @@
"/chunks/not-found.js": "/chunks/not-found.js?id=9f6ce23ce5d969f1",
"/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=f564565faa09d6d6",
"/chunks/admin.js": "/chunks/admin.js?id=8032540fddb832c5",
- "/chunks/dashboard.js": "/chunks/dashboard.js?id=fd1d266e493a79a8",
+ "/chunks/dashboard.js": "/chunks/dashboard.js?id=a41b0f486b1f8d36",
"/chunks/invoices.js": "/chunks/invoices.js?id=1416cbf6d1a593ac",
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=5bf6704f5b599f36",
"/chunks/pages.js": "/chunks/pages.js?id=c8380d571e91e8be",
diff --git a/resources/js/views/Admin/Dashboard.vue b/resources/js/views/Admin/Dashboard.vue
index c78f4c5e..0fa8b743 100644
--- a/resources/js/views/Admin/Dashboard.vue
+++ b/resources/js/views/Admin/Dashboard.vue
@@ -53,16 +53,6 @@
-
-
- There is a new update that needs to upgrade some stuff on your backend. Please click on this box to upgrade.
-
-
-
-
- We detect new language strings. You should upgrade your translations. After that, you can find new translations at the bottom page of your translations in language editor. Please click on this box.
-
-
As you installed app with metered subscription type, you have to create your plan as soon as possible to prevent new user registration without automatically assigned subscription plan.
@@ -218,52 +208,10 @@ export default {
},
data() {
return {
- isUpgradingLanguages: false,
- isUpgradingApp: false,
isLoading: false,
data: undefined,
}
},
- methods: {
- upgradeTranslations() {
- this.isUpgradingLanguages = true
-
- axios.get('/upgrade/translations')
- .then(() => {
- this.data.app.shouldUpgradeTranslations = false
-
- events.$emit('toaster', {
- type: 'success',
- message: this.$t('Your translations was upgraded successfully.'),
- })
- })
- .catch(() => {
- events.$emit('alert:open', {
- title: this.$t('popup_error.title'),
- message: this.$t('popup_error.message'),
- })
- })
- },
- upgradeSystem() {
- this.isUpgradingApp = true
-
- axios.get('/upgrade/system')
- .then(() => {
- this.data.app.shouldUpgrade = false
-
- 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() {
axios
.get('/api/admin/dashboard')
diff --git a/routes/maintenance.php b/routes/maintenance.php
index 9dc4a36e..8004ab90 100644
--- a/routes/maintenance.php
+++ b/routes/maintenance.php
@@ -1,15 +1,8 @@
['auth:sanctum']], function () {
Route::get('/down', [MaintenanceModeController::class, 'down']);
Route::get('/up', [MaintenanceModeController::class, 'up']);
-
- Route::group(['prefix' => 'upgrade'], function () {
- Route::get('/translations', UpgradeTranslationsController::class);
- Route::get('/system', UpgradeSystemController::class);
- });
});
diff --git a/src/App/Console/Kernel.php b/src/App/Console/Kernel.php
index f087d9d9..157c7dd4 100644
--- a/src/App/Console/Kernel.php
+++ b/src/App/Console/Kernel.php
@@ -5,13 +5,14 @@ use Illuminate\Console\Scheduling\Schedule;
use App\Console\Commands\SetupDevEnvironment;
use App\Console\Commands\SetupProdEnvironment;
use Support\Scheduler\Actions\ReportUsageAction;
-use Support\Demo\Actions\DeleteAllSharedLinksAction;
+use Support\Demo\Actions\DeleteAllDemoSharedLinksAction;
use Support\Scheduler\Actions\DeleteFailedFilesAction;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Support\Scheduler\Actions\DeleteUnverifiedUsersAction;
use Support\Scheduler\Actions\DeleteExpiredShareLinksAction;
use App\Console\Commands\GenerateDemoSubscriptionContentCommand;
use Support\Scheduler\Actions\ExpireUnfilledUploadRequestAction;
+use Support\Upgrading\Actions\UpdateSystemAction;
class Kernel extends ConsoleKernel
{
@@ -42,7 +43,7 @@ class Kernel extends ConsoleKernel
if (is_demo()) {
$schedule->call(
- fn () => resolve(DeleteAllSharedLinksAction::class)()
+ fn () => resolve(DeleteAllDemoSharedLinksAction::class)()
)->daily()->at('00:00');
}
@@ -54,6 +55,10 @@ class Kernel extends ConsoleKernel
fn () => resolve(ExpireUnfilledUploadRequestAction::class)()
)->hourly();
+ $schedule->call(
+ fn () => resolve(UpdateSystemAction::class)()
+ )->everyMinute();
+
$schedule->call(
fn () => resolve(DeleteUnverifiedUsersAction::class)()
)->daily()->at('00:05');
diff --git a/src/App/Users/Resources/UserResource.php b/src/App/Users/Resources/UserResource.php
index 35c7be7c..408787f3 100644
--- a/src/App/Users/Resources/UserResource.php
+++ b/src/App/Users/Resources/UserResource.php
@@ -36,9 +36,9 @@ class UserResource extends JsonResource
'avatar' => $this->settings->avatar,
'email' => is_demo() ? obfuscate_email($this->email) : $this->email,
'role' => $this->role,
- 'two_factor_authentication' => (bool)$this->two_factor_secret,
+ 'two_factor_authentication' => (bool) $this->two_factor_secret,
'two_factor_confirmed_at' => $this->two_factor_confirmed_at,
- 'socialite_account' => !(bool)$this->password,
+ 'socialite_account' => ! (bool) $this->password,
'storage' => $this->storage,
'created_at' => format_date($this->created_at, 'd. M. Y'),
'updated_at' => format_date($this->updated_at, 'd. M. Y'),
diff --git a/src/Domain/Admin/Controllers/Dashboard/GetDashboardDataController.php b/src/Domain/Admin/Controllers/Dashboard/GetDashboardDataController.php
index 966ba64f..5e838729 100644
--- a/src/Domain/Admin/Controllers/Dashboard/GetDashboardDataController.php
+++ b/src/Domain/Admin/Controllers/Dashboard/GetDashboardDataController.php
@@ -1,27 +1,17 @@
getUpgradeData();
-
- // Get translations data
- list($originalTranslations, $activeTranslations) = $this->countTranslations();
-
// Get bandwidth data
list($upload, $download, $uploadTotal, $downloadTotal, $storageUsage) = $this->getDiskData();
@@ -31,7 +21,7 @@ class GetDashboardDataController extends Controller
->where('type', 'charge')
->sum('amount');
- return response([
+ return response()->json([
'users' => [
'total' => User::count(),
'usersPremiumTotal' => Subscription::count(),
@@ -48,8 +38,6 @@ class GetDashboardDataController extends Controller
],
],
'app' => [
- 'shouldUpgrade' => count($shouldUpgrade) > 0,
- 'shouldUpgradeTranslations' => $activeTranslations !== $originalTranslations,
'isRunningCron' => isRunningCron(),
'license' => get_settings('license'),
'version' => config('vuefilemanager.version'),
@@ -111,40 +99,4 @@ class GetDashboardDataController extends Controller
return [$upload, $download, $uploadTotal, $downloadTotal, $storageUsage];
}
-
- private function countTranslations(): array
- {
- $default_translations = [
- 'extended' => collect([
- config('language-translations.extended'),
- config('language-translations.regular'),
- config('custom-language-translations'),
- ])->collapse(),
- 'regular' => collect([
- config('language-translations.regular'),
- config('custom-language-translations'),
- ])->collapse(),
- ];
-
- $originalTranslationCount = count($default_translations[get_settings('license')]);
-
- $activeTranslationsCount = DB::table('language_translations')
- ->where('lang', 'en')
- ->count();
-
- return [$originalTranslationCount, $activeTranslationsCount];
- }
-
- private function getUpgradeData(): array
- {
- // Get already updated versions
- $alreadyUpdated = Schema::hasTable('app_updates')
- ? AppUpdate::all()
- ->pluck('version')
- ->toArray()
- : [];
-
- // Get versions which has to be upgraded
- return array_diff(config('vuefilemanager.updates'), $alreadyUpdated);
- }
}
diff --git a/src/Domain/Localization/Actions/DeleteLanguageStringsAction.php b/src/Domain/Localization/Actions/DeleteLanguageTranslationsAction.php
similarity index 84%
rename from src/Domain/Localization/Actions/DeleteLanguageStringsAction.php
rename to src/Domain/Localization/Actions/DeleteLanguageTranslationsAction.php
index 6b8c9dbc..6ec08745 100644
--- a/src/Domain/Localization/Actions/DeleteLanguageStringsAction.php
+++ b/src/Domain/Localization/Actions/DeleteLanguageTranslationsAction.php
@@ -1,10 +1,9 @@
whereIn('key', $list)
->delete();
}
-}
\ No newline at end of file
+}
diff --git a/src/Domain/Localization/Actions/UpdateLanguageStringsAction.php b/src/Domain/Localization/Actions/UpdateLanguageStringsAction.php
deleted file mode 100644
index 1f0af6c9..00000000
--- a/src/Domain/Localization/Actions/UpdateLanguageStringsAction.php
+++ /dev/null
@@ -1,18 +0,0 @@
-each(fn(...$item) => DB::table('language_translations')
- ->where('lang', 'en')
- ->where('key', $item[1])
- ->update(['value' => $item[0]])
- );
- }
-}
\ No newline at end of file
diff --git a/src/Domain/Localization/Actions/UpdateLanguageTranslationsAction.php b/src/Domain/Localization/Actions/UpdateLanguageTranslationsAction.php
new file mode 100644
index 00000000..bae3d6b0
--- /dev/null
+++ b/src/Domain/Localization/Actions/UpdateLanguageTranslationsAction.php
@@ -0,0 +1,18 @@
+each(
+ fn (...$item) => DB::table('language_translations')
+ ->where('lang', 'en')
+ ->where('key', $item[1])
+ ->update(['value' => $item[0]])
+ );
+ }
+}
diff --git a/src/Domain/Maintenance/Actions/UpgradeDatabaseAction.php b/src/Domain/Maintenance/Actions/UpgradeDatabaseAction.php
index 9e871d5c..523a11a8 100644
--- a/src/Domain/Maintenance/Actions/UpgradeDatabaseAction.php
+++ b/src/Domain/Maintenance/Actions/UpgradeDatabaseAction.php
@@ -1,16 +1,12 @@
true,
]);
diff --git a/src/Domain/Maintenance/Controllers/UpgradeTranslationsController.php b/src/Domain/Maintenance/Controllers/UpgradeTranslationsController.php
deleted file mode 100644
index 5f5937a4..00000000
--- a/src/Domain/Maintenance/Controllers/UpgradeTranslationsController.php
+++ /dev/null
@@ -1,29 +0,0 @@
-upgradeLanguageTranslations)();
-
- return response('Done.', 201);
- }
-}
diff --git a/src/Domain/Settings/Requests/StorePaymentServiceCredentialsRequest.php b/src/Domain/Settings/Requests/StorePaymentServiceCredentialsRequest.php
index 4fdfe4f0..26086a4c 100644
--- a/src/Domain/Settings/Requests/StorePaymentServiceCredentialsRequest.php
+++ b/src/Domain/Settings/Requests/StorePaymentServiceCredentialsRequest.php
@@ -1,5 +1,4 @@
shouldUpdateTranslations()) {
+ resolve(UpgradeLanguageTranslationsAction::class)();
+ }
+
+ // Check if there are some version to upgrade
+ $shouldUpgradeSystem = $this->shouldUpgradeSystem();
+
+ // Upgrade the app
+ if (! empty($shouldUpgradeSystem)) {
+ foreach ($shouldUpgradeSystem as $version) {
+ // Get method name
+ $method = "upgrade_to_$version";
+
+ if (method_exists($this, $method)) {
+ // Run update
+ $this->{$method}();
+
+ // Store update record
+ AppUpdate::create(['version' => $version]);
+ }
+ }
+
+ // Clear config
+ Artisan::call('config:clear');
+ }
+ }
+
+ private function shouldUpgradeSystem(): array
+ {
+ // Get already updated versions
+ $alreadyUpdated = Schema::hasTable('app_updates')
+ ? AppUpdate::all()
+ ->pluck('version')
+ ->toArray()
+ : [];
+
+ // Get versions which has to be upgraded
+ return array_diff(config('vuefilemanager.updates'), $alreadyUpdated);
+ }
+
+ private function shouldUpdateTranslations(): bool
+ {
+ $default_translations = [
+ 'extended' => collect([
+ config('language-translations.extended'),
+ config('language-translations.regular'),
+ config('custom-language-translations'),
+ ])->collapse(),
+ 'regular' => collect([
+ config('language-translations.regular'),
+ config('custom-language-translations'),
+ ])->collapse(),
+ ];
+
+ $originalTranslationCount = count($default_translations[get_settings('license')]);
+
+ $activeTranslationsCount = DB::table('language_translations')
+ ->where('lang', 'en')
+ ->count();
+
+ return $activeTranslationsCount !== $originalTranslationCount;
+ }
+}
diff --git a/src/Domain/Maintenance/Controllers/UpgradeSystemController.php b/src/Support/Upgrading/Controllers/UpgradingVersionsController.php
similarity index 69%
rename from src/Domain/Maintenance/Controllers/UpgradeSystemController.php
rename to src/Support/Upgrading/Controllers/UpgradingVersionsController.php
index e5bc10a5..f531110c 100644
--- a/src/Domain/Maintenance/Controllers/UpgradeSystemController.php
+++ b/src/Support/Upgrading/Controllers/UpgradingVersionsController.php
@@ -1,69 +1,28 @@
pluck('version')
- ->toArray()
- : [];
-
- // 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)) {
- // Run update
- $this->{$method}($request);
-
- // Store update record
- AppUpdate::create(['version' => $version]);
-
- return response('Done', 201);
- }
- }
-
- return response('Whooops, something went wrong!', 500);
- }
-
- private function upgrade_to_2_0_10(): void
+ public function upgrade_to_2_0_10(): void
{
($this->upgradeDatabase)();
@@ -131,7 +90,7 @@ class UpgradeSystemController extends Controller
]));
}
- private function upgrade_to_2_0_13(): void
+ public function upgrade_to_2_0_13(): void
{
// Force plan synchronization
if (get_settings('license') === 'extended' && Plan::count() !== 0) {
@@ -139,7 +98,7 @@ class UpgradeSystemController extends Controller
}
}
- private function upgrade_to_2_0_14(): void
+ public function upgrade_to_2_0_14(): void
{
($this->upgradeDatabase)();
@@ -148,7 +107,7 @@ class UpgradeSystemController extends Controller
->each(fn ($user) => $user->forceFill(['two_factor_confirmed_at' => now()])->save());
($this->deleteLanguageStrings)([
- 'popup_2fa.disappear_qr'
+ 'popup_2fa.disappear_qr',
]);
($this->updateLanguageStrings)([
diff --git a/tests/App/Users/UserAccountTest.php b/tests/App/Users/UserAccountTest.php
index 001d1156..9a40cee0 100644
--- a/tests/App/Users/UserAccountTest.php
+++ b/tests/App/Users/UserAccountTest.php
@@ -157,6 +157,7 @@ class UserAccountTest extends TestCase
'role' => $user->role,
'socialite_account' => false,
'two_factor_authentication' => false,
+ 'two_factor_confirmed_at' => null,
'storage' => [
'used' => 0,
'used_formatted' => '0%',
diff --git a/tests/Domain/Admin/DashboardTest.php b/tests/Domain/Admin/DashboardTest.php
index c09f2c5e..5b340bcf 100644
--- a/tests/Domain/Admin/DashboardTest.php
+++ b/tests/Domain/Admin/DashboardTest.php
@@ -25,8 +25,6 @@ class DashboardTest extends TestCase
->assertStatus(200)
->assertJsonFragment([
'app' => [
- 'shouldUpgrade' => true,
- 'shouldUpgradeTranslations' => true,
'earnings' => '$0.00',
'isRunningCron' => false,
'license' => 'extended',
diff --git a/tests/Domain/Maintenance/AppUpgradeTest.php b/tests/Domain/Maintenance/AppUpgradeTest.php
index 58ba24a6..0d5c3cb9 100644
--- a/tests/Domain/Maintenance/AppUpgradeTest.php
+++ b/tests/Domain/Maintenance/AppUpgradeTest.php
@@ -5,6 +5,7 @@ use DB;
use Tests\TestCase;
use App\Users\Models\User;
use Illuminate\Support\Str;
+use Support\Upgrading\Actions\UpdateSystemAction;
class AppUpgradeTest extends TestCase
{
@@ -39,10 +40,7 @@ class AppUpgradeTest extends TestCase
]);
});
- $this
- ->actingAs($user)
- ->get('/upgrade/translations')
- ->assertStatus(201);
+ resolve(UpdateSystemAction::class)();
collect(['en', 'sk'])
->map(function ($locale) {
@@ -65,13 +63,7 @@ class AppUpgradeTest extends TestCase
*/
public function it_upgrade_app()
{
- $user = User::factory()
- ->create(['role' => 'admin']);
-
- $this
- ->actingAs($user)
- ->get('/upgrade/system')
- ->assertStatus(201);
+ resolve(UpdateSystemAction::class)();
$this->assertDatabaseHas('app_updates', [
'version' => '2_0_10',
diff --git a/tests/Support/Demo/DemoTest.php b/tests/Support/Demo/DemoTest.php
index 963b8329..ffc80e37 100644
--- a/tests/Support/Demo/DemoTest.php
+++ b/tests/Support/Demo/DemoTest.php
@@ -1,11 +1,10 @@
create(['user_id' => $howdy->id]);
- resolve(DeleteAllSharedLinksAction::class)();
+ resolve(DeleteAllDemoSharedLinksAction::class)();
$this->assertDatabaseHas('shares', [
'user_id' => $user->id,
@@ -38,4 +37,4 @@ class DemoTest extends TestCase
'user_id' => $howdy->id,
]);
}
-}
\ No newline at end of file
+}