do not display admin menu if it has no children (#500)

This commit is contained in:
Kevin Papst
2019-01-17 01:25:00 +01:00
committed by GitHub
parent 825d31af20
commit 5d5b971f57
9 changed files with 87 additions and 96 deletions

View File

@@ -10,23 +10,48 @@
namespace App\Event; namespace App\Event;
use KevinPapst\AdminLTEBundle\Model\MenuItemModel; use KevinPapst\AdminLTEBundle\Model\MenuItemModel;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpFoundation\Request;
/** /**
* The ConfigureAdminMenuEvent is used for populating the administration navigation. * The ConfigureAdminMenuEvent is used for populating the administration navigation.
*/ */
class ConfigureAdminMenuEvent extends ConfigureMenuEvent class ConfigureAdminMenuEvent extends Event
{ {
public const CONFIGURE = 'app.admin_menu_configure'; public const CONFIGURE = 'app.admin_menu_configure';
/** /**
* This function will either return a MenuItem or null. * @var Request
* */
* In case this returns null, the user has not the ROLE_ADMIN. private $request;
* /**
* @return MenuItemModel|null * @var MenuItemModel
*/
private $menu;
/**
* @param Request $request
* @param MenuItemModel $menu
*/
public function __construct(Request $request, MenuItemModel $menu)
{
$this->request = $request;
$this->menu = $menu;
}
/**
* @return Request
*/
public function getRequest()
{
return $this->request;
}
/**
* @return MenuItemModel
*/ */
public function getAdminMenu() public function getAdminMenu()
{ {
return $this->getMenu()->getRootItem('admin'); return $this->menu;
} }
} }

View File

@@ -9,10 +9,51 @@
namespace App\Event; namespace App\Event;
use KevinPapst\AdminLTEBundle\Event\SidebarMenuEvent;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpFoundation\Request;
/** /**
* The ConfigureMainMenuEvent is used for populating the main navigation. * The ConfigureMainMenuEvent is used for populating the main navigation.
*/ */
class ConfigureMainMenuEvent extends ConfigureMenuEvent class ConfigureMainMenuEvent extends Event
{ {
public const CONFIGURE = 'app.main_menu_configure'; public const CONFIGURE = 'app.main_menu_configure';
/**
* @var Request
*/
private $request;
/**
* @var SidebarMenuEvent
*/
private $event;
/**
* @param Request $request
* @param SidebarMenuEvent $event
*/
public function __construct(
Request $request,
SidebarMenuEvent $event
) {
$this->request = $request;
$this->event = $event;
}
/**
* @return Request
*/
public function getRequest()
{
return $this->request;
}
/**
* @return SidebarMenuEvent
*/
public function getMenu()
{
return $this->event;
}
} }

View File

@@ -1,58 +0,0 @@
<?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\Event;
use KevinPapst\AdminLTEBundle\Event\SidebarMenuEvent;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpFoundation\Request;
/**
* The ConfigureMenuEvent is used for populating navigations.
*/
abstract class ConfigureMenuEvent extends Event
{
/**
* @var Request
*/
private $request;
/**
* @var SidebarMenuEvent
*/
private $event;
/**
* ConfigureMenuEvent constructor.
* @param Request $request
* @param SidebarMenuEvent $event
*/
public function __construct(
Request $request,
SidebarMenuEvent $event
) {
$this->request = $request;
$this->event = $event;
}
/**
* @return Request
*/
public function getRequest()
{
return $this->request;
}
/**
* @return SidebarMenuEvent
*/
public function getMenu()
{
return $this->event;
}
}

View File

@@ -61,8 +61,6 @@ class MenuBuilderSubscriber implements EventSubscriberInterface
public function onSetupNavbar(SidebarMenuEvent $event) public function onSetupNavbar(SidebarMenuEvent $event)
{ {
$request = $event->getRequest(); $request = $event->getRequest();
$isLoggedIn = $this->security->isGranted('IS_AUTHENTICATED_REMEMBERED');
$isTeamlead = $isLoggedIn && $this->security->isGranted('ROLE_TEAMLEAD');
$event->addItem( $event->addItem(
new MenuItemModel('dashboard', 'menu.homepage', 'dashboard', [], 'fas fa-tachometer-alt') new MenuItemModel('dashboard', 'menu.homepage', 'dashboard', [], 'fas fa-tachometer-alt')
@@ -76,17 +74,18 @@ class MenuBuilderSubscriber implements EventSubscriberInterface
) )
); );
if ($isTeamlead) { $admin = new MenuItemModel('admin', 'menu.admin', '', [], 'fas fa-wrench');
$admin = new MenuItemModel('admin', 'menu.admin', '', [], 'fas fa-wrench');
$event->addItem($admin);
$this->eventDispatcher->dispatch( $this->eventDispatcher->dispatch(
ConfigureAdminMenuEvent::CONFIGURE, ConfigureAdminMenuEvent::CONFIGURE,
new ConfigureAdminMenuEvent( new ConfigureAdminMenuEvent(
$request, $request,
$event $admin
) )
); );
if ($admin->hasChildren()) {
$event->addItem($admin);
} }
$this->activateByRoute( $this->activateByRoute(

View File

@@ -32,7 +32,6 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
*/ */
class TimesheetEditForm extends AbstractType class TimesheetEditForm extends AbstractType
{ {
/** /**
* @var CustomerRepository * @var CustomerRepository
*/ */

View File

@@ -39,6 +39,7 @@ class UserRepository extends AbstractRepository implements UserLoaderInterface
return parent::findOneBy($criteria, $orderBy); return parent::findOneBy($criteria, $orderBy);
} }
/** /**
* @return int * @return int
*/ */

View File

@@ -10,7 +10,6 @@
namespace App\Tests\EventSubscriber; namespace App\Tests\EventSubscriber;
use App\Event\ConfigureAdminMenuEvent; use App\Event\ConfigureAdminMenuEvent;
use KevinPapst\AdminLTEBundle\Event\SidebarMenuEvent;
use KevinPapst\AdminLTEBundle\Model\MenuItemModel; use KevinPapst\AdminLTEBundle\Model\MenuItemModel;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@@ -25,15 +24,10 @@ class ConfigureAdminMenuEventTest extends TestCase
$request = new Request(); $request = new Request();
$request->setLocale('de'); $request->setLocale('de');
$event = new SidebarMenuEvent($request);
$admin = new MenuItemModel('admin', 'foo', 'bar'); $admin = new MenuItemModel('admin', 'foo', 'bar');
$event->addItem($admin); $sut = new ConfigureAdminMenuEvent($request, $admin);
$event->addItem(new MenuItemModel('foo', 'foo', 'bar'));
$sut = new ConfigureAdminMenuEvent($request, $event);
$this->assertEquals($request, $sut->getRequest()); $this->assertEquals($request, $sut->getRequest());
$this->assertEquals($event, $sut->getMenu());
$this->assertEquals($admin, $sut->getAdminMenu()); $this->assertEquals($admin, $sut->getAdminMenu());
} }
} }

