diff --git a/web/problems/models.py b/web/problems/models.py index b0a824a1..3d6991e5 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 56c48391..4bd52095 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 f574515a..173f6e6a 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 00000000..b4ef579e --- /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 f0892fce..47ac3ff4 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"> + + +