Skip to content
Open
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
Empty file removed ;w
Empty file.
25 changes: 18 additions & 7 deletions database/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,17 +78,28 @@ def __init__(self, *args, **kwargs):
class ProblemSelector(ModelMultipleChoiceField):
def label_from_instance(self, prob):
return get_template('prob_card.html').render({'problem': prob})

#
#class ProblemSelect(forms.Form):
# problems = ProblemSelector(widget=CheckboxSelectMultiple(), queryset=None)
# def __init__(self, *args, **kwargs):
# super().__init__()
# if 'problems' in kwargs:
# self.fields['problems'].queryset = kwargs['problems']
# self.helper = FormHelper()
# self.helper.layout = Layout(
# FormActions(
# Field('problems'),
# Submit('to_pdf', 'To PDF', css_class='mx-1'),
# ),
# )
class ProblemSelect(forms.Form):
problems = ProblemSelector(widget=CheckboxSelectMultiple(), queryset=None)
problem_list = forms.CharField()
def __init__(self, *args, **kwargs):
super().__init__()
if 'problems' in kwargs:
self.fields['problems'].queryset = kwargs['problems']
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.attrs={'id': 'selected_problems'}
self.helper.layout = Layout(
FormActions(
Field('problems'),
Submit('to_pdf', 'To PDF', css_class='mx-1'),
Field('problem_list', type="hidden")
),
)
20 changes: 10 additions & 10 deletions database/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
from django.core.exceptions import PermissionDenied
from .forms import ProblemForm, RatingForm, ProblemSelect, ProblemSelector
from .models import Problem, Rating


import json
from django.core.serializers.json import DjangoJSONEncoder
from django_tex.shortcuts import render_to_pdf

def home(request):
Expand All @@ -24,21 +28,18 @@ def all_problems(request):
if not request.user.is_solver and not request.user.is_staff:
raise PermissionDenied
if request.method == 'POST':
if "to_pdf" in request.POST:
#submission = ProblemSelect(request.POST)
template_name = 'test.tex'
problem_list = Problem.objects.filter(id__in=request.POST.getlist('problems')).order_by('-creation_time')
context = {'solutions': True, 'problem_list' : problem_list}
return render_to_pdf(request, template_name, context, filename='test.pdf')
elif "filter" in request.POST:
print("")
problem_list = [Problem(**temp) for temp in json.loads(request.POST['problem_list'])]
template_name = 'test.tex'
context = {'solutions': True, 'problem_list' : problem_list}
return render_to_pdf([], template_name, context, filename='test.pdf')
else:
problem_list = Problem.objects.all().order_by('-creation_time')
empty_message = 'There are no problems in the database yet.'

context = {
'filter': 0,
'form': ProblemSelect(problems=problem_list),
'form': ProblemSelect(),
'data': json.dumps(list(Problem.objects.values().order_by('-creation_time')), cls = DjangoJSONEncoder),
'empty_message': empty_message,
}
return render(request, 'problem_list.html', context)
Expand Down Expand Up @@ -158,4 +159,3 @@ def edit_problem(request, problem_id):
form = ProblemForm(instance=problem)
return render(request, 'make_problem.html', {'form': form })


18 changes: 18 additions & 0 deletions templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,24 @@
<link rel="shortcut icon" href="#" />
<link rel="stylesheet" href="{% static 'css/main.css' %}">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha384-ZvpUoO/+PpLXR1lu4jmpXWu80pZlYUAfxl5NsBMWOEPSjUn/6Z/hRTt8+pR6L4N2" crossorigin="anonymous"></script>

<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script>

<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.6.2/css/buttons.bootstrap4.min.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/buttons/1.6.2/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/buttons/1.6.2/js/buttons.bootstrap4.min.js"></script>

<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/rowreorder/1.2.7/css/rowReorder.bootstrap4.min.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/rowreorder/1.2.7/js/dataTables.rowReorder.min.js"></script>

<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/searchpanes/1.1.0/css/searchPanes.dataTables.min.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/searchpanes/1.1.0/js/dataTables.searchPanes.min.js"></script>

<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/select/1.3.1/css/select.dataTables.min.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/select/1.3.1/js/dataTables.select.min.js"></script>

</head>

<body>
Expand Down
108 changes: 94 additions & 14 deletions templates/problem_list.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,76 @@
{% load crispy_forms_tags %}
{% block content %}

<script>
data = {{ data|safe }};
$(document).ready( function () {
$('#problems').DataTable({
data: data,
orderFixed: [],
select: {
},
rowReorder: {
dataSrc: 'id'
},
columns: [
{ data: 'id', orderable: false },
{ data: 'subject', orderable: false},
{ data: 'title', orderable: false },
{ data: 'problem_text', orderable: false },
{ data: 'solution', orderable: false }
],
searchPanes: {
displayColumns: 2
},
dom: "<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
"<'row'<'col-lg-4'P><'col-lg-8'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>" +
"<'row'B>",
buttons: [
{
action: function ( e, dt, node, config ) {

$('#id_problem_list').val(JSON.stringify(dt.rows( { selected: true } ).data().toArray()));
$('#selected_problems').submit();
/*
var selected = {problem_list: JSON.stringify(dt.rows( { selected: true } ).data().toArray())};
var pdf = $.ajax({
url: window.location,
data : selected,
method : 'POST',
headers: {'X-CSRFToken': '{{ csrf_token }}'},
success: function (data) {
var blob=data;
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="test.pdf";
link.click();

},
error: function (data) {
var w = window.open('about:blank');
w.document.open();
w.document.write(data.responseText);
w.document.close();
}
});
*/

},
extend: 'selected',
text: 'Export to PDF'
}
]
});
var dt = $('#problems').DataTable();
/*
$('#submit-id-to_pdf').submit(function () {
$('#id_problem_list').val(JSON.stringify(dt.rows( { selected: true } ).data().toArray()));
} );
*/
MathJax.typeset()
} );
</script>
<div class="row mb-3">
<div class="col">
<h2>
Expand All @@ -22,21 +92,31 @@ <h2>
{% endif %}
</div>

<div class="row">
<div class="col-md-4">
Search and Filter (not implemented yet)
</div>
<div class="col-md-8">
<table id="problems" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th>#</th>
<th>Subject</th>
<th>Title</th>
<th>Problem</th>
<th>Solution</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<th>#</th>
<th>Subject</th>
<th>Title</th>
<th>Problem</th>
<th>Solution</th>
</tr>
</tfoot>

</table>

<div class="card-deck-wrapper">
<form method="post">
{% csrf_token %}
{% crispy form %}
</form>
</div>
</div>
</div>
{% crispy form %}

</div>

{% endblock %}