From af91933f99eda376ddc88a8b9b77c9c461905919 Mon Sep 17 00:00:00 2001 From: Bruno Barbosa Date: Thu, 26 Nov 2015 16:19:35 -0200 Subject: [PATCH] Implementado a opção do usuário excluir seus próprios dados --- pf/listatelefonica/browser/templates/pessoaview.pt | 14 ++++++++++++++ pf/listatelefonica/browser/templates/selfdeletedata.pt | 0 pf/listatelefonica/browser/views.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++---------- pf/listatelefonica/pessoa.py | 13 +++++++++++++ 4 files changed, 79 insertions(+), 10 deletions(-) mode change 100644 => 100755 pf/listatelefonica/browser/templates/pessoaview.pt create mode 100644 pf/listatelefonica/browser/templates/selfdeletedata.pt mode change 100644 => 100755 pf/listatelefonica/browser/views.py mode change 100644 => 100755 pf/listatelefonica/pessoa.py diff --git a/pf/listatelefonica/browser/templates/pessoaview.pt b/pf/listatelefonica/browser/templates/pessoaview.pt old mode 100644 new mode 100755 index ac16624..6b75c9a --- a/pf/listatelefonica/browser/templates/pessoaview.pt +++ b/pf/listatelefonica/browser/templates/pessoaview.pt @@ -13,6 +13,7 @@ +
@@ -62,6 +63,19 @@
+
+ + +

Confirmar exclusão

+

Você optou por excluir seus dados da Lista Telefônica do DPF.

+

Clicando no botão "Confirmar Exclusão" abaixo seus dados serão totalmente excluídos da lista. Esta operação é irreversível.

+

Tem certeza de que deseja continuar?

+ Não, foi um engano + Confirmar Exclusão +
+
diff --git a/pf/listatelefonica/browser/templates/selfdeletedata.pt b/pf/listatelefonica/browser/templates/selfdeletedata.pt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/pf/listatelefonica/browser/templates/selfdeletedata.pt diff --git a/pf/listatelefonica/browser/views.py b/pf/listatelefonica/browser/views.py old mode 100644 new mode 100755 index 4c514e2..c03d990 --- a/pf/listatelefonica/browser/views.py +++ b/pf/listatelefonica/browser/views.py @@ -2,6 +2,7 @@ import json +from Products.statusmessages.interfaces import IStatusMessage from plone import api from five import grok from zope.interface import Interface @@ -73,7 +74,26 @@ class ListaTelefonicaView(grok.View): return self.context.Description() -class PessoaView(grok.View): +class PessoaMixin(object): + + def is_owner(self): + # Get username + current = api.user.get_current() + username = current.getUserName() + + # Check if logged user is object's creator + owner = self.context.Creator() + if username == owner: + return True + return False + + def was_deleted(self): + if self.is_owner() and self.context.excluir_dados: + return True + return False + + +class PessoaView(PessoaMixin, grok.View): grok.context(IPessoa) grok.require('zope2.View') grok.name('view') @@ -87,16 +107,32 @@ class PessoaView(grok.View): return "{0}
{1}".format(ramal1, ramal2) - def is_owner(self): - # Get username - current = api.user.get_current() - username = current.getUserName() - # Check if logged user is object's creator - owner = self.context.Creator() - if username == owner: - return True - return False +class SelfDeleteData(PessoaMixin, grok.View): + """ """ + grok.context(IPessoa) + grok.require('zope2.View') + grok.name('lista_delete_data') + + def __call__(self): + if not self.was_deleted() or not self.is_owner(): + return self.redirect(self.context.absolute_url()) + self.delete() + return super(SelfDeleteData, self).__call__() + + def delete(self): + if 'cancel' in self.request.form and self.request.form['cancel'] == 'yes': + import transaction + self.context.excluir_dados = False + transaction.commit() + return self.redirect(self.context.absolute_url()) + else: + api.content.delete(self.context) + messages = IStatusMessage(self.request) + messages.add(u'Seus dados foram excluídos com sucesso!', type=u'info') + portal_url = api.portal.get().absolute_url() + url_return = "{0}/lista-telefonica".format(portal_url) + return self.redirect(url_return) class UnidadesView(grok.View): @@ -205,6 +241,12 @@ class UnidadesView(grok.View): def update(self): self.persons = self.get_results() + def registry(self): + """ """ + portal_url = self.context.absolute_url() + login_url = "{0}/login_form?came_from=after_login".format(portal_url) + return login_url + class UnidadesIframeView(UnidadesView): grok.name('unidade_iframe') diff --git a/pf/listatelefonica/pessoa.py b/pf/listatelefonica/pessoa.py old mode 100644 new mode 100755 index bae8da6..e9ce043 --- a/pf/listatelefonica/pessoa.py +++ b/pf/listatelefonica/pessoa.py @@ -89,6 +89,19 @@ class IPessoa(model.Schema): required=False ) + excluir_dados = schema.Bool( + title=u"Apagar meus dados", + description=u"Selecione essa opção apenas se tiver absoluta certeza de que deseja apagar todos os seus dados da Lista Telefônica.", + required=False, + default=False, + ) + + model.fieldset( + 'privacidade', + label=u"Privacidade", + fields=['excluir_dados', ] + ) + @form.default_value(field=IPessoa['email']) def default_email(data): -- libgit2 0.21.2