mirror of
https://github.com/grocy/grocy.git
synced 2025-04-29 17:45:39 +00:00
Move about dialog into separate view and add API endpoint for system info
This commit is contained in:
parent
b5ac319a90
commit
01e9e3f5ce
@ -63,21 +63,6 @@ class LoginController extends BaseController
|
|||||||
return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/'));
|
return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Root(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
|
||||||
{
|
|
||||||
// Schema migration is done here
|
|
||||||
$databaseMigrationService = new DatabaseMigrationService();
|
|
||||||
$databaseMigrationService->MigrateDatabase();
|
|
||||||
|
|
||||||
if (GROCY_IS_DEMO_INSTALL)
|
|
||||||
{
|
|
||||||
$demoDataGeneratorService = new DemoDataGeneratorService();
|
|
||||||
$demoDataGeneratorService->PopulateDemoData();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/stockoverview'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function GetSessionCookieName()
|
public function GetSessionCookieName()
|
||||||
{
|
{
|
||||||
return $this->SessionCookieName;
|
return $this->SessionCookieName;
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace Grocy\Controllers;
|
namespace Grocy\Controllers;
|
||||||
|
|
||||||
use \Grocy\Services\DatabaseService;
|
use \Grocy\Services\DatabaseService;
|
||||||
|
use \Grocy\Services\ApplicationService;
|
||||||
|
|
||||||
class SystemApiController extends BaseApiController
|
class SystemApiController extends BaseApiController
|
||||||
{
|
{
|
||||||
@ -10,9 +11,11 @@ class SystemApiController extends BaseApiController
|
|||||||
{
|
{
|
||||||
parent::__construct($container);
|
parent::__construct($container);
|
||||||
$this->DatabaseService = new DatabaseService();
|
$this->DatabaseService = new DatabaseService();
|
||||||
|
$this->ApplicationService = new ApplicationService();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected $DatabaseService;
|
protected $DatabaseService;
|
||||||
|
protected $ApplicationService;
|
||||||
|
|
||||||
public function GetDbChangedTime(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
public function GetDbChangedTime(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||||
{
|
{
|
||||||
@ -38,4 +41,9 @@ class SystemApiController extends BaseApiController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function GetSystemInfo(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||||
|
{
|
||||||
|
return $this->ApiResponse($this->ApplicationService->GetSystemInfo());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
40
controllers/SystemController.php
Normal file
40
controllers/SystemController.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Grocy\Controllers;
|
||||||
|
|
||||||
|
use \Grocy\Services\ApplicationService;
|
||||||
|
use \Grocy\Services\DatabaseMigrationService;
|
||||||
|
use \Grocy\Services\DemoDataGeneratorService;
|
||||||
|
|
||||||
|
class SystemController extends BaseController
|
||||||
|
{
|
||||||
|
public function __construct(\Slim\Container $container)
|
||||||
|
{
|
||||||
|
parent::__construct($container);
|
||||||
|
$this->ApplicationService = new ApplicationService();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected $ApplicationService;
|
||||||
|
|
||||||
|
public function Root(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||||
|
{
|
||||||
|
// Schema migration is done here
|
||||||
|
$databaseMigrationService = new DatabaseMigrationService();
|
||||||
|
$databaseMigrationService->MigrateDatabase();
|
||||||
|
|
||||||
|
if (GROCY_IS_DEMO_INSTALL)
|
||||||
|
{
|
||||||
|
$demoDataGeneratorService = new DemoDataGeneratorService();
|
||||||
|
$demoDataGeneratorService->PopulateDemoData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response->withRedirect($this->AppContainer->UrlManager->ConstructUrl('/stockoverview'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function About(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
|
||||||
|
{
|
||||||
|
return $this->AppContainer->view->render($response, 'about', [
|
||||||
|
'system_info' => $this->ApplicationService->GetSystemInfo()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
@ -24,6 +24,46 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
|
"/system/info": {
|
||||||
|
"get": {
|
||||||
|
"summary": "Returns information about the installed grocy, PHP and SQLite version",
|
||||||
|
"tags": [
|
||||||
|
"System"
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "An DbChangedTimeResponse object",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"grocy_version": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"Version": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ReleaseDate": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"php_version": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sqlite_version": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/system/db-changed-time": {
|
"/system/db-changed-time": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Returns the time when the database was last changed",
|
"summary": "Returns the time when the database was last changed",
|
||||||
|
@ -492,3 +492,12 @@ if (window.location.hash)
|
|||||||
{
|
{
|
||||||
$(window.location.hash).addClass("p-2 border border-info rounded");
|
$(window.location.hash).addClass("p-2 border border-info rounded");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$("#about-dialog-link").on("click", function()
|
||||||
|
{
|
||||||
|
bootbox.alert({
|
||||||
|
message: '<iframe height="400px" class="embed-responsive" src="' + U("/about?embedded") + '"></iframe>',
|
||||||
|
size: "large",
|
||||||
|
closeButton: false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@ -7,8 +7,9 @@ use \Tuupola\Middleware\CorsMiddleware;
|
|||||||
|
|
||||||
$app->group('', function()
|
$app->group('', function()
|
||||||
{
|
{
|
||||||
// Base route
|
// System routes
|
||||||
$this->get('/', 'LoginControllerInstance:Root')->setName('root');
|
$this->get('/', '\Grocy\Controllers\SystemController:Root')->setName('root');
|
||||||
|
$this->get('/about', '\Grocy\Controllers\SystemController:About');
|
||||||
|
|
||||||
// Login routes
|
// Login routes
|
||||||
$this->get('/login', 'LoginControllerInstance:LoginPage')->setName('login');
|
$this->get('/login', 'LoginControllerInstance:LoginPage')->setName('login');
|
||||||
@ -83,6 +84,7 @@ $app->group('/api', function()
|
|||||||
$this->get('/openapi/specification', '\Grocy\Controllers\OpenApiController:DocumentationSpec');
|
$this->get('/openapi/specification', '\Grocy\Controllers\OpenApiController:DocumentationSpec');
|
||||||
|
|
||||||
// System
|
// System
|
||||||
|
$this->get('/system/info', '\Grocy\Controllers\SystemApiController:GetSystemInfo');
|
||||||
$this->get('/system/db-changed-time', '\Grocy\Controllers\SystemApiController:GetDbChangedTime');
|
$this->get('/system/db-changed-time', '\Grocy\Controllers\SystemApiController:GetDbChangedTime');
|
||||||
$this->post('/system/log-missing-localization', '\Grocy\Controllers\SystemApiController:LogMissingLocalization');
|
$this->post('/system/log-missing-localization', '\Grocy\Controllers\SystemApiController:LogMissingLocalization');
|
||||||
|
|
||||||
|
@ -14,4 +14,17 @@ class ApplicationService extends BaseService
|
|||||||
|
|
||||||
return $this->InstalledVersion;
|
return $this->InstalledVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function GetSystemInfo()
|
||||||
|
{
|
||||||
|
$pdo = new \PDO('sqlite::memory:');
|
||||||
|
$sqliteVersion = $pdo->query('SELECT sqlite_version()')->fetch()[0];
|
||||||
|
$pdo = null;
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'grocy_version' => $this->GetInstalledVersion(),
|
||||||
|
'php_version' => phpversion(),
|
||||||
|
'sqlite_version' => $sqliteVersion
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
26
views/about.blade.php
Normal file
26
views/about.blade.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
@extends('layout.default')
|
||||||
|
|
||||||
|
@section('title', $L('About grocy'))
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-md-6 col-xl-4 text-center">
|
||||||
|
<h1>@yield('title')</h1>
|
||||||
|
|
||||||
|
grocy is a project by
|
||||||
|
<a href="https://berrnd.de" class="discrete-link" target="_blank">Bernd Bestel</a><br>
|
||||||
|
Created with passion since 2017<br>
|
||||||
|
<br>
|
||||||
|
Version {{ $version }}<br>
|
||||||
|
{{ $L('Released on') }} {{ $releaseDate }} <time class="timeago timeago-contextual" datetime="{{ $releaseDate }}"></time><br>
|
||||||
|
<br>
|
||||||
|
PHP Version {{ $system_info['php_version'] }}<br>
|
||||||
|
SQLite Version {{ $system_info['sqlite_version'] }}<br>
|
||||||
|
<br>
|
||||||
|
Life runs on code<br>
|
||||||
|
<a href="https://github.com/grocy/grocy" class="discrete-link" target="_blank">
|
||||||
|
<i class="fab fa-github"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@stop
|
@ -279,7 +279,7 @@
|
|||||||
<a class="dropdown-item discrete-link" href="{{ $U('/manageapikeys') }}"><i class="fas fa-handshake"></i> {{ $L('Manage API keys') }}</a>
|
<a class="dropdown-item discrete-link" href="{{ $U('/manageapikeys') }}"><i class="fas fa-handshake"></i> {{ $L('Manage API keys') }}</a>
|
||||||
<a class="dropdown-item discrete-link" target="_blank" href="{{ $U('/api') }}"><i class="fas fa-book"></i> {{ $L('REST API & data model documentation') }}</a>
|
<a class="dropdown-item discrete-link" target="_blank" href="{{ $U('/api') }}"><i class="fas fa-book"></i> {{ $L('REST API & data model documentation') }}</a>
|
||||||
<div class="dropdown-divider"></div>
|
<div class="dropdown-divider"></div>
|
||||||
<a class="dropdown-item discrete-link" href="#" data-toggle="modal" data-target="#about-modal"><i class="fas fa-info fa-fw"></i> {{ $L('About grocy') }} (Version {{ $version }})</a>
|
<a id="about-dialog-link" class="dropdown-item discrete-link" href="#"><i class="fas fa-info fa-fw"></i> {{ $L('About grocy') }} (Version {{ $version }})</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -297,30 +297,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal fade content-text" id="about-modal" tabindex="-1">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content text-center">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h4 class="modal-title w-100">{{ $L('About grocy') }}</h4>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" title="{{ $L('Close') }}">×</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
grocy is a project by
|
|
||||||
<a href="https://berrnd.de" class="discrete-link" target="_blank">Bernd Bestel</a><br>
|
|
||||||
Created with passion since 2017<br>
|
|
||||||
<br>
|
|
||||||
Version {{ $version }}<br>
|
|
||||||
{{ $L('Released on') }} {{ $releaseDate }} <time class="timeago timeago-contextual" datetime="{{ $releaseDate }}"></time><br>
|
|
||||||
<br>
|
|
||||||
Life runs on code<br>
|
|
||||||
<a href="https://github.com/grocy/grocy" class="discrete-link" target="_blank">
|
|
||||||
<i class="fab fa-github"></i>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script src="{{ $U('/node_modules/jquery/dist/jquery.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/jquery/dist/jquery.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
<script src="{{ $U('/node_modules/startbootstrap-sb-admin/js/sb-admin.min.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/node_modules/startbootstrap-sb-admin/js/sb-admin.min.js?v=', true) }}{{ $version }}"></script>
|
||||||
@ -350,7 +326,7 @@
|
|||||||
<script src="{{ $U('/js/grocy_clock.js?v=', true) }}{{ $version }}"></script>
|
<script src="{{ $U('/js/grocy_clock.js?v=', true) }}{{ $version }}"></script>
|
||||||
@stack('pageScripts')
|
@stack('pageScripts')
|
||||||
@stack('componentScripts')
|
@stack('componentScripts')
|
||||||
<script src="{{ $U('/viewjs', true) }}/@yield('viewJsName').js?v={{ $version }}"></script>
|
@hasSection('viewJsName')<script src="{{ $U('/viewjs', true) }}/@yield('viewJsName').js?v={{ $version }}"></script>@endif
|
||||||
|
|
||||||
@if(file_exists(GROCY_DATAPATH . '/custom_js.html'))
|
@if(file_exists(GROCY_DATAPATH . '/custom_js.html'))
|
||||||
@php include GROCY_DATAPATH . '/custom_js.html' @endphp
|
@php include GROCY_DATAPATH . '/custom_js.html' @endphp
|
||||||
|
Loading…
x
Reference in New Issue
Block a user