user-profile - sidebar links and language settings (#369)
This commit is contained in:
@@ -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';
|
||||
}
|
||||
|
||||
44
src/Controller/HomepageController.php
Normal file
44
src/Controller/HomepageController.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Kimai time-tracking app.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\User;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
/**
|
||||
* Homepage controller is a redirect controller with user specific logic.
|
||||
*
|
||||
* @Route(path="/homepage")
|
||||
* @Security("is_granted('ROLE_USER')")
|
||||
*/
|
||||
class HomepageController extends Controller
|
||||
{
|
||||
/**
|
||||
* @Route(path="", defaults={}, name="homepage", methods={"GET"})
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Symfony\Component\HttpFoundation\RedirectResponse
|
||||
*/
|
||||
public function indexAction(Request $request)
|
||||
{
|
||||
// make me configurable via UserPreference
|
||||
$route = 'timesheet';
|
||||
|
||||
/** @var User $user */
|
||||
$user = $this->getUser();
|
||||
$locale = $request->getLocale();
|
||||
$language = $user->getPreferenceValue('language', $locale);
|
||||
|
||||
return $this->redirectToRoute($route, ['_locale' => $language]);
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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 <oleg-voronkovich@yandex.ru>
|
||||
*/
|
||||
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
|
||||
*/
|
||||
|
||||
@@ -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),
|
||||
*/
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -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',
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user