def modify_quest(request, no): '''modify a quest''' auth = Authentication(request) if not auth.is_login(): return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) try: no = int(no) quest = Questionnaire.objects.get(id=no, author=auth.get_user()) except: # raise Http404() return HttpResponseRedirect(reverse('message', kwargs={'msg': "errorpage"})) if quest.released: return HttpResponseRedirect(reverse('message', kwargs={'msg': "errorpage"})) id = quest.id title = quest.title subject = quest.subject description = quest.description contents = quest.contents anonymous_limit = quest.anonymous_limit questions = Questions() questions.clean() questions.read(contents) return render(request, 'investmanager/edit_quest.html', {'id':id, 'title':title, 'subject':subject, 'description':description, 'questions':questions.questionList, "anonymous_limit":anonymous_limit},)
def toggle_state(request, action, no): '''toggle the closed status of a questionnaire ''' auth = Authentication(request) if not auth.is_login(): return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) nowStatus = '' if action == 'reopen' or action == 'publish': quest = Questionnaire.objects.filter(id = int(no))[0] quest.closed = False quest.released = True quest.save() nowStatus = {"status": "Open"} elif action == 'close': quest = Questionnaire.objects.filter(id = int(no))[0] quest.closed = True quest.save() nowStatus = {"status":"Closed"} data = simplejson.dumps(nowStatus, ensure_ascii = False) response = HttpResponse(data) return response
def manage_proc(request): auth = Authentication(request) user = auth.get_user() all_questionnaires = Questionnaire.objects.filter(author = user) pub_questionnaires = Questionnaire.objects.filter(author = user, released = True) drf_questionnaires = Questionnaire.objects.filter(author = user, released = False) filled_questionnaires = Result.objects.filter(participant_id = user.email) return {"created_num": len(all_questionnaires), "published_num": len(pub_questionnaires), "draft_num": len(drf_questionnaires), "filled_num": len(filled_questionnaires),}
def show_quest_fill_page(request): '''let investigator create the questionnaire''' auth = Authentication(request) if not auth.is_login(): # return HttpResponseRedirect("/message/loginfirst") return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) return render(request, "investmanager/add_quest.html", {})
def show_quest_fill_page(request): '''let investigator create the questionnaire''' auth = Authentication(request) if not auth.is_login(): # return HttpResponseRedirect("/message/loginfirst") return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) # return render(request, "investmanager/add_quest.html", {}) return render(request, 'investmanager/edit_quest.html', {'id':'', 'title':'', 'subject':'', 'description':'', 'questions':None, "anonymous_limit":False},)
def result(request, qid): try: Naire = Questions() Naire.clean() Naire.qid = qid Naire.read(get_object_or_404(Questionnaire, pk=qid).contents) q = get_object_or_404(Questionnaire, pk=qid) auth = Authentication(request) user = auth.get_user() if not q.released: raise Exception() if q.anonymous_limit and user == None: raise Exception() rts = Result.objects.filter(questionnaire_id=qid) # Start doing data collection # Dataset init dataset = [] for x in xrange(1,Naire.count+1): if Naire.questionList[x-1].qtype == 'single': choice_set = [] for x in xrange(0,len(Naire.questionList[x-1].items)): choice_set.append(0) dataset.append(choice_set) elif Naire.questionList[x-1].qtype == 'multiply': choice_set = [] for x in xrange(0,len(Naire.questionList[x-1].items)): choice_set.append(0) dataset.append(choice_set) elif Naire.questionList[x-1].qtype == 'judge': choice_set = [ 0 , 0 ] dataset.append(choice_set) elif Naire.questionList[x-1].qtype == 'essay': dataset.append([]) #print dataset # ergodic count = 0 for x in rts: simple_sheet = eval(x.answer) list_count = 0 for l in simple_sheet: if Naire.questionList[list_count].qtype != 'essay': for i in l: dataset[list_count][int(i)-1] += 1 elif Naire.questionList[list_count].qtype == 'essay': dataset[list_count] += l list_count += 1 count += 1 #print dataset return render(request, 'results/results.html' ,{'Questionnaire':q ,'naire':Naire ,'qid':qid ,'result':dataset ,'count':count,}) except: return render(request, "homepage/message.html", {"message": AlertMessage("danger", "Page 404!", "Wrong Place you've got.", "/"),})
def publish(request): '''pass basic infomation to next page when the button is pressed, the arguments will be passed.''' auth = Authentication(request) if not auth.is_login(): return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) questions = constructQuestions(request) form = QuestForm(request.POST, questions) if form.is_valid(): form.save(request) questions.clean() return HttpResponseRedirect('home')
def save(self, request): auth = Authentication(request) user = auth.get_user() title = self.cleaned_data['title'] subject = self.cleaned_data['subject'] description = self.cleaned_data['description'] current_user_email = user.email contents = self.questions.build() current_user = User.objects.get(email=current_user_email) author = current_user released = False if request.POST['input_action'] == "Publish Questionnaire": released = True #print released return Questionnaire.objects.create(title=title, subject=subject, description=description, contents=contents, author=author,released =released,)
def quest(request, no): '''let people fill the questionnaire''' auth = Authentication(request) if not auth.is_login(): return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) try: no = int(no) quest = Questionnaire.objects.get(id=no) except: raise Http404() id = quest.id title = quest.title subject = quest.subject description = quest.description return render(request, "investmanager/show_quest.html",{"id":id, "title":title, "subject":subject, "description":description})
def publish(request, qid): try: Naire = Questions() Naire.clean() Naire.qid = qid Naire.read(get_object_or_404(Questionnaire, pk=qid).contents) result = [] for x in xrange(1,Naire.count+1): if Naire.questionList[x-1].qtype == 'single': result.append([str(request.POST[str(x)])]) elif Naire.questionList[x-1].qtype == 'multiply': rlist = request.REQUEST.getlist(str(x)) if len(rlist)==0: raise Exception() m = [] for r in rlist: m .append(r) result.append(m) elif Naire.questionList[x-1].qtype == 'judge': result.append([str(request.POST[str(x)])]) elif Naire.questionList[x-1].qtype == 'essay': if str(request.POST[str(x)]) != '' or str(request.POST[str(x)]) !=' ': result.append([str(request.POST[str(x)])]) auth = Authentication(request) user = auth.get_user() if user == None: user = "******" Questionnaire_answered = Questionnaire.objects.get(pk=qid) r = Result(questionnaire_id=Questionnaire_answered,participant_id=user,answer=str(result)) #print str(result) r.save() return render(request, "homepage/message.html", {"message": AlertMessage("success", "Success!", "You have already posted your answers", "/naire"+str(qid)+"/results"),}) except: q = get_object_or_404(Questionnaire, pk=qid) Naire = Questions() Naire.clean() Naire.qid = qid Naire.read(get_object_or_404(Questionnaire, pk=qid).contents) return render(request, 'results/answer.html',{'Questionnaire':q ,'naire':Naire ,'qid':qid, 'errorMsg':'Not finished yet!'})
def manage_filled(request, page): page = int(page) auth = Authentication(request) if not auth.is_login(): # return HttpResponseRedirect("/message/loginfirst") return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) user = auth.get_user() results = Result.objects.filter(participant_id = user.email) max_page =int(math.ceil(len(results)/10.0)) if page > max_page: raise Http404 if page == max_page: last_result_index = len(results) else: last_result_index = 10 * (page - 1) + 10 filled_quest = [] for index in range(10 * (page - 1), last_result_index): quest = Questionnaire.objects.get(id = results[index].questionnaire_id.id) filled_quest.append((quest.id, quest.title, quest.subject, quest.description, quest.closed)) context = RequestContext(request, {"filled_quest": filled_quest, "current_page": page, "max_page": max_page}, processors = [manage_proc]) return render(request, "investmanager/filled_quest.html", context)
def answer(request, qid): try: Naire = Questions() Naire.clean() Naire.qid = qid #print 'questions:', len(Naire.questionList) q = get_object_or_404(Questionnaire, pk=qid) if q.closed or not q.released: raise Exception() auth = Authentication(request) user = auth.get_user() if q.anonymous_limit and user == None: raise Exception() elif user != None: if q.permitobjects_limit != '[]': limitlist = eval(q.permitobjects_limit) if user.email in limitlist: pass else: return render(request, "homepage/message.html", {"message": AlertMessage("danger", "Page 404!", "You have no right to answer this questionnaire!", "/"),}) if q.forbidobjects_limit != '[]': limitlist = eval(q.forbidobjects_limit) if user.email not in limitlist: pass else: return render(request, "homepage/message.html", {"message": AlertMessage("danger", "Page 404!", "You have no right to answer this questionnaire!", "/"),}) rts = Result.objects.filter(questionnaire_id=qid) for r in rts: if r.participant_id == user.email: return render(request, "homepage/message.html", {"message": AlertMessage("warning", "Don't answer same naire twice!", "You've already answered this Questionnaire", "/"),}) Naire.read(q.contents) #print 'questions:', len(Naire.questionList) return render(request, 'results/answer.html' ,{'Questionnaire':q ,'naire':Naire ,'qid':qid}) except: return render(request, "homepage/message.html", {"message": AlertMessage("danger", "Page 404!", "Wrong place you've got.", "/"),})
def manage_dashboard(request, type, page): page = int(page) auth = Authentication(request) if not auth.is_login(): # return HttpResponseRedirect("/message/loginfirst") return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) current_user = auth.get_user() close_or_open(request) if type == "filled": results = Result.objects.filter(participant_id = current_user.email) elif type == "created": results = Questionnaire.objects.filter(author = current_user) elif type == "published": results = Questionnaire.objects.filter(author = current_user, released = True) elif type == "draft": results = Questionnaire.objects.filter(author = current_user, released = False) else: raise Http404 max_page =int(math.ceil(len(results)/10.0)) if len(results) == 0: max_page = 1 if page > max_page: raise Http404 if page == max_page: first_result_index = 0 else: first_result_index = len(results)-10-(page-1)*10 quest_list = [] if type == "filled": for index in range(first_result_index, len(results)-(page-1)*10): quest = Questionnaire.objects.get(id = results[index].questionnaire_id.id) quest_list.append(quest) context = RequestContext(request, {'quest_list':quest_list, "current_page": page, "max_page": max_page}, processors = [manage_proc]) return render(request, "investmanager/filled_quest.html", context) else: quest_list = results[first_result_index:len(results)-(page-1)*10] context = RequestContext(request, {'quest_list':quest_list, 'current_page':page, 'max_page':max_page, 'type': type}, processors = [manage_proc]) return render(request, "investmanager/quest_template.html", context)
def manage_all(request): auth = Authentication(request) if not auth.is_login(): # return HttpResponseRedirect("/message/loginfirst") return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) user = auth.get_user() pub_questionnaires = Questionnaire.objects.filter(author = user) results = Result.objects.filter(participant_id = user.email) results.reverse() # close_or_open(request) created_quest = [] created_num = 1 filled_quest = [] filled_num = 1 if len(pub_questionnaires) <=5 : created_quest = pub_questionnaires[0: len(pub_questionnaires)] else: created_quest = pub_questionnaires[len(pub_questionnaires) - 5: len(pub_questionnaires)] if len(results) <=5 : results = results[0: len(results)] else: results = results[len(results) - 5: len(results)] for result in results: quest = Questionnaire.objects.get(id = result.questionnaire_id.id) filled_quest.append(quest) filled_num += 1 if filled_num > 5: break context = RequestContext(request, {"created_quest": created_quest, "filled_quest": filled_quest, "current_page": 1, "max_page": 1}, processors = [manage_proc]) return render(request, "investmanager/index.html", context)
def resave_quest(request, no): ''' save a quest ''' auth = Authentication(request) if not auth.is_login(): return HttpResponseRedirect(reverse('message', kwargs={'msg': "loginfirst"})) try: no = int(no) quest = Questionnaire.objects.get(id=no) except: raise Http404() quest.title = request.POST.getlist('title')[0] quest.subject = request.POST.getlist('subject')[0] quest.description = request.POST.getlist('description')[0] questions = constructQuestions(request) quest.contents = questions.build() if request.POST['input_action'] == "Publish Questionnaire": quest.released = True quest.anonymous_limit = False if request.POST.has_key('anonymous_limit'): quest.anonymous_limit = True quest.save() return HttpResponseRedirect(reverse('quest:home'))
def auth(db): return Authentication(db.connection)
def publish(request, qid): try: Naire = Questions() Naire.clean() Naire.qid = qid q = get_object_or_404(Questionnaire, pk=qid) if q.closed or not q.released: return render(request, "homepage/message.html", {"message": AlertMessage("danger", "Page 404!", "You have no right to answer this questionnaire!", "/"),}) auth = Authentication(request) user = auth.get_user() if q.anonymous_limit and user == None: return render(request, "homepage/message.html", {"message": AlertMessage("danger", "Page 404!", "You have no right to answer this questionnaire!", "/"),}) elif user != None: if q.permitobjects_limit != '[]': limitlist = eval(q.permitobjects_limit) if user.email in limitlist: pass else: return render(request, "homepage/message.html", {"message": AlertMessage("danger", "Page 404!", "You have no right to answer this questionnaire!", "/"),}) if q.forbidobjects_limit != '[]': limitlist = eval(q.forbidobjects_limit) if user.email not in limitlist: pass else: return render(request, "homepage/message.html", {"message": AlertMessage("danger", "Page 404!", "You have no right to answer this questionnaire!", "/"),}) rts = Result.objects.filter(questionnaire_id=qid) for r in rts: if r.participant_id == user.email: return render(request, "homepage/message.html", {"message": AlertMessage("warning", "Don't answer same naire twice!", "You've already answered this Questionnaire", "/"),}) Naire.read(q.contents) result = [] for x in xrange(1,Naire.count+1): if Naire.questionList[x-1].qtype == 'single': result.append([str(request.POST[str(x)])]) elif Naire.questionList[x-1].qtype == 'multiply': rlist = request.REQUEST.getlist(str(x)) if len(rlist)==0: raise Exception() m = [] for r in rlist: m .append(r) result.append(m) elif Naire.questionList[x-1].qtype == 'judge': result.append([str(request.POST[str(x)])]) elif Naire.questionList[x-1].qtype == 'essay': if str(request.POST[str(x)]) != '' or str(request.POST[str(x)]) !=' ': result.append([str(request.POST[str(x)])]) email = '' if user == None: email = "*****@*****.**" Questionnaire_answered = Questionnaire.objects.get(pk=qid) r = Result(questionnaire_id=Questionnaire_answered,participant_id=email,answer=str(result)) r.save() print email return render(request, "homepage/message.html", {"message": AlertMessage("success", "Success!", "You have already posted your answers", "/naire"+str(qid)+"/results"),}) elif user != None: rts = Result.objects.filter(questionnaire_id=qid) for r in rts: if r.participant_id == user.email: print user.email return render(request, "homepage/message.html", {"message": AlertMessage("warning", "Don't answer same naire twice!", "You've already answered this Questionnaire", "/"),}) Questionnaire_answered = Questionnaire.objects.get(pk=qid) r = Result(questionnaire_id=Questionnaire_answered,participant_id=user.email,answer=str(result)) r.save() print user.email return render(request, "homepage/message.html", {"message": AlertMessage("success", "Success!", "You have already posted your answers", "/naire"+str(qid)+"/results"),}) except: q = get_object_or_404(Questionnaire, pk=qid) Naire = Questions() Naire.clean() Naire.qid = qid Naire.read(get_object_or_404(Questionnaire, pk=qid).contents) # print 'f**k' return render(request, 'results/answer.html',{'Questionnaire':q ,'naire':Naire ,'qid':qid, 'errorMsg':'Not finished yet!'})