<?php
// src/EventListener/MenuBuilderListener.php
namespace App\Event;
use Sonata\AdminBundle\Event\ConfigureMenuEvent;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use App\Entity\Content;
use App\Entity\Site;
// Sonata Menu Builder is here: /vendor/sonata-project/admin-bundle/src/Menu/MenuBuilder.php
class MenuBuilderListener
{
protected $requestStack;
protected $user;
public function __construct(RequestStack $requestStack, TokenStorageInterface $tokenStore)
{
$this->requestStack = $requestStack;
$this->user = $tokenStore->getToken()->getUser();
}
public function addMenuItems(ConfigureMenuEvent $event)
{
$menu = $event->getMenu();
$request = $this->requestStack->getCurrentRequest();
$admin_view = $request->cookies->get("admin_view");
//$session = $request->getSession();
//$admin_view = $session->get("admin_view");
$menu->setChildren([]); //clear the menu items added through yaml
if($admin_view == Site::SITE_AAR) {
$ads = $menu->addChild('ad', [
'label' => 'Ads',
'route' => 'ad_list',
])->setExtras([
'icon' => '<i class="fa fa-bar-chart"></i>',
]);
}
else {
$ads = $menu->addChild('ad', [
'label' => 'Ads'
])->setExtras([
'icon' => '<i class="fa fa-bar-chart"></i>',
]);
$ads->addChild('general_ad', [
'label' => 'Ads',
'route' => 'ad_list',
]);
$ads->addChild('curtain_ad', [
'label' => 'Curtain Ads',
'route' => 'curtainad_list',
]);
$ads->addChild('header_ad', [
'label' => 'Header Ads',
'route' => 'headerad_list',
]);
$ads->addChild('menu_ad', [
'label' => 'Menu Ads',
'route' => 'menuad_list',
]);
$ads->addChild('popout_ad', [
'label' => 'Pop-out Ads',
'route' => 'popoutad_list',
]);
$ads->addChild('video_ad', [
'label' => 'Video Ads',
'route' => 'videoad_list',
]);
}
//if(!$admin_view || $admin_view == Site::SITE_RCS) {
$admin_dashboard = $menu->addChild('admin_dashboard', [
'label' => 'Advertiser Report',
//'uri' => '/admin-dashboard',
'uri' => 'https://rooferscoffeeshop.com/admin-dashboard',
])->setExtras([
'icon' => '<i class="fa fa-map"></i>',
]);
//}
if($admin_view != Site::SITE_AAR) {
$categories = $menu->addChild('category', [
'label' => 'Categories'
])->setExtras([
'icon' => '<i class="fa fa-tag"></i>',
]);
$categories->addChild('award_category', [
'label' => 'Award Categories',
'route' => 'awardcategory_list',
]);
$categories->addChild('classified_category', [
'label' => 'Classified Categories',
'route' => 'classifiedcategory_list',
]);
$categories->addChild('classified_region', [
'label' => 'Classified Regions',
'route' => 'classifiedregion_list',
]);
$categories->addChild('contest_category', [
'label' => 'Contest Categories',
'route' => 'contestcategory_list',
]);
$categories->addChild('directory_category', [
'label' => 'Directory Categories',
'route' => 'directorycategory_list',
]);
$categories->addChild('directory_type', [
'label' => 'Directory Types',
'route' => 'directorytype_list',
]);
$categories->addChild('ebook_category', [
'label' => 'eBook Categories',
'route' => 'ebookcategory_list',
]);
$categories->addChild('general_category', [
'label' => 'General Categories',
'route' => 'generalcategory_list',
]);
$categories->addChild('interest_tag', [
'label' => 'Interest Tags',
'route' => 'interesttagcategory_list',
]);
$categories->addChild('partner_level', [
'label' => 'Partner Levels',
'route' => 'partnerlevel_list',
]);
$categories->addChild('partner_webinar_type', [
'label' => 'Partner Webinar Types',
'route' => 'partnerwebinartype_list',
]);
$categories->addChild('post_category', [
'label' => 'Post Categories',
'route' => 'postcategory_list',
]);
$categories->addChild('promo_category', [
'label' => 'Promo Categories',
'route' => 'promocategory_list',
]);
$categories->addChild('rclubperk_category', [
'label' => 'R-Club Perk Categories',
'route' => 'rclubperkcategory_list',
]);
$categories->addChild('rcs_podcast_type', [
'label' => 'RCS Podcast Types',
'route' => 'rcspodcasttype_list',
]);
$categories->addChild('access_level', [
'label' => 'RLW Access Levels',
'route' => 'accesslevel_list',
]);
$categories->addChild('rlw_category', [
'label' => 'RLW Categories',
'route' => 'rlwcategory_list',
]);
$categories->addChild('industry_category', [
'label' => 'RLW Industries',
'route' => 'industry_list',
]);
$categories->addChild('resource_type', [
'label' => 'RLW Resource Types',
'route' => 'resourcetype_list',
]);
$categories->addChild('scholarship_category', [
'label' => 'Scholarship Categories',
'route' => 'scholarshipcategory_list',
]);
$categories->addChild('video_category', [
'label' => 'Video Categories',
'route' => 'videocategory_list',
]);
$categories->addChild('webinar_type', [
'label' => 'Webinar Types',
'route' => 'webinartype_list',
]);
}
elseif($admin_view == Site::SITE_AAR) {
$categories = $menu->addChild('category', [
'label' => 'Categories'
])->setExtras([
'icon' => '<i class="fa fa-tag"></i>',
]);
$categories->addChild('aar_post_category', [
'label' => 'Post Categories',
'route' => 'aarpostcategory_list',
]);
$categories->addChild('aar_ebook_category', [
'label' => 'eBook Categories',
'route' => 'aarebookcategory_list',
]);
$categories->addChild('aar_tag', [
'label' => 'Tags',
'route' => 'aartag_list',
]);
}
$comments = $menu->addChild('comment', [
'label' => 'Comments',
'route' => 'admin_app_comment_list',
])->setExtras([
'icon' => '<i class="fa fa-comment"></i>',
]);
$customers = $menu->addChild('customers', [
'label' => 'Directory',
'route' => 'admin_app_customer_list',
])->setExtras([
'icon' => '<i class="fa fa-address-book"></i>',
]);
$blacklist = $menu->addChild('blacklist', [
'label' => 'Domain Blacklist',
'route' => 'admin_app_domainblacklist_list',
])->setExtras([
'icon' => '<i class="fa fa-ban"></i>',
]);
if($admin_view != Site::SITE_AAR) {
$forms = $menu->addChild('form', [
'label' => 'Forms',
'route' => 'admin_app_form_list',
])->setExtras([
'icon' => '<i class="fa fa-list-ol"></i>',
]);
$quizzes = $menu->addChild('quiz', [
'label' => 'Quizzes',
'route' => 'admin_app_quiz_list',
])->setExtras([
'icon' => '<i class="fa fa-question-circle"></i>',
]);
}
$media = $menu->addChild('media', [
'label' => 'Media',
'route' => 'admin_app_media_list',
])->setExtras([
'icon' => '<i class="fa fa-image"></i>',
]);
if($this->user && $this->user->isSuperAdmin()) {
$mega_menu_builder = $menu->addChild('mega_menu_builder', [
'label' => 'Mega Menu Builder',
'uri' => '/admin/mega-menu-builder',
])->setExtras([
'icon' => '<i class="fa fa-wrench"></i>',
]);
}
if($admin_view != Site::SITE_AAR) {
$polls = $menu->addChild('poll', [
'label' => 'Polls',
'route' => 'poll_list',
])->setExtras([
'icon' => '<i class="fa fa-check-square"></i>',
]);
}
if(!$admin_view || $admin_view == Site::SITE_RCS) {
$sales = $menu->addChild('sale', [
'label' => 'Sales'
])->setExtras([
'icon' => '<i class="fa fa-dollar"></i>',
]);
$sales->addChild('coupon', [
'label' => 'Coupons',
'route' => 'admin_app_coupon_list',
]);
$sales->addChild('product_category', [
'label' => 'Product Categories',
'route' => 'productcategory_list',
]);
$sales->addChild('product', [
'label' => 'Products',
'route' => 'admin_app_product_list',
]);
$sales->addChild('purchase', [
'label' => 'Purchases',
'route' => 'admin_app_purchase_list',
]);
$sales->addChild('tax_report', [
'label' => 'Tax Report',
'uri' => '/tax-report',
]);
}
/* Start Content */
$content = $menu->addChild('content', [
'label' => 'Site Content'
])->setExtras([
'icon' => '<i class="fa fa-file"></i>',
]);
$content->addChild('content_content', [
'label' => 'All Content',
'route' => 'content_list',
]);
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::AWARD))) {
$content->addChild('content_award', [
'label' => 'Awards',
'route' => 'award_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::CLASSIFIED))) {
$content->addChild('content_classified', [
'label' => 'Classifieds',
'route' => 'classified_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::CONTEST_GAMES))) {
$content->addChild('content_contest', [
'label' => 'Contests and Games',
'route' => 'contestsgames_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::EBOOK))) {
$content->addChild('content_ebook', [
'label' => 'eBooks',
'route' => 'ebook_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::EVENT))) {
$content->addChild('content_event', [
'label' => 'Events',
'route' => 'event_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::FORUM))) {
$content->addChild('content_forum', [
'label' => 'Forums',
'route' => 'forum_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::LANDING_PAGE))) {
$content->addChild('content_landing_page', [
'label' => 'Landing Pages',
'route' => 'landingpage_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::PAGE))) {
$content->addChild('content_page', [
'label' => 'Pages',
'route' => 'page_list',
]);
}
if(!$admin_view || $admin_view == Site::SITE_RCS) { //TODO: handle diff kinds of same type
$content->addChild('content_partner_gallery', [
'label' => 'Partner Galleries',
'route' => 'partnergallery_list',
]);
}
if(!$admin_view || $admin_view == Site::SITE_RCS) {
$content->addChild('content_partner_podcast', [
'label' => 'Partner Podcasts',
'route' => 'partnerpodcast_list',
]);
}
if(!$admin_view || $admin_view == Site::SITE_RCS) {
$content->addChild('content_partner_webinar', [
'label' => 'Partner Webinars',
'route' => 'partnerwebinar_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::PODCAST))) {
$content->addChild('content_podcast', [
'label' => 'Podcasts',
'route' => 'podcast_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::POST))) {
$content->addChild('content_post', [
'label' => 'Posts',
'route' => 'post_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::PROMOS_REBATES))) {
$content->addChild('content_promos_and_rebates', [
'label' => 'Promos and Rebates',
'route' => 'promosrebates_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::R_CLUB_PERK))) {
$content->addChild('content_club_perk', [
'label' => 'R-Club Perks',
'route' => 'rclubperk_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::THE_HUB))) {
$content->addChild('content_rlw', [
'label' => 'RLW',
'route' => 'thehub_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::GALLERY))) {
$content->addChild('content_roofing_gallery', [
'label' => 'Roofing Galleries',
'route' => 'gallery_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::SCHOLARSHIP))) {
$content->addChild('content_scholarship', [
'label' => 'Scholarships',
'route' => 'scholarship_list',
]);
}
if($this->user && $this->user->isSuperAdmin()) {
$content->addChild('content_staticpage', [
'label' => 'Static Pages',
'route' => 'staticpage_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::VIDEO))) {
$content->addChild('content_video', [
'label' => 'Videos',
'route' => 'video_list',
]);
}
if(!$admin_view || in_array($admin_view, Content::getSitesForContentType(Content::WEBINAR))) {
$content->addChild('content_webinar', [
'label' => 'Webinars',
'route' => 'webinar_list',
]);
}
/* End Content */
if($admin_view != Site::SITE_AAR) {
$user_dashboard = $menu->addChild('user_dashboard', [
'label' => 'User Dashboard',
//'uri' => '/user-dashboard',
'uri' => 'https://rooferscoffeeshop.com/user-dashboard',
])->setExtras([
'icon' => '<i class="fa fa-users"></i>',
]);
}
$users = $menu->addChild('user', [
'label' => 'Users',
'route' => 'admin_app_user_list',
])->setExtras([
'icon' => '<i class="fa fa-user"></i>',
]);
if($admin_view != Site::SITE_AAR) {
$user_dashboard = $menu->addChild('rclubquick', [
'label' => 'RClub Quick Sign Up',
'uri' => 'https://rooferscoffeeshop.com/rcs-club-quick-sign-up',
])/*->setExtras([
'icon' => '<i class="fa fa-users"></i>',
])*/;
}
}
}