summaryrefslogtreecommitdiff
path: root/yaksh
diff options
context:
space:
mode:
Diffstat (limited to 'yaksh')
-rw-r--r--yaksh/models.py9
-rw-r--r--yaksh/static/yaksh/js/course.js24
-rw-r--r--yaksh/static/yaksh/js/question_filter.js8
-rw-r--r--yaksh/templates/yaksh/add_question.html7
-rw-r--r--yaksh/templates/yaksh/question.html9
-rw-r--r--yaksh/views.py7
6 files changed, 40 insertions, 24 deletions
diff --git a/yaksh/models.py b/yaksh/models.py
index 8907df0..2018198 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -65,7 +65,7 @@ test_status = (
)
def get_assignment_dir(instance, filename):
- return '%s/%s' % (instance.user.roll_number, instance.assignmentQuestion.id)
+ return '%s/%s/%s' % (instance.user.user, instance.assignmentQuestion.id, filename)
def get_model_class(model):
ctype = ContentType.objects.get(app_label="yaksh", model=model)
@@ -386,6 +386,7 @@ class FileUpload(models.Model):
file = models.FileField(upload_to=get_upload_dir, blank=True)
question = models.ForeignKey(Question, related_name="question")
extract = models.BooleanField(default=False)
+ hide = models.BooleanField(default=False)
def remove(self):
if os.path.exists(self.file.path):
@@ -401,6 +402,12 @@ class FileUpload(models.Model):
self.extract = True
self.save()
+ def toggle_hide_status(self):
+ if self.hide:
+ self.hide = False
+ else:
+ self.hide = True
+ self.save()
###############################################################################
class Answer(models.Model):
diff --git a/yaksh/static/yaksh/js/course.js b/yaksh/static/yaksh/js/course.js
index 3a21f0d..5b79e68 100644
--- a/yaksh/static/yaksh/js/course.js
+++ b/yaksh/static/yaksh/js/course.js
@@ -1,37 +1,37 @@
$(document).ready(function(){
-$(".checkall").click( function(){
- if($(this).attr("checked")) {
+$(".checkall").change( function(){
+ if($(this).prop("checked")) {
$("#enroll-all input:checkbox").each(function(index, element) {
- $(this).attr('checked', true);
+ $(this).prop('checked', true);
});
}
else {
$("#enroll-all input:checkbox").each(function(index, element) {
- $(this).attr('checked', false);
+ $(this).prop('checked', false);
});
}
});
-$(".enroll").click( function(){
- if($(this).attr("checked")) {
+$(".enroll").change( function(){
+ if($(this).prop("checked")) {
$("#enroll input:checkbox").each(function(index, element) {
- $(this).attr('checked', true);
+ $(this).prop('checked', true);
});
}
else {
$("#enroll input:checkbox").each(function(index, element) {
- $(this).attr('checked', false);
+ $(this).prop('checked', false);
});
}
});
-$(".reject").click( function(){
- if($(this).attr("checked")) {
+$(".reject").change( function(){
+ if($(this).prop("checked")) {
$("#reject input:checkbox").each(function(index, element) {
- $(this).attr('checked', true);
+ $(this).prop('checked', true);
});
}
else {
$("#reject input:checkbox").each(function(index, element) {
- $(this).attr('checked', false);
+ $(this).prop('checked', false);
});
}
});
diff --git a/yaksh/static/yaksh/js/question_filter.js b/yaksh/static/yaksh/js/question_filter.js
index 065b06b..aa3a229 100644
--- a/yaksh/static/yaksh/js/question_filter.js
+++ b/yaksh/static/yaksh/js/question_filter.js
@@ -32,15 +32,15 @@ $(document).ready(function(){
question_filter()
});
- $("#checkall").live("click", function(){
- if($(this).attr("checked")) {
+ $("#checkall").change(function(){
+ if($(this).prop("checked")) {
$("#filtered-questions input:checkbox").each(function(index, element) {
- $(this).attr('checked', true);
+ $(this).prop('checked', true);
});
}
else {
$("#filtered-questions input:checkbox").each(function(index, element) {
- $(this).attr('checked', false);
+ $(this).prop('checked', false);
});
}
});
diff --git a/yaksh/templates/yaksh/add_question.html b/yaksh/templates/yaksh/add_question.html
index 9822333..e1b05fe 100644
--- a/yaksh/templates/yaksh/add_question.html
+++ b/yaksh/templates/yaksh/add_question.html
@@ -27,11 +27,14 @@
<tr><td>Partial Grading: <td>{{ form.partial_grading }}
<tr><td> Test Case Type: <td> {{ form.test_case_type }}{{ form.test_case_type.errors }}
<tr><td> File: <td> {{ upload_form.file_field }}{{ upload_form.file_field.errors }}
- {% if uploaded_files %}<br><b>Uploaded files:</b><br>Check the box to delete or extract files<br>
+ {% if uploaded_files %}<br><b>Uploaded files:</b><br>Check on delete to delete files,
+ extract to extract files and hide to hide files from student(if required)<br>
{% for file in uploaded_files %}
<input type="checkbox" name="clear" value="{{file.id}}">&nbsp;delete</input>&nbsp;
<input type="checkbox" name="extract" value="{{file.id}}" >{% if file.extract %} dont extract{% else %}
- extract{% endif %}</input><br>
+ extract{% endif %}</input>&nbsp;&nbsp;
+ <input type="checkbox" name="hide" value="{{file.id}}" >{% if file.hide %} show{% else %}
+ hide{% endif %}</input><br>
<a href="{{file.file.url}}">{{ file.file.name }}</a>
<br>
{% endfor %}{% endif %}
diff --git a/yaksh/templates/yaksh/question.html b/yaksh/templates/yaksh/question.html
index bfb235b..74ac786 100644
--- a/yaksh/templates/yaksh/question.html
+++ b/yaksh/templates/yaksh/question.html
@@ -107,9 +107,12 @@ function call_skip(url)
{% for qid in paper.questions.all %}
{% if qid in paper.questions_unanswered.all %}
{% if qid.id == question.id %}
- <li class="active"><a href="#"data-toggle="tooltip" title="{{ qid.description }}" onclick="call_skip('{{ URL_ROOT }}/exam/{{ question.id }}/skip/{{ qid.id }}/{{ paper.attempt_number }}/{{ paper.question_paper.id }}/')">{{ forloop.counter }}</a></li>
+ <li class="active"><a href="#"data-toggle="tooltip"
+ title="{{ qid.description|striptags }}"
+ onclick="call_skip('{{ URL_ROOT }}/exam/{{ question.id }}/skip/{{ qid.id }}/{{ paper.attempt_number }}/{{ paper.question_paper.id }}/')">{{ forloop.counter }}</a></li>
{% else %}
- <li><a href="#" data-toggle="tooltip" title="{{ qid.description }}" onclick="call_skip('{{ URL_ROOT }}/exam/{{ question.id }}/skip/{{ qid.id }}/{{ paper.attempt_number }}/{{ paper.question_paper.id }}/')">{{ forloop.counter }}</a></li>
+ <li><a href="#" data-toggle="tooltip" title="{{ qid.description|striptags }}"
+ onclick="call_skip('{{ URL_ROOT }}/exam/{{ question.id }}/skip/{{ qid.id }}/{{ paper.attempt_number }}/{{ paper.question_paper.id }}/')">{{ forloop.counter }}</a></li>
{% endif %}
{% endif %}
{% if qid in paper.questions_answered.all %}
@@ -152,9 +155,7 @@ function call_skip(url)
{% if files %}
<h4>Files to download for this question</h4>
{% for f_name in files %}
- {% if f_name.question_id == question.id %}
<h5><a href="{{f_name.file.url}}">{{f_name.file.name}}</a></h5>
- {% endif %}
{% endfor %}
{% endif %}
</div>
diff --git a/yaksh/views.py b/yaksh/views.py
index c3d743b..b6cf578 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -182,6 +182,7 @@ def edit_question(request, question_id=None):
form = FileForm(request.POST, request.FILES)
files = request.FILES.getlist('file_field')
extract_files_id = request.POST.getlist('extract')
+ hide_files_id = request.POST.getlist('hide')
if files:
for file in files:
FileUpload.objects.get_or_create(question=question_instance, file=file)
@@ -189,6 +190,10 @@ def edit_question(request, question_id=None):
files = FileUpload.objects.filter(id__in=extract_files_id)
for file in files:
file.set_extract_status()
+ if hide_files_id:
+ files = FileUpload.objects.filter(id__in=hide_files_id)
+ for file in files:
+ file.toggle_hide_status()
if question_form.is_valid():
new_question = question_form.save(commit=False)
test_case_type = question_form.cleaned_data.get('test_case_type')
@@ -432,7 +437,7 @@ def show_question(request, question, paper, error_message=None):
reason='Your time is up!'
return complete(request, reason, paper.attempt_number, paper.question_paper.id)
test_cases = question.get_test_cases()
- files = FileUpload.objects.filter(question_id=question.id)
+ files = FileUpload.objects.filter(question_id=question.id, hide=False)
context = {'question': question, 'paper': paper, 'error_message': error_message,
'test_cases': test_cases, 'files': files,
'last_attempt': question.snippet.encode('unicode-escape')}