diff --git a/frappe/website/doctype/personal_data_delete_request/personal_data_delete_request.json b/frappe/website/doctype/personal_data_delete_request/personal_data_delete_request.json index 393bf58886..98bfddd4ae 100644 --- a/frappe/website/doctype/personal_data_delete_request/personal_data_delete_request.json +++ b/frappe/website/doctype/personal_data_delete_request/personal_data_delete_request.json @@ -4,6 +4,7 @@ "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, + "autoname": "format:deleted-user-{####}@deleted.com", "beta": 0, "creation": "2019-01-25 14:22:44.422417", "custom": 0, @@ -20,19 +21,19 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "user", - "fieldtype": "Link", + "fieldname": "email", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, "in_list_view": 1, - "in_standard_filter": 0, - "label": "User", + "in_standard_filter": 1, + "label": "Email", "length": 0, "no_copy": 0, - "options": "User", + "options": "", "permlevel": 0, "precision": "", "print_hide": 0, @@ -53,19 +54,20 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fetch_from": "user.full_name", - "fieldname": "user_name", - "fieldtype": "Data", + "default": "Pending Verification", + "fieldname": "status", + "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "User Name", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Status", "length": 0, "no_copy": 0, + "options": "Pending Verification\nPending Approval\nDeleted", "permlevel": 0, "precision": "", "print_hide": 0, @@ -90,8 +92,8 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2019-01-25 14:22:44.422417", - "modified_by": "Administrator", + "modified": "2019-02-01 13:22:04.272688", + "modified_by": "mangesh@iwebnotes.com", "module": "Website", "name": "Personal Data Delete Request", "name_case": "", diff --git a/frappe/website/doctype/personal_data_delete_request/personal_data_delete_request.py b/frappe/website/doctype/personal_data_delete_request/personal_data_delete_request.py index f7cbef3a97..3c3cc00b7e 100644 --- a/frappe/website/doctype/personal_data_delete_request/personal_data_delete_request.py +++ b/frappe/website/doctype/personal_data_delete_request/personal_data_delete_request.py @@ -6,8 +6,46 @@ from __future__ import unicode_literals import frappe from frappe import _ from frappe.model.document import Document -from frappe.desk.form.linked_with import get_linked_doctypes -from frappe.website.doctype.personal_data_download_request.personal_data_download_request import get_unlinked_user_data, get_linked_user_data +from frappe.utils.verified_command import get_signed_params, verify_request +from frappe.website.doctype.personal_data_download_request.personal_data_download_request import get_user_data class PersonalDataDeleteRequest(Document): - pass \ No newline at end of file + + def after_insert(self): + if frappe.session.user in ['Administrator', 'Guest']: + frappe.throw(_("This user's data cannot be requested for deletion")) + else: + self.send_verification_mail() + + def send_verification_mail(self): + url = frappe.utils.get_url("/api/method/frappe.website.doctype.personal_data_delete_request.personal_data_delete_request.confirm_deletion") +\ + "?" + get_signed_params({"email": self.email}) + + frappe.sendmail(recipients= self.email, + subject=_("ERPNext: Confirm Deletion of Data"), + template="delete_data_confirmation", + args={'email':self.email, 'link':url}, + header=[_("ERPNext: Confirm Deletion of Data"), "green"]) + + def anonymize_data(self): + data = get_user_data(self.email) + hooks = frappe.get_hooks("user_privacy_documents") + + for hook in hooks: + for doc in data.get(hook['doctype'],[]): + email_field = [hook for hook in hook['email_field'] if doc.get(hook) == self.email][0] + frappe.db.sql("""UPDATE `tab{0}` + SET `{1}`='{2}', `{3}' + WHERE name = %s + """.format(hook['doctype'], email_field, self.name, + '\', `'.join(map(lambda u : u+'`=\''+str(u), hook['personal_fields']))), (doc.get('name'))) + +@frappe.whitelist(allow_guest=True) +def confirm_deletion(email): + if not verify_request: + return + frappe.set_value("Personal Data Delete Request", {'email':email}, 'status', 'Pending Approval') + frappe.db.commit() + frappe.respond_as_web_page(_("Confirmed"), + _("The process for deletion of ERPNext Data associated with {0} has been initiated.").format(email), + indicator_color='green') \ No newline at end of file