| # Copyright 2013 the Melange authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """Module with user settings related views.""" |
| |
| from django import forms |
| from django import http |
| |
| from melange.logic import settings as settings_logic |
| from melange.request import access |
| from melange.views.helper import urls |
| |
| from soc.logic import cleaning |
| |
| from soc.views import base |
| from soc.views.helper import url_patterns |
| |
| |
| class UserSettingsForm(forms.Form): |
| """Form to set user settings for the page.""" |
| |
| view_as = forms.CharField() |
| |
| def clean_view_as(self): |
| """Cleans view_as field.""" |
| user = cleaning.clean_existing_user('view_as')(self) |
| return user.key if user else None |
| |
| |
| class UserSettings(base.RequestHandler): |
| """View to list and set all user settings for the page.""" |
| |
| access_checker = access.DEVELOPER_ACCESS_CHECKER |
| |
| def djangoURLPatterns(self): |
| """See base.RequestHandler.djangoURLPatterns for specification.""" |
| return [ |
| url_patterns.url( |
| r'site', r'settings/user/%s$' % url_patterns.USER, |
| self, name=urls.UrlNames.USER_SETTINGS) |
| ] |
| |
| def templatePath(self): |
| """See base.RequestHandler.templatePath for specification.""" |
| return 'melange/settings/user_settings.html' |
| |
| def context(self, data, check, mutator): |
| """See base.RequestHandler.context for specification.""" |
| user_settings = settings_logic.getUserSettings(data.url_ndb_user.key) |
| |
| initial = {} |
| if user_settings.view_as is not None: |
| initial['view_as'] = user_settings.view_as.id() |
| |
| return {'form': UserSettingsForm(data=data.POST or None, initial=initial)} |
| |
| def post(self, data, check, mutator): |
| """See base.RequestHandler.post for specification.""" |
| form = UserSettingsForm(data=data.POST) |
| if form.is_valid(): |
| view_as = form.cleaned_data['view_as'] or None |
| |
| settings_logic.setUserSettings(data.url_ndb_user.key, view_as=view_as) |
| |
| return http.HttpResponseRedirect(data.request.get_full_path()) |
| else: |
| # TODO(nathaniel): problematic self-use. |
| return self.get(data, check, mutator) |