diff --git a/Gruntfile.js b/Gruntfile.js index dd029f5..08583cc 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -146,6 +146,7 @@ module.exports = function (grunt) { 'composer.lock', 'LICENSE', 'favicon.ico', + 'CHANGELOG.md' ] }, @@ -154,7 +155,7 @@ module.exports = function (grunt) { command: '"./vendor/bin/phpstan" --level=0 analyse app resources/lang bin install' }, composer_no_dev: { - command: 'composer update --no-dev --prefer-dist' + command: 'composer install --no-dev --prefer-dist' } } diff --git a/app/Controllers/UpgradeController.php b/app/Controllers/UpgradeController.php index f3c4728..250a6dd 100644 --- a/app/Controllers/UpgradeController.php +++ b/app/Controllers/UpgradeController.php @@ -4,6 +4,7 @@ namespace App\Controllers; use App\Web\Session; use Monolog\Logger; +use Parsedown; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use RuntimeException; @@ -153,6 +154,21 @@ class UpgradeController extends Controller return json($response, $jsonResponse); } + + /** + * @param Request $request + * @param Response $response + * @return Response + * @throws \Twig\Error\LoaderError + * @throws \Twig\Error\RuntimeError + * @throws \Twig\Error\SyntaxError + */ + public function changelog(Request $request, Response $response): Response + { + return view()->render($response, 'dashboard/changelog.twig', [ + 'content' => Parsedown::instance()->text(file_get_contents('CHANGELOG.md')), + ]); + } protected function getApiJson() { diff --git a/app/routes.php b/app/routes.php index 7af4ea0..545c8ae 100644 --- a/app/routes.php +++ b/app/routes.php @@ -34,10 +34,11 @@ $app->group('', function (RouteCollectorProxy $group) { $group->get('/system/themes', [AdminController::class, 'getThemes'])->setName('theme'); $group->post('/system/settings/save', [SettingController::class, 'saveSettings'])->setName('settings.save'); - + $group->post('/system/upgrade', [UpgradeController::class, 'upgrade'])->setName('system.upgrade'); $group->get('/system/checkForUpdates', [UpgradeController::class, 'checkForUpdates'])->setName('system.checkForUpdates'); - + $group->get('/system/changelog', [UpgradeController::class, 'changelog'])->setName('system.changelog'); + $group->get('/system', [AdminController::class, 'system'])->setName('system'); $group->get('/users[/page/{page}]', [UserController::class, 'index'])->setName('user.index'); diff --git a/composer.json b/composer.json index e0399d8..69f5dfc 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,6 @@ { "name": "sergix44/xbackbone", + "license": "AGPL-3.0", "version": "3.1.2", "description": "A lightweight ShareX PHP backend", "type": "project", @@ -10,6 +11,7 @@ "ext-json": "*", "ext-pdo": "*", "ext-zip": "*", + "erusev/parsedown": "^1.7", "guzzlehttp/psr7": "^1.6", "http-interop/http-factory-guzzle": "^1.0", "intervention/image": "^2.4", diff --git a/composer.lock b/composer.lock index 13401b7..052c52f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6f92268190e2189e19ce34681370d6f3", + "content-hash": "38f18f0b967be3ce9096df807dea1a17", "packages": [ { "name": "aws/aws-sdk-php", @@ -90,6 +90,52 @@ ], "time": "2020-04-08T18:27:07+00:00" }, + { + "name": "erusev/parsedown", + "version": "1.7.4", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "time": "2019-12-30T22:54:17+00:00" + }, { "name": "firebase/php-jwt", "version": "v5.2.0", @@ -3019,34 +3065,35 @@ }, { "name": "ocramius/package-versions", - "version": "1.4.2", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d" + "reference": "421679846270a5772534828013a93be709fb13df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/44af6f3a2e2e04f2af46bcb302ad9600cba41c7d", - "reference": "44af6f3a2e2e04f2af46bcb302ad9600cba41c7d", + "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/421679846270a5772534828013a93be709fb13df", + "reference": "421679846270a5772534828013a93be709fb13df", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0.0", - "php": "^7.1.0" + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7.4.0" }, "require-dev": { - "composer/composer": "^1.6.3", - "doctrine/coding-standard": "^5.0.1", - "ext-zip": "*", - "infection/infection": "^0.7.1", - "phpunit/phpunit": "^7.5.17" + "composer/composer": "^1.9.3 || ^2.0@dev", + "doctrine/coding-standard": "^7.0.2", + "ext-zip": "^1.15.0", + "infection/infection": "^0.15.3", + "phpunit/phpunit": "^9.0.1", + "vimeo/psalm": "^3.9.3" }, "type": "composer-plugin", "extra": { "class": "PackageVersions\\Installer", "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.99.x-dev" } }, "autoload": { @@ -3065,7 +3112,7 @@ } ], "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "time": "2019-11-15T16:17:10+00:00" + "time": "2020-04-06T17:43:35+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -3374,20 +3421,20 @@ }, { "name": "symfony/service-contracts", - "version": "v1.1.8", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf" + "reference": "144c5e51266b281231e947b51223ba14acf1a749" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffc7f5692092df31515df2a5ecf3b7302b3ddacf", - "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", + "reference": "144c5e51266b281231e947b51223ba14acf1a749", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^7.2.5", "psr/container": "^1.0" }, "suggest": { @@ -3396,7 +3443,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -3428,7 +3475,7 @@ "interoperability", "standards" ], - "time": "2019-10-14T12:27:06+00:00" + "time": "2019-11-18T17:27:11+00:00" } ], "aliases": [], diff --git a/resources/lang/en.lang.php b/resources/lang/en.lang.php index 2d1f873..8ad4504 100644 --- a/resources/lang/en.lang.php +++ b/resources/lang/en.lang.php @@ -156,4 +156,6 @@ return [ 'no_tags' => 'No tags added', 'auto_tagging' => 'Auto upload tagging', 'zip_ext_not_loaded' => 'The required "zip" extension is not loaded', + 'changelog' => 'Changelog', + 'show_changelog' => 'Show changelog', ]; diff --git a/resources/lang/it.lang.php b/resources/lang/it.lang.php index e93cf7e..8c09d4e 100644 --- a/resources/lang/it.lang.php +++ b/resources/lang/it.lang.php @@ -1,4 +1,5 @@ 'Italian', 'yes' => 'Sì', @@ -158,4 +159,6 @@ return [ 'mail.recover_text' => 'Ciao %s,
è stata richiesta una reimpostazione della password per il tuo account. Per completare la procedura clicca sul seguente link:

%s

Se non sei stato tu a richiedere la reimpostazione della password, ignora semplicemente questa e-mail.', 'mail.activate_text' => 'Ciao %s!
grazie per aver creato il tuo account su %s (%s), fai clic sul seguente link per attivarlo:

%s', 'zip_ext_not_loaded' => 'L\'estensione "zip" richiesta non è caricata', + 'changelog' => 'Changelog', + 'show_changelog' => 'Mostra changelog' ]; diff --git a/resources/templates/dashboard/changelog.twig b/resources/templates/dashboard/changelog.twig new file mode 100644 index 0000000..a0b9efe --- /dev/null +++ b/resources/templates/dashboard/changelog.twig @@ -0,0 +1,17 @@ +{% extends 'base.twig' %} + +{% block title %}{{ lang('changelog') }}{% endblock %} + +{% block content %} + {% include 'comp/navbar.twig' %} +
+ +
+
{{ lang('changelog') }}
+
+ {{ content | raw }} +
+
+ +
+{% endblock %} \ No newline at end of file diff --git a/resources/templates/dashboard/system.twig b/resources/templates/dashboard/system.twig index efab9c4..3e9952c 100644 --- a/resources/templates/dashboard/system.twig +++ b/resources/templates/dashboard/system.twig @@ -162,6 +162,9 @@ +