auto-update

This commit is contained in:
RafficMohammed
2023-02-01 16:44:00 +05:30
parent 9dd3f53910
commit d468d309aa
16 changed files with 152 additions and 70 deletions

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Console\Commands;
use App\Http\Controllers\Update\SyncFaveoToLatestVersion;
use Illuminate\Console\Command;
class Sync extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'database:sync';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Migration and Database seeder';
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
(new SyncFaveoToLatestVersion())->sync();
return Command::SUCCESS;
}
}

View File

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Installer\helpdesk;
// controllers // controllers
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
// requests // requests
use App\Http\Controllers\Update\SyncFaveoToLatestVersion;
use App\Http\Requests\helpdesk\InstallerRequest; use App\Http\Requests\helpdesk\InstallerRequest;
use App\Model\helpdesk\Settings\System; use App\Model\helpdesk\Settings\System;
// models // models
@@ -435,6 +436,7 @@ class InstallController extends Controller
$ENV['DB_DATABASE'] = '"'.$database.'"'; $ENV['DB_DATABASE'] = '"'.$database.'"';
$ENV['DB_USERNAME'] = '"'.$dbusername.'"'; $ENV['DB_USERNAME'] = '"'.$dbusername.'"';
$ENV['DB_PASSWORD'] = '"'.$dbpassword.'"'; $ENV['DB_PASSWORD'] = '"'.$dbpassword.'"';
$ENV['DB_ENGINE'] = 'InnoDB';
$ENV['MAIL_MAILER'] = 'smtp'; $ENV['MAIL_MAILER'] = 'smtp';
$ENV['MAIL_HOST'] = 'mailtrap.io'; $ENV['MAIL_HOST'] = 'mailtrap.io';
$ENV['MAIL_PORT'] = '2525'; $ENV['MAIL_PORT'] = '2525';
@@ -490,29 +492,23 @@ class InstallController extends Controller
public function migrate() public function migrate()
{ {
$db_install_method = '';
try { try {
$tableNames = \Schema::getConnection()->getDoctrineSchemaManager()->listTableNames(); $tableNames = Schema::getConnection()->getDoctrineSchemaManager()->listTableNames();
if (count($tableNames) === 0) { if (count($tableNames) === 0) {
if (!Cache::get('dummy_data_installation')) { (new SyncFaveoToLatestVersion())->sync();
Artisan::call('migrate', ['--force' => true]); if (Cache::get('dummy_data_installation')) {
$db_install_method = 'migrate';
} else {
$path = base_path().DIRECTORY_SEPARATOR.'DB'.DIRECTORY_SEPARATOR.'dummy-data.sql'; $path = base_path().DIRECTORY_SEPARATOR.'DB'.DIRECTORY_SEPARATOR.'dummy-data.sql';
DB::unprepared(file_get_contents($path)); DB::unprepared(file_get_contents($path));
$db_install_method = 'dump';
} }
} }
} catch (Exception $ex) { } catch (Exception $ex) {
dd($ex);
$this->rollBackMigration(); $this->rollBackMigration();
$result = ['error' => $ex->getMessage()]; $result = ['error' => $ex->getMessage()];
return response()->json(compact('result'), 500); return response()->json(compact('result'), 500);
} }
$url = ($db_install_method == 'migrate') ? url('seed') : ''; $result = ['success' => 'Database has been setup successfully.'];
$message = ($db_install_method == 'migrate') ? 'Tables have been migrated successfully in database.' : 'Database has been setup successfully.';
$result = ['success' => $message, 'next' => 'Seeding pre configurations data', 'api' => $url];
return response()->json(compact('result')); return response()->json(compact('result'));
} }

View File

