12 # distributed under the License is distributed on an "AS IS" BASIS, |
12 # distributed under the License is distributed on an "AS IS" BASIS, |
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 # See the License for the specific language governing permissions and |
14 # See the License for the specific language governing permissions and |
15 # limitations under the License. |
15 # limitations under the License. |
16 |
16 |
17 """Views relevant to the User role. |
17 """Views for editing and examining User profiles. |
18 """ |
18 """ |
19 |
19 |
20 __authors__ = [ |
20 __authors__ = [ |
21 '"Pawel Solyga" <pawel.solyga@gmail.com>', |
21 '"Pawel Solyga" <pawel.solyga@gmail.com>', |
22 ] |
22 ] |
26 from google.appengine.api import users |
26 from google.appengine.api import users |
27 from django import http |
27 from django import http |
28 from django import shortcuts |
28 from django import shortcuts |
29 from django import newforms as forms |
29 from django import newforms as forms |
30 |
30 |
|
31 from soc.logic.site import id_user |
31 from soc.views.helpers import forms_helpers |
32 from soc.views.helpers import forms_helpers |
32 from soc.views.helpers import response_helpers |
33 from soc.views.helpers import response_helpers |
33 |
34 |
34 import soc.models.user |
35 import soc.models.user |
|
36 |
35 |
37 |
36 class UserForm(forms_helpers.DbModelForm): |
38 class UserForm(forms_helpers.DbModelForm): |
37 """Django form displayed when creating or editing a User. |
39 """Django form displayed when creating or editing a User. |
38 """ |
40 """ |
39 LINKNAME_PATTERN = r'''(?x) |
41 LINKNAME_PATTERN = r'''(?x) |
57 #: list of model fields which will *not* be gathered by the form |
58 #: list of model fields which will *not* be gathered by the form |
58 exclude = ['id'] |
59 exclude = ['id'] |
59 |
60 |
60 def clean_link_name(self): |
61 def clean_link_name(self): |
61 linkname = self.cleaned_data.get('link_name') |
62 linkname = self.cleaned_data.get('link_name') |
62 linkname_user = soc.models.user.User.getUserForLinkname(linkname) |
63 linkname_user = id_user.getUserFromLinkName(linkname) |
63 current_id = users.get_current_user() |
64 id = users.get_current_user() |
64 # if linkname exist in datastore and doesn't belong to current user |
65 # if linkname exist in datastore and doesn't belong to current user |
65 if linkname_user and (linkname_user.id != current_id): |
66 if linkname_user and (linkname_user.id != id): |
66 raise forms.ValidationError("This link name is already in use.") |
67 raise forms.ValidationError("This link name is already in use.") |
67 elif not self.LINKNAME_REGEX.match(linkname): |
68 elif not self.LINKNAME_REGEX.match(linkname): |
68 raise forms.ValidationError("This link name is in wrong format.") |
69 raise forms.ValidationError("This link name is in wrong format.") |
69 return linkname |
70 return linkname |
70 |
71 |
97 if not current_id and not linkname: |
98 if not current_id and not linkname: |
98 return http.HttpResponseRedirect(users.create_login_url(request.path)) |
99 return http.HttpResponseRedirect(users.create_login_url(request.path)) |
99 elif not current_id and linkname: |
100 elif not current_id and linkname: |
100 return public(request, linkname) |
101 return public(request, linkname) |
101 |
102 |
102 user = soc.models.user.User.getUserForId(current_id) |
103 user = id_user.getUserFromId(current_id) |
103 |
104 |
104 #: Show custom 404 page when linkname doesn't exist in datastore |
105 #: Show custom 404 page when linkname doesn't exist in datastore |
105 #: or show public view for linkname user |
106 #: or show public view for linkname user |
106 if linkname: |
107 if linkname: |
107 linkname_user = soc.models.user.User.getUserForLinkname(linkname) |
108 linkname_user = id_user.getUserFromLinkName(linkname) |
108 if not linkname_user: |
109 if not linkname_user: |
109 return http.HttpResponseNotFound('No user exists with that link name "%s"' % |
110 return http.HttpResponseNotFound('No user exists with that link name "%s"' % |
110 linkname) |
111 linkname) |
111 elif linkname_user and (linkname_user.id != current_id): |
112 elif linkname_user and (linkname_user.id != current_id): |
112 return public(request, linkname) |
113 return public(request, linkname) |
113 |
114 |
114 #: GET method |
115 #: GET method |
115 if (request.method != 'POST') and user: |
116 if (request.method != 'POST') and user: |
116 form = UserForm(initial={'nick_name': user.nick_name, |
117 form = UserForm(initial={'nick_name': user.nick_name, |
117 'link_name': user.link_name}) |
118 'link_name': user.link_name}) |
118 return response_helpers.respond(request, |
119 return response_helpers.respond(request, |
119 template, {'template': template, |
120 template, {'template': template, |
120 'form': form, |
121 'form': form}) |
121 'user': user}) |
|
122 |
122 |
123 #: POST method |
123 #: POST method |
124 form = UserForm() |
124 form = UserForm() |
125 if request.method == 'POST': |
125 if request.method == 'POST': |
126 form = UserForm(request.POST) |
126 form = UserForm(request.POST) |
127 |
127 |
128 if form.is_valid(): |
128 if form.is_valid(): |
129 linkname = form.cleaned_data.get('link_name') |
129 linkname = form.cleaned_data.get('link_name') |
130 nickname = form.cleaned_data.get("nick_name") |
130 nickname = form.cleaned_data.get("nick_name") |
131 if not user: |
131 if not user: |
132 user = soc.models.user.User(id = user,link_name = linkname, |
132 user = soc.models.user.User(id=id,link_name=linkname, |
133 nick_name = nickname) |
133 nick_name=nickname) |
134 else: |
134 else: |
135 user.nick_name = nickname |
135 user.nick_name = nickname |
136 user.link_name = linkname |
136 user.link_name = linkname |
137 user.put() |
137 user.put() |
138 return response_helpers.respond(request, |
138 return response_helpers.respond(request, |
139 template, {'template': template, |
139 template, {'template': template, |
140 'form': form, |
140 'form': form, |
141 'user': user, |
|
142 'submit_message': 'Profile saved.'}) |
141 'submit_message': 'Profile saved.'}) |
143 |
142 |
144 return response_helpers.respond(request, |
143 return response_helpers.respond(request, |
145 template, {'template': template, 'form': form}) |
144 template, {'template': template, 'form': form}) |
146 |
145 |
158 A subclass of django.http.HttpResponse with generated template. |
157 A subclass of django.http.HttpResponse with generated template. |
159 """ |
158 """ |
160 #: If linkname is empty or not a valid linkname on the site, display |
159 #: If linkname is empty or not a valid linkname on the site, display |
161 #: "user does not exist", otherwise render public view for linkname user |
160 #: "user does not exist", otherwise render public view for linkname user |
162 if linkname: |
161 if linkname: |
163 linkname_user = soc.models.user.User.getUserForLinkname(linkname) |
162 linkname_user = id_user.getUserFromLinkName(linkname) |
164 if not linkname_user: |
163 if not linkname_user: |
165 return http.HttpResponseNotFound('No user exists with that link name "%s"' % |
164 return http.HttpResponseNotFound('No user exists with that link name "%s"' % |
166 linkname) |
165 linkname) |
167 else: |
166 else: |
168 return response_helpers.respond(request, |
167 return response_helpers.respond(request, |
169 template, {'template': template, |
168 template, {'template': template, |
170 'user': linkname_user}) |
169 'user': linkname_user}) |
171 |
170 |
172 return http.HttpResponseNotFound('No user exists with that link name "%s"' % |
171 return http.HttpResponseNotFound('No user exists with that link name "%s"' % |
173 linkname) |
172 linkname) |