vendor/uvdesk/core-framework/Dashboard/AsideTemplate.php line 20

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Dashboard;
  3. use Twig\Environment as TwigEnvironment;
  4. use Symfony\Component\HttpFoundation\RequestStack;
  5. use Webkul\UVDesk\CoreFrameworkBundle\Services\UserService;
  6. use Webkul\UVDesk\CoreFrameworkBundle\Framework\ExtendableComponentInterface;
  7. use Webkul\UVDesk\CoreFrameworkBundle\Dashboard\Segments\PanelSidebarInterface;
  8. use Webkul\UVDesk\CoreFrameworkBundle\Dashboard\Segments\PanelSidebarItemInterface;
  9. class AsideTemplate implements ExtendableComponentInterface
  10. {
  11. const SECTION_TEMPLATE = '<div class="uv-brick"><div class="uv-brick-head"><h6>[[ TITLE ]]</h6><p>[[ DESCRIPTION ]]</p></div><div class="uv-brick-section">[[ COLLECTION ]]</div></div>';
  12. const SECTION_ITEM_TEMPLATE = '<a href="[[ PATH ]]"><div class="uv-brick-container"><div class="uv-brick-icon">[[ SVG ]]</div><p>[[ TITLE ]]</p></div></a>';
  13. private $panelSidebars = [];
  14. private $panelSidebarItems = [];
  15. public function __construct(RequestStack $requestStack, TwigEnvironment $twig, UserService $userService)
  16. {
  17. $this->twig = $twig;
  18. $this->userService = $userService;
  19. $this->requestStack = $requestStack;
  20. }
  21. public function addPanelSidebar(PanelSidebarInterface $panelSidebar, $tags = [])
  22. {
  23. $this->panelSidebars[get_class($panelSidebar)] = $panelSidebar;
  24. }
  25. public function addPanelSidebarItem(PanelSidebarItemInterface $panelSidebarItem, $tags = [])
  26. {
  27. $this->panelSidebarItems[get_class($panelSidebarItem)] = $panelSidebarItem;
  28. }
  29. public function renderSidebar($sidebarReference)
  30. {
  31. $sidebar = [
  32. 'title' => null,
  33. 'collection' => [],
  34. ];
  35. if (!empty($this->panelSidebars[$sidebarReference])) {
  36. $sidebar['title'] = $sidebarReference::getTitle();
  37. $route = $this->requestStack->getCurrentRequest()->get('_route');
  38. foreach ($this->panelSidebarItems as $itemReference => $item) {
  39. if ($item::getSidebarReferenceId() == $sidebarReference) {
  40. $supportedRoutes = array_unique(array_merge((array) $item::getRouteName(), $item::getSupportedRoutes()));
  41. if (null == $item::getRoles()) {
  42. $sidebar['collection'][] = [
  43. 'title' => $item::getTitle(),
  44. 'routeName' => $item::getRouteName(),
  45. 'isActive' => in_array($route, $supportedRoutes),
  46. ];
  47. } else {
  48. foreach ($item::getRoles() as $requiredPermission) {
  49. if ($this->userService->isAccessAuthorized($requiredPermission)) {
  50. $sidebar['collection'][] = [
  51. 'title' => $item::getTitle(),
  52. 'routeName' => $item::getRouteName(),
  53. 'isActive' => in_array($route, $supportedRoutes),
  54. ];
  55. break;
  56. }
  57. }
  58. }
  59. }
  60. }
  61. } else {
  62. $sidebar['title'] = $sidebarReference::getTitle();
  63. $route = $this->requestStack->getCurrentRequest()->get('_route');
  64. foreach ($this->panelSidebarItems as $itemReference => $item) {
  65. if ($item::getSidebarReferenceId() == $sidebarReference) {
  66. $supportedRoutes = array_unique(array_merge((array) $item::getRouteName(), $item::getSupportedRoutes()));
  67. if (null == $item::getRoles()) {
  68. $sidebar['collection'][] = [
  69. 'title' => $item::getTitle(),
  70. 'routeName' => $item::getRouteName(),
  71. 'isActive' => in_array($route, $supportedRoutes),
  72. ];
  73. } else {
  74. foreach ($item::getRoles() as $requiredPermission) {
  75. if ($this->userService->isAccessAuthorized($requiredPermission)) {
  76. $sidebar['collection'][] = [
  77. 'title' => $item::getTitle(),
  78. 'routeName' => $item::getRouteName(),
  79. 'isActive' => in_array($route, $supportedRoutes),
  80. ];
  81. break;
  82. }
  83. }
  84. }
  85. }
  86. }
  87. }
  88. // Sort sidebar items alphabatically
  89. usort($sidebar['collection'], function ($item_1, $item_2) {
  90. return strcasecmp($item_1['title'], $item_2['title']);
  91. });
  92. return $this->twig->render('@UVDeskCoreFramework/Templates/aside.html.twig', ['sidebar' => $sidebar]);
  93. }
  94. }