From 90980f40f5232548a27768917e0d8daa097579bc Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Mon, 1 Jul 2019 19:37:20 +0200 Subject: [PATCH] allow to disable user preferences by permission (#895) --- src/Configuration/ThemeConfiguration.php | 10 ++++++++ src/DependencyInjection/Configuration.php | 3 +++ .../ThemeOptionsSubscriber.php | 11 +++------ .../UserPreferenceSubscriber.php | 1 - src/Twig/TitleExtension.php | 19 ++++++++------- src/Voter/UserVoter.php | 2 +- templates/base.html.twig | 6 +++++ tests/Controller/ProfileControllerTest.php | 2 +- .../DependencyInjection/AppExtensionTest.php | 1 + tests/Twig/TitleExtensionTest.php | 24 +++++++++++++++++-- 10 files changed, 58 insertions(+), 21 deletions(-) diff --git a/src/Configuration/ThemeConfiguration.php b/src/Configuration/ThemeConfiguration.php index cabc620d..fc1c344b 100644 --- a/src/Configuration/ThemeConfiguration.php +++ b/src/Configuration/ThemeConfiguration.php @@ -22,4 +22,14 @@ class ThemeConfiguration implements SystemBundleConfiguration { return (string) $this->find('select_type'); } + + public function getTitle(): ?string + { + $title = $this->find('branding.title'); + if (null === $title) { + return null; + } + + return (string) $title; + } } diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 5d9f3feb..66451ab9 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -335,6 +335,9 @@ class Configuration implements ConfigurationInterface ->scalarNode('company') ->defaultNull() ->end() + ->scalarNode('title') + ->defaultNull() + ->end() ->end() ->end() ->end() diff --git a/src/EventSubscriber/ThemeOptionsSubscriber.php b/src/EventSubscriber/ThemeOptionsSubscriber.php index 24375726..8e65e095 100644 --- a/src/EventSubscriber/ThemeOptionsSubscriber.php +++ b/src/EventSubscriber/ThemeOptionsSubscriber.php @@ -64,12 +64,13 @@ class ThemeOptionsSubscriber implements EventSubscriberInterface /** @var User $user */ $user = $this->storage->getToken()->getUser(); - $skin = ''; foreach ($user->getPreferences() as $ref) { $name = $ref->getName(); switch ($name) { case UserPreference::SKIN: - $skin = 'skin-' . $ref->getValue(); + if (!empty($ref->getValue())) { + $this->helper->setOption('skin', 'skin-' . $ref->getValue()); + } break; case 'theme.collapsed_sidebar': @@ -77,12 +78,6 @@ class ThemeOptionsSubscriber implements EventSubscriberInterface break; } } - - if (empty($skin)) { - $skin = 'skin-green'; - } - - $this->helper->setOption('skin', $skin); } /** diff --git a/src/EventSubscriber/UserPreferenceSubscriber.php b/src/EventSubscriber/UserPreferenceSubscriber.php index 0280c9d3..2998591d 100644 --- a/src/EventSubscriber/UserPreferenceSubscriber.php +++ b/src/EventSubscriber/UserPreferenceSubscriber.php @@ -97,7 +97,6 @@ class UserPreferenceSubscriber implements EventSubscriberInterface (new UserPreference()) ->setName(UserPreference::SKIN) - ->setValue('green') ->setType(SkinType::class), (new UserPreference()) diff --git a/src/Twig/TitleExtension.php b/src/Twig/TitleExtension.php index a59be8b2..50e12512 100644 --- a/src/Twig/TitleExtension.php +++ b/src/Twig/TitleExtension.php @@ -9,6 +9,7 @@ namespace App\Twig; +use App\Configuration\ThemeConfiguration; use Symfony\Contracts\Translation\TranslatorInterface; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; @@ -19,13 +20,18 @@ class TitleExtension extends AbstractExtension * @var TranslatorInterface */ protected $translator; + /** + * @var ThemeConfiguration + */ + protected $configuration; /** * @param TranslatorInterface $translator */ - public function __construct(TranslatorInterface $translator) + public function __construct(TranslatorInterface $translator, ThemeConfiguration $configuration) { $this->translator = $translator; + $this->configuration = $configuration; } /** @@ -38,13 +44,10 @@ class TitleExtension extends AbstractExtension ]; } - /** - * @param null|string $prefix - * @param string $delimiter - * @return string - */ - public function generateTitle(?string $prefix = null, string $delimiter = ' – ') + public function generateTitle(?string $prefix = null, string $delimiter = ' – '): string { - return ($prefix ?? '') . 'Kimai' . $delimiter . $this->translator->trans('time_tracking', [], 'messages'); + $title = $this->configuration->getTitle() ?? 'Kimai'; + + return ($prefix ?? '') . ($title) . $delimiter . $this->translator->trans('time_tracking', [], 'messages'); } } diff --git a/src/Voter/UserVoter.php b/src/Voter/UserVoter.php index a8a71907..4b0c693e 100644 --- a/src/Voter/UserVoter.php +++ b/src/Voter/UserVoter.php @@ -83,13 +83,13 @@ class UserVoter extends AbstractVoter // used in templates and ProfileController case self::VIEW: case self::EDIT: - case self::PREFERENCES: // always allow the user to edit these own settings if ($subject->getId() === $user->getId()) { return true; } // no break on purpose + case self::PREFERENCES: case self::PASSWORD: case self::API_TOKEN: case self::ROLES: diff --git a/templates/base.html.twig b/templates/base.html.twig index 82c47fcc..918e4e6e 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -121,6 +121,7 @@