@@ -0,0 +1,64 @@
<?php
namespace App\Http\Controllers\Update;
use App\Http\Controllers\Controller;
use App\Model\helpdesk\Settings\System;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
class SyncFaveoToLatestVersion extends Controller
{
public function sync()
{
ini_set('memory_limit', '-1');
ini_set('max_execution_time', '-1');
set_time_limit(0);
$latestVersion = $this->getPhpComaptibleVersion(Config::get('app.version'));
$olderVersion = $this->getOlderVersion();
if (version_compare($latestVersion, $olderVersion) == 1) {
$this->updateToLatestVersion($olderVersion);
}
System::first()->update(['version' => Config::get('app.version')]);
}
private function updateToLatestVersion($olderVersion)
{
Artisan::call('migrate', ['--force' => true]);
$seederPath = base_path('database'.DIRECTORY_SEPARATOR.'seeders');
if(file_exists($seederPath)){
$seederVersions = scandir($seederPath);
natsort($seederVersions);
$formattedOlderVersion = $olderVersion;
foreach ($seederVersions as $version) {
if(version_compare($this->getPhpComaptibleVersion($version), $formattedOlderVersion) == 1){
Artisan::call('db:seed',['--class' => "Database\Seeders\\$version\DatabaseSeeder", '--force' => true]);
}
}
}
}
private function getOlderVersion()
{
if (!isInstall()) {
return '0.0.0';
}
$version = System::value('version') ?: '0.0.0';
return $this->getPhpComaptibleVersion($version);
}
private function getPhpComaptibleVersion($version)
{
return preg_replace('#v\.|v#', '', str_replace('_', '.', $version));
}
}

View File

@@ -13,6 +13,6 @@ class System extends BaseModel
protected $fillable = [ protected $fillable = [
'id', 'status', 'url', 'name', 'department', 'page_size', 'log_level', 'purge_log', 'name_format', 'id', 'status', 'url', 'name', 'department', 'page_size', 'log_level', 'purge_log', 'name_format',
'time_farmat', 'date_format', 'date_time_format', 'day_date_time', 'time_zone', 'content', 'api_key', 'api_enable', 'api_key_mandatory', 'time_farmat', 'date_format', 'date_time_format', 'day_date_time', 'time_zone', 'content', 'api_key', 'api_enable', 'api_key_mandatory', 'version'
]; ];
} }

View File

@@ -2,8 +2,10 @@
namespace App\Providers; namespace App\Providers;
use App\Model\helpdesk\Settings\System;
use App\Model\Update\BarNotification; use App\Model\Update\BarNotification;
use Illuminate\Queue\Events\JobFailed; use Illuminate\Queue\Events\JobFailed;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Laravel\Dusk\DuskServiceProvider; use Laravel\Dusk\DuskServiceProvider;

View File

