2016-11-18 16:46:58 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
use Utils;
|
|
|
|
use Schema;
|
|
|
|
use Option;
|
2016-11-21 21:50:24 +08:00
|
|
|
use Storage;
|
2016-11-18 16:46:58 +08:00
|
|
|
use Artisan;
|
|
|
|
use Database;
|
|
|
|
use App\Models\User;
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
use Illuminate\Validation\Validator;
|
2016-11-21 21:50:24 +08:00
|
|
|
use App\Exceptions\PrettyPageException;
|
2016-11-18 16:46:58 +08:00
|
|
|
|
|
|
|
class SetupController extends Controller
|
|
|
|
{
|
|
|
|
public function welcome()
|
|
|
|
{
|
|
|
|
// already installed
|
2016-12-18 17:32:46 +08:00
|
|
|
if (self::checkTablesExist()) {
|
2016-11-18 16:46:58 +08:00
|
|
|
return view('setup.locked');
|
|
|
|
} else {
|
|
|
|
$config = config('database.connections.mysql');
|
|
|
|
|
|
|
|
return view('setup.wizard.welcome')->with('server', "{$config['username']}@{$config['host']}");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function update()
|
|
|
|
{
|
|
|
|
if (version_compare(config('app.version'), option('version', ''), '<=')) {
|
|
|
|
// no updates available
|
|
|
|
return view('setup.locked');
|
|
|
|
}
|
|
|
|
|
|
|
|
return view('setup.updates.welcome');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function doUpdate()
|
|
|
|
{
|
|
|
|
$resource = opendir(database_path('update_scripts'));
|
2016-12-18 17:32:46 +08:00
|
|
|
$updateScriptExist = false;
|
2016-11-18 16:46:58 +08:00
|
|
|
|
|
|
|
$tips = [];
|
|
|
|
|
|
|
|
while($filename = @readdir($resource)) {
|
|
|
|
if ($filename != "." && $filename != "..") {
|
|
|
|
preg_match('/update-(.*)-to-(.*).php/', $filename, $matches);
|
|
|
|
|
|
|
|
// skip if the file is not valid or expired
|
|
|
|
if (!isset($matches[2]) ||
|
2016-11-25 12:54:20 +08:00
|
|
|
version_compare($matches[2], config('app.version'), '<')) {
|
2016-11-18 16:46:58 +08:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$result = require database_path('update_scripts')."/$filename";
|
|
|
|
|
|
|
|
if (is_array($result)) {
|
|
|
|
// push tip to array
|
|
|
|
foreach ($result as $tip) {
|
|
|
|
$tips[] = $tip;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-12-18 17:32:46 +08:00
|
|
|
$updateScriptExist = true;
|
2016-11-18 16:46:58 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
closedir($resource);
|
|
|
|
|
|
|
|
foreach (config('options') as $key => $value) {
|
|
|
|
if (!Option::has($key))
|
|
|
|
Option::set($key, $value);
|
|
|
|
}
|
|
|
|
|
2016-12-18 17:32:46 +08:00
|
|
|
if (!$updateScriptExist) {
|
2016-11-18 16:46:58 +08:00
|
|
|
// if update script is not given
|
|
|
|
Option::set('version', config('app.version'));
|
|
|
|
}
|
|
|
|
|
|
|
|
return view('setup.updates.success', ['tips' => $tips]);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function info()
|
|
|
|
{
|
|
|
|
return view('setup.wizard.info');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function finish(Request $request)
|
|
|
|
{
|
|
|
|
$this->validate($request, [
|
|
|
|
'email' => 'required|email',
|
|
|
|
'password' => 'required|min:6|max:16|confirmed',
|
|
|
|
'site_name' => 'required'
|
|
|
|
]);
|
|
|
|
|
|
|
|
// create tables
|
2016-12-14 22:10:48 +08:00
|
|
|
Artisan::call('migrate', ['--force' => true]);
|
2016-11-18 16:46:58 +08:00
|
|
|
|
|
|
|
Option::set('site_name', $request->input('site_name'));
|
|
|
|
Option::set('site_url', url('/'));
|
|
|
|
|
|
|
|
// register super admin
|
|
|
|
$user = User::register(
|
|
|
|
$request->input('email'),
|
|
|
|
$request->input('password'),
|
2016-12-18 17:32:46 +08:00
|
|
|
function ($user) use ($request)
|
2016-11-18 16:46:58 +08:00
|
|
|
{
|
2016-12-16 22:20:41 +08:00
|
|
|
$user->ip = $request->ip();
|
2016-11-18 16:46:58 +08:00
|
|
|
$user->score = option('user_initial_score');
|
|
|
|
$user->register_at = Utils::getTimeFormatted();
|
|
|
|
$user->last_sign_at = Utils::getTimeFormatted(time() - 86400);
|
|
|
|
$user->permission = User::SUPER_ADMIN;
|
|
|
|
});
|
|
|
|
|
|
|
|
$this->createDirectories();
|
|
|
|
|
|
|
|
return view('setup.wizard.finish')->with([
|
|
|
|
'email' => $request->input('email'),
|
|
|
|
'password' => $request->input('password')
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
2016-12-18 17:32:46 +08:00
|
|
|
/**
|
|
|
|
* Check if the given tables exist in current database.
|
|
|
|
*
|
|
|
|
* @param array $tables [description]
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public static function checkTablesExist($tables = [
|
|
|
|
'users', 'closets', 'players', 'textures', 'options'
|
|
|
|
])
|
2016-11-18 16:46:58 +08:00
|
|
|
{
|
|
|
|
foreach ($tables as $table_name) {
|
|
|
|
// prefix will be added automatically
|
|
|
|
if (!Schema::hasTable($table_name)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-12-18 17:32:46 +08:00
|
|
|
public static function checkTextureDirectory()
|
|
|
|
{
|
|
|
|
if (!Storage::disk('storage')->has('textures')) {
|
|
|
|
// mkdir
|
|
|
|
if (!Storage::disk('storage')->makeDirectory('textures'))
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function createDirectories()
|
|
|
|
{
|
|
|
|
return self::checkTextureDirectory();
|
|
|
|
}
|
|
|
|
|
2016-11-18 16:46:58 +08:00
|
|
|
/**
|
|
|
|
* {@inheritdoc}
|
|
|
|
*/
|
|
|
|
protected function formatValidationErrors(Validator $validator)
|
|
|
|
{
|
|
|
|
return $validator->errors()->all();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|