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;
}