19 |
19 |
20 __authors__ = [ |
20 __authors__ = [ |
21 '"Pawel Solyga" <pawel.solyga@gmail.com>', |
21 '"Pawel Solyga" <pawel.solyga@gmail.com>', |
22 ] |
22 ] |
23 |
23 |
24 import re |
|
25 import logging |
|
26 |
24 |
27 from google.appengine.api import users |
25 from google.appengine.api import users |
28 from django import http |
26 from django import http |
29 from django import shortcuts |
27 from django import shortcuts |
30 from django import newforms as forms |
28 from django import newforms as forms |
|
29 from django.utils.translation import ugettext_lazy |
31 |
30 |
32 from soc.logic import out_of_band |
31 from soc.logic import out_of_band |
33 from soc.logic.site import id_user |
32 from soc.logic.site import id_user |
34 from soc.views import simple |
33 from soc.views import simple |
35 from soc.views.helpers import forms_helpers |
34 from soc.views.helpers import forms_helpers |
94 |
105 |
95 # try to fetch User entity corresponding to linkname if one exists |
106 # try to fetch User entity corresponding to linkname if one exists |
96 try: |
107 try: |
97 linkname_user = id_user.getUserIfLinkName(linkname) |
108 linkname_user = id_user.getUserIfLinkName(linkname) |
98 except out_of_band.ErrorResponse, error: |
109 except out_of_band.ErrorResponse, error: |
99 # show custom 404 page when linkname doesn't exist in Datastore |
110 # show custom 404 page when link name doesn't exist in Datastore |
100 return simple.errorResponse(request, error, template, context) |
111 return simple.errorResponse(request, error, template, context) |
101 |
112 |
102 # linkname_user will be None here if linkname was already None... |
113 # linkname_user will be None here if link name was already None... |
103 if linkname_user and (linkname_user.id != id): |
114 if linkname_user and (linkname_user.id != id): |
104 # linkname_user exists but is not the currently logged in Google Account, |
115 # linkname_user exists but is not the currently logged in Google Account, |
105 # so show public view for that (other) User entity |
116 # so show public view for that (other) User entity |
106 return simple.public(request, template, linkname, context) |
117 return simple.public(request, template, linkname, context) |
107 |
118 |
108 if request.method == 'POST': |
119 if request.method == 'POST': |
109 form = UserForm(request.POST) |
120 form = UserForm(request.POST) |
110 |
121 |
111 if form.is_valid(): |
122 if form.is_valid(): |
112 linkname = form.cleaned_data.get('link_name') |
123 new_linkname = form.cleaned_data.get('link_name') |
113 nickname = form.cleaned_data.get("nick_name") |
124 nickname = form.cleaned_data.get("nick_name") |
114 |
125 |
115 user = id_user.updateOrCreateUserFromId( |
126 user = id_user.updateOrCreateUserFromId( |
116 id, link_name=linkname, nick_name=nickname) |
127 id, link_name=new_linkname, nick_name=nickname) |
117 |
128 |
118 # TODO(tlarsen): |
129 # redirect to new /user/profile/new_linkname&s=0 |
119 # if old_linkname: redirect to new /user/profile/new_linkname |
130 # (causes 'Profile saved' message to be displayed) |
120 # (how to preserve displaying the "Profile saved" message?) |
131 return response_helpers.redirectToChangedSuffix( |
121 context.update({'submit_message': 'Profile saved.'}) |
132 request, linkname, new_linkname, params=SUBMIT_PROFILE_SAVED_PARAMS) |
122 else: # request.method == 'GET' |
133 else: # request.method == 'GET' |
123 # try to fetch User entity corresponding to Google Account if one exists |
134 # try to fetch User entity corresponding to Google Account if one exists |
124 user = id_user.getUserFromId(id) |
135 user = id_user.getUserFromId(id) |
125 |
136 |
126 if user: |
137 if user: |
|
138 # is 'Profile saved' parameter present, but referrer was not ourself? |
|
139 # (e.g. someone bookmarked the GET that followed the POST submit) |
|
140 if (request.GET.get(SUBMIT_MSG_PARAM_NAME) |
|
141 and (not response_helpers.isReferrerSelf(request, |
|
142 suffix=linkname))): |
|
143 # redirect to aggressively remove 'Profile saved' query parameter |
|
144 return http.HttpResponseRedirect(request.path) |
|
145 |
|
146 # referrer was us, so select which submit message to display |
|
147 # (may display no message if ?s=0 parameter is not present) |
|
148 context['submit_message'] = ( |
|
149 template_helpers.getSingleIndexedParamValue( |
|
150 request, SUBMIT_MSG_PARAM_NAME, values=SUBMIT_MESSAGES)) |
|
151 |
127 # populate form with the existing User entity |
152 # populate form with the existing User entity |
128 form = UserForm(instance=user) |
153 form = UserForm(instance=user) |
129 else: |
154 else: |
|
155 if request.GET.get(SUBMIT_MSG_PARAM_NAME): |
|
156 # redirect to aggressively remove 'Profile saved' query parameter |
|
157 return http.HttpResponseRedirect(request.path) |
|
158 |
130 # no User entity exists for this Google Account, so show a blank form |
159 # no User entity exists for this Google Account, so show a blank form |
131 form = UserForm() |
160 form = UserForm() |
132 |
161 |
133 context.update({'form': form}) |
162 context.update({'form': form}) |
134 return response_helpers.respond(request, template, context) |
163 return response_helpers.respond(request, template, context) |