blob: bb65ddd746b56b7bda5ca1d414d910e714ede6fb [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file or at
# https://developers.google.com/open-source/licenses/bsd
"""Classes for the user settings (preferences) page."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import time
import urllib
import ezt
from businesslogic import work_env
from framework import framework_helpers
from framework import permissions
from framework import servlet
from framework import template_helpers
from framework import urls
class UserSettings(servlet.Servlet):
"""Shows a page with a simple form to edit user preferences."""
_PAGE_TEMPLATE = 'sitewide/user-settings-page.ezt'
def AssertBasePermission(self, mr):
"""Assert that the user has the permissions needed to view this page."""
super(UserSettings, self).AssertBasePermission(mr)
if not mr.auth.user_id:
raise permissions.PermissionException(
'Anonymous users are not allowed to edit user settings')
def GatherPageData(self, mr):
"""Build up a dictionary of data values to use when rendering the page."""
page_data = {
'user_tab_mode': 'st3',
'logged_in_user_pb': template_helpers.PBProxy(mr.auth.user_pb),
# When on /hosting/settings, the logged-in user is the viewed user.
'viewed_user': mr.auth.user_view,
'offer_saved_queries_subtab': ezt.boolean(True),
'viewing_self': ezt.boolean(True),
}
with work_env.WorkEnv(mr, self.services) as we:
settings_user_prefs = we.GetUserPrefs(mr.auth.user_id)
page_data.update(
framework_helpers.UserSettings.GatherUnifiedSettingsPageData(
mr.auth.user_id, mr.auth.user_view, mr.auth.user_pb,
settings_user_prefs))
return page_data
def ProcessFormData(self, mr, post_data):
"""Process the posted form."""
with work_env.WorkEnv(mr, self.services) as we:
framework_helpers.UserSettings.ProcessSettingsForm(
we, post_data, mr.auth.user_pb)
url = framework_helpers.FormatAbsoluteURL(
mr, urls.USER_SETTINGS, include_project=False,
saved=1, ts=int(time.time()))
return url