55from django .conf import settings
66from django .contrib .sites .models import Site
77
8- from ietf .idtracker .models import InternetDraft , PersonOrOrgInfo , IETFWG
8+ from ietf .idtracker .models import (InternetDraft , PersonOrOrgInfo , IETFWG ,
9+ IDAuthor , EmailAddress )
910from ietf .utils .mail import send_mail
1011
1112
@@ -34,7 +35,6 @@ def request_full_url(request, submission):
3435
3536def perform_post (submission ):
3637 group_id = submission .group_acronym and submission .group_acronym .pk or NONE_WG
37- updated = False
3838 try :
3939 draft = InternetDraft .objects .get (filename = submission .filename )
4040 draft .title = submission .id_document_name
@@ -47,7 +47,6 @@ def perform_post(submission):
4747 draft .last_modified_date = datetime .date .today ()
4848 draft .abstract = submission .abstract
4949 draft .save ()
50- updated = True
5150 except InternetDraft .DoesNotExist :
5251 draft = InternetDraft .objects .create (
5352 title = submission .id_document_name ,
@@ -63,11 +62,71 @@ def perform_post(submission):
6362 status_id = 1 , # Active
6463 intended_status_id = 8 , # None
6564 )
65+ update_authors (draft , submission )
6666 move_docs (submission )
6767 submission .status_id = POSTED
6868 submission .save ()
6969
7070
71+ def find_person (first_name , last_name , middle_initial , name_suffix , email ):
72+ person_list = None
73+ if email :
74+ person_list = PersonOrOrgInfo .objects .filter (emailaddress__address = email ).distinct ()
75+ if person_list and len (person_list ) == 1 :
76+ return person_list [0 ]
77+ if not person_list :
78+ person_list = PersonOrOrgInfo .objects .all ()
79+ person_list = person_list .filter (first_name = first_name ,
80+ last_name = last_name )
81+ if middle_initial :
82+ person_list = person_list .filter (middle_initial = middle_initial )
83+ if name_suffix :
84+ person_list = person_list .filter (name_suffix = name_suffix )
85+ if person_list :
86+ return person_list [0 ]
87+ return None
88+
89+
90+ def update_authors (draft , submission ):
91+ # TempAuthor of order 0 is submitter
92+ new_authors = list (submission .tempidauthors_set .filter (author_order__gt = 0 ))
93+ person_pks = []
94+ for author in new_authors :
95+ person = find_person (author .first_name , author .last_name ,
96+ author .middle_initial , author .name_suffix ,
97+ author .email_address )
98+ if not person :
99+ person = PersonOrOrgInfo (
100+ first_name = author .first_name ,
101+ last_name = author .last_name ,
102+ middle_initial = author .middle_initial or '' ,
103+ name_suffix = author .name_suffix or '' ,
104+ )
105+ person .save ()
106+ if author .email :
107+ EmailAddress .objects .create (
108+ address = author .email ,
109+ priority = 1 ,
110+ type = 'INET' ,
111+ person_or_org = person ,
112+ )
113+ person_pks .append (person .pk )
114+ try :
115+ idauthor = IDAuthor .objects .get (
116+ document = draft ,
117+ person = person ,
118+ )
119+ idauthor .author_order = author .author_order
120+ except IDAuthor .DoesNotExist :
121+ idauthor = IDAuthor (
122+ document = draft ,
123+ person = person ,
124+ author_order = author .author_order ,
125+ )
126+ idauthor .save ()
127+ draft .authors .exclude (person__pk__in = person_pks ).delete ()
128+
129+
71130def get_person_for_user (user ):
72131 try :
73132 return user .get_profile ().person ()
0 commit comments