diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php index 7bc94e49..9f7aa0ed 100644 --- a/app/Http/Controllers/SetupController.php +++ b/app/Http/Controllers/SetupController.php @@ -193,7 +193,8 @@ class SetupController extends Controller * @param bool $returnExisting * @return bool|array */ - public static function checkTablesExist($tables = [], $returnExistingTables = false) { + public static function checkTablesExist($tables = [], $returnExistingTables = false) + { $existingTables = []; $tables = $tables ?: ['users', 'closets', 'players', 'textures', 'options']; @@ -211,6 +212,28 @@ class SetupController extends Controller } } + /** + * Check if the given columns exist in specific table. + * By default, we will check the columns newly added to users table in BS v3.5.0. + * + * @param string $table + * @param array $columns + * @return void + */ + public static function checkNewColumnsExist($table = 'users', $columns = []) + { + $existingColumns = []; + $columns = $columns ?: ['verified', 'verification_token']; + + foreach ($columns as $column) { + if (Schema::hasColumn($table, $column)) { + $existingColumns[] = $column; + } + } + + return count($existingColumns) === count($columns); + } + public static function checkDirectories() { $directories = ['storage/textures', 'plugins']; diff --git a/app/Providers/RuntimeCheckServiceProvider.php b/app/Providers/RuntimeCheckServiceProvider.php index 90a6cc21..d815ba1a 100644 --- a/app/Providers/RuntimeCheckServiceProvider.php +++ b/app/Providers/RuntimeCheckServiceProvider.php @@ -3,6 +3,8 @@ namespace App\Providers; use DB; +use Schema; +use Artisan; use Illuminate\Http\Request; use Composer\Semver\Comparator; use Illuminate\Support\ServiceProvider; @@ -89,6 +91,13 @@ class RuntimeCheckServiceProvider extends ServiceProvider return redirect('/setup/update')->send(); } + if (! SetupController::checkNewColumnsExist()) { + // Disable the email verification feature temporarily + option(['require_verification' => false]); + // Try to prepare the new columns + Artisan::call('migrate', ['--force' => true]); + } + return true; } diff --git a/resources/lang/en/setup.yml b/resources/lang/en/setup.yml index e7fca5d9..595b19c2 100644 --- a/resources/lang/en/setup.yml +++ b/resources/lang/en/setup.yml @@ -62,3 +62,7 @@ wizard: finish: title: Installation complete text: Blessing Skin Server has been installed. Thank you, and enjoy! + +integrity-check: + title: We could not complete the installation. + description: The automatic upgrade script failed to update your database. Learn more diff --git a/resources/lang/zh_CN/setup.yml b/resources/lang/zh_CN/setup.yml index 09413e11..4390486f 100644 --- a/resources/lang/zh_CN/setup.yml +++ b/resources/lang/zh_CN/setup.yml @@ -62,3 +62,7 @@ wizard: finish: title: 安装成功! text: Blessing Skin Server 安装完成。您是否还沉浸在愉悦的安装过程中?很遗憾,一切皆已完成! :) + +integrity-check: + title: 安装不完全 + description: 由于某些神秘的原因,我们无法自动完成数据库的更新。了解详情 diff --git a/resources/views/admin/options.tpl b/resources/views/admin/options.tpl index 5eba9488..8364cbf8 100644 --- a/resources/views/admin/options.tpl +++ b/resources/views/admin/options.tpl @@ -18,6 +18,13 @@
+ @if (! App\Http\Controllers\SetupController::checkNewColumnsExist()) +
+

{{ trans('setup.integrity-check.title') }}

+

{!! trans('setup.integrity-check.description') !!}

+
+ @endif + {!! $forms['general']->render() !!}