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 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 InvitationController(TGController): allow_only = in_any_group('voter', 'managers', msg=l_('Only for people with the "manage" permission')) #has_any_permission('manage','creator',msg=l_('Only for people with the "manage" permission')) def __init__(self, models, session, config_type=None, translations=None): self.utility = Utility() self.model = models #@require(predicates.in_any_group('creator','managers', msg=l_('Only for creator'))) @expose('managepoll.templates.invitation.index') def index(self,**kw): user = request.identity['user']; print user.user_id return dict(page = 'index',idproject = None) @expose('managepoll.templates.invitation.invitation') def invitation(self,**kw): print kw reload(sys).setdefaultencoding("utf-8"); invitation = self.model.Invitation() self.emailtemplate = self.model.EmailTemplate() if('idinvitation' in kw): print kw['idinvitation'] # invitation = self.model.Invitation.getId(kw['idinvitation']) else: self.emailtemplate = self.model.EmailTemplate.getTemplateBy(5); invitation.name_content = self.emailtemplate.sender invitation.from_name = self.emailtemplate.sender invitation.subject = self.emailtemplate.subject invitation.content = self.emailtemplate.content_template return dict(page='invitation', invitation = invitation,idproject = None) @expose() def saveinvitation(self,**kw): user = request.identity['user']; reload(sys).setdefaultencoding('utf8') invitation = self.model.Invitation(**kw) invitation.user_id = user.user_id invitation.id_question_invitation = self.utility.setIfEmpty(invitation.id_question_invitation) if self.utility.isEmpty(invitation.id_question_invitation) : print "save" invitation.save() else : print "update" invitation.updateall() redirect('/managepoll/invitation/indextest') @expose('managepoll.templates.invitation.indextest') def indextest(self,**kw): user = request.identity['user']; print user.user_id return dict(page = 'invitation',idproject = None) @expose('managepoll.templates.invitation.invitationtest') def invitationtest(self,**kw): print kw reload(sys).setdefaultencoding("utf-8"); invitation = self.model.Invitation() self.emailtemplate = self.model.EmailTemplate() if('idinvitation' in kw): print kw['idinvitation'] # invitation = self.model.Invitation.getId(kw['idinvitation']) else: self.emailtemplate = self.model.EmailTemplate.getTemplateBy(5); invitation.name_content = self.emailtemplate.sender invitation.from_name = self.emailtemplate.sender invitation.subject = self.emailtemplate.subject invitation.content = self.emailtemplate.content_template return dict(page='invitationtest', invitation = invitation,idproject = None) @expose() def deleteinvitation(self,**kw): print kw self.model.Invitation.deleteById(kw['idinvitation']) redirect('/managepoll/invitation/indextest')
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 SurveyController(BaseController): def __init__(self): self.utility = Utility(); self.urlUtility = URLUtility(); self.UPLOAD_DIR = config['path_upload_file'] ; dh = LogDBHandler( config=config,request=request); log.addHandler(dh) def _before(self, *args, **kw): tmpl_context.project_name = "pollandsurvey" #proved @expose('pollandsurvey.templates.survey.index') @require(predicates.in_any_group('creator','managers', msg=l_('Only for creator'))) def index(self, *args, **kw): """Handle the front-page.""" reload(sys).setdefaultencoding("utf-8"); log.info("survey controller index"); return dict(page='index') #proved @expose('pollandsurvey.templates.surveyjs.index') #@expose('pollandsurvey.templates.listsurvey.index') @require(predicates.not_anonymous( msg=l_('Only for Authen'))) def listsetup(self, came_from=lurl('/'), *args, **kw): """Handle the front-page.""" reload(sys).setdefaultencoding("utf-8"); return dict(page='survey') @expose('pollandsurvey.templates.surveyjs.manageproject') @require(predicates.not_anonymous( msg=l_('Only for Authen'))) def manage(self, projectId,came_from=lurl('/'), **kw): """Handle the front-page.""" reload(sys).setdefaultencoding("utf-8"); self.user = request.identity['user']; self.project, self.total = model.QuestionProject.getAllByUser(1,self.user.user_id,0,1 ); if len(self.project) == 0: flash(_('Please create a project.'), 'warning') raise HTTPFound(location='/survey/listsetup'); return dict(page='manageproject') #proved @expose('json') @require(predicates.not_anonymous( msg=l_('Only for Authen'))) def getProjectByUser(self, came_from=lurl('/'),*args, **kw): reload(sys).setdefaultencoding("utf-8"); user = request.identity['user']; quest_project = model.QuestionProject.getAllByUser(1,user.user_id); log.info("getProjectByUser"); return dict(survey=quest_project , total = len(quest_project)); #proved @expose('json') def deleteProject(self, came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); self.success = True; self.message = "success"; self.df = json.loads(request.body, encoding=request.charset); self.idProject = self.df.get('id_question_project'); self.listQuestion = model.Question.getByProjectId(self.idProject); self.listQuestionGroup = model.QuestionGroup.getByProject(self.idProject); for questionGroup in self.listQuestionGroup: #remove sur_map_question_group model.MapQuestionGroup.deleteByQuestionGroup(questionGroup.id_question_group) #remove question_group model.QuestionGroup.delete(questionGroup) del questionGroup for self.question in self.listQuestion: if(self.question): self.idQuestion = self.question.id_question; model.Question.deleteQuestoin(self.idQuestion); model.QuestionProject.deleteById(self.idProject); return dict(success=self.success, message = self.message); #proved @expose('json') @require(predicates.not_anonymous( msg=l_('Only for Authen'))) def saveProject(self, came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); self.success = True; self.message = "success"; print 'Session Language : %s' %(ManageSession.getLanguage()) self.project = model.QuestionProject(**kw); self.project.id_question_project = self.utility.setIfEmpty(self.project.id_question_project) user = request.identity['user']; self.project.user_id = user.user_id; if self.project.id_question_project : self.project.updateall(); else: self.project.save(); self.addQuestionGroup( id_question_project=self.project.id_question_project, question_group_name='default', question_group_description='default', id_question_result_group = '', order=0 ); return dict(success=self.success, message = self.message, project_id=self.project.id_question_project); #proved @expose('json') def deleteQuestion(self, came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); self.success = True; self.message = "Save Success"; df = json.loads(request.body, encoding=request.charset); log.info(df); idQuestion = df.get('id_question'); self.success, self.message = model.Question.deleteQuestoin(idQuestion); return dict(success=self.success, message = self.message); #proved @expose('json',content_type="text/plain" ) @require(predicates.not_anonymous( msg=l_('Only for Authen'))) def addQuestion(self, came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); self.success = True; self.message = "success"; self.result = True; log.info("add Question"); self.dataValue = kw; log.info(kw); log.info(args); user = request.identity['user']; #model.Question.createQuestion(self.dataValue,user.user_id); log.info("check"); self.isCreate = self.dataValue.get('id_question') is None or ( len(self.dataValue.get('id_question')) == 0 ); self.id_question_type = self.dataValue.get('id_question_type') #create or update question self.questionObject = QuestionObject(**kw) question = self.questionObject.question question.user_id = user.user_id; question.id_question = self.utility.setIfEmpty(question.id_question) if question.id_question : question.updateOrdering(); question.updateall(); else: question.save(); log.info("save Question"); # create or update questionMedia imageFile = self.questionObject.image_upload #self.dataValue.get('image_upload'); if type(imageFile) is types.InstanceType: self.file_name = imageFile.filename; self.file_data = imageFile.value; self.target_file_name = self.utility.joinPathFileAndCreatePath(self.UPLOAD_DIR, str(question.id_question), self.file_name); self.utility.saveFile(self.target_file_name,self.file_data); questionMedia = model.QuestionMedia(id_question = question.id_question, value = self.file_name, media_type = imageFile.type, media_path_file = self.target_file_name ) questionMedia = model.QuestionMedia.getId(question.id_question); if(questionMedia is None): questionMedia = model.QuestionMedia(); questionMedia.id_question = question.id_question; else: self.utility.removeFile(questionMedia.media_path_file); log.info('remove file : ' + questionMedia.media_path_file ); questionMedia.value = self.file_name; questionMedia.media_type = imageFile.type; questionMedia.media_path_file = self.target_file_name; questionMedia.save(); log.info("save questionMedia"); #Step 2 create datagrid = json.loads(self.questionObject.datagrid ); #json.loads(self.dataValue.get('datagrid')); for basic_datas in datagrid: log.info(basic_datas); self.isCreate = basic_datas.get('id_question') is not None and len( str(basic_datas.get('id_question')).strip() ) > 0 ; basicData = model.BasicData(); basicQuestion = model.BasicQuestion(); log.info("-----------------------Basic data-----------------------------------"); if (not self.isCreate ): log.info ("create basic data"); basicData.id_basic_data_type = self.id_question_type; #image basicData.save(); log.info ("create basic question"); basicQuestion.id_question = question.id_question; basicQuestion.id_basic_data = basicData.id_basic_data; basicQuestion.answer = basic_datas.get('answer') ;# ({True: True, False: False}[ basic_datas.get('answer') in 'true']); basicQuestion.score = basic_datas.get('score') ; basicQuestion.order = basic_datas.get('seq'); basicQuestion.id_question_result = basic_datas.get('id_question_result'); basicQuestion.save(); else: log.info ("update basic data : " + str( basic_datas.get('id_basic_data')) ); basicData.id_basic_data = basic_datas.get('id_basic_data'); basicQuestion = model.BasicQuestion.getByQuestionAndBasic(question.id_question, basicData.id_basic_data); if(basicQuestion): basicQuestion.answer = basic_datas.get('answer') ; basicQuestion.score = basic_datas.get('score') ; basicQuestion.order = basic_datas.get('seq'); basicQuestion.id_question_result = basic_datas.get('id_question_result') else: log.info("error load basicQuestion"); log.info("------------------------basic Data type----------------------------------" ); log.info('self.id_question_type : ' + str(self.id_question_type) + ' type : ' + type(self.id_question_type).__name__ ) ; if (self.id_question_type and int(self.id_question_type) in [QuestionType.single_choice.value, QuestionType.multi_choice.value, QuestionType.drop_down_menu.value, QuestionType.text.value, QuestionType.multitext.value, QuestionType.number.value ]): # 1,2,3,5,6,7 log.info("case text"); basicText = model.BasicTextData(); if (not self.isCreate ): log.info("create basic text"); basicText.id_basic_data = basicData.id_basic_data; basicText.value = basic_datas.get('value'); basicText.save(); else: log.info("update basic text"); basicText = model.BasicTextData.getByBasicDataId(basicData.id_basic_data); if(basicText): basicText.value = basic_datas.get('value'); else: log.info("error load BasicTextData"); elif (self.id_question_type and int(self.id_question_type) == QuestionType.image.value ): #4 log.info("case image"); answerimage = self.dataValue.get('answer_image'); #self.questionObject.answer_image log.info(basic_datas.get('answer_image')); log.info(type(answerimage)); log.info('basicData.id_basic_data : ' + str(basicData.id_basic_data)); if (type(answerimage) is types.InstanceType or type(answerimage) is types.ListType) : if type(answerimage) is types.InstanceType: log.info('single file'); log.info(answerimage.type); file = answerimage; if( self.utility.isPartOf(file.filename,basic_datas.get('answer_image')) ): #if (basic_datas.get('answer_image') == file.filename ) : basicMedia = model.BasicMultimediaData(); self.file_name = file.filename; self.file_data = file.value; self.media_type = file.type; self.target_file_name= self.utility.joinPathFileAndCreatePath(self.UPLOAD_DIR, str(question.id_question), self.file_name); self.utility.saveFile(self.target_file_name,self.file_data); if ( not self.utility.isNumber( basic_datas.get('id_basic_data') ) ): log.info('create basic media'); basicMedia.id_basic_data = basicData.id_basic_data; basicMedia.value = self.file_name; basicMedia.media_type = self.media_type; basicMedia.media_path_file = self.target_file_name; basicMedia.save(); else: log.info('update basic media'); basicMedia = model.BasicMultimediaData.getByBasicDataId(basic_datas.get('id_basic_data') ); self.utility.removeFile(basicMedia.media_path_file); basicMedia.value = self.file_name; basicMedia.media_type = self.media_type; basicMedia.media_path_file = self.target_file_name; else: for file in answerimage: log.info('type list file'); log.info(type(file)); if type(file) is not types.UnicodeType: #print file.type; if( self.utility.isPartOf(file.filename,basic_datas.get('answer_image')) ): #if (basic_datas.get('answer_image') == file.filename) : self.file_name = file.filename; self.file_data = file.value; self.media_type = file.type; self.target_file_name= self.utility.joinPathFileAndCreatePath(self.UPLOAD_DIR, str(question.id_question), self.file_name); self.utility.saveFile(self.target_file_name,self.file_data); basicMedia = model.BasicMultimediaData(); if ( not self.utility.isNumber( basic_datas.get('id_basic_data') ) ): log.info('create basic media'); basicMedia.id_basic_data = basicData.id_basic_data; basicMedia.value = self.file_name; basicMedia.media_type = self.media_type; basicMedia.media_path_file = self.target_file_name; basicMedia.save(); else: log.info('update basic media'); basicMedia = model.BasicMultimediaData.getByBasicDataId(basic_datas.get('id_basic_data') ); self.utility.removeFile(basicMedia.media_path_file); basicMedia.value = self.file_name; basicMedia.media_type = self.media_type; basicMedia.media_path_file = self.target_file_name; else: log.info("Other type"); pass; log.info("save object"); return dict(success=self.success, message = self.message, result = self.result); #proved @expose('json') def updateQuestionData(self, **kw): reload(sys).setdefaultencoding("utf-8"); self.success = True; self.message = "success"; #log.info(request.method ); #log.info(request.params ); self.df = json.loads(request.body, encoding=request.charset); self.data = JsontoObject(self.df); for obj in self.data.dict: print obj.to_json() self.success, self.message = model.Question.updateOrderById(order=obj.order, id= obj.id_question ); #for d in self.df: # self.success, self.message = model.Question.updateOrderById(d.get(u'order'), d.get(u'id_question')); return dict(success=self.success, message = self.message, survey = self.data.to_json()); #proved @expose('json') def deleteMediaQuestion(self, came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); self.success = True; self.message = "success"; log.info('---------1--------------'); df = json.loads(request.body, encoding=request.charset); model.QuestionMedia.deleteByQuestion(df.get('id')); del df return dict(success=self.success, message = self.message); #proved @expose('json') def deleteQuestionData(self, came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); self.success = True; self.message = "success"; log.info('---------1--------------'); df = json.loads(request.body, encoding=request.charset); # remark : remove file self.success,self.message = model.BasicQuestion.deleteData(df.get('id'), deleteBasicQuestion=True) ; del df return dict(success=self.success, message = self.message); #proved @expose('json') def addOptions(self, came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding("utf-8"); self.success = True; self.message = "success"; self.result = True; self.optionobject = OptionObject(**kw); self.option = self.optionobject.options self.option.random_answer = self.utility.convertToBit(self.option.random_answer) self.option.activate_date = self.utility.startDate( self.option.activate_date) self.option.expire_date = self.utility.finishDate( self.option.expire_date) self.option.show_score = self.utility.convertToBit( self.option.show_score ) self.option.show_navigator = self.utility.convertToBit( self.option.show_navigator ) self.option.id_question_option = self.utility.setIfEmpty(self.option.id_question_option) if (self.utility.isEmpty(self.option.id_question_option)): log.info("save option") self.option.save() else: log.info("update option") self.option.updateall() self.groupamount = model.NumberQuestionGroup(); #number_question != 0 if self.optionobject.number_question: for group_amount in self.optionobject.number_question : data = JsontoObject(group_amount); if (not self.utility.isNumber(data.id_question_group_amount)) : data.id_question_group_amount = None self.groupamount.id_question_group_amount = data.id_question_group_amount; self.groupamount.id_question_option = self.option.id_question_option; self.groupamount.id_question_group = data.id_question_group; if data.amount == '' : data.amount = 0 self.groupamount.amount = data.amount; self.groupamount.updateall() #number_question = 0 else : self.numberquestiondata = [] self.group_project = [] self.numberquestiondata = model.NumberQuestionGroup.getByOptionFirst(self.option.id_question_option); self.group_project = model.QuestionGroup.getByProject(self.option.id_question_project); if self.optionobject.project_type == "1":#poll #edit poll if self.numberquestiondata: self.groupamount.id_question_group_amount = self.numberquestiondata.id_question_group_amount; self.groupamount.id_question_option = self.numberquestiondata.id_question_option; self.groupamount.id_question_group = self.numberquestiondata.id_question_group; self.groupamount.amount = self.optionobject.use_question_no; self.groupamount.updateall() #new poll else : for question_group in self.group_project: self.groupamount.id_question_group_amount = None; self.groupamount.id_question_option = self.option.id_question_option; self.groupamount.id_question_group = question_group.id_question_group; self.groupamount.amount = self.optionobject.use_question_no; self.groupamount.updateall() else : #not poll if (not self.numberquestiondata) : #add for question_group in self.group_project: self.groupamount.id_question_group_amount = None; self.groupamount.id_question_option = self.option.id_question_option; self.groupamount.id_question_group = question_group.id_question_group; self.groupamount.amount = len(question_group.questions); self.groupamount.updateall() return dict(success=self.success, message = self.message,result = self.result); #proved @expose('json') def deleteOptions(self, came_from=lurl('/'), *args, **kw): reload(sys).setdefaultencoding('utf8') self.success = True; self.message = "Save Success"; df = json.loads(request.body, encoding=request.charset); log.info(df); idQuestion = df.get('id_question_option'); self.success, self.message = model.QuestionOption.deleteById(idQuestion); del df return dict(success=self.success, message =self.message); #proved @expose('json') def addInvitation(self, **kw): reload(sys).setdefaultencoding('utf8') log.info( kw); self.success = True; self.message = "Save Success"; self.result = True; try: user = request.identity['user']; kw['user_id'] = user.user_id self.template = model.Invitation(**kw); self.template.id_question_invitation = self.utility.setIfEmpty(self.template.id_question_invitation) #self.template.create_date = self.utility.today( self.template.create_date) if ( self.utility.isEmpty( self.template.id_question_invitation )): log.info("save option") self.template.save() else: log.info("update option") self.template.updateall() except Exception as e: self.result = False; self.message = '' + str(e); log.info( self.message); return dict(success=self.success, message = self.message, result= self.result); #proved @expose('json') @require(predicates.in_any_group('voter', 'managers', msg=l_('Only for voter'))) def deleteInvitation(self, **kw): reload(sys).setdefaultencoding('utf8') self.success = True; self.result = True; self.message = 'Delete Success'; try: df = json.loads(request.body, encoding=request.charset); log.info(df); self.result =model.Invitation.deleteById(df.get('id_question_invitation')); if not self.result: self.message = 'Can not Delete.'; except Exception as e: self.result =False; self.message = '' + str(e); return dict(success=self.success, result =self.result, message =self.message); #proved @expose('json') @require(predicates.in_any_group('voter', 'managers', msg=l_('Only for voter'))) def sendSurvey(self, **kw): reload(sys).setdefaultencoding('utf8') self.success = True; self.result = True; self.message = 'Send Success'; try: df = json.loads(request.body, encoding=request.charset); log.info(df); self.option = model.QuestionOption.getId(df.get('id_question_option')); if self.option.send_status == 0: self.emailtemplate = model.Invitation.getId(df.get('id_question_invitation')); if(self.emailtemplate is not None): #self.sendSurveyService = SendSurveyService(); #self.sendSurveyService.setEmailToVoter(model,self.option,self.emailtemplate); #self.sendSurveyService.start(); user = request.identity['user']; self.voters, self.leng = model.Voter.getVoter(user.user_id, page=0, page_size=100); self.urlServer = model.SystemEnvironment.getServerUrl(); for v in self.voters: #print v; self.resp = model.Respondents.getByVoterIdAndPublicId(v.id_voter,self.option.id_question_option); if (self.resp is None): self.resp = model.Respondents(); self.resp.id_voter = v.id_voter; self.resp.id_question_project = self.option.id_question_project; self.resp.id_question_option =self.option.id_question_option; self.resp.key_gen = self.utility.my_random_string(string_length=25) self.resp.save(); if (self.resp.key_gen is None): self.resp.key_gen = self.utility.my_random_string(string_length=25) self.emailValues={}; self.emailValues['name'] = str(v.firstname) + " " + str(v.lastname); self.emailValues['email'] = v.email; self.emailValues['subject'] = self.emailtemplate.subject; self.emailValues['from'] = self.emailtemplate.from_name; #self.emailValues['url'] = self.urlUtility.URL_REPLY.format(self.urlServer, str(self.option.id_question_project), str(self.option.id_question_option), str(v.id_voter)) ; #request.application_url self.emailValues['url'] = self.urlUtility.URL_QUESTIONNAIRE.format(nameserver=self.urlServer,key=self.resp.key_gen); #self.urlUtility.URL_REPLY.format(self.urlServer, str(self.option.id_question_project), str(self.option.id_question_option), str(v.id_voter)) ; #request.application_url self.emailValues['initialDate'] = str(self.option.activate_date); self.emailValues['finishDate'] = str(self.option.expire_date); template = self.emailtemplate.content; for k, va in self.emailValues.iteritems(): template = template.replace('[%s]' % k, va) self.sendmail = model.SendMail(id_question_option = self.resp.id_question_option, id_voter = self.resp.id_voter, user_id =None, sender_name = self.emailtemplate.from_name, receive = v.email, subject = self.emailtemplate.subject, content = template, gen_code = self.resp.key_gen ); self.sendmail.save(); #sendmail = SendMailService(); #sendmail.sentEmail(self.emailValues, template); #self.sendmail.sended_date = datetime.now(); #self.sendmail.status = 'F'; else: self.result = False; self.message = "Please select template email."; #self.result,self.message = model.QuestionOption.updateSendStatus(1,df.get('id_question_option')); log.info( "\n send to thread"); else: self.result = False; self.message = "system found send already"; #model.Invitation.deleteById(df.get('id_question_invitation')); except Exception as e: log.error(e); self.result = False; self.message = '' + str(e); return dict(success=self.success, result=self.result, message=self.message); #proved @expose('json') @require(predicates.in_any_group('voter', 'managers', msg=l_('Only for voter'))) def addQuestionGroup(self,**kw): reload(sys).setdefaultencoding('utf8') log.info("add Question Group") self.questionGroup = model.QuestionGroup(**kw); self.questionGroup.id_question_group = self.utility.setIfEmpty(self.questionGroup.id_question_group) self.questionGroup.id_question_result_group = self.utility.setIfEmpty(kw['id_question_result_group']) if (self.utility.isEmpty(self.questionGroup.id_question_group)): log.info("save group") self.questionGroup.save() else: log.info("update group") self.questionGroup.updateall() return dict(success=True, result='success', message='sucess',questionGroup=self.questionGroup.json ); @expose('json') @require(predicates.in_any_group('voter', 'managers', msg=l_('Only for voter'))) def deleteGroupQuestion(self, *args, **kw): self.questionGroup = json.loads(request.body, encoding=request.charset, object_hook=model.QuestionGroup.setId) self.message = "" self.status = True if(self.questionGroup): self.questions = model.Question.getQuestionByGroupId(self.questionGroup.id_question_group) if(self.questions and len(self.questions) > 0): log.info("can not delete "); self.message = "Cann't delete. Please delete all questions." self.status = False else: model.QuestionGroup.delete(self.questionGroup); return dict(success=self.status, message=self.message); @expose('json') def saveResultGroup(self,*args,**kw): reload(sys).setdefaultencoding('utf8') self.message = "Save Success" self.status = True data = JsontoObject(kw); #model.QuestionResultGroup.load_data(data) questionResultGroup = model.QuestionResultGroup( id_question_result_group = self.utility.setIfEmpty(data.id_question_result_group), id_question_project = data.id_question_project, question_result_group_description = data.question_result_group_description, question_result_group_name = data.question_result_group_name) if questionResultGroup.id_question_result_group: questionResultGroup.updateall() else: questionResultGroup.save() datagrid = json.loads(data.datagrid,encoding='UTF-8') #datagrid = JsontoObject(datagrid); for value in datagrid: value = JsontoObject(value); questionResult = model.QuestionResult(id_question_result=self.utility.setIfEmpty(value.id_question_result), question_result_name=value.question_result_name, question_result_description=value.question_result_description, id_question_result_group=questionResultGroup.id_question_result_group) questionResult.updateall() return dict(success= self.status, message = self.message); @expose('json') def deleteresultgroup(self, *args, **kw): reload(sys).setdefaultencoding('utf8') self.message = "" self.status = True self.df = json.loads(request.body, encoding=request.charset); data = JsontoObject(self.df); self.questionResult = model.QuestionResult.deleteByGroupId(data.id_question_result_group) self.questionResultGroup = model.QuestionResultGroup.deleteById(data.id_question_result_group) return dict(success= self.status, message = self.message); @expose('json') def deleteresult(self, *args, **kw): reload(sys).setdefaultencoding('utf8') self.message = "" self.status = True self.df = json.loads(request.body, encoding=request.charset); data = JsontoObject(self.df); print data self.questionResult = model.QuestionResult.deleteById(data.id_question_result) print self.questionResult #self.questionResultGroup = model.QuestionResultGroup.deleteById(data.id_question_result_group) #print self.questionResultGroup return dict(success= self.status, message = self.message); @expose('json') def deleteQuestionGeneralInformation(self, *args, **kw): reload(sys).setdefaultencoding('utf8') self.message = "" self.status = True self.df = json.loads(request.body, encoding=request.charset) data = JsontoObject(self.df) model.QuestionGeneralInformation.deleteById(data.id) return dict(success= self.status, message = self.message, survey = []) @expose('json') def updateQuestionGeneralInformation(self, *args, **kw): reload(sys).setdefaultencoding('utf8') self.message = "" self.status = True self.df = json.loads(request.body, encoding=request.charset); data = JsontoObject(self.df); for obj in data.dict: print obj.to_json() result = model.QuestionGeneralInformation.updateOrder(id=obj.id, order=obj.order) print "result %s " %result return dict(success= self.status, message = self.message, survey = data.to_json() ) @expose('json') def createQuestionGeneralInformation(self, *args, **kw): reload(sys).setdefaultencoding('utf8') self.message = "" self.status = True self.df = json.loads(request.body, encoding=request.charset); data = JsontoObject(self.df); self.generalInformation = model.QuestionGeneralInformation(id_question_general_information=None, id_data_profile_field=data.data_id, id_question_project=data.id_question_project, order=data.order, active=1) self.generalInformation.save() data.id = self.generalInformation.id_question_general_information return dict(success= self.status, message = self.message, survey = {'id':data.id} )#data.to_json())#data = {'data_id':data.data_id} )
class InvitationController(TGController): allow_only = in_any_group( 'voter', 'managers', msg=l_('Only for people with the "manage" permission')) #has_any_permission('manage','creator',msg=l_('Only for people with the "manage" permission')) def __init__(self, models, session, config_type=None, translations=None): self.utility = Utility() self.model = models #@require(predicates.in_any_group('creator','managers', msg=l_('Only for creator'))) @expose('managepoll.templates.invitation.index') def index(self, **kw): user = request.identity['user'] print user.user_id return dict(page='index', idproject=None) @expose('managepoll.templates.invitation.invitation') def invitation(self, **kw): print kw reload(sys).setdefaultencoding("utf-8") invitation = self.model.Invitation() self.emailtemplate = self.model.EmailTemplate() if ('idinvitation' in kw): print kw['idinvitation'] # invitation = self.model.Invitation.getId(kw['idinvitation']) else: self.emailtemplate = self.model.EmailTemplate.getTemplateBy(5) invitation.name_content = self.emailtemplate.sender invitation.from_name = self.emailtemplate.sender invitation.subject = self.emailtemplate.subject invitation.content = self.emailtemplate.content_template return dict(page='invitation', invitation=invitation, idproject=None) @expose() def saveinvitation(self, **kw): user = request.identity['user'] reload(sys).setdefaultencoding('utf8') invitation = self.model.Invitation(**kw) invitation.user_id = user.user_id invitation.id_question_invitation = self.utility.setIfEmpty( invitation.id_question_invitation) if self.utility.isEmpty(invitation.id_question_invitation): print "save" invitation.save() else: print "update" invitation.updateall() redirect('/managepoll/invitation/indextest') @expose('managepoll.templates.invitation.indextest') def indextest(self, **kw): user = request.identity['user'] print user.user_id return dict(page='invitation', idproject=None) @expose('managepoll.templates.invitation.invitationtest') def invitationtest(self, **kw): print kw reload(sys).setdefaultencoding("utf-8") invitation = self.model.Invitation() self.emailtemplate = self.model.EmailTemplate() if ('idinvitation' in kw): print kw['idinvitation'] # invitation = self.model.Invitation.getId(kw['idinvitation']) else: self.emailtemplate = self.model.EmailTemplate.getTemplateBy(5) invitation.name_content = self.emailtemplate.sender invitation.from_name = self.emailtemplate.sender invitation.subject = self.emailtemplate.subject invitation.content = self.emailtemplate.content_template return dict(page='invitationtest', invitation=invitation, idproject=None) @expose() def deleteinvitation(self, **kw): print kw self.model.Invitation.deleteById(kw['idinvitation']) redirect('/managepoll/invitation/indextest')
class PublicationController(TGController): allow_only = in_any_group('voter', 'managers', msg=l_('Only for people with the "manage" permission')) #has_any_permission('manage','creator', msg=l_('Only for people with the "manage" permission')) def __init__(self, models, session, config_type=None, translations=None): self.utility = Utility() self.model = models print "call init LoadDataControllers" print self.model @expose('managepoll.templates.publication.index') def index(self,**kw): print kw return dict(page = 'index',idproject = kw['idproject'] ) @expose() def deletepublication(self,**kw): print kw status, message = self.model.QuestionOption.deleteById(kw['idoption']) print status print message redirect('/managepoll/publication/indextest',params={'idproject':kw['idproject']}) @expose('managepoll.templates.publication.publication') def publication(self,**kw): reload(sys).setdefaultencoding('utf8') #set ค่า เป็น utf8 สำหรับฟังชั่นนี้ user = request.identity['user']; questionoption = self.model.QuestionOption() questionoption.id_question_project = kw['idproject'] questionoption.activate_date = datetime.today() #today for add option questionoption.expire_date = self.utility.plusDate(datetime.today(),30) #plusDate30day for add option emailtemplate = self.model.Invitation() randomtype = self.model.RandomType() closetype = self.model.CloseType() questionthem = self.model.QuestionTheme() if('idoption' in kw): print "Edit option" questionoption = self.model.QuestionOption.getId(kw['idoption']) questionthem = self.model.QuestionTheme.getAll(act = 1) closetype = self.model.CloseType.getAll(active = 1) randomtype = self.model.RandomType.getAll(active = 1) emailtemplate, total = self.model.Invitation.getByUser(user.user_id) return dict(page='publication', questionoption = questionoption, emailtemplate = emailtemplate, randomtype=randomtype, closetype=closetype, questionthem=questionthem, idproject = kw['idproject'] ) @expose() def savepublication(self,**kw): print kw reload(sys).setdefaultencoding('utf8') questionoption = self.model.QuestionOption(**kw) print questionoption.show_navigator print questionoption.show_score print questionoption.random_answer questionoption.activate_date = self.utility.startDate(questionoption.activate_date) questionoption.expire_date = self.utility.finishDate(questionoption.expire_date) questionoption.show_score = self.utility.convertToBit(questionoption.show_score) questionoption.show_navigator = self.utility.convertToBit(questionoption.show_navigator) questionoption.id_question_option = self.utility.setIfEmpty(questionoption.id_question_option) questionoption.random_answer = self.utility.convertToBit(questionoption.random_answer) print "show_navigator : %s" %questionoption.show_navigator print "show_score : %s" %questionoption.show_score print "random_answer : %s" %questionoption.random_answer if self.utility.isEmpty(questionoption.id_question_option) : questionoption.save() else : questionoption.updateall() redirect('/managepoll/publication/indextest',params={'idproject':questionoption.id_question_project}) @expose('managepoll.templates.publication.indextest') def indextest(self,**kw): print kw return dict(page = 'indextest',idproject = kw['idproject'] ) @expose('managepoll.templates.publication.publicationtest') def publicationtest(self,**kw): reload(sys).setdefaultencoding('utf8') #set ค่า เป็น utf8 สำหรับฟังชั่นนี้ user = request.identity['user']; questionoption = self.model.QuestionOption() questionoption.id_question_project = kw['idproject'] questionoption.activate_date = datetime.today() #today for add option questionoption.expire_date = self.utility.plusDate(datetime.today(),30) #plusDate30day for add option emailtemplate = self.model.Invitation() randomtype = self.model.RandomType() closetype = self.model.CloseType() questionthem = self.model.QuestionTheme() if('idoption' in kw): print "Edit option" questionoption = self.model.QuestionOption.getId(kw['idoption']) questionthem = self.model.QuestionTheme.getAll(act = 1) closetype = self.model.CloseType.getAll(active = 1) randomtype = self.model.RandomType.getAll(active = 1) emailtemplate, total = self.model.Invitation.getByUser(userid = user.user_id) return dict(page='publicationtest', questionoption = questionoption, emailtemplate = emailtemplate, randomtype=randomtype, closetype=closetype, questionthem=questionthem, idproject = kw['idproject'] )
class PublicationController(TGController): allow_only = in_any_group( 'voter', 'managers', msg=l_('Only for people with the "manage" permission')) #has_any_permission('manage','creator', msg=l_('Only for people with the "manage" permission')) def __init__(self, models, session, config_type=None, translations=None): self.utility = Utility() self.model = models print "call init LoadDataControllers" print self.model @expose('managepoll.templates.publication.index') def index(self, **kw): print kw return dict(page='index', idproject=kw['idproject']) @expose() def deletepublication(self, **kw): print kw status, message = self.model.QuestionOption.deleteById(kw['idoption']) print status print message redirect('/managepoll/publication/indextest', params={'idproject': kw['idproject']}) @expose('managepoll.templates.publication.publication') def publication(self, **kw): reload(sys).setdefaultencoding( 'utf8') #set ค่า เป็น utf8 สำหรับฟังชั่นนี้ user = request.identity['user'] questionoption = self.model.QuestionOption() questionoption.id_question_project = kw['idproject'] questionoption.activate_date = datetime.today() #today for add option questionoption.expire_date = self.utility.plusDate( datetime.today(), 30) #plusDate30day for add option emailtemplate = self.model.Invitation() randomtype = self.model.RandomType() closetype = self.model.CloseType() questionthem = self.model.QuestionTheme() if ('idoption' in kw): print "Edit option" questionoption = self.model.QuestionOption.getId(kw['idoption']) questionthem = self.model.QuestionTheme.getAll(act=1) closetype = self.model.CloseType.getAll(active=1) randomtype = self.model.RandomType.getAll(active=1) emailtemplate, total = self.model.Invitation.getByUser(user.user_id) return dict(page='publication', questionoption=questionoption, emailtemplate=emailtemplate, randomtype=randomtype, closetype=closetype, questionthem=questionthem, idproject=kw['idproject']) @expose() def savepublication(self, **kw): print kw reload(sys).setdefaultencoding('utf8') questionoption = self.model.QuestionOption(**kw) print questionoption.show_navigator print questionoption.show_score print questionoption.random_answer questionoption.activate_date = self.utility.startDate( questionoption.activate_date) questionoption.expire_date = self.utility.finishDate( questionoption.expire_date) questionoption.show_score = self.utility.convertToBit( questionoption.show_score) questionoption.show_navigator = self.utility.convertToBit( questionoption.show_navigator) questionoption.id_question_option = self.utility.setIfEmpty( questionoption.id_question_option) questionoption.random_answer = self.utility.convertToBit( questionoption.random_answer) print "show_navigator : %s" % questionoption.show_navigator print "show_score : %s" % questionoption.show_score print "random_answer : %s" % questionoption.random_answer if self.utility.isEmpty(questionoption.id_question_option): questionoption.save() else: questionoption.updateall() redirect('/managepoll/publication/indextest', params={'idproject': questionoption.id_question_project}) @expose('managepoll.templates.publication.indextest') def indextest(self, **kw): print kw return dict(page='indextest', idproject=kw['idproject']) @expose('managepoll.templates.publication.publicationtest') def publicationtest(self, **kw): reload(sys).setdefaultencoding( 'utf8') #set ค่า เป็น utf8 สำหรับฟังชั่นนี้ user = request.identity['user'] questionoption = self.model.QuestionOption() questionoption.id_question_project = kw['idproject'] questionoption.activate_date = datetime.today() #today for add option questionoption.expire_date = self.utility.plusDate( datetime.today(), 30) #plusDate30day for add option emailtemplate = self.model.Invitation() randomtype = self.model.RandomType() closetype = self.model.CloseType() questionthem = self.model.QuestionTheme() if ('idoption' in kw): print "Edit option" questionoption = self.model.QuestionOption.getId(kw['idoption']) questionthem = self.model.QuestionTheme.getAll(act=1) closetype = self.model.CloseType.getAll(active=1) randomtype = self.model.RandomType.getAll(active=1) emailtemplate, total = self.model.Invitation.getByUser( userid=user.user_id) return dict(page='publicationtest', questionoption=questionoption, emailtemplate=emailtemplate, randomtype=randomtype, closetype=closetype, questionthem=questionthem, idproject=kw['idproject'])
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)