summaryrefslogtreecommitdiff
path: root/yaksh
diff options
context:
space:
mode:
Diffstat (limited to 'yaksh')
-rw-r--r--yaksh/models.py23
-rw-r--r--yaksh/urls.py2
-rw-r--r--yaksh/views.py46
3 files changed, 41 insertions, 30 deletions
diff --git a/yaksh/models.py b/yaksh/models.py
index 5ec3062..6646615 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -1306,12 +1306,8 @@ class AnswerPaper(models.Model):
.format(u.first_name, u.last_name, q.description)
-###############################################################################
-class AssignmentUpload(models.Model):
- user = models.ForeignKey(User)
- assignmentQuestion = models.ForeignKey(Question)
- assignmentFile = models.FileField(upload_to=get_assignment_dir)
- question_paper = models.ForeignKey(QuestionPaper, blank=True, null=True)
+################################################################################
+class AssignmentUploadManager(models.Manager):
def get_assignments(self, qp, que_id=None, user_id=None):
if que_id and user_id:
@@ -1319,19 +1315,28 @@ class AssignmentUpload(models.Model):
assignmentQuestion_id=que_id, user_id=user_id,
question_paper=qp
)
- user_name = User.objects.get(id=user_id)
- file_name = user_name.get_full_name()
+ file_name = User.objects.get(id=user_id).get_full_name()
else:
assignment_files = AssignmentUpload.objects.filter(
question_paper=qp
)
- file_name = "%s_Assignment_files" %(
+ file_name = "{0}_Assignment_files".format(
assignment_files[0].question_paper.quiz.description
)
return assignment_files, file_name
+
+################################################################################
+class AssignmentUpload(models.Model):
+ user = models.ForeignKey(User)
+ assignmentQuestion = models.ForeignKey(Question)
+ assignmentFile = models.FileField(upload_to=get_assignment_dir)
+ question_paper = models.ForeignKey(QuestionPaper, blank=True, null=True)
+ objects = AssignmentUploadManager()
+
+
###############################################################################
class TestCase(models.Model):
question = models.ForeignKey(Question, blank=True, null=True)
diff --git a/yaksh/urls.py b/yaksh/urls.py
index 4a96d08..5623eab 100644
--- a/yaksh/urls.py
+++ b/yaksh/urls.py
@@ -26,6 +26,8 @@ urlpatterns = [
url(r'^enroll_request/(?P<course_id>\d+)/$', views.enroll_request, name='enroll_request'),
url(r'^self_enroll/(?P<course_id>\d+)/$', views.self_enroll, name='self_enroll'),
url(r'^view_answerpaper/(?P<questionpaper_id>\d+)/$', views.view_answerpaper, name='view_answerpaper'),
+ url(r'^download/user_assignment/(?P<question_id>\d+)/(?P<user_id>\d+)/(?P<quiz_id>\d+)$',
+ views.download_assignment_file, name="download_user_assignment"),
url(r'^manage/$', views.prof_manage, name='manage'),
url(r'^manage/addquestion/$', views.add_question),
url(r'^manage/addquestion/(?P<question_id>\d+)/$', views.add_question),
diff --git a/yaksh/views.py b/yaksh/views.py
index 46a2bdd..0db1812 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -497,9 +497,11 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
elif current_question.type == 'upload':
# if time-up at upload question then the form is submitted without
# validation
- if 'assignment' in request.FILES:
- assignment_filename = request.FILES.getlist('assignment')
- qp = QuestionPaper.objects.get(id=questionpaper_id)
+ assignment_filename = request.FILES.getlist('assignment')
+ if not assignment_filename:
+ msg = "Please upload assignment file"
+ return show_question(request, current_question, paper, notification=msg)
+
for fname in assignment_filename:
assignment_files = AssignmentUpload.objects.filter(
assignmentQuestion=current_question,
@@ -514,7 +516,7 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
assign_file.delete()
AssignmentUpload.objects.create(user=user,
assignmentQuestion=current_question, assignmentFile=fname,
- question_paper=qp
+ question_paper_id=questionpaper_id
)
user_answer = 'ASSIGNMENT UPLOADED'
if not current_question.grade_assignment_upload:
@@ -1114,11 +1116,11 @@ def grade_user(request, quiz_id=None, user_id=None, attempt_number=None):
.values("id")
user_details = AnswerPaper.objects\
.get_users_for_questionpaper(questionpaper_id)
- quiz_assignment_file_status = AssignmentUpload.objects.filter(
+ has_quiz_assignments = AssignmentUpload.objects.filter(
question_paper_id=questionpaper_id
).exists()
context = {"users": user_details, "quiz_id": quiz_id,
- "quiz_file_status": quiz_assignment_file_status
+ "has_quiz_assignments": has_quiz_assignments
}
if user_id is not None:
@@ -1129,7 +1131,7 @@ def grade_user(request, quiz_id=None, user_id=None, attempt_number=None):
attempt_number = attempts[0].attempt_number
except IndexError:
raise Http404('No attempts for paper')
- user_assignment_file_status = AssignmentUpload.objects.filter(
+ has_user_assignments = AssignmentUpload.objects.filter(
question_paper_id=questionpaper_id,
user_id=user_id
).exists()
@@ -1139,17 +1141,17 @@ def grade_user(request, quiz_id=None, user_id=None, attempt_number=None):
)
context = {'data': data, "quiz_id": quiz_id, "users": user_details,
"attempts": attempts, "user_id": user_id,
- "user_file_status": user_assignment_file_status,
- "quiz_file_status": quiz_assignment_file_status
+ "has_user_assignments": has_user_assignments,
+ "has_quiz_assignments": has_quiz_assignments
}
if request.method == "POST":
papers = data['papers']
for paper in papers:
- for question, answers, errors in six.iteritems(paper.get_question_answers()):
+ for question, answers in six.iteritems(paper.get_question_answers()):
marks = float(request.POST.get('q%d_marks' % question.id, 0))
- answers = answers[-1]
- answers.set_marks(marks)
- answers.save()
+ answer = answers[-1]['answer']
+ answer.set_marks(marks)
+ answer.save()
paper.update_marks()
paper.comments = request.POST.get(
'comments_%d' % paper.question_paper.id, 'No comments')
@@ -1330,7 +1332,10 @@ def view_answerpaper(request, questionpaper_id):
quiz = get_object_or_404(QuestionPaper, pk=questionpaper_id).quiz
if quiz.view_answerpaper and user in quiz.course.students.all():
data = AnswerPaper.objects.get_user_data(user, questionpaper_id)
- context = {'data': data, 'quiz': quiz}
+ has_user_assignment = AssignmentUpload.objects.filter(user=user,
+ question_paper_id=questionpaper_id).exists()
+ context = {'data': data, 'quiz': quiz,
+ "has_user_assignment":has_user_assignment}
return my_render_to_response('yaksh/view_answerpaper.html', context)
else:
return my_redirect('/exam/quizzes/')
@@ -1432,18 +1437,17 @@ def download_course_csv(request, course_id):
@login_required
def download_assignment_file(request, quiz_id, question_id=None, user_id=None):
user = request.user
- if not is_moderator(user):
- raise Http404('You are not allowed to view this page!')
qp = QuestionPaper.objects.get(quiz_id=quiz_id)
- assignment = AssignmentUpload()
- assignment_files, file_name = assignment.get_assignments(qp, question_id,
+ assignment_files, file_name = AssignmentUpload.objects.get_assignments(qp,
+ question_id,
user_id
)
zipfile_name = string_io()
zip_file = zipfile.ZipFile(zipfile_name, "w")
for f_name in assignment_files:
- name = f_name.user.get_full_name().replace(" ", "_")
- folder_name = os.sep.join((name, os.path.basename(
+ folder = f_name.user.get_full_name().replace(" ", "_")
+ sub_folder = f_name.assignmentQuestion.summary.replace(" ", "_")
+ folder_name = os.sep.join((folder, sub_folder, os.path.basename(
f_name.assignmentFile.name))
)
zip_file.write(f_name.assignmentFile.path, folder_name
@@ -1452,7 +1456,7 @@ def download_assignment_file(request, quiz_id, question_id=None, user_id=None):
zipfile_name.seek(0)
response = HttpResponse(content_type='application/zip')
response['Content-Disposition'] = '''attachment;\
- filename={0}'''.format(
+ filename={0}.zip'''.format(
file_name.replace(" ", "_")
)
response.write(zipfile_name.read())