View File

@@ -52,7 +52,6 @@ class ActivityInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser($user) ->setUser($user)
->setActivity($activity1) ->setActivity($activity1)
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$timesheet2 = new Timesheet(); $timesheet2 = new Timesheet();
$timesheet2 $timesheet2
@@ -61,7 +60,6 @@ class ActivityInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser($user) ->setUser($user)
->setActivity($activity2) ->setActivity($activity2)
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$timesheet3 = new Timesheet(); $timesheet3 = new Timesheet();
$timesheet3 $timesheet3
@@ -70,7 +68,6 @@ class ActivityInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser($user) ->setUser($user)
->setActivity($activity1) ->setActivity($activity1)
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$timesheet4 = new Timesheet(); $timesheet4 = new Timesheet();
$timesheet4 $timesheet4
@@ -79,7 +76,6 @@ class ActivityInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser($user) ->setUser($user)
->setActivity($activity2) ->setActivity($activity2)
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$timesheet5 = new Timesheet(); $timesheet5 = new Timesheet();
$timesheet5 $timesheet5
@@ -88,7 +84,6 @@ class ActivityInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser(new User()) ->setUser(new User())
->setActivity(new Activity()) ->setActivity(new Activity())
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$entries = [$timesheet, $timesheet2, $timesheet3, $timesheet4, $timesheet5]; $entries = [$timesheet, $timesheet2, $timesheet3, $timesheet4, $timesheet5];

View File

@@ -52,7 +52,6 @@ class UserInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser($user1) ->setUser($user1)
->setActivity($activity) ->setActivity($activity)
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$timesheet2 = new Timesheet(); $timesheet2 = new Timesheet();
$timesheet2 $timesheet2
@@ -61,7 +60,6 @@ class UserInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser($user2) ->setUser($user2)
->setActivity($activity) ->setActivity($activity)
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$timesheet3 = new Timesheet(); $timesheet3 = new Timesheet();
$timesheet3 $timesheet3
@@ -70,7 +68,6 @@ class UserInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser($user1) ->setUser($user1)
->setActivity($activity) ->setActivity($activity)
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$timesheet4 = new Timesheet(); $timesheet4 = new Timesheet();
$timesheet4 $timesheet4
@@ -79,7 +76,6 @@ class UserInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser($user2) ->setUser($user2)
->setActivity($activity) ->setActivity($activity)
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$timesheet5 = new Timesheet(); $timesheet5 = new Timesheet();
$timesheet5 $timesheet5
@@ -88,7 +84,6 @@ class UserInvoiceCalculatorTest extends AbstractCalculatorTest
->setUser(new User()) ->setUser(new User())
->setActivity($activity) ->setActivity($activity)
->setProject((new Project())->setName('bar')); ->setProject((new Project())->setName('bar'));
;
$entries = [$timesheet, $timesheet2, $timesheet3, $timesheet4, $timesheet5]; $entries = [$timesheet, $timesheet2, $timesheet3, $timesheet4, $timesheet5];