Commit 1cfefe24 by Diana Huang

Modify the header to show the learner profile.

Remove the profile from the user dropdown.

LEARNER-2318
parent a2dc27e6
...@@ -864,6 +864,7 @@ def dashboard(request): ...@@ -864,6 +864,7 @@ def dashboard(request):
'nav_hidden': True, 'nav_hidden': True,
'inverted_programs': inverted_programs, 'inverted_programs': inverted_programs,
'show_program_listing': ProgramsApiConfig.is_enabled(), 'show_program_listing': ProgramsApiConfig.is_enabled(),
'show_dashboard_tabs': True,
'disable_courseware_js': True, 'disable_courseware_js': True,
'display_course_modes_on_dashboard': enable_verified_certificates and display_course_modes_on_dashboard, 'display_course_modes_on_dashboard': enable_verified_certificates and display_course_modes_on_dashboard,
'display_sidebar_on_dashboard': display_sidebar_on_dashboard, 'display_sidebar_on_dashboard': display_sidebar_on_dashboard,
......
...@@ -217,11 +217,18 @@ class DashboardPage(PageObject): ...@@ -217,11 +217,18 @@ class DashboardPage(PageObject):
""" """
return self.q(css='.user-dropdown-menu li a').text return self.q(css='.user-dropdown-menu li a').text
@property
def tabs_link_text(self):
"""
Return the text of all the tabs on the dashboard.
"""
return self.q(css='.tab-nav-item a').text
def click_my_profile_link(self): def click_my_profile_link(self):
""" """
Click on `Profile` link. Click on `Profile` link.
""" """
self.q(css='.user-dropdown-menu li a').nth(1).click() self.q(css='.tab-nav-item a').nth(1).click()
def click_account_settings_link(self): def click_account_settings_link(self):
""" """
......
...@@ -278,8 +278,7 @@ class OwnLearnerProfilePageTest(LearnerProfileTestMixin, AcceptanceTest): ...@@ -278,8 +278,7 @@ class OwnLearnerProfilePageTest(LearnerProfileTestMixin, AcceptanceTest):
username, __ = self.log_in_as_unique_user() username, __ = self.log_in_as_unique_user()
dashboard_page = DashboardPage(self.browser) dashboard_page = DashboardPage(self.browser)
dashboard_page.visit() dashboard_page.visit()
dashboard_page.click_username_dropdown() self.assertIn('Profile', dashboard_page.tabs_link_text)
self.assertIn('Profile', dashboard_page.username_dropdown_link_text)
dashboard_page.click_my_profile_link() dashboard_page.click_my_profile_link()
my_profile_page = LearnerProfilePage(self.browser, username) my_profile_page = LearnerProfilePage(self.browser, username)
my_profile_page.wait_for_page() my_profile_page.wait_for_page()
......
...@@ -154,20 +154,6 @@ class MasqueradeTestCase(SharedModuleStoreTestCase, LoginEnrollmentTestCase): ...@@ -154,20 +154,6 @@ class MasqueradeTestCase(SharedModuleStoreTestCase, LoginEnrollmentTestCase):
self.assertIn(self.problem_display_name, problem_html) self.assertIn(self.problem_display_name, problem_html)
self.assertEqual(show_answer_expected, "Show Answer" in problem_html) self.assertEqual(show_answer_expected, "Show Answer" in problem_html)
def verify_real_user_profile_link(self):
"""
Verifies that the 'Profile' link in the navigation dropdown is pointing
to the real user.
"""
content = self.get_courseware_page().content
self.assertIn(
'<a href="/u/{}" role="menuitem" class="action dropdown-menuitem">Profile</a>'.format(
self.test_user.username
),
content,
"Profile link should point to real user",
)
def ensure_masquerade_as_group_member(self, partition_id, group_id): def ensure_masquerade_as_group_member(self, partition_id, group_id):
""" """
Installs a masquerade for the test_user and test course, to enable the Installs a masquerade for the test_user and test course, to enable the
...@@ -376,9 +362,6 @@ class TestStaffMasqueradeAsSpecificStudent(StaffMasqueradeTestCase, ProblemSubmi ...@@ -376,9 +362,6 @@ class TestStaffMasqueradeAsSpecificStudent(StaffMasqueradeTestCase, ProblemSubmi
self.update_masquerade(role='student', user_name=self.student_user.username) self.update_masquerade(role='student', user_name=self.student_user.username)
self.assertEqual(self.get_progress_detail(), u'2/2') self.assertEqual(self.get_progress_detail(), u'2/2')
# Verify that the user dropdown links have not changed
self.verify_real_user_profile_link()
# Temporarily override the student state. # Temporarily override the student state.
self.submit_answer('Correct', 'Incorrect') self.submit_answer('Correct', 'Incorrect')
self.assertEqual(self.get_progress_detail(), u'1/2') self.assertEqual(self.get_progress_detail(), u'1/2')
...@@ -461,7 +444,6 @@ class TestStaffMasqueradeAsSpecificStudent(StaffMasqueradeTestCase, ProblemSubmi ...@@ -461,7 +444,6 @@ class TestStaffMasqueradeAsSpecificStudent(StaffMasqueradeTestCase, ProblemSubmi
masquerade_progress = self.get_progress_page().content masquerade_progress = self.get_progress_page().content
self.assertNotIn("1 of 2 possible points", masquerade_progress) self.assertNotIn("1 of 2 possible points", masquerade_progress)
self.assertIn("2 of 2 possible points", masquerade_progress) self.assertIn("2 of 2 possible points", masquerade_progress)
self.verify_real_user_profile_link()
@attr(shard=1) @attr(shard=1)
......
...@@ -35,6 +35,7 @@ def program_listing(request): ...@@ -35,6 +35,7 @@ def program_listing(request):
'programs': meter.engaged_programs, 'programs': meter.engaged_programs,
'progress': meter.progress(), 'progress': meter.progress(),
'show_program_listing': programs_config.enabled, 'show_program_listing': programs_config.enabled,
'show_dashboard_tabs': True,
'uses_pattern_library': True, 'uses_pattern_library': True,
} }
...@@ -75,6 +76,7 @@ def program_details(request, program_uuid): ...@@ -75,6 +76,7 @@ def program_details(request, program_uuid):
context = { context = {
'urls': urls, 'urls': urls,
'show_program_listing': programs_config.enabled, 'show_program_listing': programs_config.enabled,
'show_dashboard_tabs': True,
'nav_hidden': True, 'nav_hidden': True,
'disable_courseware_js': True, 'disable_courseware_js': True,
'uses_pattern_library': True, 'uses_pattern_library': True,
......
...@@ -555,6 +555,7 @@ def account_settings_context(request): ...@@ -555,6 +555,7 @@ def account_settings_context(request):
'user_preferences_api_url': reverse('preferences_api', kwargs={'username': user.username}), 'user_preferences_api_url': reverse('preferences_api', kwargs={'username': user.username}),
'disable_courseware_js': True, 'disable_courseware_js': True,
'show_program_listing': ProgramsApiConfig.is_enabled(), 'show_program_listing': ProgramsApiConfig.is_enabled(),
'show_dashboard_tabs': True,
'order_history': user_orders 'order_history': user_orders
} }
......
...@@ -33,15 +33,26 @@ from django.utils.translation import ugettext as _ ...@@ -33,15 +33,26 @@ from django.utils.translation import ugettext as _
</li> </li>
% endif % endif
% if show_program_listing: % if show_dashboard_tabs:
<li class="nav-item mt-2 nav-item-open-collapsed"> <li class="nav-item mt-2 nav-item-open-collapsed">
<a class="nav-link ${'active' if reverse('dashboard') == request.path else ''}" href="${reverse('dashboard')}"> <a class="nav-link ${'active' if reverse('dashboard') == request.path else ''}" href="${reverse('dashboard')}">
${_("Courses")} ${_("Courses")}
</a> </a>
</li> </li>
% if show_program_listing:
<li class="nav-item mt-2 nav-item-open-collapsed">
<a class="nav-link ${'active' if reverse('program_listing_view') in request.path else ''}" href="${reverse('program_listing_view')}">
${_("Programs")}
</a>
</li>
% endif
<%
self.real_user = getattr(user, 'real_user', user)
is_on_profile_page = data and data.get('profile_user_id') is not None
%>
<li class="nav-item mt-2 nav-item-open-collapsed"> <li class="nav-item mt-2 nav-item-open-collapsed">
<a class="nav-link ${'active' if reverse('program_listing_view') in request.path else ''}" href="${reverse('program_listing_view')}"> <a class="${'active ' if is_on_profile_page else ''}tab-nav-link" href="${reverse('learner_profile', args=[self.real_user.username])}">
${_("Programs")} ${_("Profile")}
</a> </a>
</li> </li>
% endif % endif
......
...@@ -16,15 +16,26 @@ from django.utils.translation import ugettext as _ ...@@ -16,15 +16,26 @@ from django.utils.translation import ugettext as _
<a class="btn" href="${marketing_link('COURSES')}">${_('Explore courses')}</a> <a class="btn" href="${marketing_link('COURSES')}">${_('Explore courses')}</a>
</li> </li>
% endif % endif
% if show_program_listing: % if show_dashboard_tabs:
<li class="tab-nav-item"> <li class="tab-nav-item">
<a class="${'active ' if reverse('dashboard') == request.path else ''}tab-nav-link" href="${reverse('dashboard')}"> <a class="${'active ' if reverse('dashboard') == request.path else ''}tab-nav-link" href="${reverse('dashboard')}">
${_("Courses")} ${_("Courses")}
</a> </a>
</li> </li>
% if show_program_listing:
<li class="tab-nav-item">
<a class="${'active ' if reverse('program_listing_view') in request.path else ''}tab-nav-link" href="${reverse('program_listing_view')}">
${_("Programs")}
</a>
</li>
% endif
<%
self.real_user = getattr(user, 'real_user', user)
is_on_profile_page = data and data.get('profile_user_id') is not None
%>
<li class="tab-nav-item"> <li class="tab-nav-item">
<a class="${'active ' if reverse('program_listing_view') in request.path else ''}tab-nav-link" href="${reverse('program_listing_view')}"> <a class="${'active ' if is_on_profile_page else ''}tab-nav-link" href="${reverse('learner_profile', args=[self.real_user.username])}">
${_("Programs")} ${_("Profile")}
</a> </a>
</li> </li>
% endif % endif
......
...@@ -26,13 +26,11 @@ from openedx.core.djangoapps.user_api.accounts.image_helpers import get_profile_ ...@@ -26,13 +26,11 @@ from openedx.core.djangoapps.user_api.accounts.image_helpers import get_profile_
<a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">${username}</a> <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">${username}</a>
<ul class="dropdown-menu dropdown-menu-right" id="${_("Usermenu")}" aria-labelledby="dropdownMenuLink" tabindex="-1"> <ul class="dropdown-menu dropdown-menu-right" id="${_("Usermenu")}" aria-labelledby="dropdownMenuLink" tabindex="-1">
<a class="dropdown-item" href="${reverse('dashboard')}">${_("Dashboard")}</a> <a class="dropdown-item" href="${reverse('dashboard')}">${_("Dashboard")}</a>
<a class="dropdown-item" href="${reverse('learner_profile', kwargs={'username': self.real_user.username})}">${_("Profile")}</a>
<a class="dropdown-item" href="${reverse('account_settings')}">${_("Account")}</a> <a class="dropdown-item" href="${reverse('account_settings')}">${_("Account")}</a>
<a class="dropdown-item" href="${reverse('logout')}">${_("Sign Out")}</a> <a class="dropdown-item" href="${reverse('logout')}">${_("Sign Out")}</a>
</ul> </ul>
</li> </li>
<li class="nav-item nav-item-open-collapsed-only collapse"><a href="${reverse('dashboard')}">${_("Dashboard")}</a></li> <li class="nav-item nav-item-open-collapsed-only collapse"><a href="${reverse('dashboard')}">${_("Dashboard")}</a></li>
<li class="nav-item nav-item-open-collapsed-only"><a href="${reverse('learner_profile', kwargs={'username': self.real_user.username})}">${_("Profile")}</a></li>
<li class="nav-item nav-item-open-collapsed-only"><a href="${reverse('account_settings')}">${_("Account")}</a></li> <li class="nav-item nav-item-open-collapsed-only"><a href="${reverse('account_settings')}">${_("Account")}</a></li>
<li class="nav-item nav-item-open-collapsed-only"><a href="${reverse('logout')}">${_("Sign Out")}</a></li> <li class="nav-item nav-item-open-collapsed-only"><a href="${reverse('logout')}">${_("Sign Out")}</a></li>
% elif uses_pattern_library: % elif uses_pattern_library:
...@@ -54,7 +52,6 @@ from openedx.core.djangoapps.user_api.accounts.image_helpers import get_profile_ ...@@ -54,7 +52,6 @@ from openedx.core.djangoapps.user_api.accounts.image_helpers import get_profile_
<ul class="dropdown-menu list-divided is-hidden" id="${_("Usermenu")}" tabindex="-1"> <ul class="dropdown-menu list-divided is-hidden" id="${_("Usermenu")}" tabindex="-1">
<%block name="navigation_dropdown_menu_links" > <%block name="navigation_dropdown_menu_links" >
<li class="dropdown-item item has-block-link"><a href="${reverse('dashboard')}" role="menuitem" class="action dropdown-menuitem">${_("Dashboard")}</a></li> <li class="dropdown-item item has-block-link"><a href="${reverse('dashboard')}" role="menuitem" class="action dropdown-menuitem">${_("Dashboard")}</a></li>
<li class="dropdown-item item has-block-link"><a href="${reverse('learner_profile', kwargs={'username': self.real_user.username})}" role="menuitem" class="action dropdown-menuitem">${_("Profile")}</a></li>
<li class="dropdown-item item has-block-link"><a href="${reverse('account_settings')}" role="menuitem" class="action dropdown-menuitem">${_("Account")}</a></li> <li class="dropdown-item item has-block-link"><a href="${reverse('account_settings')}" role="menuitem" class="action dropdown-menuitem">${_("Account")}</a></li>
</%block> </%block>
<li class="dropdown-item item has-block-link"><a href="${reverse('logout')}" role="menuitem" class="action dropdown-menuitem">${_("Sign Out")}</a></li> <li class="dropdown-item item has-block-link"><a href="${reverse('logout')}" role="menuitem" class="action dropdown-menuitem">${_("Sign Out")}</a></li>
......
...@@ -12,6 +12,7 @@ from django.utils.translation import ugettext as _ ...@@ -12,6 +12,7 @@ from django.utils.translation import ugettext as _
from django.views.decorators.http import require_http_methods from django.views.decorators.http import require_http_methods
from django_countries import countries from django_countries import countries
from edxmako.shortcuts import marketing_link from edxmako.shortcuts import marketing_link
from openedx.core.djangoapps.programs.models import ProgramsApiConfig
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.djangoapps.user_api.accounts.api import get_account_settings from openedx.core.djangoapps.user_api.accounts.api import get_account_settings
from openedx.core.djangoapps.user_api.errors import UserNotAuthorized, UserNotFound from openedx.core.djangoapps.user_api.errors import UserNotAuthorized, UserNotFound
...@@ -137,7 +138,10 @@ def learner_profile_context(request, profile_username, user_is_staff): ...@@ -137,7 +138,10 @@ def learner_profile_context(request, profile_username, user_is_staff):
'platform_name': configuration_helpers.get_value('platform_name', settings.PLATFORM_NAME), 'platform_name': configuration_helpers.get_value('platform_name', settings.PLATFORM_NAME),
'social_platforms': settings.SOCIAL_PLATFORMS, 'social_platforms': settings.SOCIAL_PLATFORMS,
}, },
'show_program_listing': ProgramsApiConfig.is_enabled(),
'show_dashboard_tabs': True,
'disable_courseware_js': True, 'disable_courseware_js': True,
'nav_hidden': True,
} }
if badges_enabled(): if badges_enabled():
......
...@@ -74,7 +74,7 @@ site_status_msg = get_site_status_msg(course_id) ...@@ -74,7 +74,7 @@ site_status_msg = get_site_status_msg(course_id)
% if user.is_authenticated(): % if user.is_authenticated():
<div class="collapse navbar-collapse" id="navbarSupportedContent"> <div class="collapse navbar-collapse" id="navbarSupportedContent">
% if not course or disable_courseware_header: % if not course or disable_courseware_header:
% if not nav_hidden or show_program_listing: % if not nav_hidden or show_dashboard_tabs:
<ul class="navbar-nav mr-auto"> <ul class="navbar-nav mr-auto">
% if not nav_hidden: % if not nav_hidden:
<li class="nav-item mt-2 nav-item-open-collapsed nav-global-01"> <li class="nav-item mt-2 nav-item-open-collapsed nav-global-01">
...@@ -87,18 +87,29 @@ site_status_msg = get_site_status_msg(course_id) ...@@ -87,18 +87,29 @@ site_status_msg = get_site_status_msg(course_id)
<a class="nav-link" href="${marketing_link('SCHOOLS')}">${_("Schools & Partners")}</a> <a class="nav-link" href="${marketing_link('SCHOOLS')}">${_("Schools & Partners")}</a>
</li> </li>
% endif % endif
% if show_program_listing: % if show_dashboard_tabs:
<li class="nav-item mt-2 nav-item-open-collapsed"> <li class="nav-item mt-2 nav-item-open-collapsed">
<a class="${'active' if reverse('dashboard') == request.path else ''} nav-link" href="${reverse('dashboard')}"> <a class="${'active' if reverse('dashboard') == request.path else ''} nav-link" href="${reverse('dashboard')}">
${_("Courses")} ${_("Courses")}
</a> </a>
</li> </li>
% if show_program_listing:
<li class="nav-item mt-2 nav-item-open-collapsed">
<a class="${'active' if reverse('program_listing_view') in request.path else ''} nav-link" href="${reverse('program_listing_view')}">
${_("Programs")}
</a>
</li>
% endif
<%
self.real_user = getattr(user, 'real_user', user)
is_on_profile_page = data and data.get('profile_user_id') is not None
%>
<li class="nav-item mt-2 nav-item-open-collapsed"> <li class="nav-item mt-2 nav-item-open-collapsed">
<a class="${'active' if reverse('program_listing_view') in request.path else ''} nav-link" href="${reverse('program_listing_view')}"> <a class="${'active ' if is_on_profile_page else ''}tab-nav-link" href="${reverse('learner_profile', args=[self.real_user.username])}">
${_("Programs")} ${_("Profile")}
</a> </a>
</li> </li>
% endif % endif
</ul> </ul>
% endif % endif
% endif % endif
...@@ -166,7 +177,7 @@ site_status_msg = get_site_status_msg(course_id) ...@@ -166,7 +177,7 @@ site_status_msg = get_site_status_msg(course_id)
% if user.is_authenticated(): % if user.is_authenticated():
% if not course or disable_courseware_header: % if not course or disable_courseware_header:
% if not nav_hidden or show_program_listing: % if not nav_hidden or show_dashboard_tabs:
<nav aria-label="${_('Main')}" class="nav-main"> <nav aria-label="${_('Main')}" class="nav-main">
<ul class="left list-inline nav-global authenticated"> <ul class="left list-inline nav-global authenticated">
% if not nav_hidden: % if not nav_hidden:
...@@ -182,17 +193,29 @@ site_status_msg = get_site_status_msg(course_id) ...@@ -182,17 +193,29 @@ site_status_msg = get_site_status_msg(course_id)
</li> </li>
</%block> </%block>
% endif % endif
% if show_program_listing: % if show_dashboard_tabs:
<li class="tab-nav-item"> <li class="tab-nav-item">
<a class="${'active ' if reverse('dashboard') == request.path else ''}tab-nav-link" href="${reverse('dashboard')}"> <a class="${'active ' if reverse('dashboard') == request.path else ''}tab-nav-link" href="${reverse('dashboard')}">
${_("Courses")} ${_("Courses")}
</a> </a>
</li> </li>
% if show_program_listing:
<li class="tab-nav-item">
<a class="${'active ' if reverse('program_listing_view') in request.path else ''}tab-nav-link" href="${reverse('program_listing_view')}">
${_("Programs")}
</a>
</li>
% endif
<%
self.real_user = getattr(user, 'real_user', user)
is_on_profile_page = data and data.get('profile_user_id') is not None
%>
<li class="tab-nav-item"> <li class="tab-nav-item">
<a class="${'active ' if reverse('program_listing_view') in request.path else ''}tab-nav-link" href="${reverse('program_listing_view')}"> <a class="${'active ' if is_on_profile_page else ''}tab-nav-link" href="${reverse('learner_profile', args=[self.real_user.username])}">
${_("Programs")} ${_("Profile")}
</a> </a>
</li> </li>
% endif % endif
</ul> </ul>
</nav> </nav>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment