do not display admin menu if it has no children (#500)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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(
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
|
|||||||
*/
|
*/
|
||||||
class TimesheetEditForm extends AbstractType
|
class TimesheetEditForm extends AbstractType
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var CustomerRepository
|
* @var CustomerRepository
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class UserRepository extends AbstractRepository implements UserLoaderInterface
|
|||||||
|
|
||||||
return parent::findOneBy($criteria, $orderBy);
|
return parent::findOneBy($criteria, $orderBy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user