src/webkul/uvdesk/core-framework/Dashboard/AsideTemplate.php line 21

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. private $isOrganized = false;
  16. public function __construct(RequestStack $requestStack, TwigEnvironment $twig, UserService $userService)
  17. {
  18. $this->twig = $twig;
  19. $this->userService = $userService;
  20. $this->requestStack = $requestStack;
  21. }
  22. public function addPanelSidebar(PanelSidebarInterface $panelSidebar, $tags = [])
  23. {
  24. $this->panelSidebars[get_class($panelSidebar)] = $panelSidebar;
  25. }
  26. public function addPanelSidebarItem(PanelSidebarItemInterface $panelSidebarItem, $tags = [])
  27. {
  28. $this->panelSidebarItems[get_class($panelSidebarItem)] = $panelSidebarItem;
  29. }
  30. public function renderSidebar($sidebarReference)
  31. {
  32. $sidebar = [
  33. 'title' => null,
  34. 'collection' => [],
  35. ];
  36. if (!empty($this->panelSidebars[$sidebarReference])) {
  37. $sidebar['title'] = $sidebarReference::getTitle();
  38. $route = $this->requestStack->getCurrentRequest()->get('_route');
  39. // echo"<pre>";
  40. // var_dump($this->panelSidebarItems);
  41. // echo"</pre>";
  42. foreach ($this->panelSidebarItems as $itemReference => $item) {
  43. if ($item::getSidebarReferenceId() == $sidebarReference) {
  44. $supportedRoutes = array_unique(array_merge((array) $item::getRouteName(), $item::getSupportedRoutes()));
  45. if (null == $item::getRoles()) {
  46. $sidebar['collection'][] = [
  47. 'title' => $item::getTitle(),
  48. 'routeName' => $item::getRouteName(),
  49. 'isActive' => in_array($route, $supportedRoutes),
  50. ];
  51. } else {
  52. foreach ($item::getRoles() as $requiredPermission) {
  53. if ($this->userService->isAccessAuthorized($requiredPermission)) {
  54. $sidebar['collection'][] = [
  55. 'title' => $item::getTitle(),
  56. 'routeName' => $item::getRouteName(),
  57. 'isActive' => in_array($route, $supportedRoutes),
  58. ];
  59. break;
  60. }
  61. }
  62. }
  63. }
  64. }
  65. } else {
  66. $sidebar['title'] = $sidebarReference::getTitle();
  67. $route = $this->requestStack->getCurrentRequest()->get('_route');
  68. foreach ($this->panelSidebarItems as $itemReference => $item) {
  69. if ($item::getSidebarReferenceId() == $sidebarReference) {
  70. $supportedRoutes = array_unique(array_merge((array) $item::getRouteName(), $item::getSupportedRoutes()));
  71. if (null == $item::getRoles()) {
  72. $sidebar['collection'][] = [
  73. 'title' => $item::getTitle(),
  74. 'routeName' => $item::getRouteName(),
  75. 'isActive' => in_array($route, $supportedRoutes),
  76. ];
  77. } else {
  78. foreach ($item::getRoles() as $requiredPermission) {
  79. if ($this->userService->isAccessAuthorized($requiredPermission)) {
  80. $sidebar['collection'][] = [
  81. 'title' => $item::getTitle(),
  82. 'routeName' => $item::getRouteName(),
  83. 'isActive' => in_array($route, $supportedRoutes),
  84. ];
  85. break;
  86. }
  87. }
  88. }
  89. }
  90. }
  91. }
  92. // dd($sidebar);
  93. // Sort sidebar items alphabatically
  94. usort($sidebar['collection'], function ($item_1, $item_2) {
  95. return strcasecmp($item_1['title'], $item_2['title']);
  96. });
  97. return $this->twig->render('@UVDeskCoreFramework/Templates/aside.html.twig', [ 'sidebar' => $sidebar ]);
  98. }
  99. }