def learner_profile(request, username): """Render the profile page for the specified username. Args: request (HttpRequest) username (str): username of user whose profile is requested. Returns: HttpResponse: 200 if the page was sent successfully HttpResponse: 302 if not logged in (redirect to login page) HttpResponse: 405 if using an unsupported HTTP method Raises: Http404: 404 if the specified user is not authorized or does not exist Example usage: GET /account/profile """ user = request.user usr = request.user.id """ User Account update function starts""" if request.is_ajax(): if request.method == 'GET': vfields = request.GET for key in vfields: vfield = key columname = vfield fieldvalue = vfields[key] gmember = extrafields.objects.filter(user_id=usr).update( **{columname: fieldvalue}) msg = ' Updated succesfully' return HttpResponse(msg) try: context = learner_profile_context(request, username, request.user.is_staff) # TODO: LEARNER-2554: 09/2017: Remove message and cookie logic when we no longer want this message message_viewed = False if (context['own_profile'] and SHOW_PROFILE_MESSAGE.is_enabled() and request.COOKIES.get('profile-message-viewed', '') != 'True'): message_text = Text( _('Welcome to the new learner profile page. Your full profile now displays more ' 'information to other learners. You can instead choose to display a limited ' 'profile. {learn_more_link_start}Learn more{learn_more_link_end}' ) ).format(learn_more_link_start=HTML( '<a href="https://edx.readthedocs.io/projects/open-edx-learner-guide/en/' 'latest/SFD_dashboard_profile_SectionHead.html#adding-profile-information">' ), learn_more_link_end=HTML('</a>')) PageLevelMessages.register_info_message(request, message_text, dismissable=True) message_viewed = True response = render_to_response('learner_profile/learner_profile.html', context) if message_viewed: response.set_cookie('profile-message-viewed', 'True') return response except (UserNotAuthorized, UserNotFound, ObjectDoesNotExist): raise Http404
def register_course_expired_message(request, course): """ Add a banner notifying the user of the user course expiration date if it exists. """ if not CourseDurationLimitConfig.enabled_for_enrollment(user=request.user, course_key=course.id): return expiration_date = get_user_course_expiration_date(request.user, course) if not expiration_date: return if is_masquerading_as_student(request.user, course.id) and timezone.now() > expiration_date: upgrade_message = _('This learner does not have access to this course. ' 'Their access expired on {expiration_date}.') PageLevelMessages.register_warning_message( request, HTML(upgrade_message).format( expiration_date=expiration_date.strftime('%b %-d') ) ) else: enrollment = CourseEnrollment.get_enrollment(request.user, course.id) if enrollment is None: return upgrade_deadline = enrollment.upgrade_deadline if upgrade_deadline is None: return now = timezone.now() course_upgrade_deadline = enrollment.course_upgrade_deadline if now > upgrade_deadline: upgrade_deadline = course_upgrade_deadline expiration_message = _('{strong_open}Audit Access Expires {expiration_date}{strong_close}' '{line_break}You lose all access to this course, including your progress, on ' '{expiration_date}.') upgrade_deadline_message = _('{line_break}Upgrade by {upgrade_deadline} to get unlimited access to the course ' 'as long as it exists on the site. {a_open}Upgrade now{sronly_span_open} to ' 'retain access past {expiration_date}{span_close}{a_close}') full_message = expiration_message if now < course_upgrade_deadline: full_message += upgrade_deadline_message PageLevelMessages.register_info_message( request, Text(full_message).format( a_open=HTML('<a href="{upgrade_link}">').format( upgrade_link=verified_upgrade_deadline_link(user=request.user, course=course) ), sronly_span_open=HTML('<span class="sr-only">'), sighted_only_span_open=HTML('<span aria-hidden="true">'), span_close=HTML('</span>'), a_close=HTML('</a>'), expiration_date=expiration_date.strftime('%b. %-d, %Y'), strong_open=HTML('<strong>'), strong_close=HTML('</strong>'), line_break=HTML('<br>'), upgrade_deadline=upgrade_deadline.strftime('%b. %-d, %Y') ) )
def learner_profile(request, username): """Render the profile page for the specified username. Args: request (HttpRequest) username (str): username of user whose profile is requested. Returns: HttpResponse: 200 if the page was sent successfully HttpResponse: 302 if not logged in (redirect to login page) HttpResponse: 405 if using an unsupported HTTP method Raises: Http404: 404 if the specified user is not authorized or does not exist Example usage: GET /account/profile """ is_profile_mfe_enabled_for_site = configuration_helpers.get_value( 'ENABLE_PROFILE_MICROFRONTEND') if is_profile_mfe_enabled_for_site and REDIRECT_TO_PROFILE_MICROFRONTEND.is_enabled( ): profile_microfrontend_url = "{}{}".format( settings.PROFILE_MICROFRONTEND_URL, username) return redirect(profile_microfrontend_url) try: context = learner_profile_context(request, username, request.user.is_staff) # TODO: LEARNER-2554: 09/2017: Remove message and cookie logic when we no longer want this message message_viewed = False if (context['own_profile'] and SHOW_PROFILE_MESSAGE.is_enabled() and request.COOKIES.get('profile-message-viewed', '') != 'True'): message_text = Text( _(u'Welcome to the new learner profile page. Your full profile now displays more ' u'information to other learners. You can instead choose to display a limited ' u'profile. {learn_more_link_start}Learn more{learn_more_link_end}' ) ).format(learn_more_link_start=HTML( '<a href="https://edx.readthedocs.io/projects/open-edx-learner-guide/en/' 'latest/SFD_dashboard_profile_SectionHead.html#adding-profile-information">' ), learn_more_link_end=HTML('</a>')) PageLevelMessages.register_info_message(request, message_text, dismissable=True) message_viewed = True response = render_to_response('learner_profile/learner_profile.html', context) if message_viewed: response.set_cookie('profile-message-viewed', 'True') return response except (UserNotAuthorized, UserNotFound, ObjectDoesNotExist): raise Http404
def show_reference_template(request, template): """ Shows the specified template as an HTML page. This is used only in debug mode to allow the UX team to produce and work with static reference templates. e.g. http://localhost:8000/template/ux/reference/index.html shows the template from ux/reference/index.html Note: dynamic parameters can also be passed to the page. e.g. /template/ux/reference/index.html?name=Foo """ try: uses_pattern_library = u'/pattern-library/' in request.path is_v1 = u'/v1/' in request.path uses_bootstrap = not uses_pattern_library and not is_v1 context = { 'request': request, 'disable_courseware_js': not is_v1, 'uses_pattern_library': uses_pattern_library, 'uses_bootstrap': uses_bootstrap, } context.update(request.GET.dict()) # Support dynamic rendering of messages if request.GET.get('alert'): PageLevelMessages.register_info_message(request, request.GET.get('alert')) if request.GET.get('success'): PageLevelMessages.register_success_message( request, request.GET.get('success')) if request.GET.get('warning'): PageLevelMessages.register_warning_message( request, request.GET.get('warning')) if request.GET.get('error'): PageLevelMessages.register_error_message(request, request.GET.get('error')) # Add some messages to the course skeleton pages if u'course-skeleton.html' in request.path: PageLevelMessages.register_info_message( request, _('This is a test message')) PageLevelMessages.register_success_message( request, _('This is a success message')) PageLevelMessages.register_warning_message( request, _('This is a test warning')) PageLevelMessages.register_error_message(request, _('This is a test error')) return render_to_response(template, context) except TopLevelLookupException: return HttpResponseNotFound( 'Missing template {template}'.format(template=template))
def learner_profile(request, username): """Render the profile page for the specified username. Args: request (HttpRequest) username (str): username of user whose profile is requested. Returns: HttpResponse: 200 if the page was sent successfully HttpResponse: 302 if not logged in (redirect to login page) HttpResponse: 405 if using an unsupported HTTP method Raises: Http404: 404 if the specified user is not authorized or does not exist Example usage: GET /account/profile """ is_profile_mfe_enabled_for_site = configuration_helpers.get_value('ENABLE_PROFILE_MICROFRONTEND') if is_profile_mfe_enabled_for_site and REDIRECT_TO_PROFILE_MICROFRONTEND.is_enabled(): profile_microfrontend_url = "{}{}".format(settings.PROFILE_MICROFRONTEND_URL, username) return redirect(profile_microfrontend_url) try: context = learner_profile_context(request, username, request.user.is_staff) # TODO: LEARNER-2554: 09/2017: Remove message and cookie logic when we no longer want this message message_viewed = False if (context['own_profile'] and SHOW_PROFILE_MESSAGE.is_enabled() and request.COOKIES.get('profile-message-viewed', '') != 'True'): message_text = Text(_( u'Welcome to the new learner profile page. Your full profile now displays more ' u'information to other learners. You can instead choose to display a limited ' u'profile. {learn_more_link_start}Learn more{learn_more_link_end}' )).format( learn_more_link_start=HTML( '<a href="https://edx.readthedocs.io/projects/open-edx-learner-guide/en/' 'latest/SFD_dashboard_profile_SectionHead.html#adding-profile-information">' ), learn_more_link_end=HTML('</a>') ) PageLevelMessages.register_info_message(request, message_text, dismissable=True) message_viewed = True response = render_to_response( 'learner_profile/learner_profile.html', context ) if message_viewed: response.set_cookie('profile-message-viewed', 'True') return response except (UserNotAuthorized, UserNotFound, ObjectDoesNotExist): raise Http404
def show_reference_template(request, template): """ Shows the specified template as an HTML page. This is used only in debug mode to allow the UX team to produce and work with static reference templates. e.g. http://localhost:8000/template/ux/reference/index.html shows the template from ux/reference/index.html Note: dynamic parameters can also be passed to the page. e.g. /template/ux/reference/index.html?name=Foo """ try: is_v1 = '/v1/' in request.path uses_bootstrap = not is_v1 context = { 'request': request, 'uses_bootstrap': uses_bootstrap, } context.update(request.GET.dict()) # Support dynamic rendering of messages if request.GET.get('alert'): PageLevelMessages.register_info_message(request, request.GET.get('alert')) if request.GET.get('success'): PageLevelMessages.register_success_message( request, request.GET.get('success')) if request.GET.get('warning'): PageLevelMessages.register_warning_message( request, request.GET.get('warning')) if request.GET.get('error'): PageLevelMessages.register_error_message(request, request.GET.get('error')) # Add some messages to the course skeleton pages if 'course-skeleton.html' in request.path: PageLevelMessages.register_info_message( request, _('This is a test message')) PageLevelMessages.register_success_message( request, _('This is a success message')) PageLevelMessages.register_warning_message( request, _('This is a test warning')) PageLevelMessages.register_error_message(request, _('This is a test error')) return render_to_response(template, context) except TemplateDoesNotExist: return HttpResponseNotFound( f'Missing template {bleach.clean(template, strip=True)}')
def register_course_expired_message(request, course): """ Add a banner notifying the user of the user course expiration date if it exists. """ if CourseDurationLimitConfig.enabled_for_enrollment(user=request.user, course_key=course.id): expiration_date = get_user_course_expiration_date(request.user, course) if expiration_date: upgrade_message = _('Your access to this course expires on {expiration_date}. \ <a href="{upgrade_link}">Upgrade now</a> for unlimited access.') PageLevelMessages.register_info_message( request, HTML(upgrade_message).format( expiration_date=expiration_date.strftime('%b %-d'), upgrade_link=verified_upgrade_deadline_link(user=request.user, course=course) ) )
def show_reference_template(request, template): """ Shows the specified template as an HTML page. This is used only in debug mode to allow the UX team to produce and work with static reference templates. e.g. http://localhost:8000/template/ux/reference/index.html shows the template from ux/reference/index.html Note: dynamic parameters can also be passed to the page. e.g. /template/ux/reference/index.html?name=Foo """ try: uses_pattern_library = u'/pattern-library/' in request.path is_v1 = u'/v1/' in request.path uses_bootstrap = not uses_pattern_library and not is_v1 context = { 'request': request, 'uses_pattern_library': uses_pattern_library, 'uses_bootstrap': uses_bootstrap, } context.update(request.GET.dict()) # Support dynamic rendering of messages if request.GET.get('alert'): PageLevelMessages.register_info_message(request, request.GET.get('alert')) if request.GET.get('success'): PageLevelMessages.register_success_message(request, request.GET.get('success')) if request.GET.get('warning'): PageLevelMessages.register_warning_message(request, request.GET.get('warning')) if request.GET.get('error'): PageLevelMessages.register_error_message(request, request.GET.get('error')) # Add some messages to the course skeleton pages if u'course-skeleton.html' in request.path: PageLevelMessages.register_info_message(request, _('This is a test message')) PageLevelMessages.register_success_message(request, _('This is a success message')) PageLevelMessages.register_warning_message(request, _('This is a test warning')) PageLevelMessages.register_error_message(request, _('This is a test error')) return render_to_response(template, context) except TopLevelLookupException: return HttpResponseNotFound('Missing template {template}'.format(template=template))
def register_course_expired_message(request, course): """ Add a banner notifying the user of the user course expiration date if it exists. """ if not CourseDurationLimitConfig.enabled_for_enrollment( user=request.user, course_key=course.id): return expiration_date = get_user_course_expiration_date(request.user, course) if not expiration_date: return if is_masquerading_as_student( request.user, course.id) and timezone.now() > expiration_date: upgrade_message = _( 'This learner would not have access to this course. ' 'Their access expired on {expiration_date}.') PageLevelMessages.register_warning_message( request, HTML(upgrade_message).format( expiration_date=expiration_date.strftime('%b %-d'))) else: upgrade_message = _( 'Your access to this course expires on {expiration_date}. \ {a_open}Upgrade now {sronly_span_open}to retain access past {expiration_date}.\ {span_close}{a_close}{sighted_only_span_open}for unlimited access.{span_close}' ) PageLevelMessages.register_info_message( request, Text(upgrade_message).format( a_open=HTML('<a href="{upgrade_link}">').format( upgrade_link=verified_upgrade_deadline_link( user=request.user, course=course)), sronly_span_open=HTML('<span class="sr-only">'), sighted_only_span_open=HTML('<span aria-hidden="true">'), span_close=HTML('</span>'), a_close=HTML('</a>'), expiration_date=expiration_date.strftime('%b %-d'), ))
def register_course_expired_message(request, course): """ Add a banner notifying the user of the user course expiration date if it exists. """ if not CourseDurationLimitConfig.enabled_for_enrollment(user=request.user, course_key=course.id): return expiration_date = get_user_course_expiration_date(request.user, course) if not expiration_date: return if is_masquerading_as_student(request.user, course.id) and timezone.now() > expiration_date: upgrade_message = _('This learner would not have access to this course. ' 'Their access expired on {expiration_date}.') PageLevelMessages.register_warning_message( request, HTML(upgrade_message).format( expiration_date=expiration_date.strftime('%b %-d') ) ) else: upgrade_message = _('Your access to this course expires on {expiration_date}. \ {a_open}Upgrade now {sronly_span_open}to retain access past {expiration_date}.\ {span_close}{a_close}{sighted_only_span_open}for unlimited access.{span_close}') PageLevelMessages.register_info_message( request, Text(upgrade_message).format( a_open=HTML('<a href="{upgrade_link}">').format( upgrade_link=verified_upgrade_deadline_link(user=request.user, course=course) ), sronly_span_open=HTML('<span class="sr-only">'), sighted_only_span_open=HTML('<span aria-hidden="true">'), span_close=HTML('</span>'), a_close=HTML('</a>'), expiration_date=expiration_date.strftime('%b %-d'), ) )
def register_course_expired_message(request, course): """ Add a banner notifying the user of the user course expiration date if it exists. """ if not CourseDurationLimitConfig.enabled_for_enrollment( user=request.user, course_key=course.id): return expiration_date = get_user_course_expiration_date(request.user, course) if not expiration_date: return if is_masquerading_as_specific_student( request.user, course.id) and timezone.now() > expiration_date: upgrade_message = _( 'This learner does not have access to this course. ' 'Their access expired on {expiration_date}.') PageLevelMessages.register_warning_message( request, HTML(upgrade_message).format(expiration_date=strftime_localized( expiration_date, '%b. %-d, %Y'))) else: enrollment = CourseEnrollment.get_enrollment(request.user, course.id) if enrollment is None: return upgrade_deadline = enrollment.upgrade_deadline now = timezone.now() course_upgrade_deadline = enrollment.course_upgrade_deadline if (not upgrade_deadline) or (upgrade_deadline < now): upgrade_deadline = course_upgrade_deadline expiration_message = _( '{strong_open}Audit Access Expires {expiration_date}{strong_close}' '{line_break}You lose all access to this course, including your progress, on ' '{expiration_date}.') upgrade_deadline_message = _( '{line_break}Upgrade by {upgrade_deadline} to get unlimited access to the course ' 'as long as it exists on the site. {a_open}Upgrade now{sronly_span_open} to ' 'retain access past {expiration_date}{span_close}{a_close}') full_message = expiration_message if upgrade_deadline and now < upgrade_deadline: full_message += upgrade_deadline_message using_upgrade_messaging = True else: using_upgrade_messaging = False language = get_language() language_is_es = language and language.split('-')[0].lower() == 'es' if language_is_es: formatted_expiration_date = strftime_localized( expiration_date, '%-d de %b. de %Y').lower() else: formatted_expiration_date = strftime_localized( expiration_date, '%b. %-d, %Y') if using_upgrade_messaging: if language_is_es: formatted_upgrade_deadline = strftime_localized( upgrade_deadline, '%-d de %b. de %Y').lower() else: formatted_upgrade_deadline = strftime_localized( upgrade_deadline, '%b. %-d, %Y') PageLevelMessages.register_info_message( request, Text(full_message).format( a_open=HTML('<a href="{upgrade_link}">').format( upgrade_link=verified_upgrade_deadline_link( user=request.user, course=course)), sronly_span_open=HTML('<span class="sr-only">'), span_close=HTML('</span>'), a_close=HTML('</a>'), expiration_date=formatted_expiration_date, strong_open=HTML('<strong>'), strong_close=HTML('</strong>'), line_break=HTML('<br>'), upgrade_deadline=formatted_upgrade_deadline)) else: PageLevelMessages.register_info_message( request, Text(full_message).format( span_close=HTML('</span>'), expiration_date=formatted_expiration_date, strong_open=HTML('<strong>'), strong_close=HTML('</strong>'), line_break=HTML('<br>'), ))