@@ -35,7 +35,7 @@ return [
| This tells about aplication current version. | This tells about aplication current version.
| |
*/ */
'version' => 'Community 1.11.1', 'version' => parse_ini_file(storage_path('faveoconfig.ini'), false, INI_SCANNER_RAW)['APP_VERSION'],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Application Name | Application Name
@@ -44,7 +44,7 @@ return [
| This Applocation name is used for installation and update checking | This Applocation name is used for installation and update checking
| |
*/ */
'name' => 'Faveo Helpdesk Community', 'name' => parse_ini_file(storage_path('faveoconfig.ini'), false, INI_SCANNER_RAW)['APP_NAME'],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Application URL | Application URL

View File

@@ -11,7 +11,7 @@ return new class() extends Migration {
*/ */
public function up() public function up()
{ {
Schema::create('date_time_format', function (Blueprint $table) { \Illuminate\Support\Facades\Schema::create('date_time_format', function (Blueprint $table) {
$table->increments('id'); $table->increments('id');
$table->string('format'); $table->string('format');
}); });

View File

@@ -10,12 +10,8 @@ return new class() extends Migration {
*/ */
public function up() public function up()
{ {
$current_version1 = \Config::get('app.version');
$current_version2 = explode(' ', $current_version1);
$current_version = $current_version2[1];
$settings_system = DB::table('settings_system')->where('id', '=', '1')->first(); $settings_system = DB::table('settings_system')->where('id', '=', '1')->first();
if ($settings_system != null) { if ($settings_system != null) {
DB::table('settings_system')->insert(['version' => $current_version]);
DB::table('common_settings') DB::table('common_settings')
->insert( ->insert(
['option_name' => 'enable_rtl', 'option_value' => ''], ['option_name' => 'enable_rtl', 'option_value' => ''],

View File

@@ -1,43 +0,0 @@
<?php
namespace Database\Seeders;
use App\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Schema;
class AlterColumnTypeSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->modifyStringType(Schema::getAllTables());
}
private function modifyStringType($tables)
{
foreach ($tables as $table) {
$tableName = (array)$table;
$tableName = reset($tableName);
$columns = Schema::getColumnListing($tableName);
foreach ($columns as $column) {
if (Schema::getColumnType($tableName, $column) == 'string') {
Schema::table($tableName, function ($table) use($column) {
$table->string($column)->nullable()->change();
});
} elseif (Schema::getColumnType($tableName, $column) == 'boolean') {
Schema::table($tableName, function ($table) use($column) {
$table->boolean($column)->default(0)->change();
});
}
}
}
}
}

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Database\Seeders; namespace Database\Seeders\v_2_0_0;
use App\Model\Common\Template; use App\Model\Common\Template;
use App\Model\Common\TemplateSet; use App\Model\Common\TemplateSet;
@@ -37,6 +37,7 @@ use App\Model\helpdesk\Workflow\WorkflowClose;
use App\Model\kb\Settings; use App\Model\kb\Settings;
// Knowledge base // Knowledge base
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Schema;
class DatabaseSeeder extends Seeder class DatabaseSeeder extends Seeder
{ {
@@ -47,8 +48,26 @@ class DatabaseSeeder extends Seeder
*/ */
public function run() public function run()
{ {
$tables = Schema::getAllTables();
(new AlterColumnTypeSeeder())->run(); foreach ($tables as $table) {
$tableName = (array)$table;
$tableName = reset($tableName);
$columns = Schema::getColumnListing($tableName);
foreach ($columns as $column) {
if (Schema::getColumnType($tableName, $column) == 'string') {
Schema::table($tableName, function ($table) use($column) {
$table->string($column)->nullable()->change();
});
} elseif (Schema::getColumnType($tableName, $column) == 'boolean') {
Schema::table($tableName, function ($table) use($column) {
$table->boolean($column)->default(0)->change();
});
}
}
}
/* Date time format */ /* Date time format */
$date_time_formats = [ $date_time_formats = [
'd/m/Y H:i:s', 'd/m/Y H:i:s',

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Database\Seeders; namespace Database\Seeders\v_2_0_0;
use App\Model\MailJob\MailService; use App\Model\MailJob\MailService;
use App\Model\MailJob\QueueService; use App\Model\MailJob\QueueService;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Database\Seeders; namespace Database\Seeders\v_2_0_0;
use App\Model\helpdesk\Ticket\Ticket_source; use App\Model\helpdesk\Ticket\Ticket_source;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Database\Seeders; namespace Database\Seeders\v_2_0_0;
use App\User; use App\User;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;

View File

@@ -32,7 +32,7 @@ class="nav-link active"
<!-- content --> <!-- content -->
@section('content') @section('content')
<!-- open a form --> <!-- open a form -->
{!! Form::open(['action'=>'Agent\helpdesk\OrganizationController@store','method'=>'post']) !!} {!! Form::open(['route' => 'organizations.store','method'=>'post']) !!}
@if(Session::has('errors')) @if(Session::has('errors'))
<?php //dd($errors); ?> <?php //dd($errors); ?>

View File

@@ -41,12 +41,24 @@ foreach($segments as $seg){
}, },
"aaSorting": sort, "aaSorting": sort,
"columnDefs": [ "columnDefs": [
{ "searchable": false, "targets": [6,7] }, {"defaultContent": "-",
"targets": "_all"},
{ "searchable": true, "targets": [6,7] },
{ "visible": last, "targets": 6 }, { "visible": last, "targets": 6 },
{"visible": create, "targets":7}, {"visible": create, "targets":7},
], ],
"columns":[
{data: "check_box"},
{data: "ticket_number"},
{data: "ticket_number"},
{data: "ticket_number"},
{data: "ticket_number"},
{data: "ticket_number"},
{data: "ticket_number"},
{data: "ticket_number"},
],
"fnCreatedRow": function (nRow, aData, iDataIndex) { "fnCreatedRow": function (nRow, aData, iDataIndex) {
var str = aData[3]; var str = aData['ticket_number'];
if (str.search("#000") == -1) { if (str.search("#000") == -1) {
$("td", nRow).css({"background-color": "#F3F3F3", "font-weight": "600", "border-bottom": "solid 0.5px #ddd", "border-right": "solid 0.5px #F3F3F3"}); $("td", nRow).css({"background-color": "#F3F3F3", "font-weight": "600", "border-bottom": "solid 0.5px #ddd", "border-right": "solid 0.5px #F3F3F3"});
$("td", nRow).mouseenter(function () { $("td", nRow).mouseenter(function () {

2
storage/faveoconfig.ini Normal file
View File

@@ -0,0 +1,2 @@
APP_NAME=Faveo Helpdesk Community
APP_VERSION=v2.0.0