def test_upload(request, task_id): if not request.user.is_trainer and not request.user.is_tutor and not request.user.is_superuser: return access_denied(request) task = get_object_or_404(Task, pk=task_id) if request.method == "POST": solution = Solution(task=task, author=request.user, testupload=True) formset = SolutionFormSet(request.POST, request.FILES, instance=solution) if formset.is_valid(): solution.save() formset.save() solution.check(run_secret=True) return HttpResponseRedirect( reverse('solution_detail_full', args=[solution.id])) else: formset = SolutionFormSet() return render_to_response("solutions/solution_test_upload.html", { "formset": formset, "task": task }, context_instance=RequestContext(request))
def model_solution(request, task_id): """ View in the admin """ task = get_object_or_404(Task, pk=task_id) if request.method == "POST": solution = Solution(task=task, author=request.user) formset = ModelSolutionFormSet(request.POST, request.FILES, instance=solution) if formset.is_valid(): try: solution.save() # no deleting the old solution: # delete will cascade on db level deleting checker results and checker # as this isn't easily prevented just keep the old solution around until the task is deleted formset.save() solution.check(request.session) task.model_solution = solution task.save() except: solution.delete() # delete files raise # dont commit db changes else: formset = ModelSolutionFormSet() context = { "formset": formset, "task": task, 'title': "Model Solution", 'is_popup': True, } return render_to_response("admin/tasks/task/model_solution.html", context, context_instance=RequestContext(request))
def solution_list(request, task_id, user_id=None): if (user_id and not request.user.is_trainer and not request.user.is_superuser): return access_denied(request) task = get_object_or_404(Task,pk=task_id) author = get_object_or_404(User,pk=user_id) if user_id else request.user solutions = task.solution_set.filter(author = author).order_by('-id') final_solution = task.final_solution(author) if task.publication_date >= datetime.now() and not request.user.is_trainer: raise Http404 if request.method == "POST": if task.expired() and not request.user.is_trainer: return access_denied(request) solution = Solution(task = task, author=author) formset = SolutionFormSet(request.POST, request.FILES, instance=solution) if formset.is_valid(): solution.save() formset.save() run_all_checker = bool(User.objects.filter(id=user_id, tutorial__tutors__pk=request.user.id) or request.user.is_trainer) solution.check(run_all_checker) if solution.accepted: # Send submission confirmation email t = loader.get_template('solutions/submission_confirmation_email.html') c = { 'protocol': request.is_secure() and "https" or "http", 'domain': RequestSite(request).domain, 'site_name': settings.SITE_NAME, 'solution': solution, } if solution.author.email: send_mail(_("%s submission confirmation") % settings.SITE_NAME, t.render(Context(c)), None, [solution.author.email]) if solution.accepted or get_settings().accept_all_solutions: solution.final = True solution.save() return HttpResponseRedirect(reverse('solution_detail', args=[solution.id])) else: formset = SolutionFormSet() attestations = Attestation.objects.filter(solution__task=task, author__tutored_tutorials=request.user.tutorial) attestationsPublished = attestations[0].published if attestations else False return render_to_response("solutions/solution_list.html", {"formset": formset, "task":task, "solutions": solutions, "final_solution":final_solution, "attestationsPublished":attestationsPublished, "author":author, "invisible_attestor":get_settings().invisible_attestor}, context_instance=RequestContext(request))
def solution_list(request, task_id, user_id=None): if (user_id and not in_group(request.user,'Trainer')): return access_denied(request) task = get_object_or_404(Task,pk=task_id) author = get_object_or_404(User,pk=user_id) if user_id else request.user solutions = task.solution_set.filter(author = author).order_by('-id') final_solution = task.final_solution(author) if (task.publication_date >= datetime.now()) and (not in_group(request.user,'Trainer')): raise Http404 if request.method == "POST": solution = Solution(task = task, author=author) formset = SolutionFormSet(request.POST, request.FILES, instance=solution) if formset.is_valid(): solution.save() formset.save() run_all_checker = bool(User.objects.filter(id=user_id, tutorial__tutors__pk=request.user.id) or in_group(request.user,'Trainer')) solution.check(run_all_checker) if solution.accepted: # Send submission confirmation email t = loader.get_template('solutions/submission_confirmation_email.html') c = { 'protocol': request.is_secure() and "https" or "http", 'domain': RequestSite(request).domain, 'site_name': settings.SITE_NAME, 'solution': solution, } if solution.author.email: send_mail(_("%s submission confirmation") % settings.SITE_NAME, t.render(Context(c)), None, [solution.author.email]) if solution.accepted or get_settings().accept_all_solutions: solution.final = True solution.save() return HttpResponseRedirect(reverse('solution_detail', args=[solution.id])) else: formset = SolutionFormSet() attestations = Attestation.objects.filter(solution__task=task, author__tutored_tutorials=request.user.tutorial) attestationsPublished = attestations[0].published if attestations else False return render_to_response("solutions/solution_list.html", {"formset": formset, "task":task, "solutions": solutions, "final_solution":final_solution, "attestationsPublished":attestationsPublished, "author":author}, context_instance=RequestContext(request))
def test_upload(request, task_id): if not request.user.is_trainer and not request.user.is_tutor and not request.user.is_superuser: return access_denied(request) task = get_object_or_404(Task,pk=task_id) if request.method == "POST": solution = Solution(task = task, author=request.user, testupload = True) formset = SolutionFormSet(request.POST, request.FILES, instance=solution) if formset.is_valid(): solution.save() formset.save() solution.check(run_secret = True) return HttpResponseRedirect(reverse('solution_detail_full', args=[solution.id])) else: formset = SolutionFormSet() return render_to_response("solutions/solution_test_upload.html", {"formset": formset, "task":task}, context_instance=RequestContext(request))
def model_solution(request, task_id): """ View in the admin """ task = get_object_or_404(Task,pk=task_id) if request.method == "POST": solution = Solution(task = task, author=request.user) formset = ModelSolutionFormSet(request.POST, request.FILES, instance=solution) if formset.is_valid(): try: solution.save(); # no deleting the old solution: # delete will cascade on db level deleting checker results and checker # as this isn't easily prevented just keep the old solution around until the task is deleted formset.save() solution.check(request.session) task.model_solution = solution; task.save() except: solution.delete() # delete files raise # dont commit db changes else: formset = ModelSolutionFormSet() context = {"formset": formset, "task": task, 'title': "Model Solution", 'is_popup': True, } return render_to_response("admin/tasks/task/model_solution.html", context, context_instance=RequestContext(request))