added database driven system configurations with admin screen (#647)
This commit is contained in:
@@ -11,13 +11,12 @@ namespace App\DependencyInjection;
|
||||
|
||||
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
|
||||
/**
|
||||
* This class that loads and manages the Kimai configuration and container parameter.
|
||||
*/
|
||||
class AppExtension extends Extension implements PrependExtensionInterface
|
||||
class AppExtension extends Extension
|
||||
{
|
||||
/**
|
||||
* @param array $configs
|
||||
@@ -34,8 +33,8 @@ class AppExtension extends Extension implements PrependExtensionInterface
|
||||
}
|
||||
|
||||
// safe alternatives to %kernel.project_dir%
|
||||
$container->setParameter('kimai.data_dir', $container->getParameter('kernel.project_dir') . '/var/data');
|
||||
$container->setParameter('kimai.plugin_dir', $container->getParameter('kernel.project_dir') . '/var/plugins');
|
||||
$container->setParameter('kimai.data_dir', $config['data_dir']);
|
||||
$container->setParameter('kimai.plugin_dir', $config['plugin_dir']);
|
||||
|
||||
$container->setParameter('kimai.languages', $config['languages']);
|
||||
$container->setParameter('kimai.calendar', $config['calendar']);
|
||||
@@ -47,7 +46,12 @@ class AppExtension extends Extension implements PrependExtensionInterface
|
||||
$this->createPermissionParameter($config['permissions'], $container);
|
||||
$this->createThemeParameter($config['theme'], $container);
|
||||
$this->createUserParameter($config['user'], $container);
|
||||
$this->createTimesheetParameter($config['timesheet'], $container);
|
||||
|
||||
$container->setParameter('kimai.config', $config);
|
||||
|
||||
$container->setParameter('kimai.timesheet', $config['timesheet']);
|
||||
$container->setParameter('kimai.timesheet.rates', $config['timesheet']['rates']);
|
||||
$container->setParameter('kimai.timesheet.rounding', $config['timesheet']['rounding']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -112,47 +116,6 @@ class AppExtension extends Extension implements PrependExtensionInterface
|
||||
$container->setParameter('kimai.fosuser', $config);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $config
|
||||
* @param ContainerBuilder $container
|
||||
*/
|
||||
protected function createTimesheetParameter(array $config, ContainerBuilder $container)
|
||||
{
|
||||
$container->setParameter('kimai.timesheet.rules', $config['rules']);
|
||||
$container->setParameter('kimai.timesheet.rates', $config['rates']);
|
||||
$container->setParameter('kimai.timesheet.rounding', $config['rounding']);
|
||||
$container->setParameter('kimai.timesheet.duration_only', $config['duration_only']);
|
||||
$container->setParameter('kimai.timesheet.markdown', $config['markdown_content']);
|
||||
$container->setParameter('kimai.timesheet.active_entries.soft_limit', $config['active_entries']['soft_limit']);
|
||||
$container->setParameter('kimai.timesheet.active_entries.hard_limit', $config['active_entries']['hard_limit']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ContainerBuilder $container
|
||||
*/
|
||||
public function prepend(ContainerBuilder $container)
|
||||
{
|
||||
/*
|
||||
$configuration = new Configuration();
|
||||
$configs = $container->getExtensionConfig($this->getAlias());
|
||||
try {
|
||||
$config = $this->processConfiguration($configuration, $configs);
|
||||
} catch (InvalidConfigurationException $e) {
|
||||
trigger_error('Found invalid "kimai" configuration: ' . $e->getMessage());
|
||||
$config = [];
|
||||
}
|
||||
|
||||
$container->prependExtensionConfig(
|
||||
'twig',
|
||||
[
|
||||
'globals' => [
|
||||
'duration_only' => $config['timesheet']['duration_only'],
|
||||
],
|
||||
]
|
||||
);
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
||||
@@ -25,12 +25,8 @@ class TwigContextCompilerPass implements CompilerPassInterface
|
||||
{
|
||||
$twig = $container->getDefinition('twig');
|
||||
$theme = $container->getParameter('kimai.theme');
|
||||
$durationOnly = $container->getParameter('kimai.timesheet.duration_only');
|
||||
|
||||
$twig->addMethodCall('addGlobal', ['kimai_context', array_merge($theme, [
|
||||
'active_warning' => $container->getParameter('kimai.timesheet.active_entries.soft_limit')
|
||||
])]);
|
||||
$twig->addMethodCall('addGlobal', ['duration_only', $durationOnly]);
|
||||
$twig->addMethodCall('addGlobal', ['kimai_context', $theme]);
|
||||
|
||||
if ($container->hasDefinition('twig.loader.native_filesystem')) {
|
||||
$definition = $container->getDefinition('twig.loader.native_filesystem');
|
||||
|
||||
@@ -32,6 +32,24 @@ class Configuration implements ConfigurationInterface
|
||||
|
||||
$rootNode
|
||||
->children()
|
||||
->scalarNode('data_dir')
|
||||
->isRequired()
|
||||
->validate()
|
||||
->ifTrue(function ($value) {
|
||||
return !file_exists($value);
|
||||
})
|
||||
->thenInvalid('Data directory does not exist')
|
||||
->end()
|
||||
->end()
|
||||
->scalarNode('plugin_dir')
|
||||
->isRequired()
|
||||
->validate()
|
||||
->ifTrue(function ($value) {
|
||||
return !file_exists($value);
|
||||
})
|
||||
->thenInvalid('Plugin directory does not exist')
|
||||
->end()
|
||||
->end()
|
||||
->append($this->getUserNode())
|
||||
->append($this->getTimesheetNode())
|
||||
->append($this->getInvoiceNode())
|
||||
@@ -85,7 +103,6 @@ class Configuration implements ConfigurationInterface
|
||||
->scalarNode('mode')
|
||||
->defaultValue('default')
|
||||
->validate()
|
||||
->thenInvalid('Chosen rounding mode is invalid')
|
||||
->ifTrue(function ($value) {
|
||||
$class = 'App\\Timesheet\\Rounding\\' . ucfirst($value) . 'Rounding';
|
||||
if (class_exists($class)) {
|
||||
|
||||
Reference in New Issue
Block a user