From 6c3ec5b18ed0b63d6ebb5b5454133ac41cc976d9 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 17 May 2018 16:56:26 +0000 Subject: [PATCH] Added Email origin to Email record creation throughout the codebase. - Legacy-Id: 15149 --- ietf/doc/views_draft.py | 3 +++ ietf/group/views.py | 7 +++++++ ietf/liaisons/forms.py | 9 +++++++++ ietf/nomcom/utils.py | 2 +- ietf/review/import_from_review_tool.py | 2 +- ietf/secr/areas/views.py | 4 ++++ ietf/secr/drafts/forms.py | 6 ++++++ ietf/secr/groups/forms.py | 3 +++ ietf/secr/groups/views.py | 4 ++++ ietf/secr/roles/views.py | 4 ++++ ietf/stats/utils.py | 2 +- ietf/submit/utils.py | 4 ++-- 12 files changed, 45 insertions(+), 5 deletions(-) diff --git a/ietf/doc/views_draft.py b/ietf/doc/views_draft.py index f1d56ca18..38c9463d1 100644 --- a/ietf/doc/views_draft.py +++ b/ietf/doc/views_draft.py @@ -954,6 +954,9 @@ def edit_shepherd(request, name): events = [] doc.shepherd = form.cleaned_data['shepherd'] + if not doc.shepherd.origin: + doc.shepherd.origin = 'shepherd: %s' % doc.name + doc.shepherd.save() c = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=request.user.person) c.desc = "Document shepherd changed to "+ (doc.shepherd.person.name if doc.shepherd else "(None)") diff --git a/ietf/group/views.py b/ietf/group/views.py index 417adf1fd..54c9990e9 100644 --- a/ietf/group/views.py +++ b/ietf/group/views.py @@ -958,6 +958,10 @@ def edit(request, group_type=None, acronym=None, action="edit", field=None): group.role_set.filter(name=slug).delete() for e in new: Role.objects.get_or_create(name_id=slug, email=e, group=group, person=e.person) + if not e.origin or e.origin == e.person.user.username: + e.origin = "role: %s %s" % (group.acronym, slug) + e.save() + added = set(new) - set(old) deleted = set(old) - set(new) if added: @@ -1206,6 +1210,9 @@ def stream_edit(request, acronym): group.role_set.filter(name=slug).delete() for e in new: Role.objects.get_or_create(name_id=slug, email=e, group=group, person=e.person) + if not e.origin or e.origin == e.person.user.username: + e.origin = "role: %s %s" % (group.acronym, slug) + e.save() return redirect("ietf.group.views.streams") else: diff --git a/ietf/liaisons/forms.py b/ietf/liaisons/forms.py index 3acebfa09..14c59cfa6 100644 --- a/ietf/liaisons/forms.py +++ b/ietf/liaisons/forms.py @@ -500,6 +500,15 @@ class OutgoingLiaisonForm(LiaisonModelForm): if has_role(self.user, "Liaison Manager"): self.fields['to_groups'].initial = [queryset.first()] + def save(self, commit=False): + instance = super(EditModelForm, self).save(commit=False) + + if 'from_contact' in self.changed_data: + email = self.cleaned_data.get('from_contact') + if not email.origin: + email.origin = "liaison: %s" % (','.join([ g.acronym for g in instance.from_groups.all() ])) + email.save() + class EditLiaisonForm(LiaisonModelForm): def __init__(self, *args, **kwargs): super(EditLiaisonForm, self).__init__(*args, **kwargs) diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py index d09436699..c51360e1e 100644 --- a/ietf/nomcom/utils.py +++ b/ietf/nomcom/utils.py @@ -372,7 +372,7 @@ def make_nomineeposition(nomcom, candidate, position, author): def make_nomineeposition_for_newperson(nomcom, candidate_name, candidate_email, position, author): # This is expected to fail if called with an existing email address - email = Email.objects.create(address=candidate_email, origin=nomcom.group.acronym) + email = Email.objects.create(address=candidate_email, origin="nominee: %s" % nomcom.group.acronym) person = Person.objects.create(name=candidate_name, ascii=unidecode_name(candidate_name), ) diff --git a/ietf/review/import_from_review_tool.py b/ietf/review/import_from_review_tool.py index a3059d3b0..4e1488d2c 100755 --- a/ietf/review/import_from_review_tool.py +++ b/ietf/review/import_from_review_tool.py @@ -101,7 +101,7 @@ with db_con.cursor() as c: for name in new_aliases: Alias.objects.create(person=person, name=name) - email, created = Email.objects.get_or_create(address=row.email, person=person, origin=__name__) + email, created = Email.objects.get_or_create(address=row.email, person=person, origin="import: %s" % __name__) if created: print "created email", email diff --git a/ietf/secr/areas/views.py b/ietf/secr/areas/views.py index 1099303ce..ca0bcb0a8 100644 --- a/ietf/secr/areas/views.py +++ b/ietf/secr/areas/views.py @@ -214,6 +214,10 @@ def people(request, name): # create role Role.objects.create(name_id='pre-ad',group=area,email=email,person=person) + if not email.origin or email.origin == person.user.username: + email.origin = "role: %s %s" % (area.acronym, 'pre-ad') + email.save() + messages.success(request, 'New Area Director added successfully!') return redirect('ietf.secr.areas.views.view', name=name) else: diff --git a/ietf/secr/drafts/forms.py b/ietf/secr/drafts/forms.py index 620f9bbbb..c12321814 100644 --- a/ietf/secr/drafts/forms.py +++ b/ietf/secr/drafts/forms.py @@ -178,6 +178,12 @@ class EditModelForm(forms.ModelForm): else: m.tags.remove('rfc-rev') + if 'shepherd' in self.changed_data: + email = self.cleaned_data.get('shepherd') + if not email.origin: + email.origin = 'shepherd: %s' % m.name + email.save() + # handle replaced by return m diff --git a/ietf/secr/groups/forms.py b/ietf/secr/groups/forms.py index 0d1d72cb5..c002b3b30 100644 --- a/ietf/secr/groups/forms.py +++ b/ietf/secr/groups/forms.py @@ -193,6 +193,9 @@ class RoleForm(forms.Form): name = cleaned_data['name'] group_acronym = cleaned_data['group_acronym'] + if email.person != person: + raise forms.ValidationError('ERROR: The person associated with the chosen email address is different from the chosen person') + if Role.objects.filter(name=name,group=self.group,person=person,email=email): raise forms.ValidationError('ERROR: This is a duplicate entry') diff --git a/ietf/secr/groups/views.py b/ietf/secr/groups/views.py index 956978853..6c0d46cb3 100644 --- a/ietf/secr/groups/views.py +++ b/ietf/secr/groups/views.py @@ -347,6 +347,10 @@ def people(request, acronym): email=email, group=group) + if not email.origin or email.origin == person.user.username: + email.origin = "role: %s %s" % (group.acronym, name.slug) + email.save() + messages.success(request, 'New %s added successfully!' % name) return redirect('ietf.secr.groups.views.people', acronym=group.acronym) else: diff --git a/ietf/secr/roles/views.py b/ietf/secr/roles/views.py index cd53b55e8..1063b9271 100644 --- a/ietf/secr/roles/views.py +++ b/ietf/secr/roles/views.py @@ -93,6 +93,10 @@ def main(request): email=email, group=group) + if not email.origin or email.origin == person.user.username: + email.origin = "role: %s %s" % (group.acronym, name.slug) + email.save() + messages.success(request, 'New %s added successfully!' % name) url = reverse('ietf.secr.roles.views.main') + '?group=%s' % group.acronym return HttpResponseRedirect(url) diff --git a/ietf/stats/utils.py b/ietf/stats/utils.py index c9a473aee..a7ecc0065 100644 --- a/ietf/stats/utils.py +++ b/ietf/stats/utils.py @@ -306,7 +306,7 @@ def get_meeting_registration_data(meeting): try: email = Email.objects.get(person=person, address=address[:64]) except Email.DoesNotExist: - email = Email.objects.create(person=person, address=address[:64], origin='ietf %s registration'%meeting.number) + email = Email.objects.create(person=person, address=address[:64], origin='registration: ietf-%s'%meeting.number) if email.address != address: debug.say("Truncated address: %s --> %s" % (address, email.address)) diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py index 836fb6d36..314ff9854 100644 --- a/ietf/submit/utils.py +++ b/ietf/submit/utils.py @@ -452,7 +452,7 @@ def ensure_person_email_info_exists(name, email, docname): try: email = person.email_set.get(address=addr) - email.origin = docname # overwrite earlier origin + email.origin = "author: %s" % docname # overwrite earlier origin email.save() except Email.DoesNotExist: try: @@ -468,7 +468,7 @@ def ensure_person_email_info_exists(name, email, docname): email.person = person if email.time is None: email.time = datetime.datetime.now() - email.origin = docname + email.origin = "author: %s" % docname email.save() return person, email