Merge branch 'master' of github.com:chamilo/chamilo-lms

pull/2818/head
Julio Montoya 7 years ago
commit df8bbce2b1
  1. 4
      .github/ISSUE_TEMPLATE.md
  2. 2
      CONTRIBUTING.md
  3. 33
      assets/css/scss/_sidebar.scss
  4. 15
      assets/js/app.js
  5. 2
      src/CoreBundle/Menu/LeftMenuBuilder.php
  6. 291
      src/CoreBundle/Menu/NavBuilder.php
  7. 17
      src/ThemeBundle/Resources/views/Layout/sidebar.html.twig

@ -1,3 +1,7 @@
Before reporting, make sure you check our [official documentation](https://docs.chamilo.org).
If you are fairly sure you found an issue, please use the following template (remove things in other languages than your own and remove these 2 first lines).
### Current behavior / Resultado actual / Résultat actuel
### Expected behavior / Resultado esperado / Résultat attendu

@ -7,6 +7,8 @@ Chamilo LMS is an LAMP-based e-learning web platform that focuses on providing a
environment for teachers to improve both the quality and availability of their
educational material, and on providing students with an awesome learning platform.
Before you report an issue, please check the [official Chamilo documentation](https://docs.chamilo.org) (not always up to date)
We are a relatively small development team and greatly welcome any contribution
from the outside world, although we will thoroughly review them before integration,
to make sure they do not introduce security vulnerabilities or degrade the ease

@ -194,14 +194,40 @@
position: relative;
border-radius: 0;
&.dropdown{
&.open{
a{
.arrow{
transform: rotate(90deg);
}
}
}
.arrow{
line-height: 35px;
position: absolute;
right: 15px;
transition: all .05s ease-in;
i{
font-size: 12px;
}
}
ul{
&.dropdown-menu{
background-color: #3D66CA;
padding: 0;
border: none;
border-radius: 0;
.sidebar-link{
padding: 8px 15px;
.sub-link{
padding: 2px 15px;
i{
height: 35px;
left: 0;
line-height: 35px;
margin-right: 14px;
position: relative;
text-align: center;
transition: all 0.3s ease;
width: 40px;
}
}
}
}
@ -215,7 +241,7 @@
padding: 5px 15px;
position: relative;
white-space: nowrap;
.icon-holder{
i {
border-radius: 6px;
display: inline-block;
@ -229,6 +255,7 @@
transition: all 0.3s ease;
width: 40px;
}
}
&.active {
background: $default-link;

@ -11,10 +11,10 @@ var legacyIndex = Routing.generate('legacy_index');
var mainUrl = Routing.generate('web.main');
var webAjax = Routing.generate('web.ajax');
/*console.log(homePublicUrl);
console.log(homePublicUrl);
console.log(legacyIndex);
console.log(mainUrl);
console.log(webAjax);*/
console.log(webAjax);
var ajax_url = webAjax + 'chat.ajax.php';
var online_button = '<img src="' + homePublicUrl + 'img/statusonline.png">';
@ -26,8 +26,15 @@ var connect_lang = 'ChatConnected';
var disconnect_lang = 'ChatDisconnected';
$( document ).ready(function() {
console.log( "ready!" );
$("#menu_courses").prop("href", "#");
$("#menu_courses").click(function(){
return false;
});
$("#menu_social").click(function(){
return false;
});
$("#menu_administrator").click(function(){
return false;
});
});
$(function() {
var isInCourse = $("body").data("in-course");

@ -27,7 +27,7 @@ class LeftMenuBuilder implements ContainerAwareInterface
*/
public function courseMenu(FactoryInterface $factory, array $options)
{
$checker = $this->container->get('security.authorization_checker');
//$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');

@ -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.
@ -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'
]
);
$menu['courses']->addChild(
'courses',
[
'label' => $translator->trans('All my courses'),
'uri' => $urlPortal . 'user_portal.php'
]
);
$lang = $translator->trans('CreateCourse');
$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['courses']->addChild(
'catalog',
[
'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('CreateCourseRequest');
$lang = $translator->trans('Create course request');
}
$menu['courses']->addChild(
'create-course',
[
'label' => $lang,
'route' => 'legacy_main',
'routeParameters' => [
'name' => 'create_course/add_course.php',
],
'uri' => $mainURL . 'create_course/add_course.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_ADMIN')) {
$menu['courses']->addChild(
'catalog',
$translator->trans('Add Session'),
[
'label' => $translator->trans('CourseCatalog'),
'route' => 'legacy_main',
'routeParameters' => [
'name' => 'auth/courses.php'
],
'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;
}
}

@ -3,6 +3,8 @@
{% set menu = knp_menu_get('ChamiloCoreBundle:NavBuilder:menuApp') %}
<li class="sidebar-divider"></li>
<ul class="navbar-nav">
{% for item in menu.children %}
{% set children = item.children|length %}
@ -15,12 +17,17 @@
<span class="title">
{{ item.label }}
</span>
{% if children > 0 %}
<span class="arrow"><i class="fas fa-angle-right"></i></span>
{% endif %}
</a>
{% if children > 0 %}
<ul id="submenu_{{ item.name }}" class="dropdown-menu">
{% for item in item.children %}
<li>
<a href="{{ item.uri }}" class="sidebar-link">
{% set current = item.isCurrent ? 'active': '' %}
<li class="{{ current }}">
<a href="{{ item.uri }}" class="sub-link">
<i class="far fa-circle"></i>
{{ item.label }}
</a>
</li>
@ -36,19 +43,25 @@
<li class="nav-item">
<a class='sidebar-link' href="https://docs.chamilo.org/">
<span class="icon-holder">
<i class="far fa-file-alt"></i>
</span>
{{ "Documentation"|trans }}
</a>
</li>
<li class="nav-item">
<a class='sidebar-link' href="https://forum.chamilo.org/">
<span class="icon-holder">
<i class="fa fa-users"></i>
</span>
{{ "Forums"|trans }}
</a>
</li>
<li class="nav-item">
<a class='sidebar-link' href="https://github.com/chamilo/chamilo-lms">
<span class="icon-holder">
<i class="fab fa-github"></i>
</span>
{{ "GithubRepository"|trans }}
</a>
</li>

Loading…
Cancel
Save