@ -8,8 +8,12 @@ use Chamilo\PageBundle\Entity\Page;
use Chamilo\PageBundle\Entity\Site;
use Knp\Menu\FactoryInterface;
use Knp\Menu\ItemInterface;
use Knp\Menu\Matcher\Matcher;
use Knp\Menu\Matcher\Voter\UriVoter;
use Knp\Menu\Renderer\ListRenderer;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
use Chamilo\CoreBundle\Menu\LeftMenuBuilder;
/**
* Class NavBuilder.
@ -21,8 +25,8 @@ class NavBuilder implements ContainerAwareInterface
use ContainerAwareTrait;
/**
* @param array $itemOptions The options given to the created menuItem
* @param string $currentUri The current URI
* @param array $itemOptions The options given to the created menuItem
* @param string $currentUri The current URI
*
* @return ItemInterface
*/
@ -37,9 +41,9 @@ class NavBuilder implements ContainerAwareInterface
}
/**
* @param ItemInterface $menu The item to fill with $routes
* @param array $options The item options
* @param string $currentUri The current URI
* @param ItemInterface $menu The item to fill with $routes
* @param array $options The item options
* @param string $currentUri The current URI
*/
public function buildCategoryMenu(ItemInterface $menu, array $options = [], $currentUri = null)
{
@ -53,7 +57,7 @@ class NavBuilder implements ContainerAwareInterface
* Top menu left.
*
* @param FactoryInterface $factory
* @param array $options
* @param array $options
*
* @return ItemInterface
*/
@ -62,78 +66,99 @@ class NavBuilder implements ContainerAwareInterface
$container = $this->container;
$checker = $container->get('security.authorization_checker');
$translator = $container->get('translator');
$urlRoot = $this->container->get('router')->getContext()->getBaseUrl();
$mainURL = $this->container->get('router')->generate('web.main');
$baseUrl = $this->container->get('router')->getContext()->getHost();
$baseHttp = $this->container->get('router')->getContext()->getScheme();
$urlPortal = $baseHttp."://".$baseUrl."/";
if ($urlRoot == "/public") {
$mainURL = substr($mainURL, 7);
}
$menu = $factory->createItem('root');
$settingsManager = $container->get('chamilo.settings.manager');
$menu->addChild(
'home',
[ 'label' => $translator->trans('Home'),
[
'label' => $translator->trans('Home'),
'route' => 'legacy_index',
'icon' => 'home',
]
);
$menu['home']->setCurrent(true);
if ($checker & & $checker->isGranted('IS_AUTHENTICATED_FULLY')) {
$menu->addChild(
'courses',
[
'label' => $translator->trans('My courses'),
'route' => 'legacy_main',
'icon' => 'book',
'routeParameters' => [
'name' => '../user_portal.php',
],
'label' => $translator->trans('Courses'),
'uri' => $urlPortal . 'user_portal.php',
'icon' => 'book'
]
);
$lang = $translator->trans('CreateCourse');
if ($settingsManager->getSetting('course.course_validation') == 'true') {
$lang = $translator->trans('CreateCourseRequest');
}
$menu['courses']->addChild(
'create-c ourse',
'courses',
[
'label' => $lang,
'route' => 'legacy_main',
'routeParameters' => [
'name' => 'create_course/add_course.php',
],
'label' => $translator->trans('All my courses'),
'uri' => $urlPortal . 'user_portal.php'
]
);
$browse = $settingsManager->getSetting('display.allow_students_to_browse_courses');
if ($browse == 'true') {
if ($checker->isGranted('ROLE_STUDENT') & & !api_is_drh(
) & & !api_is_session_admin()
if ($checker->isGranted('ROLE_STUDENT') & & !api_is_drh() & & !api_is_session_admin()
) {
$menu['courses']->addChild(
'catalog',
[
'label' => $translator->trans('CourseCatalog'),
'route' => 'legacy_main',
'routeParameters' => [
'name' => 'auth/courses.php'
],
'label' => $translator->trans('Course catalog'),
'uri' => $mainURL . 'auth/courses.php'
]
);
}
}
$menu['courses']->addChild(
$translator->trans('Course history'),
[
'uri' => 'userportal'
]
);
if (api_is_allowed_to_create_course()) {
$lang = $translator->trans('Create course');
if ($settingsManager->getSetting('course.course_validation') == 'true') {
$lang = $translator->trans('Create course request');
}
$menu['courses']->addChild(
'create-course',
[
'label' => $lang,
'uri' => $mainURL . 'create_course/add_course.php'
]
);
}
if ($checker->isGranted('ROLE_ADMIN')) {
$menu['courses']->addChild(
$translator->trans('Add Session'),
[
'uri' => $mainURL . 'session/session_add.php'
]
);
}
$menu->addChild(
'calendar',
[
'label' => $translator->trans('Calendar'),
'route' => 'legacy_main',
'icon' => 'calendar-alt',
'routeParameters' => [
'name' => 'calendar/agenda_js.php',
],
'uri' => $mainURL . 'calendar/agenda_js.php',
'icon' => 'calendar-alt'
]
);
@ -141,11 +166,8 @@ class NavBuilder implements ContainerAwareInterface
'reports',
[
'label' => $translator->trans('Reporting'),
'route' => 'legacy_main',
'icon' => 'chart-bar',
'routeParameters' => [
'name' => 'mySpace/index.php',
],
'uri' => $mainURL . 'mySpace/index.php',
'icon' => 'chart-bar'
]
);
@ -154,11 +176,39 @@ class NavBuilder implements ContainerAwareInterface
'social',
[
'label' => $translator->trans('Social'),
'route' => 'legacy_main',
'icon' => 'heart',
'routeParameters' => [
'name' => 'social/home.php',
],
'uri' => $mainURL . 'social/home.php',
'icon' => 'heart'
]
);
$menu['social']->addChild(
$translator->trans('My profile'),
[
'uri' => $mainURL . 'social/home.php'
]
);
$menu['social']->addChild(
$translator->trans('My shared profile'),
[
'uri' => $mainURL . 'social/profile.php'
]
);
$menu['social']->addChild(
$translator->trans('Friends'),
[
'uri' => $mainURL . 'social/friends.php'
]
);
$menu['social']->addChild(
$translator->trans('Social Groups'),
[
'uri' => $mainURL . 'social/groups.php',
]
);
$menu['social']->addChild(
$translator->trans('My Files'),
[
'uri' => $mainURL . 'social/myfiles.php'
]
);
}
@ -168,22 +218,68 @@ class NavBuilder implements ContainerAwareInterface
'dashboard',
[
'label' => $translator->trans('Dashboard'),
'route' => 'legacy_main',
'icon' => 'cube',
'routeParameters' => [
'name' => 'dashboard/index.php',
],
'uri' => $mainURL . 'dashboard/index.php',
'icon' => 'cube'
]
);
$menu->addChild(
'administrator',
[
'label' => $translator->trans('Administration'),
'route' => 'legacy_main',
'icon' => 'cogs',
'routeParameters' => [
'name' => 'admin/index.php',
],
'uri' => $mainURL . 'admin/index.php',
'icon' => 'cogs'
]
);
$menu['administrator']->addChild(
'options',
[
'label' => $translator->trans('All options'),
'uri' => $mainURL . 'admin/index.php'
]
);
$menu['administrator']->addChild(
'userlist',
[
'label' => $translator->trans('User list'),
'uri' => $mainURL . 'admin/user_list.php'
]
);
$menu['administrator']->addChild(
'courselist',
[
'label' => $translator->trans('Course list'),
'uri' => $mainURL . 'admin/course_list.php'
]
);
$menu['administrator']->addChild(
'sessionlist',
[
'label' => $translator->trans('Session list'),
'uri' => $mainURL . 'session/session_list.php'
]
);
$menu['administrator']->addChild(
'languages',
[
'label' => $translator->trans('Languages'),
'uri' => $mainURL . 'admin/languages.php'
]
);
$menu['administrator']->addChild(
'plugins',
[
'label' => $translator->trans('Plugins'),
'uri' => $mainURL . 'admin/settings.php?category=Plugins'
]
);
$menu['administrator']->addChild(
'settings',
[
'label' => $translator->trans('Advanced settings'),
'uri' => $urlPortal . 'public/admin/settings/platform'
]
);
}
@ -226,7 +322,7 @@ class NavBuilder implements ContainerAwareInterface
$urlAppend = $container->getParameter('url_append');
$legacyIndex = '';
if ($isLegacy) {
$legacyIndex = $urlAppend.'/public';
$legacyIndex = $urlAppend . '/public';
}
if ($site) {
@ -251,7 +347,7 @@ class NavBuilder implements ContainerAwareInterface
continue;
}
$url = $legacyIndex.$page->getUrl();
$url = $legacyIndex . $page->getUrl();
$subMenu = $menu->addChild(
$page->getName(),
@ -265,7 +361,7 @@ class NavBuilder implements ContainerAwareInterface
/** @var Page $child */
foreach ($page->getChildren() as $child) {
$url = $legacyIndex.$child->getUrl();
$url = $legacyIndex . $child->getUrl();
$subMenu->addChild(
$child->getName(),
[
@ -288,4 +384,89 @@ class NavBuilder implements ContainerAwareInterface
return $menu;
}
/**
* Course menu.
*
* @param FactoryInterface $factory
* @param array $options
*
* @return ItemInterface
*/
public function courseMenu(FactoryInterface $factory, array $options)
{
$checker = $this->container->get('security.authorization_checker');
$menu = $factory->createItem('root');
$translator = $this->container->get('translator');
$checked = $this->container->get('session')->get('IS_AUTHENTICATED_FULLY');
$settingsManager = $this->container->get('chamilo.settings.manager');
if ($checked) {
$menu->setChildrenAttribute('class', 'nav nav-pills nav-stacked');
$menu->addChild(
$translator->trans('MyCourses'),
[
'route' => 'userportal',
'routeParameters' => ['type' => 'courses'],
]
);
return $menu;
if (api_is_allowed_to_create_course()) {
$lang = $translator->trans('CreateCourse');
if ($settingsManager->getSetting('course.course_validation') == 'true') {
$lang = $translator->trans('CreateCourseRequest');
}
$menu->addChild(
$lang,
['route' => 'add_course']
);
}
$link = $this->container->get('router')->generate('web.main');
$menu->addChild(
$translator->trans('ManageCourses'),
[
'uri' => $link . 'auth/courses.php?action=sortmycourses',
]
);
$browse = $settingsManager->getSetting('display.allow_students_to_browse_courses');
if ($browse == 'true') {
if ($checker->isGranted('ROLE_STUDENT') & & !api_is_drh() & & !api_is_session_admin()
) {
$menu->addChild(
$translator->trans('CourseCatalog'),
[
'uri' => $link . 'auth/courses.php',
]
);
} else {
$menu->addChild(
$translator->trans('Dashboard'),
[
'uri' => $link . 'dashboard/index.php',
]
);
}
}
/** @var \Knp\Menu\MenuItem $menu */
$menu->addChild(
$translator->trans('History'),
[
'route' => 'userportal',
'routeParameters' => [
'type' => 'sessions',
'filter' => 'history',
],
]
);
}
return $menu;
}
}