def student_papersummarize(request): student, res = getSpByRequest(request, 'login') if not student and res: return res paperid = request.GET.get('paperid') passed = request.GET.get('passed') try: paper = Paper.objects.get(id=paperid) questionseq = pickle.loads(str(paper.questionseq)) except: return HttpResponse("paper does not exist") if paper and questionseq: question_set = Question.objects.filter(id__in=questionseq) stuanswer_set = getStuanswers(question_set, student) if passed == '0': mark = _reinitanswer(stuanswer_set) messages.add_message( request, messages.INFO, "You failed in this paper, please don\'t be panic, you can take it again" ) else: mark = sum(ans.mark for ans in stuanswer_set) else: mark = 0 return render_to_response('student_assignmentsummarize.html', { 'paper': paper, 'mark': mark }, context_instance=RequestContext(request))
def _getassignmentjson(assignments, teacher, student): assignment_list = [] for a in assignments: papers = Paper.objects.filter(assignment=a, owner=teacher.user) for p in papers: try: questionseq = pickle.loads(str(p.questionseq)) question_set = Question.objects.filter(id__in=questionseq) stuanswer_set = getStuanswers(question_set, student) count = sum(1 for sa in stuanswer_set if sa.taked) except Exception, e: logger.error(e) logger.error(a) logger.error(p) break if count == p.total: action = "<a href='/student/summarize/?paperid=%s'>\ <font color=black>View</font></a>" % str(p.id) else: action = "<a href='/student/takeassignment/?paperid=%s'>\ <font color=black>Take</font></a> \ | \ <a href='/student/summarize/?paperid=%s'>\ <font color=black>View</font></a>" % (str( p.id), str(p.id)) assignment_list.append([a, count, p, action])
def student_takeassignment(request): print "this is assignment" student, res = getSpByRequest(request, None) paperid = request.GET.get("paperid") retake = request.GET.get("retake") print retake, "retake" try: paper = Paper.objects.get(id=paperid) questionseq = pickle.loads(str(paper.questionseq)) except: paper = None questionseq = [] if paper and questionseq: try: assignment = paper.assignment except: assignment = None try: question_set = Question.objects.filter(id__in=questionseq) stuanswer_set = getStuanswers(question_set, student) qnameseq = list( Question.objects.get(id=qid).qname for qid in questionseq) except Exception, e: logger.error(e) stuanswer_set = [] qnameseq = [] #custom paper student can retake if retake: _reinitanswer(stuanswer_set) stuanswer_set = [] if stuanswer_set: teacher_assignment_retake = retake_option(stuanswer_set) anscount = sum(1 for stuanswer in stuanswer_set if stuanswer.taked) if not teacher_assignment_retake and anscount == paper.total and paper.ptype != 'Review': return redirect('student_index') else: logger.debug(stuanswer_set) duration = stuanswer_set[0].timeleft logger.debug(duration) if duration != -1: __getInstallTimer(request, duration) else: duration = __initstuanswer(paper, question_set, student) __getInstallTimer(request, duration) else: duration = __initstuanswer(paper, question_set, student) __getInstallTimer(request, duration) if assignment: ## HACK: disable the deadline check # if assignment.deadline < datetime.now() + timedelta(seconds=duration): # return HttpResponse("Test time %s is due, you haven\'t enough time: %s" # % (assignment.deadline, timedelta(seconds=duration))) pass
def _getassignmentjson(assignments, teacher, student): assignment_list = [] for a in assignments: papers = Paper.objects.filter(assignment=a, owner=teacher.user) for p in papers: try: questionseq = pickle.loads(str(p.questionseq)) question_set = Question.objects.filter(id__in=questionseq) stuanswer_set = getStuanswers(question_set, student) print stuanswer_set, "stuanswer" count = sum(1 for sa in stuanswer_set if sa.taked) print p.total print count, "count" except Exception, e: logger.error(e) logger.error(a) logger.error(p) break if count == p.total: retake = retake_option(stuanswer_set) print retake # for stud_ans in stuanswer_set: # stud_ans.attempted_count += attempt_flag # stud_ans.save() # retake_access = False # # else: if retake: action = "<a href='/student/takeassignment/?paperid=%s'>\ <font color=black>ReTake</font></a> \ | \ <a href='/student/summarize/?paperid=%s'>\ <font color=black>View</font></a>" % (str( p.id), str(p.id)) else: action = "<a href='/student/summarize/?paperid=%s'>\ <font color=black>View</font></a>" % str(p.id) else: action = "<a href='/student/takeassignment/?paperid=%s'>\ <font color=black>Take</font></a> \ | \ <a href='/student/summarize/?paperid=%s'>\ <font color=black>View</font></a>" % (str( p.id), str(p.id)) assignment_list.append([a, count, p, action])
def student_checktime(request): student, res = getSpByRequest(request, None) startkey = "%s_%s" % (settings.EXAM_TIMEOUT_PREFIX, "start") totalkey = "%s_%s" % (settings.EXAM_TIMEOUT_PREFIX, "total") starttime = request.session[startkey] totaltime = request.session[totalkey] curtime = datetime.now() paperid = request.POST.get('paperid') saverequest = request.POST.get('save') if saverequest: try: p = Paper.objects.get(id=paperid) question_set = Question.objects.filter( paper=p, infocompleted=Question.ALLCOMPLETED) stuanswer_set = getStuanswers(question_set, student) logger.debug("stuanswer len: %s" % len(stuanswer_set)) for stuanswer in stuanswer_set: timeleft = stuanswer.timeleft stuanswer.timeleft = timeleft - (curtime - starttime).seconds stuanswer.save() except Exception, e: logger.error("%s:can\'t save timeleft" % e) response_data = {'timeout': 'false'}
@login_required def student_submitpaper(request): student, res = getSpByRequest(request, None) response_data = {'state': 'failure'} try: paperid = request.POST.get('paperid') p = Paper.objects.get(id=int(paperid)) questionseq = pickle.loads(str(p.questionseq)) except Exception, e: logger.error(e) return HttpResponse('paper not found') try: question_set = Question.objects.filter(id__in=questionseq) stuanswer_set = getStuanswers(question_set, student) except Exception, e: response_data['state'] = e logger.error(e) if stuanswer_set: totalmark = 0 for ans in stuanswer_set: totalmark += ans.mark ans.taked = True ans.save() if totalmark < p.passpoint: response_data['state'] = 'failed' else: response_data['state'] = 'passed' return HttpResponse(simplejson.dumps(response_data), mimetype="application/json")