Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions web/problems/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]

Expand Down Expand Up @@ -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(
{
Expand Down
1 change: 1 addition & 0 deletions web/problems/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
views.problem_move,
name="problem_move",
),
path("<int:problem_pk>/move_to/", views.move_to_form, name="problem_move_to"),
path(
"<int:problem_pk>/toggle_visible/",
views.problem_toggle_visible,
Expand Down
36 changes: 36 additions & 0 deletions web/problems/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
Expand Down
74 changes: 74 additions & 0 deletions web/templates/courses/problem_move_form.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{% load i18n %}

<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
{# Translators: Title of move problem modal.#}
<h4 class="modal-title">{% trans "Move problem" %} {{ problem.title }}</h4>
</div>
<div class="modal-body">
{# Translators: Text of move problem modal.#}
{% trans "Please choose a problem set to move this problem to:" %}

<form action="{% url 'problem_move_to' problem.id %}" method="post" id='move_problem_form'>
{% csrf_token %}
<input type="hidden" name="problem_set_id", id="problem_set_id">
<div id='problem_list_tree'></div>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-primary" id="button_move_confirm" disabled=true>
{# Translators: Confirm moving a problem.#}
{% trans "Move" %}
</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Cancel" %}</button>
</div>

<script>
function moveButtonDisabled(state) {
$button = $("#button_move_confirm");
$button.attr("disabled", state);
}

function nodeSelected() {
moveButtonDisabled(false);
}

function nodeUnselected() {
moveButtonDisabled(true);
}

$('#button_move_confirm').on('click', function () {
selectedItem = $('#problem_list_tree').treeview('getSelected')[0];
console.log("tada");
console.log(selectedItem);
console.log(selectedItem.id);
$("#problem_set_id").val(selectedItem.id);
$("#move_problem_form").submit();
});

var data = [
// Prepare data
{% for course in courses %}
{
text: "{{ course.title }}",
selectable: false,
nodes: [
{% for ps in course.problem_sets.all %}
{
text: "{{ ps.title }}",
id: {{ ps.id }}
},
{% endfor %}
]
},
{% endfor %}
];
problem_tree = $('#problem_list_tree');
problem_tree.treeview(
{
data: data,
levels: 1,
onNodeSelected: nodeSelected,
onNodeUnselected: nodeUnselected,
});
</script>
4 changes: 4 additions & 0 deletions web/templates/courses/problem_set_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,10 @@ <h5>{{ problem.title }}</h5>
data-toggle="tooltip" title="{% trans 'Copy' %}" data-container="body">
<i class="fa fa-copy" aria-hidden="true"></i>
</a>
<a class="btn btn-default btn-for-modal edit-btn" aria-label="Move" data-url="{% url 'problem_move_to' problem.id %}"
data-toggle="tooltip" title="{% trans 'Move to' %}" data-container="body">
<i class="fa fa-arrows-alt" aria-hidden="true"></i>
</a>
<a class="btn btn-default btn-for-modal edit-btn trash-btn" aria-label="Delete" data-url="{% url 'problem_delete' problem.id %}">
<i class="fa fa-trash" aria-hidden="true"></i>
</a>
Expand Down