def transcript(request, course_slug=None): user = request.user course_list = user.courses_as_student.all() course_transcript = None template_name = 'courses/transcript.html' if course_slug: template_name = 'courses/transcript_course.html' course_transcript = get_object_or_404(Course, slug=course_slug) course_list = course_list.filter(slug=course_slug) courses_info = [] use_old_calculus = settings.COURSES_USING_OLD_TRANSCRIPT for course in course_list: cert_url = '' total_mark, units_info = get_course_mark(course, user) award = None passed = False if course.threshold is not None and float( course.threshold) <= total_mark: passed = True cert_url = settings.CERTIFICATE_URL % { 'courseid': course.id, 'email': user.email.lower() } badge = course.completion_badge if badge is not None: try: award = Award.objects.get(badge=badge, user=user) except Award.DoesNotExist: award = Award(badge=badge, user=user) award.save() total_weight_unnormalized, unit_course_counter, course_units = get_course_intermediate_calculations( course) units_info_ordered = [] for unit in course_units: uinfo = next((u for u in units_info if u['unit_id'] == unit.pk), { 'relative_mark': 0, 'mark': 0 }) uinfo['unit'] = unit normalized_unit_weight = normalize_unit_weight( unit, unit_course_counter, total_weight_unnormalized) uinfo['normalized_weight'] = normalized_unit_weight unit_class = get_unit_badge_class(unit) uinfo['badge_class'] = unit_class units_info_ordered.append(uinfo) courses_info.append({ 'course': course, 'units_info': units_info_ordered, 'mark': total_mark, 'award': award, 'passed': passed, 'cert_url': cert_url, 'use_old_calculus': use_old_calculus, }) return render_to_response(template_name, { 'courses_info': courses_info, 'course_transcript': course_transcript, }, context_instance=RequestContext(request))
def course_progress(request, course_slug): course = get_object_or_404(Course, slug=course_slug) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: return HttpResponseForbidden(_("You are not enrolled in this course")) is_ready, ask_admin = is_course_ready(course) if not is_ready: return render_to_response( "courses/no_content.html", {"course": course, "is_enrolled": is_enrolled, "ask_admin": ask_admin}, context_instance=RequestContext(request), ) units = [] for u in course.unit_set.all(): unit = {"id": u.id, "title": u.title, "unittype": u.unittype, "badge_class": get_unit_badge_class(u)} units.append(unit) return render_to_response( "courses/progress.html", { "course": course, "unit_list": units, "is_enrolled": is_enrolled, # required due course nav templatetag "is_teacher": is_teacher_test(request.user, course), }, context_instance=RequestContext(request), )
def course_progress(request, course_slug): course = get_object_or_404(Course, slug=course_slug) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: messages.error(request, _('You are not enrolled in this course')) return HttpResponseRedirect(reverse('course_overview', args=[course_slug])) is_ready, ask_admin = is_course_ready(course) if not is_ready: return render_to_response('courses/no_content.html', { 'course': course, 'is_enrolled': is_enrolled, 'ask_admin': ask_admin, }, context_instance=RequestContext(request)) units = [] for u in get_units_available_for_user(course, request.user): unit = { 'id': u.id, 'title': u.title, 'unittype': u.unittype, 'badge_class': get_unit_badge_class(u), 'badge_tooltip': u.get_unit_type_name(), } units.append(unit) return render_to_response('courses/progress.html', { 'course': course, 'unit_list': units, 'is_enrolled': is_enrolled, # required due course nav templatetag 'is_teacher': is_teacher_test(request.user, course), }, context_instance=RequestContext(request))
def course_progress(request, course_slug): course = get_object_or_404(Course, slug=course_slug) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: return HttpResponseForbidden(_('You are not enrolled in this course')) is_ready, ask_admin = is_course_ready(course) if not is_ready: return render_to_response('courses/no_content.html', { 'course': course, 'is_enrolled': is_enrolled, 'ask_admin': ask_admin, }, context_instance=RequestContext(request)) units = [] for u in course.unit_set.all(): unit = { 'id': u.id, 'title': u.title, 'unittype': u.unittype, 'badge_class': get_unit_badge_class(u), } units.append(unit) return render_to_response('courses/progress.html', { 'course': course, 'unit_list': units, 'is_enrolled': is_enrolled, # required due course nav templatetag 'is_teacher': is_teacher_test(request.user, course), }, context_instance=RequestContext(request))
def transcript(request, course_slug=None): """ Transcript is the main view of the user progress, here the user is show with the overall progress per course, quallifications and badges if he obtained any. We also give the access to the certification. :permissions: login :context: course, units_info, mark, award, passed, cert_url, use_old_calculus .. versionadded:: 0.1 """ course_list = request.user.courses_as_student.all() course_transcript = None template_name = 'courses/transcript.html' if course_slug: template_name = 'courses/transcript_course.html' course_transcript = get_object_or_404(Course, slug=course_slug) course_list = course_list.filter(slug=course_slug) courses_info = [] cert_url = '' for course in course_list: use_old_calculus = settings.COURSES_USING_OLD_TRANSCRIPT total_mark, units_info = calculate_course_mark_old(course, request.user) award = None passed = False if course.threshold is not None and float(course.threshold) <= total_mark: passed = True cert_url = settings.CERTIFICATE_URL % { 'courseid': course.id, 'email': request.user.email.lower() } badge = course.completion_badge if badge is not None: try: award = Award.objects.get(badge=badge, user=request.user) except Award.DoesNotExist: award = Award(badge=badge, user=request.user) award.save() for idx, uinfo in enumerate(units_info): unit_class = get_unit_badge_class(uinfo['unit']) units_info[idx]['badge_class'] = unit_class if (not use_old_calculus and uinfo['unit'].unittype == 'n') or \ not units_info[idx]['use_unit_in_total']: units_info[idx]['hide'] = True courses_info.append({ 'course': course, 'units_info': units_info, 'mark': total_mark, 'award': award, 'passed': passed, 'cert_url': cert_url, 'use_old_calculus': use_old_calculus, }) return render_to_response(template_name, { 'courses_info': courses_info, 'course_transcript': course_transcript, }, context_instance=RequestContext(request))
def transcript(request, course_slug=None): """ Transcript is the main view of the user progress, here the user is show with the overall progress per course, quallifications and badges if he obtained any. We also give the access to the certification. :permissions: login :context: course, units_info, mark, award, passed, cert_url, use_old_calculus .. versionadded:: 0.1 """ course_list = request.user.courses_as_student.all() if course_slug: course = get_object_or_404(Course, slug=course_slug) course_list = course_list.filter(slug=course_slug) courses_info = [] cert_url = "" for course in course_list: use_old_calculus = False if course.slug in settings.COURSES_USING_OLD_TRANSCRIPT: use_old_calculus = True total_mark, units_info = calculate_course_mark(course, request.user) award = None passed = False if course.threshold is not None and float(course.threshold) <= total_mark: passed = True cert_url = settings.CERTIFICATE_URL % {"courseid": course.id, "email": request.user.email.lower()} badge = course.completion_badge if badge is not None: try: award = Award.objects.get(badge=badge, user=request.user) except Award.DoesNotExist: award = Award(badge=badge, user=request.user) award.save() for idx, uinfo in enumerate(units_info): unit_class = get_unit_badge_class(uinfo["unit"]) units_info[idx]["badge_class"] = unit_class if (not use_old_calculus and uinfo["unit"].unittype == "n") or not units_info[idx]["use_unit_in_total"]: units_info[idx]["hide"] = True courses_info.append( { "course": course, "units_info": units_info, "mark": total_mark, "award": award, "passed": passed, "cert_url": cert_url, "use_old_calculus": use_old_calculus, } ) return render_to_response( "courses/transcript.html", {"courses_info": courses_info, "course_slug": course_slug}, context_instance=RequestContext(request), )
def transcript(request, course_slug=None): user = request.user course_list = user.courses_as_student.all() course_transcript = None template_name = 'courses/transcript.html' if course_slug: template_name = 'courses/transcript_course.html' course_transcript = get_object_or_404(Course, slug=course_slug) course_list = course_list.filter(slug=course_slug) courses_info = [] use_old_calculus = settings.COURSES_USING_OLD_TRANSCRIPT for course in course_list: cert_url = '' total_mark, units_info = get_course_mark(course, user) award = None passed = False if course.threshold is not None and float(course.threshold) <= total_mark: passed = True cert_url = settings.CERTIFICATE_URL % { 'courseid': course.id, 'email': user.email.lower() } badge = course.completion_badge if badge is not None: try: award = Award.objects.get(badge=badge, user=user) except Award.DoesNotExist: award = Award(badge=badge, user=user) award.save() total_weight_unnormalized, unit_course_counter, course_units = get_course_intermediate_calculations(course) units_info_ordered = [] for unit in course_units: uinfo = next((u for u in units_info if u['unit_id'] == unit.pk), {'relative_mark': 0, 'mark': 0}) uinfo['unit'] = unit normalized_unit_weight = normalize_unit_weight(unit, unit_course_counter, total_weight_unnormalized) uinfo['normalized_weight'] = normalized_unit_weight unit_class = get_unit_badge_class(unit) uinfo['badge_class'] = unit_class units_info_ordered.append(uinfo) courses_info.append({ 'course': course, 'units_info': units_info_ordered, 'mark': total_mark, 'award': award, 'passed': passed, 'cert_url': cert_url, 'use_old_calculus': use_old_calculus, }) return render_to_response(template_name, { 'courses_info': courses_info, 'course_transcript': course_transcript, }, context_instance=RequestContext(request))
def course_classroom(request, course_slug): """ Main view of the course content (class). If the user is not enrolled we show him a message. If the course is not ready and the user is not admin we redirect the user to a denied access page. :permissions: login :context: course, is_enrolled, ask_admin, unit_list, is_teacher, peer_view .. versionadded:: 0.1 """ course = get_object_or_404(Course, slug=course_slug) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: messages.error(request, _("You are not enrolled in this course")) return HttpResponseRedirect(reverse("course_overview", args=[course_slug])) is_ready, ask_admin = is_course_ready(course) if not is_ready and not request.user.is_superuser: return render_to_response( "courses/no_content.html", {"course": course, "is_enrolled": is_enrolled, "ask_admin": ask_admin}, context_instance=RequestContext(request), ) units = [] for u in get_units_available_for_user(course, request.user): unit = { "id": u.id, "title": u.title, "unittype": u.unittype, "badge_class": get_unit_badge_class(u), "badge_tooltip": u.get_unit_type_name(), } units.append(unit) peer_review = { "text_max_size": settings.PEER_REVIEW_TEXT_MAX_SIZE, "file_max_size": settings.PEER_REVIEW_FILE_MAX_SIZE, } return render_to_response( "courses/classroom.html", { "course": course, "unit_list": units, "is_enrolled": is_enrolled, "is_teacher": is_teacher_test(request.user, course), "peer_review": peer_review, }, context_instance=RequestContext(request), )
def course_classroom(request, course_slug): """ Main view of the course content (class). If the user is not enrolled we show him a message. If the course is not ready and the user is not admin we redirect the user to a denied access page. :permissions: login :context: course, is_enrolled, ask_admin, unit_list, is_teacher, peer_view .. versionadded:: 0.1 """ course = get_object_or_404(Course, slug=course_slug) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: messages.error(request, _('You are not enrolled in this course')) return HttpResponseRedirect( reverse('course_overview', args=[course_slug])) is_ready, ask_admin = is_course_ready(course) if not is_ready and not request.user.is_superuser: return render_to_response('courses/no_content.html', { 'course': course, 'is_enrolled': is_enrolled, 'ask_admin': ask_admin, }, context_instance=RequestContext(request)) units = [] for u in get_units_available_for_user(course, request.user): unit = { 'id': u.id, 'title': u.title, 'unittype': u.unittype, 'badge_class': get_unit_badge_class(u), 'badge_tooltip': u.get_unit_type_name(), } units.append(unit) peer_review = { 'text_max_size': settings.PEER_REVIEW_TEXT_MAX_SIZE, 'file_max_size': settings.PEER_REVIEW_FILE_MAX_SIZE, } return render_to_response( 'courses/classroom.html', { 'course': course, 'unit_list': units, 'is_enrolled': is_enrolled, 'is_teacher': is_teacher_test(request.user, course), 'peer_review': peer_review }, context_instance=RequestContext(request))
def transcript(request): """ Transcript is the main view of the user progress, here the user is show with the overall progress per course, quallifications and badges if he obtained any. We also give the access to the certification. :permissions: login :context: course, units_info, mark, award, passed, cert_url, use_old_calculus .. versionadded:: 0.1 """ course_list = request.user.courses_as_student.all() courses_info = [] cert_url = '' for course in course_list: use_old_calculus = False if course.slug in settings.COURSES_USING_OLD_TRANSCRIPT: use_old_calculus = True total_mark, units_info = calculate_course_mark(course, request.user) award = None passed = False if course.threshold is not None and float( course.threshold) <= total_mark: passed = True cert_url = settings.CERTIFICATE_URL % { 'courseid': course.id, 'email': request.user.email.lower() } badge = course.completion_badge if badge is not None: try: award = Award.objects.get(badge=badge, user=request.user) except Award.DoesNotExist: award = Award(badge=badge, user=request.user) award.save() for idx, uinfo in enumerate(units_info): unit_class = get_unit_badge_class(uinfo['unit']) units_info[idx]['badge_class'] = unit_class if (not use_old_calculus and uinfo['unit'].unittype == 'n') or \ not units_info[idx]['use_unit_in_total']: units_info[idx]['hide'] = True courses_info.append({ 'course': course, 'units_info': units_info, 'mark': total_mark, 'award': award, 'passed': passed, 'cert_url': cert_url, 'use_old_calculus': use_old_calculus, }) return render_to_response('courses/transcript.html', { 'courses_info': courses_info, }, context_instance=RequestContext(request))
def course_classroom(request, course_slug): """ Main view of the course content (class). If the user is not enrolled we show him a message. If the course is not ready and the user is not admin we redirect the user to a denied access page. :permissions: login :context: course, is_enrolled, ask_admin, unit_list, is_teacher, peer_view .. versionadded:: 0.1 """ course = get_course_if_user_can_view_or_404(course_slug, request) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: messages.error(request, _('You are not enrolled in this course')) return HttpResponseRedirect(reverse('course_overview', args=[course_slug])) is_ready, ask_admin = is_course_ready(course) if not is_ready and not request.user.is_superuser: return render_to_response('courses/no_content.html', { 'course': course, 'is_enrolled': is_enrolled, 'ask_admin': ask_admin, }, context_instance=RequestContext(request)) units = [] for u in get_units_available_for_user(course, request.user): unit = { 'id': u.id, 'title': u.title, 'unittype': u.unittype, 'badge_class': get_unit_badge_class(u), 'badge_tooltip': u.get_unit_type_name(), } units.append(unit) peer_review = { 'text_max_size': settings.PEER_REVIEW_TEXT_MAX_SIZE, 'file_max_size': settings.PEER_REVIEW_FILE_MAX_SIZE, } return render_to_response('courses/classroom.html', { 'course': course, 'unit_list': units, 'is_enrolled': is_enrolled, 'is_teacher': is_teacher_test(request.user, course), 'peer_review': peer_review }, context_instance=RequestContext(request))
def course_progress(request, course_slug): """ Main view for the user progress in the course. This will return the units for the user in the current course. :permissions: login :context: course, is_enrolled, ask_admin, course, unit_list, is_teacher .. versionadded:: 0.1 """ course = get_course_if_user_can_view_or_404(course_slug, request) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: messages.error(request, _('You are not enrolled in this course')) return HttpResponseRedirect( reverse('course_overview', args=[course_slug])) is_ready, ask_admin = is_course_ready(course) if not is_ready: return render_to_response('courses/no_content.html', { 'course': course, 'is_enrolled': is_enrolled, 'ask_admin': ask_admin, }, context_instance=RequestContext(request)) units = [] for u in get_units_available_for_user(course, request.user): unit = { 'id': u.id, 'title': u.title, 'unittype': u.unittype, 'badge_class': get_unit_badge_class(u), 'badge_tooltip': u.get_unit_type_name(), } units.append(unit) return render_to_response( 'courses/progress.html', { 'course': course, 'unit_list': units, 'is_enrolled': is_enrolled, # required due course nav templatetag 'is_teacher': is_teacher_test(request.user, course), }, context_instance=RequestContext(request))
def course_progress(request, course_slug): """ Main view for the user progress in the course. This will return the units for the user in the current course. :permissions: login :context: course, is_enrolled, ask_admin, course, unit_list, is_teacher .. versionadded:: 0.1 """ course = get_object_or_404(Course, slug=course_slug) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: messages.error(request, _("You are not enrolled in this course")) return HttpResponseRedirect(reverse("course_overview", args=[course_slug])) is_ready, ask_admin = is_course_ready(course) if not is_ready: return render_to_response( "courses/no_content.html", {"course": course, "is_enrolled": is_enrolled, "ask_admin": ask_admin}, context_instance=RequestContext(request), ) units = [] for u in get_units_available_for_user(course, request.user): unit = { "id": u.id, "title": u.title, "unittype": u.unittype, "badge_class": get_unit_badge_class(u), "badge_tooltip": u.get_unit_type_name(), } units.append(unit) return render_to_response( "courses/progress.html", { "course": course, "unit_list": units, "is_enrolled": is_enrolled, # required due course nav templatetag "is_teacher": is_teacher_test(request.user, course), }, context_instance=RequestContext(request), )
def course_classroom(request, course_slug): course = get_object_or_404(Course, slug=course_slug) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: return HttpResponseForbidden(_("You are not enrolled in this course")) is_ready, ask_admin = is_course_ready(course) if not is_ready: return render_to_response( "courses/no_content.html", {"course": course, "is_enrolled": is_enrolled, "ask_admin": ask_admin}, context_instance=RequestContext(request), ) units = [] for u in get_units_available_for_user(course, request.user): unit = { "id": u.id, "title": u.title, "unittype": u.unittype, "badge_class": get_unit_badge_class(u), "badge_tooltip": u.get_unit_type_name(), } units.append(unit) peer_review = { "text_max_size": settings.PEER_REVIEW_TEXT_MAX_SIZE, "file_max_size": settings.PEER_REVIEW_FILE_MAX_SIZE, } return render_to_response( "courses/classroom.html", { "course": course, "unit_list": units, "is_enrolled": is_enrolled, "is_teacher": is_teacher_test(request.user, course), "peer_review": peer_review, }, context_instance=RequestContext(request), )
def transcript(request): course_list = request.user.courses_as_student.all() courses_info = [] cert_url = '' for course in course_list: use_old_calculus = False if course.slug in settings.COURSES_USING_OLD_TRANSCRIPT: use_old_calculus = True total_mark, units_info = calculate_course_mark(course, request.user) award = None passed = False if course.threshold is not None and float(course.threshold) <= total_mark: passed = True cert_url = settings.CERTIFICATE_URL % { 'courseid': course.id, 'email': request.user.email.lower() } badge = course.completion_badge if badge is not None: try: award = Award.objects.get(badge=badge, user=request.user) except Award.DoesNotExist: award = Award(badge=badge, user=request.user) award.save() for idx, uinfo in enumerate(units_info): unit_class = get_unit_badge_class(uinfo['unit']) units_info[idx]['badge_class'] = unit_class if (not use_old_calculus and uinfo['unit'].unittype == 'n') or \ not units_info[idx]['use_unit_in_total']: units_info[idx]['hide'] = True courses_info.append({ 'course': course, 'units_info': units_info, 'mark': total_mark, 'award': award, 'passed': passed, 'cert_url': cert_url, 'use_old_calculus': use_old_calculus, }) return render_to_response('courses/transcript.html', { 'courses_info': courses_info, }, context_instance=RequestContext(request))
def transcript(request): course_list = request.user.courses_as_student.all() courses_info = [] cert_url = "" for course in course_list: use_old_calculus = False if course.slug in settings.COURSES_USING_OLD_TRANSCRIPT: use_old_calculus = True total_mark, units_info = calculate_course_mark(course, request.user) award = None passed = False if course.threshold is not None and float(course.threshold) <= total_mark: passed = True cert_url = settings.CERTIFICATE_URL % {"courseid": course.id, "email": request.user.email} badge = course.completion_badge if badge is not None: try: award = Award.objects.get(badge=badge, user=request.user) except Award.DoesNotExist: award = Award(badge=badge, user=request.user) award.save() for idx, uinfo in enumerate(units_info): unit_class = get_unit_badge_class(uinfo["unit"]) units_info[idx]["badge_class"] = unit_class if (not use_old_calculus and uinfo["unit"].unittype == "n") or not units_info[idx]["use_unit_in_total"]: units_info[idx]["hide"] = True courses_info.append( { "course": course, "units_info": units_info, "mark": total_mark, "award": award, "passed": passed, "cert_url": cert_url, "use_old_calculus": use_old_calculus, } ) return render_to_response( "courses/transcript.html", {"courses_info": courses_info}, context_instance=RequestContext(request) )
def course_classroom(request, course_slug): course = get_object_or_404(Course, slug=course_slug) is_enrolled = course.students.filter(id=request.user.id).exists() if not is_enrolled: messages.error(request, _('You are not enrolled in this course')) return HttpResponseRedirect(reverse('course_overview', args=[course_slug])) is_ready, ask_admin = is_course_ready(course) if not is_ready: return render_to_response('courses/no_content.html', { 'course': course, 'is_enrolled': is_enrolled, 'ask_admin': ask_admin, }, context_instance=RequestContext(request)) units = [] for u in get_units_available_for_user(course, request.user): unit = { 'id': u.id, 'title': u.title, 'unittype': u.unittype, 'badge_class': get_unit_badge_class(u), 'badge_tooltip': u.get_unit_type_name(), } units.append(unit) peer_review = { 'text_max_size': settings.PEER_REVIEW_TEXT_MAX_SIZE, 'file_max_size': settings.PEER_REVIEW_FILE_MAX_SIZE, } return render_to_response('courses/classroom.html', { 'course': course, 'unit_list': units, 'is_enrolled': is_enrolled, 'is_teacher': is_teacher_test(request.user, course), 'peer_review': peer_review }, context_instance=RequestContext(request))
def transcript_v2(request, course_slug=None): user = request.user if not user.is_superuser: from django.http import Http404 raise Http404 course_list = request.user.courses_as_student.all() course_transcript = None template_name = 'courses/transcript.html' if course_slug: template_name = 'courses/transcript_course.html' course_transcript = get_object_or_404(Course, slug=course_slug) course_list = course_list.filter(slug=course_slug) courses_info = [] cert_url = '' use_old_calculus = settings.COURSES_USING_OLD_TRANSCRIPT for course in course_list: total_mark, units_info = get_course_mark(course, request.user) award = None passed = False if course.threshold is not None and float(course.threshold) <= total_mark: passed = True cert_url = settings.CERTIFICATE_URL % { 'courseid': course.id, 'email': request.user.email.lower() } badge = course.completion_badge if badge is not None: try: award = Award.objects.get(badge=badge, user=request.user) except Award.DoesNotExist: award = Award(badge=badge, user=request.user) award.save() total_weight_unnormalized, unit_course_counter, course_units = get_course_intermediate_calculations(course) units_pks_ordered = map(lambda x: x[0], course_units.values_list('pk')) def order_units_info(unit): try: return units_pks_ordered.index(unit['unit_id']) except ValueError: return len(units_pks_ordered) units_info = sorted(units_info, key=order_units_info) for idx, unit in enumerate(course_units): try: uinfo = units_info[idx] except IndexError: uinfo = {'relative_mark': 0, 'mark': 0} uinfo['unit'] = unit normalized_unit_weight = normalize_unit_weight(unit, unit_course_counter, total_weight_unnormalized) uinfo['normalized_weight'] = normalized_unit_weight unit_class = get_unit_badge_class(unit) uinfo['badge_class'] = unit_class courses_info.append({ 'course': course, 'units_info': units_info, 'mark': total_mark, 'award': award, 'passed': passed, 'cert_url': cert_url, 'use_old_calculus': use_old_calculus, }) return render_to_response(template_name, { 'courses_info': courses_info, 'course_transcript': course_transcript, }, context_instance=RequestContext(request))