mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-10-07 22:09:46 +00:00
Compare commits
4 Commits
master
...
423-enviro
Author | SHA1 | Date | |
---|---|---|---|
2cac6b78db | |||
49fc02a7da | |||
52344cda3b | |||
822a297e36 |
6
.changes/unreleased/Feature-20251007-101949.yaml
Normal file
6
.changes/unreleased/Feature-20251007-101949.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Feature
|
||||||
|
body: Create environment banner that can be activated and configured depending on the image deployed
|
||||||
|
time: 2025-10-07T10:19:49.784462956+02:00
|
||||||
|
custom:
|
||||||
|
Issue: "423"
|
||||||
|
SchemaChange: No schema change
|
@@ -1,6 +1,13 @@
|
|||||||
chill_main:
|
chill_main:
|
||||||
available_languages: [ '%env(resolve:LOCALE)%', 'en' ]
|
available_languages: [ '%env(resolve:LOCALE)%', 'en' ]
|
||||||
available_countries: ['BE', 'FR']
|
available_countries: ['BE', 'FR']
|
||||||
|
top_banner:
|
||||||
|
visible: true
|
||||||
|
text:
|
||||||
|
fr: 'Vous travaillez actuellement avec la version de PRÉ-PRODUCTION.'
|
||||||
|
nl: 'Je werkt momenteel in de PRE-PRODUCTIE versie'
|
||||||
|
color: '#353535'
|
||||||
|
background_color: '#d8bb48'
|
||||||
notifications:
|
notifications:
|
||||||
from_email: '%env(resolve:NOTIFICATION_FROM_EMAIL)%'
|
from_email: '%env(resolve:NOTIFICATION_FROM_EMAIL)%'
|
||||||
from_name: '%env(resolve:NOTIFICATION_FROM_NAME)%'
|
from_name: '%env(resolve:NOTIFICATION_FROM_NAME)%'
|
||||||
|
@@ -205,6 +205,11 @@ class ChillMainExtension extends Extension implements
|
|||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$container->setParameter(
|
||||||
|
'chill_main.top_banner',
|
||||||
|
$config['top_banner'] ?? []
|
||||||
|
);
|
||||||
|
|
||||||
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../config'));
|
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../config'));
|
||||||
$loader->load('services.yaml');
|
$loader->load('services.yaml');
|
||||||
$loader->load('services/doctrine.yaml');
|
$loader->load('services/doctrine.yaml');
|
||||||
@@ -250,6 +255,7 @@ class ChillMainExtension extends Extension implements
|
|||||||
'name' => $config['installation_name'], ],
|
'name' => $config['installation_name'], ],
|
||||||
'available_languages' => $config['available_languages'],
|
'available_languages' => $config['available_languages'],
|
||||||
'add_address' => $config['add_address'],
|
'add_address' => $config['add_address'],
|
||||||
|
'chill_main_config' => $config,
|
||||||
],
|
],
|
||||||
'form_themes' => ['@ChillMain/Form/fields.html.twig'],
|
'form_themes' => ['@ChillMain/Form/fields.html.twig'],
|
||||||
];
|
];
|
||||||
|
@@ -168,6 +168,20 @@ class Configuration implements ConfigurationInterface
|
|||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
|
->arrayNode('top_banner')
|
||||||
|
->canBeUnset()
|
||||||
|
->children()
|
||||||
|
->booleanNode('visible')
|
||||||
|
->defaultFalse()
|
||||||
|
->end()
|
||||||
|
->arrayNode('text')
|
||||||
|
->useAttributeAsKey('lang')
|
||||||
|
->scalarPrototype()->end()
|
||||||
|
->end() // end of text
|
||||||
|
->scalarNode('color')->defaultNull()->end()
|
||||||
|
->scalarNode('background_color')->defaultNull()->end()
|
||||||
|
->end() // end of top_banner children
|
||||||
|
->end() // end of top_banner
|
||||||
->arrayNode('widgets')
|
->arrayNode('widgets')
|
||||||
->canBeEnabled()
|
->canBeEnabled()
|
||||||
->canBeUnset()
|
->canBeUnset()
|
||||||
|
@@ -0,0 +1,17 @@
|
|||||||
|
{% if chill_main_config.top_banner is defined and chill_main_config.top_banner.text is defined %}
|
||||||
|
{% set banner_text = '' %}
|
||||||
|
{% set current_locale = app.request.locale %}
|
||||||
|
|
||||||
|
{% if chill_main_config.top_banner.text[current_locale] is defined %}
|
||||||
|
{% set banner_text = chill_main_config.top_banner.text[current_locale] %}
|
||||||
|
{% else %}
|
||||||
|
{% set banner_text = chill_main_config.top_banner.text|first %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if banner_text %}
|
||||||
|
<div class="top-banner w-100 text-center py-2"
|
||||||
|
style="{% if chill_main_config.top_banner.color is defined %}color: {{ chill_main_config.top_banner.color }};{% endif %}{% if chill_main_config.top_banner.background_color is defined %}background-color: {{ chill_main_config.top_banner.background_color }};{% endif %}">
|
||||||
|
{{ banner_text }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
@@ -26,6 +26,10 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
{% if chill_main_config.top_banner is defined and chill_main_config.top_banner.visible is true %}
|
||||||
|
{{ include('@ChillMain/Layout/_top_banner.html.twig') }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if responsive_debug is defined and responsive_debug == 1 %}
|
{% if responsive_debug is defined and responsive_debug == 1 %}
|
||||||
{{ include('@ChillMain/Layout/_debug.html.twig') }}
|
{{ include('@ChillMain/Layout/_debug.html.twig') }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Chill\MainBundle\Tests\DependencyInjection;
|
||||||
|
|
||||||
|
use Chill\MainBundle\DependencyInjection\Configuration;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Config\Definition\Processor;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*
|
||||||
|
* @coversNothing
|
||||||
|
*/
|
||||||
|
class ConfigurationTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testTopBannerConfiguration(): void
|
||||||
|
{
|
||||||
|
$containerBuilder = new ContainerBuilder();
|
||||||
|
$configuration = new Configuration([], $containerBuilder);
|
||||||
|
$processor = new Processor();
|
||||||
|
|
||||||
|
// Test with top_banner configuration
|
||||||
|
$config = [
|
||||||
|
'chill_main' => [
|
||||||
|
'top_banner' => [
|
||||||
|
'text' => [
|
||||||
|
'fr' => 'Vous travaillez actuellement avec la version de pré-production de Chill.',
|
||||||
|
'nl' => 'Je werkte momenteel in de pré-productie versie van Chill.',
|
||||||
|
],
|
||||||
|
'color' => 'white',
|
||||||
|
'background-color' => 'red',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$processedConfig = $processor->processConfiguration($configuration, $config);
|
||||||
|
|
||||||
|
self::assertArrayHasKey('top_banner', $processedConfig);
|
||||||
|
self::assertArrayHasKey('text', $processedConfig['top_banner']);
|
||||||
|
self::assertArrayHasKey('fr', $processedConfig['top_banner']['text']);
|
||||||
|
self::assertArrayHasKey('nl', $processedConfig['top_banner']['text']);
|
||||||
|
self::assertSame('white', $processedConfig['top_banner']['color']);
|
||||||
|
self::assertSame('red', $processedConfig['top_banner']['background_color']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTopBannerConfigurationOptional(): void
|
||||||
|
{
|
||||||
|
$containerBuilder = new ContainerBuilder();
|
||||||
|
$configuration = new Configuration([], $containerBuilder);
|
||||||
|
$processor = new Processor();
|
||||||
|
|
||||||
|
// Test without top_banner configuration
|
||||||
|
$config = [
|
||||||
|
'chill_main' => [],
|
||||||
|
];
|
||||||
|
|
||||||
|
$processedConfig = $processor->processConfiguration($configuration, $config);
|
||||||
|
|
||||||
|
// top_banner should not be present when not configured
|
||||||
|
self::assertArrayNotHasKey('top_banner', $processedConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTopBannerWithMinimalConfiguration(): void
|
||||||
|
{
|
||||||
|
$containerBuilder = new ContainerBuilder();
|
||||||
|
$configuration = new Configuration([], $containerBuilder);
|
||||||
|
$processor = new Processor();
|
||||||
|
|
||||||
|
// Test with minimal top_banner configuration (only text)
|
||||||
|
$config = [
|
||||||
|
'chill_main' => [
|
||||||
|
'top_banner' => [
|
||||||
|
'text' => [
|
||||||
|
'fr' => 'Test message',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$processedConfig = $processor->processConfiguration($configuration, $config);
|
||||||
|
|
||||||
|
self::assertArrayHasKey('top_banner', $processedConfig);
|
||||||
|
self::assertArrayHasKey('text', $processedConfig['top_banner']);
|
||||||
|
self::assertSame('Test message', $processedConfig['top_banner']['text']['fr']);
|
||||||
|
self::assertNull($processedConfig['top_banner']['color']);
|
||||||
|
self::assertNull($processedConfig['top_banner']['background_color']);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user