From 5e46673b3504d911159b9b870014e53f92c5e32d Mon Sep 17 00:00:00 2001 From: Jure Slak Date: Fri, 15 Nov 2019 22:00:07 +0100 Subject: [PATCH] Support for moving problems. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Karel Križnar --- web/problems/models.py | 16 ++++ web/problems/urls.py | 1 + web/problems/views.py | 36 +++++++++ web/templates/courses/problem_move_form.html | 74 +++++++++++++++++++ web/templates/courses/problem_set_detail.html | 4 + 5 files changed, 131 insertions(+) create mode 100644 web/templates/courses/problem_move_form.html diff --git a/web/problems/models.py b/web/problems/models.py index b0a824a1a..3d6991e5e 100644 --- a/web/problems/models.py +++ b/web/problems/models.py @@ -204,6 +204,15 @@ def copy_to(self, problem_set): part.copy_to(new_problem) return new_problem + # premakni problem nekam #preveri ce je prav + def move_to(self, problem_set): + # ne naredi kopije, ampak ga samo premakne + # self.pk = None + self.problem_set = problem_set + self.save() + # for part in self.parts.all(): + # part.move_to(new_problem) + def content_type(self): return self.MIMETYPES[self.language] @@ -266,6 +275,13 @@ def copy_to(self, problem): new_part.save() return new_part + # preveri ce je prav + def move_to(self, problem): + # self.pk = None + self.problem = problem + self.save() + return self + def attempt_token(self, user): return signing.dumps( { diff --git a/web/problems/urls.py b/web/problems/urls.py index 56c48391e..4bd520950 100644 --- a/web/problems/urls.py +++ b/web/problems/urls.py @@ -33,6 +33,7 @@ views.problem_move, name="problem_move", ), + path("/move_to/", views.move_to_form, name="problem_move_to"), path( "/toggle_visible/", views.problem_toggle_visible, diff --git a/web/problems/views.py b/web/problems/views.py index f574515aa..173f6e6a5 100644 --- a/web/problems/views.py +++ b/web/problems/views.py @@ -156,6 +156,42 @@ def copy_form(request, problem_pk): ) +class MoveToProblemForm(Form): + problem_set_id = IntegerField(label="Problem set id") + + +def move_to_form(request, problem_pk): + """ + Show and react to MoveForm. + """ + problem = Problem.objects.get(pk=problem_pk) + verify(request.user.can_edit_problem_set(problem.problem_set)) + if request.method == "POST": + form = MoveToProblemForm(request.POST) + if form.is_valid(): + problem_set_pk = form.cleaned_data["problem_set_id"] + problem_set = ProblemSet.objects.get(pk=problem_set_pk) + verify(request.user.can_edit_problem_set(problem_set)) + problem.move_to(problem_set) + return redirect(problem_set) + else: + # TODO: handle errors + response = HttpResponse("Please select a problem set.") + return response + else: + form = MoveToProblemForm() + courses = request.user.taught_courses.all() + return render( + request, + "courses/problem_move_form.html", + { + "form": form, + "courses": courses, + "problem": problem, + }, + ) + + @login_required def problem_solution(request, problem_pk, user_pk): """Show problem solution.""" diff --git a/web/templates/courses/problem_move_form.html b/web/templates/courses/problem_move_form.html new file mode 100644 index 000000000..b4ef579ee --- /dev/null +++ b/web/templates/courses/problem_move_form.html @@ -0,0 +1,74 @@ +{% load i18n %} + + + + + + \ No newline at end of file diff --git a/web/templates/courses/problem_set_detail.html b/web/templates/courses/problem_set_detail.html index f0892fce2..47ac3ff40 100644 --- a/web/templates/courses/problem_set_detail.html +++ b/web/templates/courses/problem_set_detail.html @@ -154,6 +154,10 @@
{{ problem.title }}
data-toggle="tooltip" title="{% trans 'Copy' %}" data-container="body"> + + +