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 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 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 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 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 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 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'))