@@ -79,24 +79,87 @@ def ietf_loggedin(request):
7979
8080@login_required
8181def profile (request ):
82- if settings . USE_DB_REDESIGN_PROXY_CLASSES :
83- from ietf .person .models import Person
84- from ietf .group . models import Role
82+ from ietf . person . models import Person , Email , Alias
83+ from ietf .group .models import Role
84+ from ietf .ietfauth . forms import PersonForm
8585
86- roles = []
87- person = None
86+ roles = []
87+ person = None
88+ try :
89+ person = request .user .get_profile ()
90+ except Person .DoesNotExist :
91+ pass
92+
93+ if request .method == 'POST' :
94+ form = PersonForm (request .POST , instance = person )
95+ success = False
96+ new_emails = None
97+ error = None
98+ if form .is_valid ():
99+ try :
100+ form .save ()
101+ success = True
102+ new_emails = form .new_emails
103+ except Exception as e :
104+ error = e
105+
106+ return render_to_response ('registration/confirm_profile_update.html' ,
107+ { 'success' : success , 'new_emails' : new_emails , 'error' : error } ,
108+ context_instance = RequestContext (request ))
109+ else :
110+ roles = Role .objects .filter (person = person ).order_by ('name__name' ,'group__name' )
111+ emails = Email .objects .filter (person = person ).order_by ('-active' ,'-time' )
112+ aliases = Alias .objects .filter (person = person )
113+
114+ person_form = PersonForm (instance = person )
115+
116+ return render_to_response ('registration/edit_profile.html' ,
117+ { 'user' : request .user , 'emails' : emails , 'person' : person ,
118+ 'roles' : roles , 'person_form' : person_form } ,
119+ context_instance = RequestContext (request ))
120+
121+ def confirm_new_email (request , username , date , email , hash ):
122+ from ietf .person .models import Person , Email , Alias
123+ from django .core .exceptions import ValidationError , NON_FIELD_ERRORS
124+ valid = hashlib .md5 ('%s%s%s%s' % (settings .SECRET_KEY , date , email , username )).hexdigest () == hash
125+ if not valid :
126+ raise Http404
127+ request_date = datetime .date (int (date [:4 ]), int (date [4 :6 ]), int (date [6 :]))
128+ if datetime .date .today () > (request_date + datetime .timedelta (days = settings .DAYS_TO_EXPIRE_REGISTRATION_LINK )):
129+ raise Http404
130+ success = False
131+
132+ person = None
133+ error = None
134+ new_email = None
135+
136+ try :
137+ # First, check whether this address exists (to give a more sensible
138+ # error when a duplicate is created).
139+ existing_email = Email .objects .get (address = email )
140+ print existing_email
141+ existing_person = existing_email .person
142+ print existing_person
143+ error = {'address' : ["Email address '%s' is already assigned to user '%s' (%s)" %
144+ (email , existing_person .user , existing_person .name )]}
145+ except Exception :
88146 try :
89- person = request .user .get_profile ()
90- roles = Role .objects .filter (person = person )
147+ person = Person .objects .get (user__username = username )
148+ new_email = Email (address = email , person = person , active = True , time = datetime .datetime .now ())
149+ new_email .full_clean ()
150+ new_email .save ()
151+ success = True
91152 except Person .DoesNotExist :
92- pass
153+ error = {'person' : ["No such user: %s" % (username )]}
154+ except ValidationError as e :
155+ error = e .message_dict
93156
94- return render_to_response ('registration/profileREDESIGN.html' ,
95- dict (roles = roles ,
96- person = person ),
97- context_instance = RequestContext (request ))
157+ return render_to_response ('registration/confirm_new_email.html' ,
158+ { 'username' : username , 'email' : email ,
159+ 'success' : success , 'error' : error ,
160+ 'record' : new_email },
161+ context_instance = RequestContext (request ))
98162
99- return render_to_response ('registration/profile.html' , context_instance = RequestContext (request ))
100163
101164def create_account (request ):
102165 success = False
0 commit comments