Split the importer module out from the installer module (#468)
* Split the importer module out from the installer module * Cleanup of unused imports * Move updater into separate module #453 * Remove unused imports/formatting * Disable the install and importer modules at the end of the setup * Unused imports; update IJ style * test explicit stage for php+mysql * add more to matrix * Add different MariaDB versions * undo
This commit is contained in:
76
.travis.yml
76
.travis.yml
@@ -44,9 +44,83 @@ script:
|
||||
after_failure:
|
||||
- cat storage/logs/*.log
|
||||
|
||||
# Refer to: https://github.com/doctrine/dbal/blob/master/.travis.yml#L39
|
||||
jobs:
|
||||
fast_finish: true
|
||||
include:
|
||||
# Different test stages
|
||||
# - stage: Test
|
||||
# name: PHP 7.2 + MySQL 5.7
|
||||
# php: 7.2
|
||||
# env: DB=mysql
|
||||
# services:
|
||||
# - mysql
|
||||
# - stage: Test
|
||||
# name: PHP 7.3 + MySQL 5.7
|
||||
# php: 7.3
|
||||
# env: DB=mysql
|
||||
# services:
|
||||
# - mysql
|
||||
# - stage: Test
|
||||
# name: PHP 7.4 + MySQL 5.7
|
||||
# php: 7.4
|
||||
# env: DB=mysql
|
||||
# services:
|
||||
# - mysql
|
||||
# - stage: Test
|
||||
# name: PHP 7.2 + MariaDB 10.1
|
||||
# php: 7.2
|
||||
# env: DB=mariadb
|
||||
# addons:
|
||||
# mariadb: '10.1'
|
||||
# - stage: Test
|
||||
# name: PHP 7.3 + MariaDB 10.1
|
||||
# php: 7.3
|
||||
# env: DB=mariadb
|
||||
# addons:
|
||||
# mariadb: '10.1'
|
||||
# - stage: Test
|
||||
# name: PHP 7.4 + MariaDB 10.1
|
||||
# php: 7.4
|
||||
# env: DB=mariadb MARIADB_VERSION=10.1
|
||||
# addons:
|
||||
# mariadb: '10.1'
|
||||
# - stage: Test
|
||||
# name: PHP 7.2 + MariaDB 10.2
|
||||
# php: 7.2
|
||||
# env: DB=mariadb
|
||||
# addons:
|
||||
# mariadb: '10.2'
|
||||
# - stage: Test
|
||||
# name: PHP 7.3 + MariaDB 10.3
|
||||
# php: 7.3
|
||||
# env: DB=mariadb
|
||||
# addons:
|
||||
# mariadb: '10.2'
|
||||
# - stage: Test
|
||||
# name: PHP 7.4 + MariaDB 10.2
|
||||
# php: 7.4
|
||||
# env: DB=mariadb
|
||||
# addons:
|
||||
# mariadb: '10.2'
|
||||
# - stage: Test
|
||||
# name: PHP 7.2 + MariaDB 10.3
|
||||
# php: 7.2
|
||||
# env: DB=mariadb
|
||||
# addons:
|
||||
# mariadb: '10.3'
|
||||
# - stage: Test
|
||||
# name: PHP 7.3 + MariaDB 10.3
|
||||
# php: 7.3
|
||||
# env: DB=mariadb
|
||||
# addons:
|
||||
# mariadb: '10.3'
|
||||
# - stage: Test
|
||||
# name: PHP 7.4 + MariaDB 10.3
|
||||
# php: 7.4
|
||||
# env: DB=mariadb
|
||||
# addons:
|
||||
# mariadb: '10.3'
|
||||
|
||||
# Just packages up a release
|
||||
- stage: package
|
||||
script: skip
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace App\Contracts;
|
||||
* @property mixed $id
|
||||
* @property bool $skip_mutator
|
||||
*
|
||||
* @method static create(array $attrs)
|
||||
* @method static Model create(array $attrs)
|
||||
* @method static Model find(int $id)
|
||||
* @method static Model select(array $array)
|
||||
* @method static Model where(array $array)
|
||||
|
||||
@@ -5,9 +5,6 @@ namespace App\Facades;
|
||||
use GuzzleHttp\Client;
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
/**
|
||||
* Class Utils
|
||||
*/
|
||||
class Utils extends Facade
|
||||
{
|
||||
/**
|
||||
|
||||
@@ -25,7 +25,7 @@ use App\Models\Subfleet;
|
||||
use App\Models\User;
|
||||
use App\Repositories\SettingRepository;
|
||||
use App\Services\ModuleService;
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use App\Support\Utils;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
@@ -76,13 +76,10 @@ class AppServiceProvider extends ServiceProvider
|
||||
$this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
|
||||
}
|
||||
|
||||
try {
|
||||
if (config('app.debug_toolbar') === true) {
|
||||
app('debugbar')->enable();
|
||||
} else {
|
||||
app('debugbar')->disable();
|
||||
}
|
||||
} catch (BindingResolutionException $e) {
|
||||
if (config('app.debug_toolbar') === true) {
|
||||
Utils::enableDebugToolbar();
|
||||
} else {
|
||||
Utils::disableDebugToolbar();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services;
|
||||
namespace App\Services\Installer;
|
||||
|
||||
use App\Contracts\Service;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Services\Installer;
|
||||
|
||||
use App\Contracts\Service;
|
||||
use Nwidart\Modules\Facades\Module;
|
||||
|
||||
class InstallerService extends Service
|
||||
{
|
||||
@@ -36,4 +37,16 @@ class InstallerService extends Service
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the installer and importer modules
|
||||
*/
|
||||
public function disableInstallerModules()
|
||||
{
|
||||
$module = Module::find('installer');
|
||||
$module->disable();
|
||||
|
||||
$module = Module::find('importer');
|
||||
$module->disable();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Utils;
|
||||
namespace App\Services\Installer;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Support;
|
||||
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use Nwidart\Modules\Facades\Module;
|
||||
|
||||
/**
|
||||
@@ -9,6 +10,28 @@ use Nwidart\Modules\Facades\Module;
|
||||
*/
|
||||
class Utils
|
||||
{
|
||||
/**
|
||||
* Enable the debug toolbar
|
||||
*/
|
||||
public static function enableDebugToolbar()
|
||||
{
|
||||
try {
|
||||
app('debugbar')->enable();
|
||||
} catch (BindingResolutionException $e) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable the debug toolbar
|
||||
*/
|
||||
public static function disableDebugToolbar()
|
||||
{
|
||||
try {
|
||||
app('debugbar')->disable();
|
||||
} catch (BindingResolutionException $e) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the installer enabled?
|
||||
*
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"Awards": true,
|
||||
"Importer": true,
|
||||
"Installer": true,
|
||||
"Sample": true,
|
||||
"Updater": true,
|
||||
"VMSAcars": true,
|
||||
"Vacentral": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
<option name="VARIABLE_NAMING_STYLE" value="CAMEL_CASE" />
|
||||
<option name="BLANK_LINES_BEFORE_RETURN_STATEMENT" value="1" />
|
||||
<option name="KEEP_RPAREN_AND_LBRACE_ON_ONE_LINE" value="true" />
|
||||
<option name="SPACE_AFTER_UNARY_NOT" value="true" />
|
||||
<option name="SPACES_WITHIN_SHORT_ECHO_TAGS" value="false" />
|
||||
<option name="FORCE_SHORT_DECLARATION_ARRAY_STYLE" value="true" />
|
||||
<option name="PHPDOC_USE_FQCN" value="true" />
|
||||
</PHPCodeStyleSettings>
|
||||
<XML>
|
||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||
@@ -32,6 +32,8 @@
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="PHP">
|
||||
<option name="LINE_COMMENT_AT_FIRST_COLUMN" value="false" />
|
||||
<option name="LINE_COMMENT_ADD_SPACE" value="true" />
|
||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
|
||||
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
|
||||
@@ -44,6 +46,7 @@
|
||||
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
||||
<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
|
||||
<option name="SPACE_AFTER_TYPE_CAST" value="true" />
|
||||
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
|
||||
<option name="SPACE_BEFORE_CLASS_LBRACE" value="false" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
||||
<option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
|
||||
|
||||
1
modules/.gitignore
vendored
1
modules/.gitignore
vendored
@@ -7,4 +7,5 @@
|
||||
!/Importer
|
||||
!/Installer
|
||||
!/Sample
|
||||
!/Updater
|
||||
!/Vacentral
|
||||
|
||||
7
modules/Importer/Config/config.php
Normal file
7
modules/Importer/Config/config.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'importer' => [
|
||||
'batch_size' => 20,
|
||||
],
|
||||
];
|
||||
@@ -1,10 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Console\Commands;
|
||||
namespace Modules\Importer\Console\Commands;
|
||||
|
||||
use App\Contracts\Command;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Installer\Services\Importer\ImporterService;
|
||||
use Modules\Importer\Services\ImporterService;
|
||||
|
||||
class ImportFromClassicCommand extends Command
|
||||
{
|
||||
@@ -1,25 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Http\Controllers;
|
||||
namespace Modules\Importer\Http\Controllers;
|
||||
|
||||
use App\Contracts\Controller;
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use App\Services\Installer\DatabaseService;
|
||||
use App\Services\Installer\InstallerService;
|
||||
use App\Support\Utils;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Installer\Services\Importer\ImporterService;
|
||||
use Modules\Importer\Services\ImporterService;
|
||||
|
||||
class ImporterController extends Controller
|
||||
{
|
||||
private $dbSvc;
|
||||
private $importerSvc;
|
||||
|
||||
public function __construct(ImporterService $importerSvc)
|
||||
public function __construct(DatabaseService $dbSvc, ImporterService $importerSvc)
|
||||
{
|
||||
$this->dbSvc = $dbSvc;
|
||||
$this->importerSvc = $importerSvc;
|
||||
|
||||
try {
|
||||
app('debugbar')->disable();
|
||||
} catch (BindingResolutionException $e) {
|
||||
}
|
||||
Utils::disableDebugToolbar();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -28,16 +29,43 @@ class ImporterController extends Controller
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
* @return mixed
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
return view('importer::step1-configure');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the database connection
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function dbtest(Request $request)
|
||||
{
|
||||
$status = 'success'; // success|warn|danger
|
||||
$message = 'Database connection looks good!';
|
||||
|
||||
try {
|
||||
app('debugbar')->disable();
|
||||
} catch (BindingResolutionException $e) {
|
||||
$this->dbSvc->checkDbConnection(
|
||||
$request->post('db_conn'),
|
||||
$request->post('db_host'),
|
||||
$request->post('db_port'),
|
||||
$request->post('db_name'),
|
||||
$request->post('db_user'),
|
||||
$request->post('db_pass')
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
$status = 'danger';
|
||||
$message = 'Failed! '.$e->getMessage();
|
||||
}
|
||||
|
||||
return view('installer::importer/step1-configure');
|
||||
return view('importer::dbtest', [
|
||||
'status' => $status,
|
||||
'message' => $message,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,15 +73,10 @@ class ImporterController extends Controller
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
*
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
* @return mixed
|
||||
*/
|
||||
public function config(Request $request)
|
||||
{
|
||||
try {
|
||||
app('debugbar')->disable();
|
||||
} catch (BindingResolutionException $e) {
|
||||
}
|
||||
|
||||
try {
|
||||
// Save the credentials to use later
|
||||
$this->importerSvc->saveCredentialsFromRequest($request);
|
||||
@@ -62,14 +85,15 @@ class ImporterController extends Controller
|
||||
$manifest = $this->importerSvc->generateImportManifest();
|
||||
} catch (\Exception $e) {
|
||||
Log::error($e->getMessage());
|
||||
|
||||
// Send it to run, step1
|
||||
return view('installer::importer/error', [
|
||||
return view('importer::error', [
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
// Send it to run, step1
|
||||
return view('installer::importer/step2-processing', [
|
||||
return view('importer::step2-processing', [
|
||||
'manifest' => $manifest,
|
||||
]);
|
||||
}
|
||||
@@ -84,15 +108,10 @@ class ImporterController extends Controller
|
||||
*
|
||||
* @throws \Exception
|
||||
*
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
* @return mixed
|
||||
*/
|
||||
public function run(Request $request)
|
||||
{
|
||||
try {
|
||||
app('debugbar')->disable();
|
||||
} catch (BindingResolutionException $e) {
|
||||
}
|
||||
|
||||
$importer = $request->input('importer');
|
||||
$start = $request->input('start');
|
||||
|
||||
@@ -110,6 +129,9 @@ class ImporterController extends Controller
|
||||
*/
|
||||
public function complete()
|
||||
{
|
||||
$installerSvc = app(InstallerService::class);
|
||||
$installerSvc->disableInstallerModules();
|
||||
|
||||
return redirect('/');
|
||||
}
|
||||
}
|
||||
102
modules/Importer/Providers/ImporterServiceProvider.php
Normal file
102
modules/Importer/Providers/ImporterServiceProvider.php
Normal file
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Importer\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Modules\Importer\Console\Commands\ImportFromClassicCommand;
|
||||
|
||||
class ImporterServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Boot the application events.
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->registerCommands();
|
||||
$this->registerRoutes();
|
||||
$this->registerTranslations();
|
||||
$this->registerConfig();
|
||||
$this->registerViews();
|
||||
}
|
||||
|
||||
protected function registerCommands()
|
||||
{
|
||||
$this->commands([
|
||||
ImportFromClassicCommand::class,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the routes
|
||||
*/
|
||||
protected function registerRoutes()
|
||||
{
|
||||
Route::group([
|
||||
'as' => 'importer.',
|
||||
'prefix' => 'importer',
|
||||
'middleware' => ['web'],
|
||||
'namespace' => 'Modules\Importer\Http\Controllers',
|
||||
], function () {
|
||||
Route::get('/', 'ImporterController@index')->name('index');
|
||||
Route::post('/config', 'ImporterController@config')->name('config');
|
||||
Route::post('/dbtest', 'ImporterController@dbtest')->name('dbtest');
|
||||
|
||||
// Run the actual importer process. Additional middleware
|
||||
Route::post('/run', 'ImporterController@run')->middleware('api')->name('run');
|
||||
|
||||
Route::post('/complete', 'ImporterController@complete')->name('complete');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register config.
|
||||
*/
|
||||
protected function registerConfig()
|
||||
{
|
||||
$this->mergeConfigFrom(__DIR__.'/../Config/config.php', 'importer');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register views.
|
||||
*/
|
||||
public function registerViews()
|
||||
{
|
||||
$viewPath = resource_path('views/modules/importer');
|
||||
$sourcePath = __DIR__.'/../Resources/views';
|
||||
|
||||
$this->publishes([$sourcePath => $viewPath], 'views');
|
||||
|
||||
$paths = array_map(
|
||||
function ($path) {
|
||||
return $path.'/modules/importer';
|
||||
},
|
||||
\Config::get('view.paths')
|
||||
);
|
||||
|
||||
$paths[] = $sourcePath;
|
||||
$this->loadViewsFrom($paths, 'importer');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register translations.
|
||||
*/
|
||||
public function registerTranslations()
|
||||
{
|
||||
$langPath = resource_path('lang/modules/importer');
|
||||
|
||||
if (is_dir($langPath)) {
|
||||
$this->loadTranslationsFrom($langPath, 'importer');
|
||||
} else {
|
||||
$this->loadTranslationsFrom(__DIR__.'/../Resources/lang', 'importer');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the services provided by the provider.
|
||||
*/
|
||||
public function provides(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
92
modules/Importer/Resources/views/app.blade.php
Normal file
92
modules/Importer/Resources/views/app.blade.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>@yield('title') - importer</title>
|
||||
|
||||
<link rel="shortcut icon" type="image/png" href="{{ public_asset('/assets/img/favicon.png') }}"/>
|
||||
|
||||
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no'
|
||||
name='viewport'/>
|
||||
<meta name="base-url" content="{!! url('') !!}">
|
||||
<meta name="api-key" content="{!! Auth::check() ? Auth::user()->api_key: '' !!}">
|
||||
<meta name="csrf-token" content="{!! csrf_token() !!}">
|
||||
|
||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700,200" rel="stylesheet"/>
|
||||
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css" rel="stylesheet"/>
|
||||
|
||||
<link href="{{ public_asset('/assets/frontend/css/bootstrap.min.css') }}" rel="stylesheet"/>
|
||||
<link href="{{ public_asset('/assets/frontend/css/now-ui-kit.css') }}" rel="stylesheet"/>
|
||||
<link href="{{ public_asset('/assets/installer/css/vendor.css') }}" rel="stylesheet"/>
|
||||
<link href="{{ public_asset('/assets/frontend/css/styles.css') }}" rel="stylesheet"/>
|
||||
|
||||
<link rel="stylesheet"
|
||||
href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css">
|
||||
|
||||
<style>
|
||||
.table tr:first-child td { border-top: 0px; }
|
||||
@yield('css')
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Navbar -->
|
||||
<nav class="navbar navbar-toggleable-md" style="background: #067ec1;">
|
||||
<div class="container" style="width: 85%!important;">
|
||||
<div class="navbar-translate">
|
||||
<p class="navbar-brand text-white" data-placement="bottom" target="_blank">
|
||||
<a href="{{ url('/') }}">
|
||||
<img src="{{ public_asset('/assets/img/logo_blue_bg.svg') }}" width="135px" style=""/>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="justify-content-center" id="navigation" style="margin-left: 50px; color: white; font-size: 20px;">
|
||||
@yield('title')
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<!-- End Navbar -->
|
||||
{{--<div class="clearfix" style="height: 25px;"></div>--}}
|
||||
<div class="wrapper">
|
||||
<div class="clear"></div>
|
||||
<div class="container" style="width: 50%">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
@include('importer::flash.message')
|
||||
@yield('content')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix" style="height: 200px;"></div>
|
||||
</div>
|
||||
|
||||
{{--<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>--}}
|
||||
|
||||
<script src="{{ public_mix('/assets/global/js/vendor.js') }}"></script>
|
||||
<script src="{{ public_mix('/assets/frontend/js/vendor.js') }}"></script>
|
||||
<script src="{{ public_mix('/assets/frontend/js/app.js') }}"></script>
|
||||
<script src="{{ public_asset('/assets/installer/js/vendor.js') }}" type="text/javascript"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
|
||||
|
||||
<script>
|
||||
hljs.configure({languages: ['sh']});
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
$(".select2").select2();
|
||||
|
||||
$('pre code').each(function (i, block) {
|
||||
hljs.fixMarkup(block);
|
||||
hljs.highlightBlock(block);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@yield('scripts')
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,9 +1,9 @@
|
||||
@extends('installer::app')
|
||||
@extends('importer::app')
|
||||
@section('title', 'Import Completed!')
|
||||
|
||||
@section('content')
|
||||
<div style="align-content: center;">
|
||||
{{ Form::open(['route' => 'installer.complete', 'method' => 'GET']) }}
|
||||
{{ Form::open(['route' => 'importer.complete', 'method' => 'GET']) }}
|
||||
|
||||
<h4>Installer Completed!</h4>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<p>Click the button to proceed to the login screen!</p>
|
||||
|
||||
<p style="text-align: right">
|
||||
{{ Form::submit('Install Complete! Continue to Log-In >>',
|
||||
{{ Form::submit('Import Complete! Continue to Log-In >>',
|
||||
['class' => 'btn btn-success'])
|
||||
}}
|
||||
</p>
|
||||
@@ -1,4 +1,4 @@
|
||||
@extends('installer::app')
|
||||
@extends('importer::app')
|
||||
@section('title', 'Import Error!')
|
||||
|
||||
@section('content')
|
||||
@@ -0,0 +1,6 @@
|
||||
@if($errors->has($field))
|
||||
<p class="text-danger" style="margin-top: 10px;">{{ $errors->first($field) }}</p>
|
||||
{{--<div class="alert alert-danger" role="alert" style="margin-top: 10px;">
|
||||
{{ $errors->first($field) }}
|
||||
</div>--}}
|
||||
@endif
|
||||
11
modules/Importer/Resources/views/flash/message.blade.php
Normal file
11
modules/Importer/Resources/views/flash/message.blade.php
Normal file
@@ -0,0 +1,11 @@
|
||||
@foreach (session('flash_notification', collect())->toArray() as $message)
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<div class="container">
|
||||
<div class="alert-icon">
|
||||
<i class="now-ui-icons ui-2_like"></i>
|
||||
</div>
|
||||
{{ $message['message'] }}
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
{{ session()->forget('flash_notification') }}
|
||||
@@ -1,4 +1,4 @@
|
||||
@extends('installer::app')
|
||||
@extends('importer::app')
|
||||
@section('title', 'Import Configuration')
|
||||
|
||||
@section('content')
|
||||
@@ -125,7 +125,7 @@
|
||||
db_pass: $("input[name=db_pass]").val(),
|
||||
};
|
||||
|
||||
$.post("{{ route('installer.dbtest') }}", opts, (data) => {
|
||||
$.post("{{ route('importer.dbtest') }}", opts, (data) => {
|
||||
$("#dbtest").html(data);
|
||||
})
|
||||
})
|
||||
@@ -1,4 +1,4 @@
|
||||
@extends('installer::app')
|
||||
@extends('importer::app')
|
||||
@section('title', 'Import Configuration')
|
||||
|
||||
@section('content')
|
||||
@@ -37,21 +37,6 @@
|
||||
<script>
|
||||
const manifest = {!!json_encode($manifest) !!};
|
||||
|
||||
/**
|
||||
* Get the total number of steps
|
||||
*/
|
||||
const getTotalSteps = () => {
|
||||
let total = 0;
|
||||
|
||||
for (let importer of manifest_keys) {
|
||||
for (let stage of manifest[importer]) {
|
||||
total++;
|
||||
}
|
||||
}
|
||||
|
||||
return total;
|
||||
};
|
||||
|
||||
/**
|
||||
* Run each step of the importer
|
||||
*/
|
||||
@@ -1,22 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer;
|
||||
namespace Modules\Importer\Services;
|
||||
|
||||
use App\Services\Installer\LoggerTrait;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Modules\Installer\Utils\IdMapper;
|
||||
use Modules\Installer\Utils\ImporterDB;
|
||||
use Modules\Installer\Utils\LoggerTrait;
|
||||
use Modules\Importer\Utils\IdMapper;
|
||||
use Modules\Importer\Utils\ImporterDB;
|
||||
|
||||
abstract class BaseImporter implements ShouldQueue
|
||||
{
|
||||
use LoggerTrait, Dispatchable, InteractsWithQueue, Queueable;
|
||||
|
||||
/**
|
||||
* Holds the connection to the legacy database
|
||||
*
|
||||
* @var \Modules\Importer\Utils\ImporterDB
|
||||
*/
|
||||
protected $db;
|
||||
|
||||
/**
|
||||
* The mapper class used for old IDs to new IDs
|
||||
*
|
||||
* @var \Illuminate\Contracts\Foundation\Application|mixed
|
||||
*/
|
||||
protected $idMapper;
|
||||
|
||||
/**
|
||||
* The legacy table this importer targets
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $table;
|
||||
|
||||
public function __construct()
|
||||
@@ -1,21 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer;
|
||||
namespace Modules\Importer\Services;
|
||||
|
||||
use App\Contracts\Service;
|
||||
use App\Repositories\KvpRepository;
|
||||
use Exception;
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\Installer\Services\Importer\Importers\AircraftImporter;
|
||||
use Modules\Installer\Services\Importer\Importers\AirlineImporter;
|
||||
use Modules\Installer\Services\Importer\Importers\AirportImporter;
|
||||
use Modules\Installer\Services\Importer\Importers\ClearDatabase;
|
||||
use Modules\Installer\Services\Importer\Importers\FinalizeImporter;
|
||||
use Modules\Installer\Services\Importer\Importers\FlightImporter;
|
||||
use Modules\Installer\Services\Importer\Importers\GroupImporter;
|
||||
use Modules\Installer\Services\Importer\Importers\PirepImporter;
|
||||
use Modules\Installer\Services\Importer\Importers\RankImport;
|
||||
use Modules\Installer\Services\Importer\Importers\UserImport;
|
||||
use Modules\Importer\Services\Importers\AircraftImporter;
|
||||
use Modules\Importer\Services\Importers\AirlineImporter;
|
||||
use Modules\Importer\Services\Importers\AirportImporter;
|
||||
use Modules\Importer\Services\Importers\ClearDatabase;
|
||||
use Modules\Importer\Services\Importers\FinalizeImporter;
|
||||
use Modules\Importer\Services\Importers\FlightImporter;
|
||||
use Modules\Importer\Services\Importers\GroupImporter;
|
||||
use Modules\Importer\Services\Importers\PirepImporter;
|
||||
use Modules\Importer\Services\Importers\RankImport;
|
||||
use Modules\Importer\Services\Importers\UserImport;
|
||||
|
||||
class ImporterService extends Service
|
||||
{
|
||||
@@ -104,7 +104,7 @@ class ImporterService extends Service
|
||||
$manifest = [];
|
||||
|
||||
foreach ($this->importList as $importerKlass) {
|
||||
/** @var \Modules\Installer\Services\Importer\BaseImporter $importer */
|
||||
/** @var \Modules\Importer\Services\BaseImporter $importer */
|
||||
$importer = new $importerKlass();
|
||||
$manifest = array_merge($manifest, $importer->getManifest());
|
||||
}
|
||||
@@ -128,7 +128,7 @@ class ImporterService extends Service
|
||||
throw new Exception('Unknown importer "'.$importer.'"');
|
||||
}
|
||||
|
||||
/** @var $importerInst \Modules\Installer\Services\Importer\BaseImporter */
|
||||
/** @var $importerInst \Modules\Importer\Services\BaseImporter */
|
||||
$importerInst = new $importer();
|
||||
$importerInst->run($start);
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Models\Aircraft;
|
||||
use App\Models\Airline;
|
||||
use App\Models\Subfleet;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
class AircraftImporter extends BaseImporter
|
||||
{
|
||||
@@ -1,10 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Models\Airline;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
class AirlineImporter extends BaseImporter
|
||||
{
|
||||
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Models\Airport;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
class AirportImporter extends BaseImporter
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Models\Acars;
|
||||
use App\Models\Airline;
|
||||
@@ -19,7 +19,7 @@ use App\Models\Subfleet;
|
||||
use App\Models\User;
|
||||
use App\Models\UserAward;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
class ClearDatabase extends BaseImporter
|
||||
{
|
||||
@@ -1,10 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Services\UserService;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
class FinalizeImporter extends BaseImporter
|
||||
{
|
||||
@@ -1,9 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Models\Flight;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
class FlightImporter extends BaseImporter
|
||||
{
|
||||
@@ -1,10 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Models\Role;
|
||||
use App\Services\RoleService;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
/**
|
||||
* Imports the groups into the permissions feature(s)
|
||||
@@ -1,12 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Models\Enums\FlightType;
|
||||
use App\Models\Enums\PirepSource;
|
||||
use App\Models\Enums\PirepState;
|
||||
use App\Models\Pirep;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
class PirepImporter extends BaseImporter
|
||||
{
|
||||
@@ -1,9 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Models\Rank;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
class RankImport extends BaseImporter
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Services\Importer\Importers;
|
||||
namespace Modules\Importer\Services\Importers;
|
||||
|
||||
use App\Facades\Utils;
|
||||
use App\Models\Enums\UserState;
|
||||
@@ -9,7 +9,7 @@ use App\Services\UserService;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Str;
|
||||
use Modules\Installer\Services\Importer\BaseImporter;
|
||||
use Modules\Importer\Services\BaseImporter;
|
||||
|
||||
class UserImport extends BaseImporter
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Utils;
|
||||
namespace Modules\Importer\Utils;
|
||||
|
||||
use App\Contracts\Service;
|
||||
use Spatie\Valuestore\Valuestore;
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Utils;
|
||||
namespace Modules\Importer\Utils;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use PDO;
|
||||
29
modules/Importer/composer.json
Normal file
29
modules/Importer/composer.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "phpvms/importer",
|
||||
"type": "laravel-library",
|
||||
"description": "The importer module for phpVMS",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nabeel Shahzad",
|
||||
"email": ""
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"composer/installers": "~1.0"
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Modules\\Importer\\Providers\\ImporterServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Modules\\Importer\\": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
14
modules/Importer/module.json
Normal file
14
modules/Importer/module.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "Importer",
|
||||
"alias": "importer",
|
||||
"description": "",
|
||||
"keywords": [],
|
||||
"active": 1,
|
||||
"order": 0,
|
||||
"providers": [
|
||||
"Modules\\Importer\\Providers\\ImporterServiceProvider"
|
||||
],
|
||||
"aliases": {},
|
||||
"files": [],
|
||||
"requires": []
|
||||
}
|
||||
@@ -37,8 +37,4 @@ return [
|
||||
'storage/framework/views',
|
||||
'storage/logs',
|
||||
],
|
||||
|
||||
'importer' => [
|
||||
'batch_size' => 20,
|
||||
],
|
||||
];
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Exceptions;
|
||||
|
||||
/**
|
||||
* Go to the next page of the importer
|
||||
*/
|
||||
class ImporterNextRecordSet extends \Exception
|
||||
{
|
||||
public $nextOffset;
|
||||
|
||||
/**
|
||||
* ImporterNextRecordSet constructor.
|
||||
*
|
||||
* @param int $nextOffset Where to start the next set of reads from
|
||||
*/
|
||||
public function __construct($nextOffset)
|
||||
{
|
||||
parent::__construct('', 0, null);
|
||||
$this->nextOffset = $nextOffset;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Exceptions;
|
||||
|
||||
class ImporterNoMoreRecords extends \Exception
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('', 0, null);
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Exceptions;
|
||||
|
||||
/**
|
||||
* Signals that the stage is completed and we should go to the next one
|
||||
*/
|
||||
class StageCompleted extends \Exception
|
||||
{
|
||||
public $nextStage;
|
||||
|
||||
public function __construct($nextStage)
|
||||
{
|
||||
$this->nextStage = $nextStage;
|
||||
parent::__construct('', 0, null);
|
||||
}
|
||||
}
|
||||
@@ -7,18 +7,18 @@ use App\Facades\Utils;
|
||||
use App\Models\User;
|
||||
use App\Repositories\AirlineRepository;
|
||||
use App\Services\AnalyticsService;
|
||||
use App\Services\Installer\DatabaseService;
|
||||
use App\Services\Installer\InstallerService;
|
||||
use App\Services\Installer\MigrationService;
|
||||
use App\Services\Installer\SeederService;
|
||||
use App\Services\UserService;
|
||||
use App\Support\Countries;
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\Installer\Services\ConfigService;
|
||||
use Modules\Installer\Services\DatabaseService;
|
||||
use Modules\Installer\Services\RequirementsService;
|
||||
use Symfony\Component\HttpFoundation\File\Exception\FileException;
|
||||
|
||||
@@ -64,10 +64,7 @@ class InstallerController extends Controller
|
||||
$this->seederSvc = $seederSvc;
|
||||
$this->userService = $userService;
|
||||
|
||||
try {
|
||||
app('debugbar')->disable();
|
||||
} catch (BindingResolutionException $e) {
|
||||
}
|
||||
\App\Support\Utils::disableDebugToolbar();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -109,7 +106,7 @@ class InstallerController extends Controller
|
||||
$message = 'Failed! '.$e->getMessage();
|
||||
}
|
||||
|
||||
return view('installer::flash/dbtest', [
|
||||
return view('installer::install/dbtest', [
|
||||
'status' => $status,
|
||||
'message' => $message,
|
||||
]);
|
||||
@@ -354,6 +351,9 @@ class InstallerController extends Controller
|
||||
*/
|
||||
public function complete(Request $request)
|
||||
{
|
||||
$installerSvc = app(InstallerService::class);
|
||||
$installerSvc->disableInstallerModules();
|
||||
|
||||
return redirect('/login');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::get('/', 'ImporterController@index')->name('index');
|
||||
Route::post('/config', 'ImporterController@config')->name('config');
|
||||
Route::post('/run', 'ImporterController@run')->middleware('api')->name('run');
|
||||
|
||||
Route::post('/complete', 'ImporterController@complete')->name('complete');
|
||||
@@ -1,16 +0,0 @@
|
||||
<?php
|
||||
|
||||
Route::get('/', 'InstallerController@index')->name('index');
|
||||
Route::post('/dbtest', 'InstallerController@dbtest')->name('dbtest');
|
||||
|
||||
Route::get('/step1', 'InstallerController@step1')->name('step1');
|
||||
Route::post('/step1', 'InstallerController@step1')->name('step1');
|
||||
|
||||
Route::get('/step2', 'InstallerController@step2')->name('step2');
|
||||
Route::post('/envsetup', 'InstallerController@envsetup')->name('envsetup');
|
||||
Route::get('/dbsetup', 'InstallerController@dbsetup')->name('dbsetup');
|
||||
|
||||
Route::get('/step3', 'InstallerController@step3')->name('step3');
|
||||
Route::post('/usersetup', 'InstallerController@usersetup')->name('usersetup');
|
||||
|
||||
Route::get('/complete', 'InstallerController@complete')->name('complete');
|
||||
@@ -1,9 +0,0 @@
|
||||
<?php
|
||||
|
||||
Route::get('/', 'UpdaterController@index')->name('index');
|
||||
|
||||
Route::get('/step1', 'UpdaterController@step1')->name('step1');
|
||||
Route::post('/step1', 'UpdaterController@step1')->name('step1');
|
||||
|
||||
Route::post('/run-migrations', 'UpdaterController@run_migrations')->name('run_migrations');
|
||||
Route::get('/complete', 'UpdaterController@complete')->name('complete');
|
||||
@@ -2,36 +2,20 @@
|
||||
|
||||
namespace Modules\Installer\Providers;
|
||||
|
||||
use App\Services\ModuleService;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Modules\Installer\Console\Commands\ImportFromClassicCommand;
|
||||
|
||||
class InstallerServiceProvider extends ServiceProvider
|
||||
{
|
||||
protected $moduleSvc;
|
||||
|
||||
/**
|
||||
* Boot the application events.
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->moduleSvc = app(ModuleService::class);
|
||||
|
||||
$this->registerCommands();
|
||||
$this->registerRoutes();
|
||||
$this->registerTranslations();
|
||||
$this->registerConfig();
|
||||
$this->registerViews();
|
||||
|
||||
$this->loadMigrationsFrom(__DIR__.'/../Database/migrations');
|
||||
}
|
||||
|
||||
protected function registerCommands()
|
||||
{
|
||||
$this->commands([
|
||||
ImportFromClassicCommand::class,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,25 +29,20 @@ class InstallerServiceProvider extends ServiceProvider
|
||||
'middleware' => ['web'],
|
||||
'namespace' => 'Modules\Installer\Http\Controllers',
|
||||
], function () {
|
||||
$this->loadRoutesFrom(__DIR__.'/../Http/Routes/install.php');
|
||||
});
|
||||
Route::get('/', 'InstallerController@index')->name('index');
|
||||
Route::post('/dbtest', 'InstallerController@dbtest')->name('dbtest');
|
||||
|
||||
Route::group([
|
||||
'as' => 'update.',
|
||||
'prefix' => 'update',
|
||||
'middleware' => ['web'],
|
||||
'namespace' => 'Modules\Installer\Http\Controllers',
|
||||
], function () {
|
||||
$this->loadRoutesFrom(__DIR__.'/../Http/Routes/update.php');
|
||||
});
|
||||
Route::get('/step1', 'InstallerController@step1')->name('step1');
|
||||
Route::post('/step1', 'InstallerController@step1')->name('step1');
|
||||
|
||||
Route::group([
|
||||
'as' => 'importer.',
|
||||
'prefix' => 'importer',
|
||||
'middleware' => ['web'],
|
||||
'namespace' => 'Modules\Installer\Http\Controllers',
|
||||
], function () {
|
||||
$this->loadRoutesFrom(__DIR__.'/../Http/Routes/importer.php');
|
||||
Route::get('/step2', 'InstallerController@step2')->name('step2');
|
||||
Route::post('/envsetup', 'InstallerController@envsetup')->name('envsetup');
|
||||
Route::get('/dbsetup', 'InstallerController@dbsetup')->name('dbsetup');
|
||||
|
||||
Route::get('/step3', 'InstallerController@step3')->name('step3');
|
||||
Route::post('/usersetup', 'InstallerController@usersetup')->name('usersetup');
|
||||
|
||||
Route::get('/complete', 'InstallerController@complete')->name('complete');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -72,13 +51,7 @@ class InstallerServiceProvider extends ServiceProvider
|
||||
*/
|
||||
protected function registerConfig()
|
||||
{
|
||||
$this->publishes([
|
||||
__DIR__.'/../Config/config.php' => config_path('installer.php'),
|
||||
], 'installer');
|
||||
|
||||
$this->mergeConfigFrom(
|
||||
__DIR__.'/../Config/config.php', 'installer'
|
||||
);
|
||||
$this->mergeConfigFrom(__DIR__.'/../Config/config.php', 'installer');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<div class="alert alert-{{ $status }}" role="alert">
|
||||
<div class="container">
|
||||
<div class="alert-icon">
|
||||
<i class="now-ui-icons ui-1_bell-53"></i>
|
||||
</div>
|
||||
{{ $message }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -13,9 +13,6 @@ use Nwidart\Modules\Support\Stub;
|
||||
use PDO;
|
||||
use Symfony\Component\HttpFoundation\File\Exception\FileException;
|
||||
|
||||
/**
|
||||
* Class ConfigService
|
||||
*/
|
||||
class ConfigService extends Service
|
||||
{
|
||||
/**
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"name": "phpvms/installer",
|
||||
"license": "",
|
||||
"type": "laravel-library",
|
||||
"description": "The installer module for phpVMS",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nabeel Shahzad",
|
||||
"email": ""
|
||||
"email": "nabeel@phpvms.net"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
|
||||
4
modules/Updater/Config/config.php
Normal file
4
modules/Updater/Config/config.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
];
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Installer\Http\Controllers;
|
||||
namespace Modules\Updater\Http\Controllers;
|
||||
|
||||
use App\Contracts\Controller;
|
||||
use App\Services\Installer\MigrationService;
|
||||
@@ -9,17 +9,12 @@ use function count;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
/**
|
||||
* Class UpdaterController
|
||||
*/
|
||||
class UpdaterController extends Controller
|
||||
class UpdateController extends Controller
|
||||
{
|
||||
private $migrationSvc;
|
||||
private $seederSvc;
|
||||
|
||||
/**
|
||||
* UpdaterController constructor.
|
||||
*
|
||||
* @param MigrationService $migrationSvc
|
||||
* @param SeederService $seederSvc
|
||||
*/
|
||||
@@ -36,7 +31,7 @@ class UpdaterController extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('installer::update/index-start');
|
||||
return view('updater::index-start');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,7 +40,7 @@ class UpdaterController extends Controller
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
* @return mixed
|
||||
*/
|
||||
public function step1(Request $request)
|
||||
{
|
||||
@@ -54,7 +49,7 @@ class UpdaterController extends Controller
|
||||
Log::info('No migrations found');
|
||||
}
|
||||
|
||||
return view('installer::update/steps/step1-update-available');
|
||||
return view('updater::steps/step1-update-available');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -62,7 +57,7 @@ class UpdaterController extends Controller
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
* @return mixed
|
||||
*/
|
||||
public function run_migrations(Request $request)
|
||||
{
|
||||
@@ -71,13 +66,13 @@ class UpdaterController extends Controller
|
||||
$migrations = $this->migrationSvc->migrationsAvailable();
|
||||
if (count($migrations) === 0) {
|
||||
$this->seederSvc->syncAllSeeds();
|
||||
return view('installer::update/steps/step3-update-complete');
|
||||
return view('updater::steps/step3-update-complete');
|
||||
}
|
||||
|
||||
$output = $this->migrationSvc->runAllMigrations();
|
||||
$this->seederSvc->syncAllSeeds();
|
||||
|
||||
return view('installer::update/steps/step2-migrations-done', [
|
||||
return view('updater::steps/step2-migrations-done', [
|
||||
'console_output' => $output,
|
||||
]);
|
||||
}
|
||||
@@ -87,7 +82,7 @@ class UpdaterController extends Controller
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
* @return mixed
|
||||
*/
|
||||
public function complete(Request $request)
|
||||
{
|
||||
91
modules/Updater/Providers/UpdateServiceProvider.php
Normal file
91
modules/Updater/Providers/UpdateServiceProvider.php
Normal file
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Updater\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class UpdateServiceProvider extends ServiceProvider
|
||||
{
|
||||
public function boot()
|
||||
{
|
||||
$this->registerRoutes();
|
||||
$this->registerTranslations();
|
||||
$this->registerConfig();
|
||||
$this->registerViews();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the routes
|
||||
*/
|
||||
protected function registerRoutes()
|
||||
{
|
||||
Route::group([
|
||||
'as' => 'update.',
|
||||
'prefix' => 'update',
|
||||
'middleware' => ['web'],
|
||||
'namespace' => 'Modules\Updater\Http\Controllers',
|
||||
], function () {
|
||||
Route::get('/', 'UpdateController@index')->name('index');
|
||||
|
||||
Route::get('/step1', 'UpdateController@step1')->name('step1');
|
||||
Route::post('/step1', 'UpdateController@step1')->name('step1');
|
||||
|
||||
Route::post('/run-migrations', 'UpdateController@run_migrations')->name('run_migrations');
|
||||
Route::get('/complete', 'UpdateController@complete')->name('complete');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register config.
|
||||
*/
|
||||
protected function registerConfig()
|
||||
{
|
||||
$this->mergeConfigFrom(__DIR__.'/../Config/config.php', 'updater');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register views.
|
||||
*/
|
||||
public function registerViews()
|
||||
{
|
||||
$viewPath = resource_path('views/modules/updater');
|
||||
$sourcePath = __DIR__.'/../Resources/views';
|
||||
|
||||
$this->publishes([
|
||||
$sourcePath => $viewPath,
|
||||
], 'views');
|
||||
|
||||
$paths = array_map(
|
||||
function ($path) {
|
||||
return $path.'/modules/updater';
|
||||
},
|
||||
\Config::get('view.paths')
|
||||
);
|
||||
|
||||
$paths[] = $sourcePath;
|
||||
$this->loadViewsFrom($paths, 'updater');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register translations.
|
||||
*/
|
||||
public function registerTranslations()
|
||||
{
|
||||
$langPath = resource_path('lang/modules/updater');
|
||||
|
||||
if (is_dir($langPath)) {
|
||||
$this->loadTranslationsFrom($langPath, 'updater');
|
||||
} else {
|
||||
$this->loadTranslationsFrom(__DIR__.'/../Resources/lang', 'updater');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the services provided by the provider.
|
||||
*/
|
||||
public function provides(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
92
modules/Updater/Resources/views/app.blade.php
Normal file
92
modules/Updater/Resources/views/app.blade.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>@yield('title') - updater</title>
|
||||
|
||||
<link rel="shortcut icon" type="image/png" href="{{ public_asset('/assets/img/favicon.png') }}"/>
|
||||
|
||||
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no'
|
||||
name='viewport'/>
|
||||
<meta name="base-url" content="{!! url('') !!}">
|
||||
<meta name="api-key" content="{!! Auth::check() ? Auth::user()->api_key: '' !!}">
|
||||
<meta name="csrf-token" content="{!! csrf_token() !!}">
|
||||
|
||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700,200" rel="stylesheet"/>
|
||||
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css" rel="stylesheet"/>
|
||||
|
||||
<link href="{{ public_asset('/assets/frontend/css/bootstrap.min.css') }}" rel="stylesheet"/>
|
||||
<link href="{{ public_asset('/assets/frontend/css/now-ui-kit.css') }}" rel="stylesheet"/>
|
||||
<link href="{{ public_asset('/assets/installer/css/vendor.css') }}" rel="stylesheet"/>
|
||||
<link href="{{ public_asset('/assets/frontend/css/styles.css') }}" rel="stylesheet"/>
|
||||
|
||||
<link rel="stylesheet"
|
||||
href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css">
|
||||
|
||||
<style>
|
||||
.table tr:first-child td { border-top: 0px; }
|
||||
@yield('css')
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Navbar -->
|
||||
<nav class="navbar navbar-toggleable-md" style="background: #067ec1;">
|
||||
<div class="container" style="width: 85%!important;">
|
||||
<div class="navbar-translate">
|
||||
<p class="navbar-brand text-white" data-placement="bottom" target="_blank">
|
||||
<a href="{{ url('/') }}">
|
||||
<img src="{{ public_asset('/assets/img/logo_blue_bg.svg') }}" width="135px" style=""/>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="justify-content-center" id="navigation" style="margin-left: 50px; color: white; font-size: 20px;">
|
||||
@yield('title')
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<!-- End Navbar -->
|
||||
{{--<div class="clearfix" style="height: 25px;"></div>--}}
|
||||
<div class="wrapper">
|
||||
<div class="clear"></div>
|
||||
<div class="container" style="width: 50%">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
@include('installer::flash.message')
|
||||
@yield('content')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix" style="height: 200px;"></div>
|
||||
</div>
|
||||
|
||||
{{--<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>--}}
|
||||
|
||||
<script src="{{ public_mix('/assets/global/js/vendor.js') }}"></script>
|
||||
<script src="{{ public_mix('/assets/frontend/js/vendor.js') }}"></script>
|
||||
<script src="{{ public_mix('/assets/frontend/js/app.js') }}"></script>
|
||||
<script src="{{ public_asset('/assets/installer/js/vendor.js') }}" type="text/javascript"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
|
||||
|
||||
<script>
|
||||
hljs.configure({languages: ['sh']});
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
$(".select2").select2();
|
||||
|
||||
$('pre code').each(function (i, block) {
|
||||
hljs.fixMarkup(block);
|
||||
hljs.highlightBlock(block);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@yield('scripts')
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
@if($errors->has($field))
|
||||
<p class="text-danger" style="margin-top: 10px;">{{ $errors->first($field) }}</p>
|
||||
{{--<div class="alert alert-danger" role="alert" style="margin-top: 10px;">
|
||||
{{ $errors->first($field) }}
|
||||
</div>--}}
|
||||
@endif
|
||||
11
modules/Updater/Resources/views/flash/message.blade.php
Normal file
11
modules/Updater/Resources/views/flash/message.blade.php
Normal file
@@ -0,0 +1,11 @@
|
||||
@foreach (session('flash_notification', collect())->toArray() as $message)
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<div class="container">
|
||||
<div class="alert-icon">
|
||||
<i class="now-ui-icons ui-2_like"></i>
|
||||
</div>
|
||||
{{ $message['message'] }}
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
{{ session()->forget('flash_notification') }}
|
||||
12
modules/Updater/Resources/views/index-start.blade.php
Normal file
12
modules/Updater/Resources/views/index-start.blade.php
Normal file
@@ -0,0 +1,12 @@
|
||||
@extends('installer::app')
|
||||
@section('title', 'Update phpVMS')
|
||||
|
||||
@section('content')
|
||||
<h2>phpvms updater</h2>
|
||||
<p>Press continue to check if there are any updates available.</p>
|
||||
{{ Form::open(['route' => 'update.step1', 'method' => 'post']) }}
|
||||
<p style="text-align: right">
|
||||
{{ Form::submit('Start >>', ['class' => 'btn btn-success']) }}
|
||||
</p>
|
||||
{{ Form::close() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,13 @@
|
||||
@extends('installer::app')
|
||||
@section('title', 'Update phpVMS')
|
||||
|
||||
@section('content')
|
||||
<h2>phpvms updater</h2>
|
||||
<p>It seems like you're up to date!</p>
|
||||
{{ Form::open(['route' => 'update.complete', 'method' => 'GET']) }}
|
||||
|
||||
<p style="text-align: right">
|
||||
{{ Form::submit('Complete >>', ['class' => 'btn btn-success']) }}
|
||||
</p>
|
||||
{{ Form::close() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,12 @@
|
||||
@extends('installer::app')
|
||||
@section('title', 'Update phpVMS')
|
||||
|
||||
@section('content')
|
||||
<h2>phpvms updater</h2>
|
||||
<p>Click run to complete the update!.</p>
|
||||
{{ Form::open(['route' => 'update.run_migrations', 'method' => 'post']) }}
|
||||
<p style="text-align: right">
|
||||
{{ Form::submit('Run >>', ['class' => 'btn btn-success']) }}
|
||||
</p>
|
||||
{{ Form::close() }}
|
||||
@endsection
|
||||
@@ -0,0 +1,18 @@
|
||||
@extends('installer::app')
|
||||
@section('title', 'Update Completed')
|
||||
@section('content')
|
||||
<div style="align-content: center;">
|
||||
{{ Form::open(['route' => 'update.complete', 'method' => 'GET']) }}
|
||||
|
||||
<pre class="lang-sh">
|
||||
<code class="lang-sh">
|
||||
{{ $console_output }}
|
||||
</code>
|
||||
</pre>
|
||||
|
||||
<p style="text-align: right">
|
||||
{{ Form::submit('Complete >>', ['class' => 'btn btn-success']) }}
|
||||
</p>
|
||||
{{ Form::close() }}
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,13 @@
|
||||
@extends('installer::app')
|
||||
@section('title', 'Update Completed')
|
||||
|
||||
@section('content')
|
||||
<h2>phpvms updater</h2>
|
||||
<p>Update completed!.</p>
|
||||
|
||||
{{ Form::open(['route' => 'update.complete', 'method' => 'GET']) }}
|
||||
<p style="text-align: right">
|
||||
{{ Form::submit('Finish >>', ['class' => 'btn btn-success']) }}
|
||||
</p>
|
||||
{{ Form::close() }}
|
||||
@endsection
|
||||
30
modules/Updater/composer.json
Normal file
30
modules/Updater/composer.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "phpvms/updater",
|
||||
"license": "",
|
||||
"type": "laravel-library",
|
||||
"description": "The installer module for phpVMS",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nabeel Shahzad",
|
||||
"email": "nabeel@phpvms.net"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"composer/installers": "~1.0"
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Modules\\Updater\\Providers\\UpdateServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Modules\\Installer\\": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
14
modules/Updater/module.json
Normal file
14
modules/Updater/module.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "Updater",
|
||||
"alias": "updater",
|
||||
"description": "",
|
||||
"keywords": [],
|
||||
"active": 1,
|
||||
"order": 0,
|
||||
"providers": [
|
||||
"Modules\\Updater\\Providers\\UpdateServiceProvider"
|
||||
],
|
||||
"aliases": {},
|
||||
"files": [],
|
||||
"requires": []
|
||||
}
|
||||
Reference in New Issue
Block a user