Networking\InitCmsBundle\Menu\AdminMenuBuilder::createAdminMenu PHP Метод

createAdminMenu() публичный Метод

public createAdminMenu ( ) : boolean | Knp\Menu\ItemInterface
Результат boolean | Knp\Menu\ItemInterface
    public function createAdminMenu()
    {
        // Default to homepage
        $liveRoute = null;
        $livePath = null;
        $draftRoute = null;
        $draftPath = null;
        $menu = $this->factory->createItem('root');
        $sonataAdmin = null;
        $entity = null;
        $defaultHome = $this->router->generate('networking_init_cms_default');
        $adminLocale = $this->request->getSession()->get('admin/_locale');
        $class = 'nav navbar-nav';
        if ($this->request->isXmlHttpRequest()) {
            $class = 'initnav';
        }
        if ($this->isLoggedIn) {
            $editPath = false;
            $menu->setChildrenAttribute('class', $class . ' pull-right');
            $dashboardUrl = $this->router->generate('sonata_admin_dashboard');
            if ($sonataAdminParam = $this->request->get('_sonata_admin')) {
                $possibleAdmins = explode('|', $sonataAdminParam);
                foreach ($possibleAdmins as $adminCode) {
                    // we are in the admin area
                    $sonataAdmin = $this->adminPool->getAdminByAdminCode($adminCode);
                    if ($id = $this->request->get('id')) {
                        $entity = $sonataAdmin->getObject($id);
                    }
                }
            } else {
                // we are in the frontend
                $entity = $this->request->get('_content');
            }
            if ($entity instanceof VersionableInterface) {
                if ($snapShot = $entity->getSnapshot()) {
                    $liveRoute = $this->router->generate($this->getRoute($snapShot->getRoute()));
                }
                $draftRoute = $this->router->generate($this->getRoute($snapShot->getRoute()));
                $pageAdmin = $this->adminPool->getAdminByAdminCode('networking_init_cms.admin.page');
                $editPath = $pageAdmin->generateObjectUrl('edit', $entity);
                $language = $entity->getRoute()->getLocale();
            } elseif ($entity instanceof ResourceVersionInterface) {
                $liveRoute = $this->router->generate($this->getRoute($entity->getRoute()));
                $draftRoute = $this->router->generate($this->getRoute($entity->getPage()->getRoute()));
                $pageAdmin = $this->adminPool->getAdminByAdminCode('networking_init_cms.admin.page');
                $editPath = $pageAdmin->generateObjectUrl('edit', $entity->getPage());
                $language = $entity->getRoute()->getLocale();
            }
            if (!isset($language)) {
                $language = $this->request->getLocale();
            }
            if ($draftRoute) {
                $draftPath = $this->router->generate('networking_init_view_draft', array('locale' => $language, 'path' => base64_encode($draftRoute)));
            } else {
                $draftPath = $this->router->generate('networking_init_view_draft', array('locale' => $language, 'path' => base64_encode($this->request->getBaseUrl())));
            }
            if ($liveRoute) {
                $livePath = $this->router->generate('networking_init_view_live', array('locale' => $language, 'path' => base64_encode($liveRoute)));
            } else {
                $livePath = $this->router->generate('networking_init_view_live', array('locale' => $language, 'path' => base64_encode($this->request->getBaseUrl())));
            }
            $session = $this->request->getSession();
            $lastActionUrl = $dashboardUrl;
            $lastActions = $session->get('_networking_initcms_admin_tracker');
            if ($lastActions) {
                $lastActionArray = json_decode($lastActions);
                if (count($lastActionArray)) {
                    if ($this->request->get('_route') == 'sonata_admin_dashboard' || $sonataAdmin) {
                        $lastAction = next($lastActionArray);
                    } else {
                        $lastAction = reset($lastActionArray);
                    }
                    if ($lastAction) {
                        $lastActionUrl = $lastAction->url;
                    }
                }
            }
            if ($editPath && !$sonataAdmin) {
                $menu->addChild('Edit', array('label' => $this->translator->trans('link_action_edit', array(), 'SonataAdminBundle', $adminLocale), 'uri' => $editPath));
                $this->addIcon($menu['Edit'], array('icon' => 'pencil', 'append' => false));
            }
            if (!$sonataAdmin && $this->request->get('_route') != 'sonata_admin_dashboard') {
                $menu->addChild('Admin', array('uri' => $lastActionUrl));
            }
            $viewStatus = $this->request->getSession()->get('_viewStatus');
            $translator = $this->translator;
            $webLink = $translator->trans('link.website_' . $viewStatus, array(), 'NetworkingInitCmsBundle', $adminLocale);
            if ($editPath && !$sonataAdmin) {
                $webLink = $translator->trans('link.website_' . $viewStatus, array(), 'NetworkingInitCmsBundle', $adminLocale);
            }
            $dropdown = $menu->addChild($webLink, array('dropdown' => true, 'caret' => true));
            if ($draftPath) {
                $dropdown->addChild($translator->trans('view_website.status_draft', array(), 'NetworkingInitCmsBundle', $adminLocale), array('uri' => $draftPath, 'linkAttributes' => array('class' => 'color-draft')));
            }
            if ($livePath) {
                $dropdown->addChild($translator->trans('view_website.status_published', array(), 'NetworkingInitCmsBundle', $adminLocale), array('uri' => $livePath, 'linkAttributes' => array('class' => 'color-published')));
            }
            if (!$draftPath && !$livePath) {
                $dropdown->addChild($translator->trans('view_website.status_draft', array(), 'NetworkingInitCmsBundle', $adminLocale), array('uri' => $defaultHome, 'linkAttributes' => array('class' => 'color-draft')));
                $dropdown->addChild($translator->trans('view_website.status_published', array(), 'NetworkingInitCmsBundle', $adminLocale), array('uri' => $defaultHome));
            }
        }
        return $menu;
    }