169 lines
8.1 KiB
PHP
169 lines
8.1 KiB
PHP
<?php
|
|
|
|
/*******************************************************************
|
|
|
|
PHP Class : /Controller/System/AboutController
|
|
Description : Informasi Aplikasi
|
|
Created By : Siau Pheng ([email protected]).
|
|
Created Date : November 23th, 2011.
|
|
Last Modified : November 2nd, 2026.
|
|
|
|
(c) 3FONIA Software; WWW.3FONIA.COM.
|
|
|
|
*******************************************************************/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Controller\System;
|
|
|
|
use Composer\Autoload\ClassLoader;
|
|
use flight\Engine;
|
|
use flight\Session;
|
|
use Webapp\App\Register;
|
|
use Webapp\App\Update;
|
|
use Webapp\DB\CheckSQL;
|
|
use Webapp\Web\Param;
|
|
|
|
class AboutController {
|
|
|
|
protected Engine $app;
|
|
protected Session $session;
|
|
protected Update $update;
|
|
protected CheckSQL $check;
|
|
|
|
public function __construct(Engine $app, Session $session) {
|
|
$this->app = $app;
|
|
$this->session = $session;
|
|
$this->update = new Update($app);
|
|
$this->check = new CheckSQL($app);
|
|
$this->check->ignore_table("app_auth","app_backup","app_config","app_menu","app_operator");
|
|
}
|
|
|
|
public function update_check() {
|
|
$ainfo = $this->update->check();
|
|
$ajson['is_update'] = $ainfo['cur_sha1'] === $ainfo['new_sha1'];
|
|
$ajson['html'] = '
|
|
<div class="row">
|
|
<div class="col-sm-4 col-lg-4 col-form-label">Versi Aplikasi</div>
|
|
<div class="col col-form-label"><span class="form-control">'.$ainfo['cur_version'].'</span></div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-4 col-lg-4 col-form-label">Commit Aplikasi</div>
|
|
<div class="col col-form-label"><span class="form-control"><strong>'.$ainfo['cur_sha'].'</strong> '.$ainfo['cur_date'].'</span></div>
|
|
</div>
|
|
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
|
<div class="row">
|
|
<div class="col-sm-4 col-lg-4 col-form-label">Commit Update</div>
|
|
<div class="col col-form-label"><span class="form-control"><strong>'.$ainfo['new_sha'].'</strong> '.$ainfo['new_date'].'</span></div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-4 col-lg-4 col-form-label">Informasi Update</div>
|
|
<div class="col col-form-label"><span class="form-control">'.$ainfo['new_message'].'</span></div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-4 col-lg-4 col-form-label">Status Git Server</div>
|
|
<div class="col">
|
|
<span class="form-control text-'.($ainfo['svr_status']===1?'success border-primary':'warning border-danger').'" id="spanStatus">'.$ainfo['svr_message'].'</span>
|
|
</div>
|
|
</div>';
|
|
$this->app->json($ajson);
|
|
}
|
|
|
|
public function update_proses() {
|
|
$ajson = $this->update->go();
|
|
$this->app->json($ajson);
|
|
}
|
|
|
|
public function db_check() {
|
|
$ajson['html'] = '<ul id="db-list"><li>Proses ...</li></ul>';
|
|
$ajson['db_count'] = $this->check->count_db();
|
|
$this->app->json($ajson);
|
|
}
|
|
|
|
public function db_proses() {
|
|
$nomor = Param::Get('Nomor', 0);
|
|
$ajson['html'] = $this->check->check_db_step($nomor);
|
|
$this->app->json($ajson);
|
|
}
|
|
|
|
public function opti_proses() {
|
|
$nomor = Param::Get('Nomor', 0);
|
|
$ajson['html'] = $this->check->optimize_db_step($nomor);
|
|
$this->app->json($ajson);
|
|
}
|
|
|
|
public function composer() {
|
|
$packages = [];
|
|
if (class_exists(ClassLoader::class, false)) {
|
|
$baseDir = (function () {
|
|
$baseDir = null;
|
|
@include dirname((string) (new \ReflectionClass(ClassLoader::class))->getFileName()) . '/autoload_psr4.php'; // @ may not exist
|
|
return $baseDir;
|
|
})();
|
|
$composer = @json_decode((string) file_get_contents($baseDir . '/composer.lock')); // @ may not exist or be valid
|
|
$packages = (array) @$composer->packages; // @ keys may not exist
|
|
array_walk($packages, function ($package) {
|
|
$package->hash = $package->source->reference ?? $package->dist->reference ?? null;
|
|
}, $packages);
|
|
usort($packages, fn($a, $b): int => $a->name <=> $b->name);
|
|
}
|
|
$text = ''; $last = array_key_last((array) $packages);
|
|
foreach ($packages as $key => $item) {
|
|
$text .= $item->name. ' v' .$item->version. ($key === $last ? '' : '<i class="bi-gear px-1"></i>');
|
|
}
|
|
$this->app->json([ 'html' => $text ]);
|
|
}
|
|
|
|
public function index() {
|
|
$ajson = [];
|
|
$apps = $this->session->get('WEB_APP');
|
|
|
|
$ajson['html'] = '<div>
|
|
<ul class="nav nav-tabs" role="tablist">
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link active" id="about-tab" data-bs-toggle="tab" data-bs-target="#about" type="button" role="tab" aria-controls="about" aria-selected="true">Tentang Aplikasi</button>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="other-tab" data-bs-toggle="tab" data-bs-target="#other" type="button" role="tab" aria-controls="other" aria-selected="false">Informasi Pendukung</button>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="tool-tab" data-bs-toggle="tab" data-bs-target="#tool" type="button" role="tab" aria-controls="tool" aria-selected="false">Tools</button>
|
|
</li>
|
|
</ul>
|
|
<div class="tab-content border border-top-0 p-3">
|
|
<div class="tab-pane fade active show" id="about" role="tabpanel" aria-labelledby="about-tab">
|
|
<div class="text-center text-secondary">
|
|
<span class="fs-5">'.$apps['REG_NAME'].'</span><br>'.$apps['REG_ADDRESS'].'<br>'.$apps['REG_CITY'].' '.$apps['REG_POSTCODE'].'</div><br>
|
|
<table>
|
|
<tr><td>Register ID</td><td class="c pe-1">:</td><td nowrap>'.Register::reg_id($this->session).'</td></tr>
|
|
<tr><td>Register Code</td><td class="c">:</td><td>'.Register::reg_code($this->session).'</td></tr>
|
|
</table>
|
|
<hr class="my-2">
|
|
<div class="text-center text-secondary">'.$apps['APP_NAMES'].' Ver. '.$apps['APP_VER'].'<br>Updated : '.$apps['APP_UPDATED'].'<br><br><span style="font-size:.9em;"><i class="bi-c-circle pe-1"></i>'.$apps['CREATOR_YEARS'].', '.$apps['CREATOR_NAME'].'<br>'.$apps['CREATOR_WEBSITE'].'.</span></div>
|
|
</div>
|
|
<div class="tab-pane fade" id="other" role="tabpanel" aria-labelledby="other-tab">
|
|
<div class="row mb-1"><div class="col fw-bold">Komponen Javascript</div></div>
|
|
<div class="row mb-1"><div class="col" id="divBuildInfo"></div></div>
|
|
<div class="row mb-1"><div class="col fw-bold">Composer Packages</div></div>
|
|
<div class="row mb-1"><div class="col overflow-auto" style="height:100px;" id="divComposerInfo"></div></div>
|
|
</div>
|
|
<div class="tab-pane fade" id="tool" role="tabpanel" aria-labelledby="tool-tab">
|
|
<div class="row mb-2">
|
|
<div class="col-md-8">Proses Cek dan Otomatis Repair Database, jika terjadi masalah dengan database aplikasi.</div>
|
|
<div class="col-md-4 d-grid gap-2 my-auto"><button type="button" class="btn btn-info col-12" id="butDBCek">Cek Database</button></div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-md-8">Proses Optimalisasi database, merampingkan kembali database aplikasi.</div>
|
|
<div class="col-md-4 d-grid gap-2 my-auto"><button type="button" class="btn btn-warning col-12" id="butDBOpti">Opti Database</button></div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-8">Cek update aplikasi secara online.</div>
|
|
<div class="col-md-4 d-grip gap-2 my-auto"><button type="button" class="btn btn-success col-12" id="butUpdateCek">Cek Update</button></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>';
|
|
$this->app->json($ajson);
|
|
}
|
|
}
|