def add_or_update_problem(request, contest, template): if 'problem' in request.GET: existing_problem = \ get_object_or_404(Problem, id=request.GET['problem']) if contest and not existing_problem.probleminstance_set.filter( contest=contest).exists(): raise Http404 if not can_admin_problem(request, existing_problem): raise PermissionDenied else: existing_problem = None if not request.user.has_perm('problems.problems_db_admin'): if contest and (not is_contest_admin(request)): raise PermissionDenied navbar_links = navbar_links_registry.template_context(request) context = {'existing_problem': existing_problem, 'navbar_links': navbar_links} tab_kwargs = { 'contest': contest, 'existing_problem': existing_problem } tab_link_params = request.GET.dict() def build_link(tab): tab_link_params['key'] = tab.key return request.path + '?' + six.moves.urllib.parse.urlencode( tab_link_params) return tabbed_view(request, template, context, problem_sources(request), tab_kwargs, build_link)
def add_or_update_problem(request, contest, template): if 'problem' in request.GET: existing_problem = \ get_object_or_404(Problem, id=request.GET['problem']) if contest and not existing_problem.probleminstance_set.filter( contest=contest).exists(): raise Http404 if not can_admin_problem(request, existing_problem): raise PermissionDenied else: existing_problem = None if not request.user.has_perm('problems.problems_db_admin'): if contest and (not is_contest_admin(request)): raise PermissionDenied context = {'existing_problem': existing_problem} tab_kwargs = {'contest': contest, 'existing_problem': existing_problem} tab_link_params = request.GET.dict() def build_link(tab): tab_link_params['key'] = tab.key return request.path + '?' + urllib.urlencode(tab_link_params) return tabbed_view(request, template, context, problem_sources(request), tab_kwargs, build_link)
def add_or_update_problem(request, contest, template): if 'problem' in request.GET: existing_problem = get_object_or_404(Problem, id=request.GET['problem']) if (contest and not existing_problem.probleminstance_set.filter( contest=contest).exists()): raise Http404 if not can_admin_problem(request, existing_problem): raise PermissionDenied else: existing_problem = None if not request.user.has_perm('problems.problems_db_admin'): if contest and (not is_contest_basicadmin(request)): raise PermissionDenied navbar_links = navbar_links_registry.template_context(request) problemset_tabs = generate_problemset_tabs(request) context = { 'existing_problem': existing_problem, 'navbar_links': navbar_links, 'problemset_tabs': problemset_tabs, } tab_kwargs = {'contest': contest, 'existing_problem': existing_problem} tab_link_params = request.GET.dict() def build_link(tab): tab_link_params['key'] = tab.key return request.path + '?' + six.moves.urllib.parse.urlencode( tab_link_params) return tabbed_view( request, template, context, problem_sources(request, existing_problem=existing_problem is not None), tab_kwargs, build_link, )
def add_or_update_problem(request, contest, template): if "problem" in request.GET: existing_problem = get_object_or_404(Problem, id=request.GET["problem"]) if contest and not existing_problem.probleminstance_set.filter(contest=contest).exists(): raise Http404 if not can_admin_problem(request, existing_problem): raise PermissionDenied else: existing_problem = None if not request.user.has_perm("problems.problems_db_admin"): if contest and (not is_contest_admin(request)): raise PermissionDenied context = {"existing_problem": existing_problem} tab_kwargs = {"contest": contest, "existing_problem": existing_problem} tab_link_params = request.GET.dict() def build_link(tab): tab_link_params["key"] = tab.key return request.path + "?" + urllib.urlencode(tab_link_params) return tabbed_view(request, template, context, problem_sources(request), tab_kwargs, build_link)
def add_or_update_problem_view(request, contest_id=None): sources = problem_sources(request) if 'key' not in request.GET: qs = request.GET.dict() qs['key'] = sources[0].key return HttpResponseRedirect(request.path + '?' + urllib.urlencode(qs)) key = request.GET['key'] for s in sources: if s.key == key: current_source = s break else: raise Http404 contest = contest_id and request.contest if 'problem' in request.GET: existing_problem = \ get_object_or_404(Problem, id=request.GET['problem']) if contest and not existing_problem.probleminstance_set.filter( contest=contest).exists(): raise Http404 if not can_change_problem(request, existing_problem): raise PermissionDenied else: existing_problem = None if not request.user.has_perm('problems.problems_db_admin'): if not contest_id: raise PermissionDenied if not is_contest_admin(request): raise PermissionDenied problem_or_content = current_source.view(request, contest, existing_problem) if isinstance(problem_or_content, Problem): problem = problem_or_content if not problem.package_backend_name: raise AssertionError( "Problem package source (%r) did not " "set Problem.package_backend_name. This is a bug in " "the problem package backend." % (s, )) if contest: if not existing_problem: problem.contest = contest problem.save() pi, created = ProblemInstance.objects.get_or_create( problem=problem, contest=contest, submissions_limit=contest.default_submissions_limit) if not pi.round: if contest.round_set.count() == 1: pi.round = contest.round_set.get() pi.save() else: messages.info( request, _("Please select the round for " "this problem.")) return redirect( 'oioioiadmin:contests_probleminstance_change', pi.id) return redirect('oioioiadmin:contests_probleminstance_changelist') else: return redirect('oioioiadmin:problems_problem_changelist') if isinstance(problem_or_content, TemplateResponse): content = problem_or_content.render().content else: content = problem_or_content sources_context = [] qs = request.GET.dict() for s in sources: qs['key'] = s.key link = request.path + '?' + urllib.urlencode(qs) sources_context.append({'obj': s, 'link': link}) context = { 'sources': sources_context, 'current_source': current_source, 'content': mark_safe(force_unicode(content)), 'existing_problem': existing_problem, } return TemplateResponse(request, 'problems/add_or_update.html', context)
def add_or_update_problem_view(request, contest_id=None): sources = problem_sources(request) if 'key' not in request.GET: qs = request.GET.dict() qs['key'] = sources[0].key return HttpResponseRedirect(request.path + '?' + urllib.urlencode(qs)) key = request.GET['key'] for s in sources: if s.key == key: current_source = s break else: raise Http404 contest = contest_id and request.contest if 'problem' in request.GET: existing_problem = \ get_object_or_404(Problem, id=request.GET['problem']) if contest and not existing_problem.probleminstance_set.filter( contest=contest).exists(): raise Http404 if not can_change_problem(request, existing_problem): raise PermissionDenied else: existing_problem = None if not request.user.has_perm('problems.problems_db_admin'): if not contest_id: raise PermissionDenied if not is_contest_admin(request): raise PermissionDenied problem_or_content = current_source.view(request, contest, existing_problem) if isinstance(problem_or_content, Problem): problem = problem_or_content if not problem.package_backend_name: raise AssertionError("Problem package source (%r) did not " "set Problem.package_backend_name. This is a bug in " "the problem package backend." % (s,)) if contest: if not existing_problem: problem.contest = contest problem.save() pi, created = ProblemInstance.objects.get_or_create( problem=problem, contest=contest, submissions_limit=contest.default_submissions_limit) if not pi.round: if contest.round_set.count() == 1: pi.round = contest.round_set.get() pi.save() else: messages.info(request, _("Please select the round for " "this problem.")) return redirect( 'oioioiadmin:contests_probleminstance_change', pi.id) return redirect('oioioiadmin:contests_probleminstance_changelist') else: return redirect('oioioiadmin:problems_problem_changelist') if isinstance(problem_or_content, TemplateResponse): content = problem_or_content.render().content else: content = problem_or_content sources_context = [] qs = request.GET.dict() for s in sources: qs['key'] = s.key link = request.path + '?' + urllib.urlencode(qs) sources_context.append({'obj': s, 'link': link}) context = { 'sources': sources_context, 'current_source': current_source, 'content': mark_safe(force_unicode(content)), 'existing_problem': existing_problem, } return TemplateResponse(request, 'problems/add_or_update.html', context)