Use new settings system to configure the instance Name and homepage banner

This commit is contained in:
Jan Böhmer 2024-05-20 21:14:32 +02:00
parent 26d83af298
commit 0772d85918
23 changed files with 299 additions and 230 deletions

View file

@ -42,6 +42,7 @@ declare(strict_types=1);
namespace App\Services\LabelSystem;
use App\Entity\LabelSystem\LabelProcessMode;
use App\Settings\SystemSettings\CustomizationSettings;
use Symfony\Bundle\SecurityBundle\Security;
use App\Entity\Contracts\NamedElementInterface;
use App\Entity\LabelSystem\LabelOptions;
@ -60,7 +61,7 @@ final class LabelHTMLGenerator
private readonly LabelBarcodeGenerator $barcodeGenerator,
private readonly SandboxedTwigFactory $sandboxedTwigProvider,
private readonly Security $security,
private readonly string $partdb_title)
private readonly CustomizationSettings $customizationSettings,)
{
}
@ -88,7 +89,8 @@ final class LabelHTMLGenerator
'page' => $page,
'last_page' => count($elements),
'user' => $current_user,
'install_title' => $this->partdb_title,
'install_title' => $this->customizationSettings->instanceName,
'partdb_title' => $this->customizationSettings->instanceName,
'paper_width' => $options->getWidth(),
'paper_height' => $options->getHeight(),
]

View file

@ -41,6 +41,7 @@ declare(strict_types=1);
namespace App\Services\LabelSystem\PlaceholderProviders;
use App\Settings\SystemSettings\CustomizationSettings;
use Symfony\Bundle\SecurityBundle\Security;
use App\Entity\UserSystem\User;
use DateTime;
@ -54,14 +55,18 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
*/
final class GlobalProviders implements PlaceholderProviderInterface
{
public function __construct(private readonly string $partdb_title, private readonly Security $security, private readonly UrlGeneratorInterface $url_generator)
public function __construct(
private readonly Security $security,
private readonly UrlGeneratorInterface $url_generator,
private CustomizationSettings $customizationSettings,
)
{
}
public function replace(string $placeholder, object $label_target, array $options = []): ?string
{
if ('[[INSTALL_NAME]]' === $placeholder) {
return $this->partdb_title;
return $this->customizationSettings->instanceName;
}
$user = $this->security->getUser();

View file

@ -23,12 +23,14 @@ declare(strict_types=1);
namespace App\Services\System;
use App\Settings\SystemSettings\CustomizationSettings;
/**
* Helper service to retrieve the banner of this Part-DB installation
*/
class BannerHelper
{
public function __construct(private readonly string $project_dir, private readonly string $partdb_banner)
public function __construct(private CustomizationSettings $customizationSettings)
{
}
@ -39,21 +41,6 @@ class BannerHelper
*/
public function getBanner(): string
{
$banner = $this->partdb_banner;
if (!is_string($banner)) {
throw new \RuntimeException('The parameter "partdb.banner" must be a string.');
}
if (empty($banner)) {
$banner_path = $this->project_dir
.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'banner.md';
$tmp = file_get_contents($banner_path);
if (false === $tmp) {
throw new \RuntimeException('The banner file could not be read.');
}
$banner = $tmp;
}
return $banner;
return $this->customizationSettings->banner ?? "";
}
}

View file

@ -36,7 +36,7 @@ class AppSettings
#[EmbeddedSettings()]
public ?SystemSettings $system;
public ?SystemSettings $system = null;
#[EmbeddedSettings()]

View file

@ -24,12 +24,16 @@ declare(strict_types=1);
namespace App\Settings;
use App\Settings\SystemSettings\AttachmentsSettings;
use App\Settings\SystemSettings\CustomizationSettings;
use Jbtronics\SettingsBundle\Settings\EmbeddedSettings;
use Jbtronics\SettingsBundle\Settings\Settings;
#[Settings]
class SystemSettings
{
#[EmbeddedSettings()]
public ?CustomizationSettings $customization = null;
#[EmbeddedSettings()]
public ?AttachmentsSettings $attachments = null;
}

View file

@ -26,12 +26,15 @@ namespace App\Settings\SystemSettings;
use Jbtronics\SettingsBundle\Metadata\EnvVarMode;
use Jbtronics\SettingsBundle\Settings\Settings;
use Jbtronics\SettingsBundle\Settings\SettingsParameter;
use Jbtronics\SettingsBundle\Settings\SettingsTrait;
use Symfony\Component\Translation\TranslatableMessage as TM;
use Symfony\Component\Validator\Constraints as Assert;
#[Settings(label: new TM("settings.system.attachments"))]
class AttachmentsSettings
{
use SettingsTrait;
#[SettingsParameter(
label: new TM("settings.system.attachments.maxFileSize"),
description: new TM("settings.system.attachments.maxFileSize.help"),

View file

@ -0,0 +1,51 @@
<?php
/*
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
*
* Copyright (C) 2019 - 2024 Jan Böhmer (https://github.com/jbtronics)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace App\Settings\SystemSettings;
use App\Form\Type\RichTextEditorType;
use Jbtronics\SettingsBundle\Metadata\EnvVarMode;
use Jbtronics\SettingsBundle\Settings\Settings;
use Jbtronics\SettingsBundle\Settings\SettingsParameter;
use Jbtronics\SettingsBundle\Settings\SettingsTrait;
use Symfony\Component\Translation\TranslatableMessage as TM;
#[Settings(name: "customization", label: new TM("settings.system.customization"))]
class CustomizationSettings
{
use SettingsTrait;
#[SettingsParameter(
label: new TM("settings.system.customization.instanceName"),
description: new TM("settings.system.customization.instanceName.help"),
envVar: "INSTANCE_NAME", envVarMode: EnvVarMode::OVERWRITE,
)]
public string $instanceName = "Part-DB";
#[SettingsParameter(
label: new TM("settings.system.customization.banner"),
formType: RichTextEditorType::class, formOptions: ['mode' => 'markdown-full'],
)]
public ?string $banner = null;
}

View file

@ -7,6 +7,7 @@ use ApiPlatform\State\ProviderInterface;
use App\ApiResource\PartDBInfo;
use App\Services\Misc\GitVersionInfo;
use App\Services\System\BannerHelper;
use App\Settings\SystemSettings\CustomizationSettings;
use Shivas\VersioningBundle\Service\VersionManagerInterface;
class PartDBInfoProvider implements ProviderInterface
@ -14,12 +15,12 @@ class PartDBInfoProvider implements ProviderInterface
public function __construct(private readonly VersionManagerInterface $versionManager,
private readonly GitVersionInfo $gitVersionInfo,
private readonly string $partdb_title,
private readonly string $base_currency,
private readonly BannerHelper $bannerHelper,
private readonly string $default_uri,
private readonly string $global_timezone,
private readonly string $global_locale
private readonly string $global_locale,
private readonly CustomizationSettings $customizationSettings,
)
{
@ -31,7 +32,7 @@ class PartDBInfoProvider implements ProviderInterface
version: $this->versionManager->getVersion()->toString(),
git_branch: $this->gitVersionInfo->getGitBranchName(),
git_commit: $this->gitVersionInfo->getGitCommitHash(),
title: $this->partdb_title,
title: $this->customizationSettings->instanceName,
banner: $this->bannerHelper->getBanner(),
default_uri: $this->default_uri,
global_timezone: $this->global_timezone,