From 6633c550f591f826fdf58292a8d429110cb934af Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Tue, 23 Oct 2018 23:59:38 +0200 Subject: [PATCH] user-profile - sidebar links and language settings (#369) --- config/packages/admin_lte.yaml | 4 +- config/routes.yaml | 7 --- config/services.yaml | 10 ++-- src/Constants.php | 4 ++ src/Controller/HomepageController.php | 44 +++++++++++++++ src/EventSubscriber/MenuBuilderSubscriber.php | 4 -- .../RedirectToLocaleSubscriber.php | 14 ++++- .../UserPreferenceSubscriber.php | 19 ++++--- src/Form/Type/LanguageType.php | 28 ++++++++-- src/Twig/Extensions.php | 1 + templates/macros/widgets.html.twig | 3 ++ templates/sidebar/home.html.twig | 33 ++++++++---- templates/sidebar/settings.html.twig | 54 ++++++++++++++----- tests/Controller/ActivityControllerTest.php | 5 ++ tests/Controller/HomepageControllerTest.php | 53 ++++++++++++++++++ tests/Controller/ProfileControllerTest.php | 4 ++ tests/Controller/SidebarControllerTest.php | 5 +- tests/Controller/TimesheetControllerTest.php | 16 ++++-- tests/Twig/ExtensionsTest.php | 2 +- translations/messages.ru.xliff | 2 +- translations/sidebar.ar.xliff | 28 +--------- translations/sidebar.de.xliff | 32 +++-------- translations/sidebar.en.xliff | 32 +++-------- translations/sidebar.es.xliff | 28 +--------- translations/sidebar.fr.xliff | 28 +--------- translations/sidebar.it.xliff | 28 +--------- translations/sidebar.ru.xliff | 30 ++--------- var/docs/migration_v1.md | 4 +- 28 files changed, 280 insertions(+), 242 deletions(-) create mode 100644 src/Controller/HomepageController.php create mode 100644 tests/Controller/HomepageControllerTest.php diff --git a/config/packages/admin_lte.yaml b/config/packages/admin_lte.yaml index 1ac9a8da..6d08d81d 100644 --- a/config/packages/admin_lte.yaml +++ b/config/packages/admin_lte.yaml @@ -23,7 +23,7 @@ admin_lte: # https://github.com/kevinpapst/AdminLTEBundle/blob/master/Resources/docs/control_sidebar.md control_sidebar: settings: - icon: "fas fa-cogs" + icon: "fas fa-user" controller: 'App\Controller\SidebarController::settingsAction' home: icon: "fas fa-question-circle" @@ -31,7 +31,7 @@ admin_lte: routes: adminlte_profile: user_profile - adminlte_welcome: dashboard + adminlte_welcome: homepage adminlte_login: fos_user_security_login adminlte_login_check: fos_user_security_check adminlte_registration: fos_user_registration_register diff --git a/config/routes.yaml b/config/routes.yaml index 250b0a6e..ce520971 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -4,10 +4,3 @@ home: _controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction route: homepage permanent: true - -homepage: - path: /{_locale} - defaults: - _controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction - route: timesheet - permanent: true diff --git a/config/services.yaml b/config/services.yaml index 93ff2f4a..81e9f042 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -33,10 +33,7 @@ services: # ================================================================================ App\EventSubscriber\RedirectToLocaleSubscriber: - class: App\EventSubscriber\RedirectToLocaleSubscriber arguments: ['@router', '%app_locales%', '%locale%'] - tags: - - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } App\Calendar\Service: arguments: @@ -81,12 +78,11 @@ services: # FORMS # ================================================================================ - # form type to edit user roles App\Form\Type\UserRoleType: - class: App\Form\Type\UserRoleType arguments: ["%security.role_hierarchy.roles%"] - tags: - - { name: form.type } + + App\Form\Type\LanguageType: + arguments: ["%app_locales%"] App\Form\Extension\DocumentationLinkExtension: tags: diff --git a/src/Constants.php b/src/Constants.php index ed03a2e2..e41e115c 100644 --- a/src/Constants.php +++ b/src/Constants.php @@ -30,4 +30,8 @@ class Constants * Used in multiple views */ public const GITHUB = 'https://github.com/kevinpapst/kimai2/'; + /** + * Used in multiple views + */ + public const HOMEPAGE = 'https://v2.kimai.org'; } diff --git a/src/Controller/HomepageController.php b/src/Controller/HomepageController.php new file mode 100644 index 00000000..9db36a15 --- /dev/null +++ b/src/Controller/HomepageController.php @@ -0,0 +1,44 @@ +getUser(); + $locale = $request->getLocale(); + $language = $user->getPreferenceValue('language', $locale); + + return $this->redirectToRoute($route, ['_locale' => $language]); + } +} diff --git a/src/EventSubscriber/MenuBuilderSubscriber.php b/src/EventSubscriber/MenuBuilderSubscriber.php index 75eacea7..0067fec8 100644 --- a/src/EventSubscriber/MenuBuilderSubscriber.php +++ b/src/EventSubscriber/MenuBuilderSubscriber.php @@ -89,10 +89,6 @@ class MenuBuilderSubscriber implements EventSubscriberInterface ); } - $event->addItem( - new MenuItemModel('logout', 'menu.logout', 'fos_user_security_logout', [], 'fas fa-sign-out-alt') - ); - $this->activateByRoute( $event->getRequest()->get('_route'), $event->getItems() diff --git a/src/EventSubscriber/RedirectToLocaleSubscriber.php b/src/EventSubscriber/RedirectToLocaleSubscriber.php index 53833e64..55df4b9a 100644 --- a/src/EventSubscriber/RedirectToLocaleSubscriber.php +++ b/src/EventSubscriber/RedirectToLocaleSubscriber.php @@ -9,8 +9,10 @@ namespace App\EventSubscriber; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; /** @@ -21,7 +23,7 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface; * * @author Oleg Voronkovich */ -class RedirectToLocaleSubscriber +class RedirectToLocaleSubscriber implements EventSubscriberInterface { /** * @var UrlGeneratorInterface @@ -70,6 +72,16 @@ class RedirectToLocaleSubscriber $this->locales = array_unique($this->locales); } + /** + * @return array + */ + public static function getSubscribedEvents(): array + { + return [ + KernelEvents::REQUEST => ['onKernelRequest'] + ]; + } + /** * @param GetResponseEvent $event */ diff --git a/src/EventSubscriber/UserPreferenceSubscriber.php b/src/EventSubscriber/UserPreferenceSubscriber.php index 28a30630..88d63aa3 100644 --- a/src/EventSubscriber/UserPreferenceSubscriber.php +++ b/src/EventSubscriber/UserPreferenceSubscriber.php @@ -13,11 +13,13 @@ use App\Entity\User; use App\Entity\UserPreference; use App\Event\UserPreferenceEvent; use App\Form\Type\CalendarViewType; +use App\Form\Type\LanguageType; use App\Form\Type\SkinType; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\IntegerType; +use Symfony\Component\Form\Extension\Core\Type\TimezoneType; use Symfony\Component\HttpKernel\Event\KernelEvent; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; @@ -70,6 +72,16 @@ class UserPreferenceSubscriber implements EventSubscriberInterface ->setValue(0) ->setType(IntegerType::class) ->addConstraint(new Range(['min' => 0])), +/* + (new UserPreference()) + ->setName('timezone') + ->setValue(date_default_timezone_get()) + ->setType(TimezoneType::class), +*/ + (new UserPreference()) + ->setName('language') + ->setValue('en') // TODO fetch from services.yaml + ->setType(LanguageType::class), (new UserPreference()) ->setName(UserPreference::SKIN) @@ -100,13 +112,6 @@ class UserPreferenceSubscriber implements EventSubscriberInterface ->setName('calendar.initial_view') ->setValue(CalendarViewType::DEFAULT_VIEW) ->setType(CalendarViewType::class), - - /* - (new UserPreference()) - ->setName('language') - ->setValue('de') - ->setType(LanguageType::class), - */ ]; } diff --git a/src/Form/Type/LanguageType.php b/src/Form/Type/LanguageType.php index b3237e87..f2d3b86a 100644 --- a/src/Form/Type/LanguageType.php +++ b/src/Form/Type/LanguageType.php @@ -19,16 +19,36 @@ use Symfony\Component\OptionsResolver\OptionsResolver; */ class LanguageType extends AbstractType { + /** + * @var string[] + */ + private $locales = []; + + /** + * @param array|string $locales + */ + public function __construct($locales) + { + if (!is_array($locales)) { + $locales = explode('|', $locales); + } + + $this->locales = $locales; + } + /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { + $choices = []; + foreach ($this->locales as $key) { + $name = ucfirst(Intl::getLocaleBundle()->getLocaleName($key, $key)); + $choices[$name] = $key; + } + $resolver->setDefaults([ - 'choices' => [ - Intl::getLocaleBundle()->getLocaleName('de', 'de') => 'de', - Intl::getLocaleBundle()->getLocaleName('en', 'en') => 'en', - ] + 'choices' => $choices ]); } diff --git a/src/Twig/Extensions.php b/src/Twig/Extensions.php index 9be1e133..4c12ba8e 100644 --- a/src/Twig/Extensions.php +++ b/src/Twig/Extensions.php @@ -84,6 +84,7 @@ class Extensions extends \Twig_Extension 'trash' => 'far fa-trash-alt', 'user' => 'fas fa-user', 'visibility' => 'far fa-eye', + 'settings' => 'fas fa-wrench', ]; /** diff --git a/templates/macros/widgets.html.twig b/templates/macros/widgets.html.twig index 7fd39a8d..809c9419 100644 --- a/templates/macros/widgets.html.twig +++ b/templates/macros/widgets.html.twig @@ -1,3 +1,6 @@ +{% macro icon(icon) %} + +{% endmacro %} {% macro page_actions(tools) %}