def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return nome = data['nome'] email = data['email'] assunto = data['assunto'] mensagem = data['mensagem'] adm_fale = get_fale_config('admfale') responsavel = adm_fale or u'idg' portal = api.portal.get() # os dados serão guardados no Annotation para serem recuperados mais tarde para a criacao do fale conosco annotation = IAnnotations(portal) dados_fale = {} try: fale = annotation[KEY_CONFIRMA] except KeyError: fale = [] hash = hashlib.sha1(str(random.random())).hexdigest() dados_fale['hash'] = hash conteudo = { 'nome': nome, 'email': email, 'assunto': assunto, 'mensagem': mensagem, 'responsavel': responsavel, } dados_fale['conteudo'] = conteudo fale.append(dados_fale) annotation[KEY_CONFIRMA] = fale url_confirm = portal.absolute_url() + '/fale_confirma?h=' + hash endereco = email texto = self.get_message(text=get_fale_config('enviar_email_form'), nome=nome, email=email, mensagem=mensagem, url_confirm=url_confirm, assunto=assunto) # texto = EMAIL_FALE % url_confirm mensagem = prepare_email_message(texto, html=True) simple_send_mail(mensagem, endereco, assunto) dados = urllib.urlencode(conteudo) contextURL = "{0}/@@confirmacao?{1}".format( self.context.absolute_url(), dados) self.request.response.redirect(contextURL)
def render(self, **kwargs): # Este metodo tem as funcionalidades de # responder, encaminhar e resgatar. # Só quem pode responder de fato é o Adminitrador do fale conosco, # os demais usuários pode apenas encaminhar a resposta para o Administrador, # para que ele encaminhe de volta para o usuário final (remetente). # O encaminhamento é feito sempre pelo usuário logado, seja ele Administrador # ou Responsável pela mensagem. # O responsável pela mensagem pode encaminhar para outros usuários do Fale Conosco # Podendo também resgatar a mensagem, caso tenha cometido algum engano. ucatalog = getToolByName(self.context, 'uid_catalog') wtool = getToolByName(self.context, 'portal_workflow') mtool = getToolByName(self.context, 'portal_membership') pt = getToolByName(self.context, 'portal_types') request = self.context.REQUEST status_message = IStatusMessage(request) form = self._get_form_vars(request.form) uids = form.get('uids', None) acao = form.get('estado', None) mensagem = form.get('mensagem', None) userlogged = api.user.get_current().id if uids: # uids dos objetos FaleConosco (pai) for uid in uids.split(','): fale = ucatalog(UID=uid)[0] obj = fale.getObject() # cria a mensagem # TODO: criar metadados no catalog nome = obj.getNome() assunto = self.get_assunto(fale) email = obj.getEmail() responsavel = obj.getResponsavel() id = idnormalizer.normalize(nome) + \ '-' + str(datetime.now().microsecond) type_info = pt.getTypeInfo('Mensagem') item = type_info._constructInstance(obj, id) item.setTitle(nome) item.setNome(nome) item.setEmail(email) item.setAssunto(assunto) item.setMensagem(mensagem) item.setResponsavel(userlogged) item.reindexObject() # apos criar a mensagem altera o workflow # da mensagem e do objeto pai wtool.doActionFor(obj, acao) wtool.doActionFor(item, acao) assunto = 'Fale conosco: resposta' endereco = email mensagem_mail = prepare_email_message(mensagem, html=True) simple_send_mail(mensagem_mail, endereco, assunto) status_message.add(u"Mensagens respondidas com sucesso!", type=u"info") contextURL = self.context.absolute_url() + '/@@fale-conosco-admin' return self.request.response.redirect(contextURL) else: uid = request.form.get('pai', None) if not uid: uid = request.form.get('msg') nome = request.form.get('nome', None) email = request.form.get('email', None) assunto = request.form.get('assunto', None) userid = request.form.get('userid', None) responsavel = request.form.get('responsavel', None) id = idnormalizer.normalize(nome) + \ '-' + str(datetime.now().microsecond) # pega o objeto pai # if uid: fale = ucatalog(UID=uid)[0].getObject() if acao == 'resgatar': member = mtool.getAuthenticatedMember() responsavel = member.getId() email = member.getProperty('email') assunto = fale.getAssunto() fale.setResponsavel(userlogged) fale.reindexObject() # apos criar e alterar o estado do workflow, # seta o responsavel no fale if acao == 'encaminhar': userid = request.form.get('userid', None) fale.setResponsavel(userid) fale.reindexObject() # cria a mensagem type_info = pt.getTypeInfo('Mensagem') item = type_info._constructInstance(fale, id) item.setTitle(nome) item.setNome(userid) item.setEmail(email) item.setAssunto(assunto) item.setMensagem(mensagem) #seta no objeto filho o responsável pelo encaminhamento ou seja quem está logado. item.setResponsavel(userlogged) item.reindexObject() # apos criar a mensagem altera o workflow da # mensagem e do objeto pai wtool.doActionFor(fale, acao) wtool.doActionFor(item, acao) assunto = 'Fale conosco' endereco = email mensagem_mail = prepare_email_message(mensagem, html=True) simple_send_mail(mensagem_mail, endereco, assunto) status_message.add(u"Alteração realizada com sucesso!", type=u"info") contextURL=self.context.absolute_url() + \ '/@@fale-conosco-admin?msg=' + uid return self.request.response.redirect(contextURL)