diff options
author | Prabhu Ramachandran | 2016-11-18 16:24:02 +0530 |
---|---|---|
committer | GitHub | 2016-11-18 16:24:02 +0530 |
commit | d88708631a568c37ae56602407a29001d97a982f (patch) | |
tree | f097d00b3378a7948e6289cdce733a37198bee24 | |
parent | 6f2d4829d15d763177328400d0a1b857b983a770 (diff) | |
parent | 95c8c368d9f34cb05c5edd90f8697ec5d00c5a92 (diff) | |
download | online_test-d88708631a568c37ae56602407a29001d97a982f.tar.gz online_test-d88708631a568c37ae56602407a29001d97a982f.tar.bz2 online_test-d88708631a568c37ae56602407a29001d97a982f.zip |
Merge pull request #158 from adityacp/fix_file_upload_and_tooltip
Fix file upload and tooltip
-rw-r--r-- | yaksh/models.py | 9 | ||||
-rw-r--r-- | yaksh/static/yaksh/js/course.js | 24 | ||||
-rw-r--r-- | yaksh/static/yaksh/js/question_filter.js | 8 | ||||
-rw-r--r-- | yaksh/templates/yaksh/add_question.html | 7 | ||||
-rw-r--r-- | yaksh/templates/yaksh/question.html | 9 | ||||
-rw-r--r-- | yaksh/views.py | 7 |
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}}"> delete</input> <input type="checkbox" name="extract" value="{{file.id}}" >{% if file.extract %} dont extract{% else %} - extract{% endif %}</input><br> + extract{% endif %}</input> + <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')} |