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'))
Example #16
0
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!'})