<?php
namespace App\Controller\Admin;
use App\Entity\Country;
use App\Entity\Department;
use App\Entity\Digest;
use App\Entity\GameProvider;
use App\Entity\Invoice;
use App\Entity\InvoiceChatChannel;
use App\Entity\InvoicePeriod;
use App\Entity\Language;
use App\Entity\PaymentProvider;
use App\Entity\SalaryPeriod;
use App\Entity\SalaryPeriodExport;
use App\Entity\User;
use App\Entity\UserAnalytics;
use App\Entity\UserNotification;
use App\Entity\UserShiftPeriod;
use App\Model\UserRoles;
use App\Repository\UserNotificationRepository;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;
use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class DashboardController extends AbstractDashboardController
{
private UserNotificationRepository $userNotificationRepository;
private UploaderHelper $uploaderHelper;
private AdminUrlGenerator $adminUrlGenerator;
public function __construct(UserNotificationRepository $userNotificationRepository, UploaderHelper $uploaderHelper, AdminUrlGenerator $adminUrlGenerator)
{
$this->userNotificationRepository = $userNotificationRepository;
$this->uploaderHelper = $uploaderHelper;
$this->adminUrlGenerator = $adminUrlGenerator;
}
/**
* @Route("/admin", name="admin")
*/
public function index(): Response
{
return $this->redirect($this->adminUrlGenerator->setController(UserInvoicePeriodCrudController::class)->generateUrl());
}
public function configureAssets(): Assets
{
$assets = parent::configureAssets();
return $assets
->addCssFile('/assets/css/main.css');
}
public function configureUserMenu(UserInterface $user): UserMenu
{
if (!$user instanceof User) {
throw new \Exception('Wrong user');
}
$userMenu = parent::configureUserMenu($user);
$userMenu->setAvatarUrl($this->uploaderHelper->asset($user, 'imageFile'));
// if ($user instanceof User) {
$profileUrl = $this->adminUrlGenerator
->setController(UserCrudController::class)
->setAction('edit')
->setEntityId(
$user->getId()
)->generateUrl();
$userMenu->addMenuItems(
[
MenuItem::linkToUrl('My Profile', 'fa fa-id-card', $profileUrl),
]
);
// }
return $userMenu;
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
// the name visible to end users
->setTitle('Eyeconweb Manager Quality')
// the path defined in this method is passed to the Twig asset() function
->setFaviconPath('favicon.svg')
// the domain used by default is 'messages'
// ->setTranslationDomain('admin')
// there's no need to define the "text direction" explicitly because
// its default value is inferred dynamically from the user locale
->setTextDirection('ltr')
// set this option if you prefer the page content to span the entire
// browser width, instead of the default design which sets a max width
->renderContentMaximized()
// set this option if you prefer the sidebar (which contains the main menu)
// to be displayed as a narrow column instead of the default expanded design
->renderSidebarMinimized()
// by default, all backend URLs include a signature hash. If a user changes any
// query parameter (to "hack" the backend) the signature won't match and EasyAdmin
// triggers an error. If this causes any issue in your backend, call this method
// to disable this feature and remove all URL signature checks
->disableUrlSignatures()
->generateRelativeUrls();
}
public function configureMenuItems(): iterable
{
/** @var User $user */
$user = $this->getUser();
if (null == $user) {
throw new AccessDeniedHttpException();
}
$countUserNotification = $this->userNotificationRepository->count(['recipient' => $user, 'read' => false]);
return [
MenuItem::linkToDashboard('Dashboard', 'fa fa-home'),
MenuItem::linkToCrud('user_shift_period.list', 'fa fa-clock', UserShiftPeriod::class),
MenuItem::linkToCrud('digest.list', 'fa fa-feed', Digest::class)->setAction('detail'),
MenuItem::linkToCrud('invoice.list', 'fa fa-list', Invoice::class),
MenuItem::linkToCrud('user_notification.list', 'fa fa-bell'.($countUserNotification > 0 ? ' text-danger' : ''), UserNotification::class),
MenuItem::linkToCrud('invoice_period.list', 'fa fa-calendar-week', InvoicePeriod::class)
->setPermission(UserRoles::ROLE_ADMIN),
MenuItem::linkToCrud('invoice_chat_channel.list', 'fa fa-network-wired', InvoiceChatChannel::class)
->setPermission(UserRoles::ROLE_SUPER_ADMIN),
MenuItem::linkToCrud('user.list', 'fa fa-user', User::class)
->setPermission(UserRoles::ROLE_SUPER_ADMIN),
MenuItem::linkToCrud('department.list', 'fa fa-user-group', Department::class)
->setPermission(UserRoles::ROLE_SUPER_ADMIN),
MenuItem::linkToCrud('country.list', 'fa fa-globe', Country::class)
->setPermission(UserRoles::ROLE_SUPER_ADMIN),
MenuItem::linkToCrud('language.list', 'fa fa-language', Language::class),
MenuItem::linkToCrud('payment_provider.list', 'fa fa-credit-card-alt', PaymentProvider::class)
->setPermission(UserRoles::ROLE_ADMIN),
MenuItem::linkToCrud('game_provider.list', 'fa fa-gamepad', GameProvider::class)
->setPermission(UserRoles::ROLE_ADMIN),
MenuItem::linkToCrud('salary_period.list', 'fa fa-money', SalaryPeriod::class)
->setPermission(UserRoles::ROLE_SUPER_ADMIN),
MenuItem::linkToCrud('salary_period_exports.list', 'fa fa-file-excel-o', SalaryPeriodExport::class)
->setPermission(UserRoles::ROLE_SUPER_ADMIN),
MenuItem::linkToCrud('user.analytics.list', 'fa fa-address-card-o', UserAnalytics::class),
];
}
}