class PreviewController(BaseController): def __init__(self): self.URL_GETDATAQUESTION = "/preview/getDataPreview?idProject={0}" self.utility = Utility() dh = LogDBHandler(config=config, request=request) log.addHandler(dh) @expose("pollandsurvey.templates.view.multiquestion") def index(self, id=0, ready="no", came_from=lurl("/")): reload(sys).setdefaultencoding("utf8") if not request.identity: login_counter = request.environ.get("repoze.who.logins", 0) + 1 redirect("/login", params=dict(came_from=came_from, __logins=login_counter)) userid = request.identity["repoze.who.userid"] log.info("preview id : " + str(id)) log.info("ready : " + str(ready)) self.header = "" self.footer = "" self.nextQuestion = "" self.template = "" self.questionOption = model.QuestionOption.getId(id) if self.questionOption: log.info("expire date : " + str(self.questionOption.expire_date)) log.info("current : " + str(datetime.now())) if datetime.now() <= self.questionOption.expire_date: log.info("not expire") else: log.info("expire") if str(ready).lower() == "no": # check have welcome page if not self.utility.isEmpty(self.questionOption.welcome_message): redirect(request.path_info + "/welcome?id=" + str(self.questionOption.id_question_option)) else: self.template = self.questionOption.theme.template override_template(PreviewController.index, self.template) elif str(ready).lower() == "yes": self.header = self.questionOption.header_message self.footer = self.questionOption.footer_message self.urlName = self.utility.spritValue(request.path_info, "/") self.template = self.questionOption.theme.template if len(self.urlName) >= 1: self.nextQuestion = ( "/" + self.urlName[0] + "/saveQuestion" + "?id=" + str(self.questionOption.id_question_option) ) if self.template is not None and len(self.template) > 0: log.info("template used : %s", self.template) override_template(PreviewController.index, self.template) # print 'idproject : ', id; return dict( page="view", header=self.header, footer=self.footer, action=self.nextQuestion, template=self.template, urldata=self.URL_GETDATAQUESTION.format(id), idproject=id, shownavigator=bool(self.questionOption.show_navigator), idresp="", ) @expose("genshi:pollandsurvey.templates.view.firstTemplate") def sampleTemplate(self, id=0, **kw): # print id; if str(id) == str(2): # print id; override_template(PreviewController.sampleTemplate, "genshi:pollandsurvey.templates.view.changeTemplate") return dict( title="Foobar", mybool=False, someval="foo" ) # ,tg_template="pollandsurvey.templates.view.changeTemplate" @expose("pollandsurvey.templates.view.welcome") def welcome(self, id=0, came_from=lurl("/")): reload(sys).setdefaultencoding("utf8") if not request.identity: login_counter = request.environ.get("repoze.who.logins", 0) + 1 redirect("/login", params=dict(came_from=came_from, __logins=login_counter)) userid = request.identity["repoze.who.userid"] log.info("preview id : " + str(id)) self.welcome_message = "" self.questionOption = model.QuestionOption.getId(id) if self.questionOption: if datetime.now() <= self.questionOption.expire_date: log.info("not expire") else: log.info("expire") self.welcome_message = self.questionOption.welcome_message self.nextQuestion = "" self.urlName = self.utility.spritValue(request.path_info, "/") if len(self.urlName) >= 1: self.nextQuestion = "/" + self.urlName[0] + "?id=" + str(self.questionOption.id_question_option) return dict(page="view", ready="yes", welcome_message=self.welcome_message, nextQuestion=self.nextQuestion) @expose("pollandsurvey.templates.view.singlequestion") def show(self, id=0, came_from=lurl("/")): reload(sys).setdefaultencoding("utf8") if not request.identity: login_counter = request.environ.get("repoze.who.logins", 0) + 1 redirect("/login", params=dict(came_from=came_from, __logins=login_counter)) userid = request.identity["repoze.who.userid"] # flash(_('Welcome back, %s!') % userid) log.info("preview id : " + str(id)) self.questionOption = model.QuestionOption.getId(id) log.info("expire date : " + str(self.questionOption.expire_date)) log.info("current : " + str(datetime.now())) if datetime.now() <= self.questionOption.expire_date: log.info("not expire") else: log.info("expire") return dict(page="view") @expose("json") def getDataPreview(self, came_from=lurl("/"), *args, **kw): reload(sys).setdefaultencoding("utf-8") idProject = kw.get("idProject") idRespondet = None if "." in idProject: self.data = self.utility.spritValue(idProject, ".") idProject = self.data[0] if len(self.data) == 2: idRespondet = self.data[1] # print args; # print kw ; questions = [] question = [] if idRespondet: log.info("Query with respondent") self.listReply = model.RespondentReply.listQuestionForUser(self.data[1]) for re in self.listReply: result = model.RespondentReply.getResultByRespondemtAndQuestion(idRespondet, re.question.id_question) question.append(re.question.to_json(randomAnswer=False, showResult=result)) else: log.info("Query with question") self.questionOption = model.QuestionOption.getId(idProject) if self.questionOption: self.listQuestions = model.Question.getByProjectId(self.questionOption.id_question_project) question = [] for self.question in self.listQuestions: # print self.question.id_question; # print self.question.question; # print self.question.question_type.type; # print self.question.order; question.append(self.question.to_json(randomAnswer=self.questionOption.random_answer)) questions.append({"id": idProject, "question": question}) return dict(questions=questions) @expose("pollandsurvey.templates.view.goodbye") def saveQuestion(self, id=0, came_from=lurl("/"), *args, **kw): reload(sys).setdefaultencoding("utf-8") if not request.identity: login_counter = request.environ.get("repoze.who.logins", 0) + 1 redirect("/login", params=dict(came_from=came_from, __logins=login_counter)) userid = request.identity["repoze.who.userid"] self.success = True self.message = "success" self.goodbye_message = "" self.nextQuestion = "" self.questionOption = model.QuestionOption.getId(id) if self.questionOption: self.goodbye_message = self.questionOption.end_message self.urlRedirect = self.questionOption.redirect_url return dict( page="goodbye", success=self.success, message=self.message, goodbye=self.goodbye_message, nextQuestion=self.nextQuestion, urlRedirect=self.urlRedirect, ) @expose("pollandsurvey.templates.view.multiquestion") def showResult(self, id=0, ready="yes", came_from=lurl("/"), *args, **kw): reload(sys).setdefaultencoding("utf-8") if not request.identity: login_counter = request.environ.get("repoze.who.logins", 0) + 1 redirect("/login", params=dict(came_from=came_from, __logins=login_counter)) # userid = request.identity['repoze.who.userid'] self.data = self.utility.spritValue(id, ".") if len(self.data) != 2: return dict(questions=[]) log.info("preview id : " + str(id) + " ready : " + str(ready)) self.header = "" self.footer = "" self.nextQuestion = "" self.template = "" self.questionOption = model.QuestionOption.getId(self.data[0]) if self.questionOption: # log.info('expire date : ' + str(self.questionOption.expire_date) + ', current date : ' + str(datetime.now())); # if datetime.now() <= self.questionOption.expire_date: # log.info('not expire'); # else : # log.info('expire'); if str(ready).lower() == "no": # check have welcome page if not self.utility.isEmpty(self.questionOption.welcome_message): redirect(request.path_info + "/welcome?id=" + str(self.questionOption.id_question_option)) else: self.template = self.questionOption.theme.template override_template(PreviewController.index, self.template) elif str(ready).lower() == "yes": self.header = self.questionOption.header_message self.footer = self.questionOption.footer_message self.urlName = self.utility.spritValue(request.path_info, "/") self.template = self.questionOption.theme.template if len(self.urlName) >= 1: self.nextQuestion = ( "/" + self.urlName[0] + "/saveQuestion" + "?id=" + str(self.questionOption.id_question_option) ) if self.template is not None and len(self.template) > 0: log.info("template used : %s", self.template) override_template(PreviewController.index, self.template) return dict( page="view", header=self.header, footer=self.footer, action=self.nextQuestion, template=self.template, urldata=self.URL_GETDATAQUESTION.format(id), idproject=id, shownavigator=bool(self.questionOption.show_navigator), idresp="", )
class AnswerQuestionController(BaseController):#RestController): # def __init__(self): self.utility = Utility(); self.urlUtility = URLUtility(); self.sourceHtml = model.SystemEnvironment.getScoreViewHtml(); self.answerQuestionService = AnswerQuestionService(mymodel = model) dh = LogDBHandler( config=config,request=request); log.addHandler(dh) @expose() def _default(self, *args, **kw): return 'This page is not ready' def _before(self, *args, **kw): tmpl_context.project_name = 'pollandsurvey' @expose('pollandsurvey.templates.view.multiquestion') def questionnaire(self,key=0,ready='no',**kw): reload(sys).setdefaultencoding('utf8') log.info("key %s , ready %s" %( key,ready) ); print ("key %s , ready %s" %( key,ready) ); self.header = ''; self.footer = ''; self.nextQuestion =''; self.template =''; self.userName=''; self.respondents = model.Respondents.getByKey(keyGen=key); if self.respondents : self.urlReply = self.urlUtility.URL_REPLY.format( model.SystemEnvironment.getServerUrl() , str(self.respondents.id_question_project), str(self.respondents.id_question_option), str(self.respondents.id_voter)) ; #request.application_url log.info("iframe url to %s" %self.urlReply); #check finish self.isRedirect ,self.redirect = self.answerQuestionService.checkFinish(respondent = self.respondents, urlUtility = self.urlUtility) if self.isRedirect: redirect(self.redirect) ; #check Expire self.questionOption,self.redirect = self.__checkOptionExpired(self.respondents.id_question_option); if str(ready).lower() == 'no': #check have welcome page if( not self.utility.isEmpty(self.questionOption.welcome_message) ) : #redirect('/ans' + '/welcome?id='+ str(self.questionOption.id_question_option) ); log.info("show message welcome : "); redirect( self.urlUtility.URL_WELCOME.format(key = str(key)) )# self.URL_WELCOME_NEW.format(str(key)) ); else: log.info("show questionnaire : "); self.template = self.questionOption.theme.template; override_template(AnswerQuestionController.questionnaire, self.template) ; elif str(ready).lower() == 'yes': self.header = self.questionOption.header_message; self.footer = self.questionOption.footer_message; self.urlName = self.utility.spritValue(request.path_info,'/'); self.template = self.questionOption.theme.template if(len(self.urlName) >= 1 ) : self.nextQuestion = '/' + self.urlName[0] + '/saveQuestion' + '?id='+ str(self.questionOption.id_question_option); if(self.template is not None and len(self.template) > 0): log.info("template used : %s" %self.template ); override_template(AnswerQuestionController.questionnaire, self.template) self.ip=request.environ.get("X_FORWARDED_FOR", request.environ["REMOTE_ADDR"]); self.browser = request.environ.get('HTTP_USER_AGENT'); self.header = self.questionOption.header_message; self.footer = self.questionOption.footer_message; self.urlName = self.utility.spritValue(request.path_info,'/'); self.template = self.questionOption.theme.template if self.respondents.voter: self.userName = "******"%(self.respondents.voter.firstname,self.respondents.voter.lastname); else: log.warning("find not found key %s" %str(key)); redirect(self.urlUtility.URL_EXPIRED) ; print "header : %s" %self.header return dict(page='view', header = Markdown(self.header).convert() , footer = Markdown(self.footer).convert() , action = self.nextQuestion, template= self.template, #urldata = self.URL_GETDATAQUESTION.format(self.idPublic), urldata = self.urlUtility.URL_GETDATAQUESTION.format(key=str(key)),# self.URL_GETDATAQUESTION.format(key), idproject = self.questionOption.id_question_option , idresp = self.respondents.id_respondents, username = self.userName, shownavigator = bool(self.questionOption.show_navigator) ); @expose('pollandsurvey.templates.view.welcome') def welcome(self,key=0,came_from=lurl('/')): reload(sys).setdefaultencoding("utf-8"); log.info('preview id : ' + str(key)); self.respondents = model.Respondents.getByKey(key); #self.idProject,self.idPublic,self.idVoter,self.redirect = self.__checkExpire(id); if (self.respondents): self.welcome_message = ''; self.questionOption,self.redirect = self.__checkOptionExpired(self.respondents.id_question_option); self.welcome_message= self.questionOption.welcome_message; self.nextQuestion = ''; self.urlName = self.utility.spritValue(request.path_info,'/'); if(len(self.urlName) >= 1 ) : #self.nextQuestion = '/' + self.urlName[0]+ '?id='+ str(self.questionOption.id_question_option); #self.nextQuestion = '/' + 'ans/reply/'+ str(self.questionOption.id_question_option); #self.nextQuestion = self.URL_REPLY.format(id) self.nextQuestion = self.urlUtility.URL_REPLY_QUESTIONNAIRE.format(key=str(key)); else: log.error("find not found respondent with key %s ", str(key)); redirect(self.urlUtility.URL_EXPIRED) ; #self.welcome_message return dict(page='view', ready = 'yes',welcome_message = Markdown(self.welcome_message).convert(), nextQuestion= self.nextQuestion); @expose('pollandsurvey.templates.view.goodbye') def thankyou(self,key=0,came_from=lurl('/')): reload(sys).setdefaultencoding("utf-8"); log.info('thankyou preview id : %s' %str(key)); self.isRedirect = True self.goodbye = ''; self.nextQuestion = ''; self.urlRedirect = ''; self.showScore = False self.respondents = model.Respondents.getByKey(keyGen=key); if(self.respondents): self.urlName = self.utility.spritValue(request.path_info,'/'); log.info( "path %s" %self.urlName) self.questionOption = self.respondents.question_option if self.questionOption : self.goodbye= self.questionOption.end_message self.showScore = self.utility.convertToBool(self.questionOption.show_score) self.urlRedirect = self.questionOption.redirect_url if self.utility.convertToBool(self.respondents.redirect_other_url): self.urlRedirect = self.questionOption.redirect_other_url self.isRedirect = False self.projectType = self.respondents.question_project.id_question_project_type del self.questionOption if self.isRedirect : log.error("find not found respondent with key %s " % str(key)); redirect(self.urlUtility.URL_EXPIRED) ; return dict(page='goodbye', ready = 'yes',goodbye = Markdown(self.goodbye).convert(),nextQuestion = self.nextQuestion ,urlRedirect= self.urlRedirect, showScore = self.showScore ,projectType = self.projectType,imageId = self.respondents.id_respondents); @expose('json') def getDataPreview(self, key=0, *args, **kw): reload(sys).setdefaultencoding("utf-8"); log.info("function getDataPreview"); self.respondents = model.Respondents.getByKey(key); if(self.respondents is None): return dict(questions = [],timer = 0); self.idProject=self.respondents.id_question_project; self.idPublic=self.respondents.id_question_option; self.questionOption = model.QuestionOption.getId(self.idPublic); log.info("idProject : %s, idPublic : %s, idVoter : %s, id_respondents : %s" %( str(self.idProject), str(self.idPublic), str(self.respondents.id_voter) , str(self.respondents.id_respondents) ) ); #get old question self.answerQuestionService.renewQuestionForUser( respondents = self.respondents, id_close_type = self.questionOption.id_close_type) self.listReply = model.RespondentReply.listQuestionForUser(self.respondents.id_respondents); #questionobject by id_respondents self.respondents.respondent_data = datetime.now(); question = []; self.listquestion = []; self.order =1 log.info("Random Question And Answer : " ); if( len(self.listReply) > 0 ): log.info("Random new"); self.listquestion = self.answerQuestionService.getQuestionGroupWithReply(listReply= self.listReply) else: log.info( "Get New Question") self.listquestion = self.answerQuestionService.getQuestionGroupWithQuestionOption(self.questionOption) self.answerQuestionService.createQuestionForUser(listQuestion=self.listquestion, id_close_type= self.questionOption.id_close_type) self.listquestion, self.order = self.answerQuestionService.genSeq(listQuestion = self.listquestion) #question = self.__randomQuestionAndAnswer(question,self.questionOption); #self.__setSequenceQuestion(question); questions = []; questions.append({'id': self.idProject, 'question' : self.listquestion, 'total': self.order}); return dict(questions = questions,timer = self.questionOption.duration_time); @expose('json') def saveQuestion(self, *args, **kw): reload(sys).setdefaultencoding("utf-8"); log.info( "function save Question answer"); log.info( request.body); self.saveQuests = JsontoObject(json.loads(request.body, encoding=request.charset)) self.finished = self.saveQuests.finished self.idresp = None self.redirect = '' if (len(self.saveQuests.value) >0): for item in self.saveQuests.value: if(item): self.idresp = item.idresp self.questionOption,self.redirect = self.__checkOptionExpired(item.idproject,False);#check Expired self.respondent,self.redirect = self.__checkRespondentFinished( None, None,item.idresp,False);#check finished if(self.respondent): self.respondent.finished = self.finished; self.respondent.finished_date = datetime.now(); self.question = model.Question.getById(item.id);#getQuestion if(self.question): self.respondentreply = model.RespondentReply.getByRespondentAndQuestion(item.idresp,item.id); if (self.respondentreply is None): self.respondentreply = model.RespondentReply(id_respondents = item.idresp,id_question = item.id); self.respondentreply.save(); log.info("save answer respondentreply : " +str( self.respondentreply.id_respondents ) + " and " + str( self.respondentreply.id_question ) + " success"); if (len(self.respondentreply.childenAnswer) == 0): #save for v in item.value: self.replyquestion = model.ReplyBasicQuestion(id_resp_reply = self.respondentreply.id_resp_reply, id_basic_data = v.id, answer_text = v.value ); self.replyquestion.save(); v = None del v log.info("save answer replyquestion : " +str( self.respondentreply.id_resp_reply ) + " and " + str( self.replyquestion.id_basic_data ) + " success"); else: log.info('user %s do this question : %s Already'%(item.idresp,item.id)); else: log.info('find not found question id : : %s' %(item.id)); else: log.info('find not found respondent id : : %s' %(item.idresp)); item = None model.DBSession.flush() #calculate score if(self.finished): log.info('finished : calculate score ') model.Respondents.updateScoreByIdRespondents(self.idresp) model.Respondents.updatePersonalityScoreByIdRespondents(self.idresp) transaction.commit() self.answerQuestionService.createScoreFileImage(self.idresp) #self.__createScoreFile(self.idresp); self.redirect = self.urlUtility.URL_GOODBYE.format( key= self.utility.splitNameWithOutExtention(basename(request.environ.get("HTTP_REFERER" ))) ); return dict(success = True,redirect = self.redirect, finished = self.finished ); @expose('json') def getresult(self, *args, **kw): reload(sys).setdefaultencoding("utf-8"); self.result = model.Respondents.getResultPersonality(id_respondents=124) #for r in self.result: print self.result @expose('pollandsurvey.templates.certificate.index') def viewCertScore(self,key=0,**kw): reload(sys).setdefaultencoding('utf8') certificateUser = dict( title='Certificate Of Jobsmatcher', label_score='scored', label_date='Date', name='', score='0/0', type='', finishDate='' ) self.respondents = model.Respondents.getId(key) if self.respondents: self.result = model.Respondents.getScoreByIdRespondents(id_respondents=key) certificateUser['name'] = (' ').join([self.respondents.voter.prefix, self.respondents.voter.firstname, self.respondents.voter.lastname]) certificateUser['finishDate'] = self.utility.getDateByFormat(date = self.respondents.finished_date) certificateUser['score'] = self.result certificateUser['type'] = self.respondents.question_project.name log.info( "respondents %s , score %s" %(key, self.result)) return dict(page = 'certificate',certificateUser = certificateUser) def __checkExpire(self,id): #sprint 10.2.1.0.html idproject.idpublic.idvoter. self.value = self.utility.spritValue(id,'.'); self.idProject =0; self.idPublic = 0; self.idVoter = 0; self.redirect = ''; if(len(self.value) == 4): self.idProject =self.value[0]; self.idPublic = self.value[1]; self.idVoter = self.value[2]; else: self.idProject =None; self.idPublic = None; self.idVoter = None; log.info('parameter not have 4 parameter : %s', ','.join(self.value)); self.redirect = self.urlUtility.URL_EXPIRED; redirect(self.urlUtility.URL_EXPIRED) ; self.voter = model.Voter.getId(self.idVoter); if(self.voter is None): log.info('find not voter in id : %s',self.idVoter); self.redirect = self.urlUtility.URL_HOME; redirect(self.urlUtility.URL_HOME) ; self.project = model.QuestionProject.getId(self.idProject); if(self.project is None): log.info('find not project in id project : %s',self.idProject); self.redirect = self.urlUtility.URL_HOME; redirect(self.urlUtility.URL_HOME) ; return self.idProject,self.idPublic,self.idVoter, self.redirect; def __checkOptionExpired(self,idPublic,isRedirect = True): #print 'public option id ',idPublic; self.questionOption = model.QuestionOption.getId( idPublic); self.redirect = ''; if self.questionOption is None or ( not self.utility.isActiveFromDate(None,self.questionOption.activate_date,self.questionOption.expire_date) ): self.redirect = self.urlUtility.URL_EXPIRED; if (isRedirect): #print 'redirect ',self.URL_EXPIRED; redirect(self.urlUtility.URL_EXPIRED) ; #print 'id option : ', self.questionOption.welcome_message; return self.questionOption,self.redirect; def __checkRespondentFinished(self,idVoter,idPublic,idResp,isRedirect = True): self.respondent = None; self.redirect = ''; if(idVoter and idPublic): self.respondent = model.Respondents.getByVoterAndPublicId(idVoter,idPublic); elif (idResp): self.respondent = model.Respondents.getId(idResp); if(self.respondent is not None and self.respondent.finished == CheckFinish.finished.value): #finished = 1 log.info('voter finished in id public : %s',idPublic); self.redirect = self.urlUtility.URL_THANKYOU; if (isRedirect): redirect(self.urlUtility.URL_THANKYOU) ; elif (self.respondent is None): log.error("System can not find idVoter : %s , idPublic : %s" , idVoter, idPublic); redirect(self.urlUtility.URL_THANKYOU) ; return self.respondent,self.redirect; def __getQuestion(self,idPublic,questionOption): question = []; #get Project Option if self.questionOption : #get Question self.listQuestions = model.Question.getByProjectId(questionOption.id_question_project); #get to object json for self.question in self.listQuestions: question.append(self.question.to_json(randomAnswer = questionOption.random_answer)); #clear sequence return question ; def __getQuestionFromReply(self,reply,questionOption): question = []; for re in reply: #re.question question.append(re.question.to_json(randomAnswer= questionOption.random_answer)); return question; def __randomQuestionAndAnswer(self,question,questionOption): #option Randon Question if( questionOption.id_fix_random_type == RandomType.simple_random.value): #id_fix_random_type == 2 question = random.sample(question,len(question));#,self.questionOption.use_question_no ); question = question[0:questionOption.use_question_no]; return question; def __setSequenceQuestion(self,question): row = 1; for q in question: q['seq'] = row; row = row +1; row =None; return question;
class RegisterService(object): def __init__(self): print "init RegisterService" self.urlServer = model.SystemEnvironment.getServerUrl(); self.utility = Utility(); pass; def insertOrUpdateUserWithFacebook(self,user,fuser,accessToken): self.fullname = fuser['first_name'] self.fulllastname = fuser['last_name'] self.email =fuser['email'] self.tnc = 1 self.id_gender = model.Gender.getIdGender(fuser['gender']) self.displayname = fuser['name'] self.provider_user_id = fuser['id'] self.access_token = accessToken['accessToken'] self.profile_url =fuser['link'] self.expiresin = str(accessToken['expiresIn']) self.singed_request = accessToken['signedRequest'] locale = self.utility.spritValue(fuser['locale'], '_') self.language = locale[0] self.country = locale[1] self.insert = False; if(user is None): user = model.User() self.insert= True; user.user_name = self.email user.email_address = self.email user.display_name = self.displayname if(self.insert ): user.save() self.user_id = user.user_id self.userservice = model.UserService.getByUserId(self.user_id) self.usersocial = model.UserSocialNetwork.getByUserIdAndSocialId(self.user_id, '1'); if(self.userservice is None): self.userservice = model.UserService(); self.insert= True; self.userservice.user_name = self.email; self.userservice.email_address = self.email; self.userservice.display_name = self.displayname ; #self.user._set_password(self.password); self.userservice.first_name = self.fullname self.userservice.last_name = self.fulllastname #self.user.address =self.address #self.user.city =self.city #self.user.country = self.country self.userservice.id_gender = self.id_gender self.userservice.accept_tnc = self.tnc self.userservice.language = self.language self.userservice.country = self.country self.userservice.user_id = self.user_id if(self.insert ): self.userservice.save(); self.userservice.updateGroupUserVoter(); if (self.usersocial is None): self.usersocial = model.UserSocialNetwork(); self.insert= True; self.usersocial.user_id = self.user_id self.usersocial.id_social_type = 1 self.usersocial.provider_user_id = self.provider_user_id self.usersocial.access_token = self.access_token self.usersocial.display_name = self.displayname self.usersocial.profile_url =self.profile_url self.usersocial.expiresin = self.expiresin self.usersocial.singed_request = self.singed_request if(self.insert ): self.usersocial.save() return user; def createUserWithFacebook(self,fuser,accessToken): self.fullname = fuser['first_name'] self.fulllastname = fuser['last_name'] self.email =fuser['email'] self.tnc = 1 self.id_gender = model.Gender.getIdGender(fuser['gender']) locale = self.utility.spritValue(fuser['locale'], '_') user = model.User() user.user_name = self.email user.email_address = self.email user.display_name = fuser['name'] user.save() self.userservice = model.UserService(); self.userservice.user_name = self.email; self.userservice.email_address = self.email; self.userservice.display_name = fuser['name']; #self.user._set_password(self.password); self.userservice.first_name = self.fullname self.userservice.last_name = self.fulllastname #self.user.address =self.address #self.user.city =self.city #self.user.country = self.country self.userservice.id_gender = self.id_gender; self.userservice.accept_tnc = self.tnc self.userservice.language = locale[0] self.userservice.country = locale[1] self.userservice.user_id = user.user_id self.userservice.save(); self.userservice.updateGroupUserVoter(); self.usersocial = model.UserSocialNetwork(); self.usersocial.user_id = user.user_id self.usersocial.id_social_type = 1 self.usersocial.provider_user_id = fuser['id'] self.usersocial.access_token = accessToken['accessToken'] self.usersocial.display_name = fuser['name'] self.usersocial.profile_url =fuser['link'] self.usersocial.expiresin = str(accessToken['expiresIn']) self.usersocial.singed_request = accessToken['signedRequest'] self.usersocial.save() def createUser(self, kw): self.registerObject = RegisterObject(**kw); self.user = self.registerObject.getUser() self.user.save(); self.userservice = self.registerObject.getUserService(); self.userservice.user_id = self.user.user_id self.userservice.accept_tnc = self.utility.convertToBit(self.userservice.accept_tnc); self.userservice.save(); self.userservice.updateGroupUserVoter() self.userservice.updateGroupUserCreator() self.userGenCode = self.createUserGenCode(self.user); return self.user,self.userGenCode; def createUserGenCode(self,user): self.userGenCode = model.UserGenCode(); self.userGenCode.user_id = user.user_id; self.userGenCode.id_gen_code_type = 2 ;# register self.userGenCode.code = str(self.userGenCode.user_id)+ self.utility.my_random_string(15); self.userGenCode.expire_date = self.utility.plusDate(datetime.today(),30); self.userGenCode.save(); return self.userGenCode; def reActivateUserGenCode(self,userGenCode,user): if(userGenCode): self.userGenCode = userGenCode; self.userGenCode.code = str(self.userGenCode.user_id)+ self.utility.my_random_string(15); self.userGenCode.expire_date = self.utility.plusDate(datetime.today(),30); self.userGenCode.create_date = datetime.today(); self.userGenCode.count = self.userGenCode.count +1; self.userGenCode.success = 0; return self.userGenCode; return userGenCode; def deActivateUserGenCode(self,user): self.userGenCode = model.UserGenCode() self.userGenCode.user_id = user.user_id self.userGenCode.id_gen_code_type = 6 ;# deactivate self.userGenCode.code = str(self.userGenCode.user_id)+ self.utility.my_random_string(15) self.userGenCode.expire_date = self.utility.plusDate(datetime.today(),30) self.userGenCode.success = 1 self.userGenCode.save() return self.userGenCode; def reActivateUser(self,user): self.userGenCode = None self.user = user if(self.user): self.userGenCode = self.createUserGenCode(self.user) self.emailValues={}; self.emailValues['user_name'] = self.user.display_name; self.emailValues['email'] = self.user.email_address; self.emailValues['password'] = ''; self.emailValues['activate_url'] = request.scheme + '://' + self.urlServer + "/activate/" + str(self.userGenCode.code); #request.application_url self.sendMailService = SendMailService(); self.sendMailService.sendreActivate(self.emailValues); self.sendMailService.start(); return self.user, self.userGenCode
class PreviewController(BaseController): def __init__(self): self.URL_GETDATAQUESTION = '/preview/getDataPreview?idProject={0}'; self.utility = Utility(); dh = LogDBHandler( config=config,request=request); log.addHandler(dh) @expose('pollandsurvey.templates.view.multiquestion') @require(predicates.in_any_group('creator','managers', msg=l_('Only for creator'))) def index(self ,id=0,ready='no' , came_from=lurl('/')): reload(sys).setdefaultencoding('utf8') userid = request.identity['repoze.who.userid'] self.header = ''; self.footer = ''; self.nextQuestion =''; self.template =''; self.questionOption = model.QuestionOption.getId(id); if self.questionOption : print str(ready).lower() if str(ready).lower() == 'no': #check have welcome page if( not self.utility.isEmpty(self.questionOption.welcome_message) ) : redirect(request.path_info + '/welcome?id='+ str(self.questionOption.id_question_option) ); else: self.template = self.questionOption.theme.template; override_template(PreviewController.index, self.template) ; elif str(ready).lower() == 'yes': self.header = self.questionOption.header_message; self.footer = self.questionOption.footer_message; self.urlName = self.utility.spritValue(request.path_info,'/'); self.template = self.questionOption.theme.template if(len(self.urlName) >= 1 ) : self.nextQuestion = '/' + self.urlName[0] + '/saveQuestion' + '?id='+ str(self.questionOption.id_question_option); if(self.template is not None and len(self.template) > 0): log.info("template used : %s", self.template ); override_template(PreviewController.index, self.template) #kw = {'idProject': str(id)} #self.dataView = self.getDataPreview(came_from,**kw) print "self.template " + self.template #print 'idproject : ', id; return dict(page='view',header = self.header, footer = self.footer, action = self.nextQuestion, template= self.template, urldata = self.URL_GETDATAQUESTION.format(id) , idproject = id , shownavigator = bool(self.questionOption.show_navigator), idresp = "", username=""); @expose ("genshi:pollandsurvey.templates.view.firstTemplate") def sampleTemplate(self,id=0, **kw): #print id; if(str(id) == str(2)): #print id; override_template(PreviewController.sampleTemplate, 'genshi:pollandsurvey.templates.view.changeTemplate') return dict(title="Foobar", mybool=False, someval="foo" ) #,tg_template="pollandsurvey.templates.view.changeTemplate" @expose('pollandsurvey.templates.view.welcome') def welcome(self,id=0,came_from=lurl('/')): reload(sys).setdefaultencoding('utf8') if not request.identity: login_counter = request.environ.get('repoze.who.logins', 0) + 1 redirect('/login', params=dict(came_from=came_from, __logins=login_counter)) userid = request.identity['repoze.who.userid'] log.info('preview id : ' + str(id)); self.welcome_message = ''; self.questionOption = model.QuestionOption.getId(id); if self.questionOption : if datetime.now() <= self.questionOption.expire_date: log.info('not expire'); else : log.info('expire'); self.welcome_message= self.questionOption.welcome_message; self.nextQuestion = ''; self.urlName = self.utility.spritValue(request.path_info,'/'); if(len(self.urlName) >= 1 ) : self.nextQuestion = '/' + self.urlName[0]+ '?id='+ str(self.questionOption.id_question_option); return dict(page='view', ready = 'yes',welcome_message = self.welcome_message, nextQuestion= self.nextQuestion); @expose('pollandsurvey.templates.view.singlequestion') def show(self ,id=0 , came_from=lurl('/')): reload(sys).setdefaultencoding('utf8') if not request.identity: login_counter = request.environ.get('repoze.who.logins', 0) + 1 redirect('/login', params=dict(came_from=came_from, __logins=login_counter)) userid = request.identity['repoze.who.userid'] #flash(_('Welcome back, %s!') % userid) log.info('preview id : ' + str(id)); self.questionOption = model.QuestionOption.getId(id); log.info('expire date : ' + str(self.questionOption.expire_date)); log.info('current : ' + str(datetime.now()) ); if datetime.now() <= self.questionOption.expire_date: log.info('not expire'); else : log.info('expire'); return dict(page='view') @expose('json') def getDataPreview(self, came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); idProject = kw.get('idProject'); idRespondet = None; if( '.' in idProject): self.data = self.utility.spritValue(idProject,".") idProject = self.data[0]; if len(self.data) == 2: idRespondet = self.data[1]; #print args; #print kw ; questions = []; question = []; self.order = 1; self.listquestion = [] self.listquestion = []; if idRespondet : log.info("Query with respondent"); self.listReply = model.RespondentReply.listQuestionForUser(self.data[1]); self.order = 1 for re in self.listReply: result = model.RespondentReply.getResultByRespondemtAndQuestion(idRespondet,re.question.id_question); self.listquestion.append(re.question.to_json(randomAnswer=False, showResult = result,initOrder =self.order )); self.order = self.order + 1 else : log.info("Query with question"); self.questionOption = model.QuestionOption.getId(idProject); if self.questionOption : self.questionGroups = model.QuestionGroup.getByProject(self.questionOption.id_question_project ) for self.group in self.questionGroups: self.group, self.order = self.group.tojsonview(randomAnswer = self.questionOption.random_answer,initOrder= self.order) self.listquestion.append(self.group) self.order = self.order -1; questions.append({'id': idProject, 'question' : self.listquestion, 'total': self.order }); return dict(questions = questions); @expose('pollandsurvey.templates.view.goodbye') def saveQuestion(self,id=0 , came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); if not request.identity: login_counter = request.environ.get('repoze.who.logins', 0) + 1 redirect('/login', params=dict(came_from=came_from, __logins=login_counter)) userid = request.identity['repoze.who.userid'] self.success = True; self.message = "success"; self.goodbye_message = ''; self.nextQuestion = ''; self.questionOption = model.QuestionOption.getId(id); if(self.questionOption): self.goodbye_message = self.questionOption.end_message; self.urlRedirect = self.questionOption.redirect_url; return dict(page='goodbye',success=self.success, message = self.message,goodbye = self.goodbye_message,nextQuestion = self.nextQuestion,urlRedirect = self.urlRedirect); @expose('pollandsurvey.templates.view.resultquestion') def showResult(self,id=0 ,ready='yes' , came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); if not request.identity: login_counter = request.environ.get('repoze.who.logins', 0) + 1 redirect('/login', params=dict(came_from=came_from, __logins=login_counter)) #userid = request.identity['repoze.who.userid'] print id; self.data = self.utility.spritValue(id,".") if len(self.data) != 2: return dict(questions = []); log.info('preview id : ' + str(id) + ' ready : ' + str(ready)); self.header = ''; self.footer = ''; self.nextQuestion =''; self.template =''; self.questionOption = model.QuestionOption.getId(self.data[0]); if self.questionOption : #log.info('expire date : ' + str(self.questionOption.expire_date) + ', current date : ' + str(datetime.now())); #if datetime.now() <= self.questionOption.expire_date: # log.info('not expire'); #else : # log.info('expire'); if str(ready).lower() == 'no': #check have welcome page if( not self.utility.isEmpty(self.questionOption.welcome_message) ) : redirect(request.path_info + '/welcome?id='+ str(self.questionOption.id_question_option) ); else: self.template = self.questionOption.theme.template; #override_template(PreviewController.index, self.template) ; elif str(ready).lower() == 'yes': self.header = self.questionOption.header_message; self.footer = self.questionOption.footer_message; self.urlName = self.utility.spritValue(request.path_info,'/'); self.template = self.questionOption.theme.template if(len(self.urlName) >= 1 ) : self.nextQuestion = '/' + self.urlName[0] + '/saveQuestion' + '?id='+ str(self.questionOption.id_question_option); """if(self.template is not None and len(self.template) > 0): log.info("template used : %s", self.template ); override_template(PreviewController.index, self.template) """ print "return values"; return dict(page='view',header = self.header, footer = self.footer, action = self.nextQuestion, template= self.template, urldata = self.URL_GETDATAQUESTION.format(id) , idproject = id , shownavigator = bool(self.questionOption.show_navigator), idresp = "");
class AnswerController(BaseController):#RestController): # def __init__(self): self.utility = Utility(); self.urlUtility = URLUtility(); self.UPLOAD_DIR = config['path_upload_file'] ; self.CONVERT_DIR = config['path_convert_file'] ; self.utility.createPathFile(self.CONVERT_DIR); self.utility.createPathFile(self.UPLOAD_DIR); self.sourceHtml = model.SystemEnvironment.getScoreViewHtml(); dh = LogDBHandler( config=config,request=request); log.addHandler(dh) @expose() def _default(self, *args, **kw): return 'This page is not ready' def _before(self, *args, **kw): tmpl_context.project_name = 'pollandsurvey' @expose('pollandsurvey.templates.view.multiquestion') def questionnaire(self,key=0,ready='no',**kw): reload(sys).setdefaultencoding('utf8') log.info("key %s",key); self.header = ''; self.footer = ''; self.nextQuestion =''; self.template =''; self.respondents = model.Respondents.getByKey(key); if self.respondents : log.info("find key %s",key); self.urlServer = model.SystemEnvironment.getServerUrl(); self.urlReply = self.urlUtility.URL_REPLY.format(self.urlServer, str(self.respondents.id_question_project), str(self.respondents.id_question_option), str(self.respondents.id_voter)) ; #request.application_url log.info("iframe url to %s",self.urlReply); #check finish isRedirect = True if(self.respondents is not None and self.respondents.finished == 1): log.info('voter finished in id public : %s', str(self.respondents.id_question_option) ); self.redirect = self.urlUtility.URL_THANKYOU; if (isRedirect): redirect(self.urlUtility.URL_THANKYOU) ; elif (self.respondents is None): log.error("System can not find idVoter : %s , idPublic : %s" , str(self.respondents.id_voter), str(self.respondents.id_question_option)); redirect(self.urlUtility.URL_THANKYOU) ; #check Expire self.questionOption,self.redirect = self.__checkOptionExpired(self.respondents.id_question_option); log.info("id_question_option : %s ", str(self.questionOption.id_question_option)); log.info("ready : %s ", str(ready)); if str(ready).lower() == 'no': #check have welcome page if( not self.utility.isEmpty(self.questionOption.welcome_message) ) : #redirect('/ans' + '/welcome?id='+ str(self.questionOption.id_question_option) ); log.info("show message welcome : "); redirect( self.urlUtility.URL_WELCOME.format(key = str(key)) )# self.URL_WELCOME_NEW.format(str(key)) ); else: log.info("show questionnaire : "); self.template = self.questionOption.theme.template; override_template(AnswerController.questionnaire, self.template) ; elif str(ready).lower() == 'yes': self.header = self.questionOption.header_message; self.footer = self.questionOption.footer_message; self.urlName = self.utility.spritValue(request.path_info,'/'); self.template = self.questionOption.theme.template if(len(self.urlName) >= 1 ) : self.nextQuestion = '/' + self.urlName[0] + '/saveQuestion' + '?id='+ str(self.questionOption.id_question_option); if(self.template is not None and len(self.template) > 0): log.info("template used : %s", self.template ); override_template(AnswerController.questionnaire, self.template) self.ip=request.environ.get("X_FORWARDED_FOR", request.environ["REMOTE_ADDR"]); self.browser = request.environ.get('HTTP_USER_AGENT'); else: log.warning("find not found key %s",str(key)); redirect(self.urlUtility.URL_EXPIRED) ; return dict(page='view',header = Markdown(self.header).convert() , footer = Markdown(self.footer).convert() , action = self.nextQuestion,template= self.template, #urldata = self.URL_GETDATAQUESTION.format(self.idPublic), urldata = self.urlUtility.URL_GETDATAQUESTION.format(key=str(key)),# self.URL_GETDATAQUESTION.format(key), idproject = self.questionOption.id_question_option , idresp = self.respondents.id_respondents, shownavigator = bool(self.questionOption.show_navigator) ); @expose('pollandsurvey.templates.view.welcome') def welcome(self,key=0,came_from=lurl('/')): reload(sys).setdefaultencoding("utf-8"); log.info('preview id : ' + str(key)); self.respondents = model.Respondents.getByKey(key); #self.idProject,self.idPublic,self.idVoter,self.redirect = self.__checkExpire(id); if (self.respondents): self.welcome_message = ''; self.questionOption,self.redirect = self.__checkOptionExpired(self.respondents.id_question_option); self.welcome_message= self.questionOption.welcome_message; self.nextQuestion = ''; self.urlName = self.utility.spritValue(request.path_info,'/'); if(len(self.urlName) >= 1 ) : #self.nextQuestion = '/' + self.urlName[0]+ '?id='+ str(self.questionOption.id_question_option); #self.nextQuestion = '/' + 'ans/reply/'+ str(self.questionOption.id_question_option); #self.nextQuestion = self.URL_REPLY.format(id) self.nextQuestion = self.urlUtility.URL_REPLY_QUESTIONNAIRE.format(key=str(key)); else: log.error("find not found respondent with key %s ", str(key)); redirect(self.urlUtility.URL_EXPIRED) ; #self.welcome_message return dict(page='view', ready = 'yes',welcome_message = Markdown(self.welcome_message).convert(), nextQuestion= self.nextQuestion); @expose('pollandsurvey.templates.view.goodbye') def thankyou(self,key=0,came_from=lurl('/')): reload(sys).setdefaultencoding("utf-8"); log.info('preview id : ' + str(key)); #self.idProject,self.idPublic,self.idVoter,self.redirect = self.__checkExpire(key); self.respondents = model.Respondents.getByKey(key); if(self.respondents): self.idProject=self.respondents.id_question_project; self.idPublic=self.respondents.id_question_option; self.idVoter=self.respondents.id_voter; self.goodbye = ''; self.questionOption,self.redirect = self.__checkOptionExpired(self.idPublic); self.goodbye= self.questionOption.end_message; self.nextQuestion = ''; self.urlRedirect = ''; self.urlName = self.utility.spritValue(request.path_info,'/'); #self.respondents = model.Respondents.getByVoterIdAndPublicId(self.idVoter,self.idPublic); self.project = model.QuestionProject.getId(self.idProject) self.projectType = self.project.id_question_project_type; if(len(self.urlName) >= 1 ) : self.urlRedirect = self.questionOption.redirect_url else: log.error("find not found respondent with key %s ", str(key)); redirect(self.urlUtility.URL_EXPIRED) ; return dict(page='goodbye', ready = 'yes',goodbye = Markdown(self.goodbye).convert(),nextQuestion = self.nextQuestion ,urlRedirect= self.urlRedirect, option=self.questionOption,projectType = self.projectType,imageId = self.respondents.id_respondents); @expose('json') def getDataPreview(self, key=0, *args, **kw): reload(sys).setdefaultencoding("utf-8"); log.info("function getDataPreview"); log.info("key = %s", str(key)); self.respondents = model.Respondents.getByKey(key); #idProject = kw.get('idProject'); self.idProject=self.respondents.id_question_project; self.idPublic=self.respondents.id_question_option; self.idVoter=self.respondents.id_voter; self.redirect=None; #self.idProject,self.idPublic,self.idVoter,self.redirect = self.__checkExpire(self.respondents.id_question_project); log.info("idProject : %s, idPublic : %s, idVoter : %s, redirect : %s ", str(self.idProject), str(self.idPublic), str(self.idVoter), str(self.redirect)); #self.respondents = model.Respondents.getByVoterIdAndPublicId(self.idVoter,self.idPublic); self.questionOption = model.QuestionOption.getId(self.idPublic); #get old question self.listReply = model.RespondentReply.listQuestionForUser(self.respondents.id_respondents); self.respondents.respondent_data = datetime.now(); question = []; log.info("Random Question And Answer : " ); if( len(self.listReply) >0 ): log.info("Random new"); question = self.__getQuestionFromReply(self.listReply,self.questionOption); question = self.__randomQuestionAndAnswer(question,self.questionOption); #add else: question = self.__getQuestion(self.idPublic,self.questionOption); log.info("get new Question and Random new, len question : %s", str(len(question))); #save to database question = self.__randomQuestionAndAnswer(question,self.questionOption); #add model.RespondentReply.createQuestionForUser(question,self.respondents.id_respondents); log.info("Create Question And Answer to user : "******"utf-8"); log.info( "function save Question answer"); log.info( request.body); self.df = json.loads(request.body, encoding=request.charset); self.listAnswer = self.df.get('value'); self.finished =self.df.get('finished'); self.redirect = ''; #from urlparse import urlparse; #parsed = urlparse(request.environ.get("HTTP_REFERER" )) #print 'path url : ', parsed.path if (len(self.listAnswer) >0): for value in self.listAnswer: if(value): self.idPublic = value.get('idproject'); self.idResp = value.get('idresp'); self.idQuestion = value.get('id'); self.values = value.get('value'); print value.get('type'); self.questionOption,self.redirect = self.__checkOptionExpired(self.idPublic,False);#check Expired self.respondent,self.redirect = self.__checkRespondentFinished( None, None,self.idResp,False);#check finished if(self.respondent): self.question = model.Question.getById(self.idQuestion);#getQuestion self.respondent.finished = self.finished; self.respondent.finished_date = datetime.now(); if(self.question): self.respondentreply = model.RespondentReply.getByRespondentAndQuestion(self.idResp,self.idQuestion); if (self.respondentreply is None): self.respondentreply = model.RespondentReply(); self.respondentreply.id_respondents = self.idResp; self.respondentreply.id_question = self.idQuestion; self.respondentreply.save(); log.info("save answer respondentreply : " +str( self.respondentreply.id_respondents ) + " and " + str( self.respondentreply.id_question ) + " success"); if (len(self.respondentreply.childenAnswer) == 0): #save for v in self.values: self.replyquestion = model.ReplyBasicQuestion(); self.replyquestion.id_resp_reply = self.respondentreply.id_resp_reply; #error self.replyquestion.id_basic_data = v.get('id') self.replyquestion.answer_text = v.get('value') self.replyquestion.save(); log.info("save answer replyquestion : " +str( self.respondentreply.id_resp_reply ) + " and " + str( self.replyquestion.id_basic_data ) + " success"); else: log.info('user %s do this question : %s',self.idResp,self.idQuestion); else: log.info('find not found question id : : %s',self.idQuestion); else: log.info('find not found respondent id : : %s',self.idResp); #calculate score if(self.finished): log.info('finished : calculate score '); model.Respondents.updateScoreByIdRespondents(self.idResp); self.__createScoreFile(self.idResp); self.redirect = self.urlUtility.URL_GOODBYE.format( key= self.utility.splitNameWithOutExtention(basename(request.environ.get("HTTP_REFERER" ))) ); return dict(success = True,redirect = self.redirect, finished = self.finished ); def __checkExpire(self,id): #sprint 10.2.1.0.html idproject.idpublic.idvoter. self.value = self.utility.spritValue(id,'.'); self.idProject =0; self.idPublic = 0; self.idVoter = 0; self.redirect = ''; if(len(self.value) == 4): self.idProject =self.value[0]; self.idPublic = self.value[1]; self.idVoter = self.value[2]; else: self.idProject =None; self.idPublic = None; self.idVoter = None; log.info('parameter not have 4 parameter : %s', ','.join(self.value)); self.redirect = self.urlUtility.URL_EXPIRED; redirect(self.urlUtility.URL_EXPIRED) ; self.voter = model.Voter.getId(self.idVoter); if(self.voter is None): log.info('find not voter in id : %s',self.idVoter); self.redirect = self.urlUtility.URL_HOME; redirect(self.urlUtility.URL_HOME) ; self.project = model.QuestionProject.getId(self.idProject); if(self.project is None): log.info('find not project in id project : %s',self.idProject); self.redirect = self.urlUtility.URL_HOME; redirect(self.urlUtility.URL_HOME) ; return self.idProject,self.idPublic,self.idVoter, self.redirect; def __checkOptionExpired(self,idPublic,isRedirect = True): #print 'public option id ',idPublic; self.questionOption = model.QuestionOption.getId( idPublic); self.redirect = ''; if self.questionOption is None or ( not self.utility.isActiveFromDate(None,self.questionOption.activate_date,self.questionOption.expire_date) ): self.redirect = self.urlUtility.URL_EXPIRED; if (isRedirect): #print 'redirect ',self.URL_EXPIRED; redirect(self.urlUtility.URL_EXPIRED) ; #print 'id option : ', self.questionOption.welcome_message; return self.questionOption,self.redirect; def __checkRespondentFinished(self,idVoter,idPublic,idResp,isRedirect = True): self.respondent = None; self.redirect = ''; if(idVoter and idPublic): self.respondent = model.Respondents.getByVoterAndPublicId(idVoter,idPublic); elif (idResp): self.respondent = model.Respondents.getId(idResp); if(self.respondent is not None and self.respondent.finished == 1): log.info('voter finished in id public : %s',self.idPublic); self.redirect = self.urlUtility.URL_THANKYOU; if (isRedirect): redirect(self.urlUtility.URL_THANKYOU) ; elif (self.respondent is None): log.error("System can not find idVoter : %s , idPublic : %s" , idVoter, idPublic); redirect(self.urlUtility.URL_THANKYOU) ; return self.respondent,self.redirect; def __getQuestion(self,idPublic,questionOption): question = []; #get Project Option if self.questionOption : #get Question self.listQuestions = model.Question.getByProjectId(questionOption.id_question_project); #get to object json for self.question in self.listQuestions: question.append(self.question.to_json(randomAnswer = questionOption.random_answer)); #clear sequence return question ; def __getQuestionFromReply(self,reply,questionOption): question = []; for re in reply: #re.question question.append(re.question.to_json(randomAnswer= questionOption.random_answer)); return question; def __randomQuestionAndAnswer(self,question,questionOption): #option Randon Question if( questionOption.id_fix_random_type == 2): question = random.sample(question,len(question));#,self.questionOption.use_question_no ); question = question[0:questionOption.use_question_no]; return question; def __setSequenceQuestion(self,question): row = 1; for q in question: q['seq'] = row; row = row +1; row =None; return question; def __createScoreFile(self,idResp): self.respondent = model.Respondents.getId(idResp); self.score = model.Respondents.getScoreByIdRespondents(self.idResp); self.voter = self.respondent.voter; self.convertHtml = ConvertHtml2Pdf(); self.convertPNG = ConvertPdf2image(); self.sourceHtml = model.SystemEnvironment.getScoreViewHtml(); values = {}; values['name'] = str(self.voter.prefix + ' ' + self.voter.firstname + ' ' + self.voter.lastname); values['score'] = str(self.score); self.outputPDFFilename = ("{0}\{1}-{2}-{3}-{4}.pdf").format(str(self.CONVERT_DIR), str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option)) ; self.outputPNGFilename = ("{0}\{1}-{2}-{3}-{4}.png").format(str(self.CONVERT_DIR), str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option)) ; self.result = self.convertHtml.convertHtmlToPdf(values, self.sourceHtml, self.outputPDFFilename); log.info("convert file %s is %s" %(self.outputPDFFilename, self.result)); if(self.result == 0): self.result = self.convertPNG.convert(self.outputPDFFilename, self.outputPNGFilename) log.info("convert file %s is %s" %(self.outputPNGFilename, self.result)); if(self.result): log.info("save image file %s is %s" %(self.outputPNGFilename, self.result)); with open(self.outputPNGFilename,"rb") as f: self.respondent.image_file = f.read(); else: log.error("convert html to pdf error with id_resp=%s" %idResp)