def course_review(request, semester_id, course_id, offset=None): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) # check course state if not course.can_fsr_review(): messages.add_message(request, messages.ERROR, _("Reviewing not possible in current state.")) return redirect('evap.fsr.views.semester_view', semester_id) reviewFS = modelformset_factory(TextAnswer, form=ReviewTextAnswerForm, can_order=False, can_delete=False, extra=0) # compute base queryset base_queryset = course.textanswer_set.filter(checked=False).values_list('id', flat=True).order_by('id') # figure out offset if offset is None: # get offset for current course key_name = "course_%d_offset" % course.id offset = cache.get(key_name) or 0 # store offset for next page view cache.set(key_name, (offset + TextAnswer.elements_per_page) % base_queryset.count()) else: offset = int(offset) # compute form queryset length = min(TextAnswer.elements_per_page, len(base_queryset)) form_queryset = course.textanswer_set.filter(pk__in=[base_queryset[(offset + i) % len(base_queryset)] for i in range(0, length)]) # create formset from sliced queryset formset = reviewFS(request.POST or None, queryset=form_queryset) if formset.is_valid(): count = 0 for form in formset: form.instance.save() if form.instance.checked: count = count + 1 if course.state=="evaluated" and course.is_fully_checked(): messages.add_message(request, messages.INFO, _("Successfully reviewed %(number)d course answers for %(name)s. %(name)s is now fully reviewed.") % {'number': count, 'name': course.name} ) course.review_finished() course.save() return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=request.GET.get('tab', '1')) else: messages.add_message(request, messages.INFO, _("Successfully reviewed %(number)d course answers for %(name)s.") % {'number': count, 'name': course.name} ) operation = request.POST.get('operation') if operation == 'save_and_next' and not course.is_fully_checked(): return custom_redirect('evap.fsr.views.course_review', semester_id, course_id, tab=request.GET.get('tab', '1')) else: return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=request.GET.get('tab', '1')) else: return render_to_response("fsr_course_review.html", dict(semester=semester, course=course, formset=formset, offset=offset, TextAnswer=TextAnswer), context_instance=RequestContext(request))
def course_review(request, semester_id, course_id, offset=None): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) # check course state if not course.can_fsr_review(): messages.warning(request, _("Reviewing not possible in current state.")) return redirect('evap.fsr.views.semester_view', semester_id) reviewFS = modelformset_factory(TextAnswer, form=ReviewTextAnswerForm, can_order=False, can_delete=False, extra=0) # compute base queryset base_queryset = course.textanswer_set.filter(checked=False).values_list('id', flat=True).order_by('id') # figure out offset if offset is None: # get offset for current course key_name = "course_%d_offset" % course.id offset = cache.get(key_name) or 0 # store offset for next page view cache.set(key_name, (offset + TextAnswer.elements_per_page) % base_queryset.count()) else: offset = int(offset) # compute form queryset length = min(TextAnswer.elements_per_page, len(base_queryset)) form_queryset = course.textanswer_set.filter(pk__in=[base_queryset[(offset + i) % len(base_queryset)] for i in range(0, length)]) # create formset from sliced queryset formset = reviewFS(request.POST or None, queryset=form_queryset) if formset.is_valid(): count = 0 for form in formset: form.instance.save() if form.instance.checked: count = count + 1 if course.state == "evaluated" and course.is_fully_checked(): messages.success(request, _("Successfully reviewed {count} course answers for {course}. {course} is now fully reviewed.").format(count=count, course=course.name)) course.review_finished() course.save() return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=get_tab(request)) else: messages.success(request, _("Successfully reviewed {count} course answers for {course}.").format(count=count, course=course.name)) operation = request.POST.get('operation') if operation == 'save_and_next' and not course.is_fully_checked(): return custom_redirect('evap.fsr.views.course_review', semester_id, course_id, tab=get_tab(request)) else: return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=get_tab(request)) else: return render_to_response("fsr_course_review.html", dict(semester=semester, course=course, formset=formset, offset=offset, TextAnswer=TextAnswer), context_instance=RequestContext(request))
def course_unpublish(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) # check course state if not course.state == "published": messages.warning(request, _("The course '%s' cannot be unpublished, because it is not published.") % course.name) return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=get_tab(request)) if request.method == 'POST': course.revoke() course.save() return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=get_tab(request)) else: return render_to_response("fsr_course_unpublish.html", dict(semester=semester, course=course), context_instance=RequestContext(request))
def course_unpublish(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) # check course state if not course.state == "published": messages.add_message(request, messages.ERROR, _("The course '%s' cannot be unpublished, because it is not published.") % course.name) return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=request.GET.get('tab', '1')) if request.method == 'POST': course.revoke() course.save() return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=request.GET.get('tab', '1')) else: return render_to_response("fsr_course_unpublish.html", dict(semester=semester, course=course), context_instance=RequestContext(request))
def course_email(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) form = CourseEmailForm(request.POST or None, instance=course) if form.is_valid(): form.send() if form.all_recepients_reachable(): messages.add_message( request, messages.INFO, _("Successfully sent emails for '%s'.") % course.name) else: messages.add_message( request, messages.WARNING, _("Successfully sent some emails for '%(course)s', but %(count)d could not be reached as they do not have an email address." ) % dict(course=course.name, count=form.missing_email_addresses())) return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=request.GET.get('tab', '1')) else: return render_to_response("fsr_course_email.html", dict(semester=semester, course=course, form=form), context_instance=RequestContext(request))
def course_contributor_ready(request, semester_id, course_id): get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) course.ready_for_contributors() course.save() return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=request.GET.get('tab', '1'))
def faq_index(request): sections = FaqSection.objects.all() sectionFS = modelformset_factory(FaqSection, form=FaqSectionForm, can_order=False, can_delete=True, extra=0) formset = sectionFS(request.POST or None, queryset=sections) if formset.is_valid(): formset.save() messages.add_message(request, messages.INFO, _("Successfully updated the FAQ sections.")) return custom_redirect('evap.fsr.views.index') else: return render_to_response("fsr_faq_index.html", dict(formset=formset, sections=sections), context_instance=RequestContext(request))
def faq_index(request): sections = FaqSection.objects.all() sectionFS = modelformset_factory(FaqSection, form=FaqSectionForm, can_order=False, can_delete=True, extra=0) formset = sectionFS(request.POST or None, queryset=sections) if formset.is_valid(): formset.save() messages.success(request, _("Successfully updated the FAQ sections.")) return custom_redirect('evap.fsr.views.faq_index') else: return render_to_response("fsr_faq_index.html", dict(formset=formset, sections=sections), context_instance=RequestContext(request))
def course_delete(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) # check course state if not course.can_fsr_delete(): messages.add_message(request, messages.ERROR, _("The course '%s' cannot be deleted, because it is still in use.") % course.name) return redirect('evap.fsr.views.semester_view', semester_id) if request.method == 'POST': course.delete() return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=request.GET.get('tab', '1')) else: return render_to_response("fsr_course_delete.html", dict(semester=semester, course=course), context_instance=RequestContext(request))
def faq_section(request, section_id): section = get_object_or_404(FaqSection, id=section_id) questions = FaqQuestion.objects.filter(section=section) questionFS = modelformset_factory(FaqQuestion, form=FaqQuestionForm, can_order=False, can_delete=True, extra=0) formset = questionFS(request.POST or None, queryset=questions) if formset.is_valid(): formset.save() messages.add_message(request, messages.INFO, _("Successfully updated the FAQ questions.")) return custom_redirect('evap.fsr.views.index') else: return render_to_response("fsr_faq_section.html", dict(formset=formset, section=section, questions=questions), context_instance=RequestContext(request))
def user_edit(request, user_id): user = get_object_or_404(User, id=user_id) form = UserForm(request.POST or None, request.FILES or None, instance=UserProfile.get_for_user(user)) if form.is_valid(): form.save() messages.add_message(request, messages.INFO, _("Successfully updated user.")) if "filter" in request.GET: return custom_redirect('evap.fsr.views.user_index', filter=request.GET['filter']) else: return redirect('evap.fsr.views.user_index') else: return render_to_response("fsr_user_form.html", dict(form=form, object=user), context_instance=RequestContext(request))
def course_email(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) form = CourseEmailForm(request.POST or None, instance=course) if form.is_valid(): form.send() if form.all_recepients_reachable(): messages.add_message(request, messages.INFO, _("Successfully sent email to all participants/editors of '%s'.") % course.name) else: messages.add_message(request, messages.WARNING, _("Successfully sent email to many participants/editors of '%(course)s', but %(count)d could not be reached as they do not have an email address.") % dict(course=course.name, count=form.missing_email_addresses())) return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=request.GET.get('tab', '1')) else: return render_to_response("fsr_course_email.html", dict(semester=semester, course=course, form=form), context_instance=RequestContext(request))
def course_email(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) form = CourseEmailForm(request.POST or None, instance=course) if form.is_valid(): form.send() if form.all_recepients_reachable(): messages.success(request, _("Successfully sent emails for '%s'.") % course.name) else: messages.warning(request, _("Successfully sent some emails for '{course}', but {count} could not be reached as they do not have an email address.").format(course=course.name, count=form.missing_email_addresses())) return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=get_tab(request)) else: return render_to_response("fsr_course_email.html", dict(semester=semester, course=course, form=form), context_instance=RequestContext(request))
def user_create(request): profile = UserProfile(user=User()) form = UserForm(request.POST or None, instance=profile) if form.is_valid(): #profile.user.save() form.save() messages.add_message(request, messages.INFO, _("Successfully created user.")) if "filter" in request.GET: return custom_redirect('evap.fsr.views.user_index', filter=request.GET['filter']) else: return redirect('evap.fsr.views.user_index') else: return render_to_response("fsr_user_form.html", dict(form=form), context_instance=RequestContext(request))
def course_edit(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) ContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributorFormSet, form=ContributionForm, extra=1, exclude=('course',)) # check course state if not course.can_fsr_edit(): messages.add_message(request, messages.ERROR, _("Editing not possible in current state.")) return redirect('evap.fsr.views.semester_view', semester_id) form = CourseForm(request.POST or None, instance=course) formset = ContributionFormset(request.POST or None, instance=course, queryset=course.contributions.exclude(contributor=None)) if form.is_valid() and formset.is_valid(): form.save(user=request.user) formset.save() messages.add_message(request, messages.INFO, _("Successfully updated course.")) return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=request.GET.get('tab', '1')) else: return render_to_response("fsr_course_form.html", dict(semester=semester, course=course, form=form, formset=formset), context_instance=RequestContext(request))
def course_edit(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) ContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributorFormSet, form=ContributionForm, extra=0, exclude=('course',)) # check course state if not course.can_fsr_edit(): messages.warning(request, _("Editing not possible in current state.")) return redirect('evap.fsr.views.semester_view', semester_id) form = CourseForm(request.POST or None, instance=course) formset = ContributionFormset(request.POST or None, instance=course, queryset=course.contributions.exclude(contributor=None)) if form.is_valid() and formset.is_valid(): form.save(user=request.user) formset.save() messages.success(request, _("Successfully updated course.")) return custom_redirect('evap.fsr.views.semester_view', semester_id, tab=get_tab(request)) else: return render_to_response("fsr_course_form.html", dict(semester=semester, course=course, form=form, formset=formset), context_instance=RequestContext(request))