Add integrity check for new columns in users table

This commit is contained in:
printempw 2018-08-08 12:54:54 +08:00
parent 3c840aca46
commit 6cb200bc39
5 changed files with 48 additions and 1 deletions

View File

@ -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'];

View File

@ -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;
}

View File

@ -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. <a target="_blank" href="https://github.com/printempw/blessing-skin-server/wiki/%E6%89%8B%E5%8A%A8%E5%AE%89%E8%A3%85-Blessing-Skin#-%E5%8D%87%E7%BA%A7%E8%87%B3-bs-v350">Learn more</a>

View File

@ -62,3 +62,7 @@ wizard:
finish:
title: 安装成功!
text: Blessing Skin Server 安装完成。您是否还沉浸在愉悦的安装过程中?很遗憾,一切皆已完成! :)
integrity-check:
title: 安装不完全
description: 由于某些神秘的原因,我们无法自动完成数据库的更新。<a target="_blank" href="https://github.com/printempw/blessing-skin-server/wiki/%E6%89%8B%E5%8A%A8%E5%AE%89%E8%A3%85-Blessing-Skin#-%E5%8D%87%E7%BA%A7%E8%87%B3-bs-v350">了解详情</a>

View File

@ -18,6 +18,13 @@
<div class="row">
<div class="col-md-6">
@if (! App\Http\Controllers\SetupController::checkNewColumnsExist())
<div class="callout callout-danger">
<h4><i class="fa fa-exclamation-triangle" aria-hidden="true"></i> {{ trans('setup.integrity-check.title') }}</h4>
<p>{!! trans('setup.integrity-check.description') !!}</p>
</div>
@endif
{!! $forms['general']->render() !!}
</div>