Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Side by Side Diff: appengine/monorail/sitewide/groupadmin.py

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is govered by a BSD-style
3 # license that can be found in the LICENSE file or at
4 # https://developers.google.com/open-source/licenses/bsd
5
6 """A class to display user group admin page."""
7
8 import logging
9 import time
10
11 from third_party import ezt
12
13 from framework import framework_helpers
14 from framework import permissions
15 from framework import servlet
16 from framework import urls
17 from proto import usergroup_pb2
18 from services import usergroup_svc
19 from sitewide import group_helpers
20
21
22 class GroupAdmin(servlet.Servlet):
23 """The group admin page."""
24
25 _PAGE_TEMPLATE = 'sitewide/group-admin-page.ezt'
26
27 def AssertBasePermission(self, mr):
28 """Assert that the user has the permissions needed to view this page."""
29 super(GroupAdmin, self).AssertBasePermission(mr)
30
31 _, owner_ids_dict = self.services.usergroup.LookupMembers(
32 mr.cnxn, [mr.viewed_user_auth.user_id])
33 owner_ids = owner_ids_dict[mr.viewed_user_auth.user_id]
34 if not permissions.CanEditGroup(
35 mr.perms, mr.auth.effective_ids, owner_ids):
36 raise permissions.PermissionException(
37 'User is not allowed to edit a user group')
38
39 def GatherPageData(self, mr):
40 """Build up a dictionary of data values to use when rendering the page."""
41 group_id = mr.viewed_user_auth.user_id
42 group_settings = self.services.usergroup.GetGroupSettings(
43 mr.cnxn, group_id)
44 visibility_levels = group_helpers.BuildUserGroupVisibilityOptions()
45 initial_visibility = group_helpers.GroupVisibilityView(
46 group_settings.who_can_view_members)
47 group_types = group_helpers.BuildUserGroupTypeOptions()
48 import_group = bool(group_settings.ext_group_type)
49 if import_group:
50 initial_group_type = group_helpers.GroupTypeView(
51 group_settings.ext_group_type)
52 else:
53 initial_group_type = ''
54
55 if group_settings.friend_projects:
56 initial_friendprojects = ', '.join(
57 self.services.project.LookupProjectNames(
58 mr.cnxn, group_settings.friend_projects).values())
59 else:
60 initial_friendprojects = ''
61
62 return {
63 'admin_tab_mode': 'st2',
64 'groupadmin': True,
65 'groupid': group_id,
66 'groupname': mr.viewed_username,
67 'group_types': group_types,
68 'import_group': import_group or '',
69 'initial_friendprojects': initial_friendprojects,
70 'initial_group_type': initial_group_type,
71 'initial_visibility': initial_visibility,
72 'offer_membership_editing': True,
73 'visibility_levels': visibility_levels,
74 }
75
76 def ProcessFormData(self, mr, post_data):
77 """Process the posted form."""
78 # 1. Gather data from the request.
79 group_name = mr.viewed_username
80 group_id = mr.viewed_user_auth.user_id
81
82 if post_data.get('import_group'):
83 vis_level = usergroup_pb2.MemberVisibility.OWNERS
84 ext_group_type = post_data.get('group_type')
85 friend_projects = ''
86 if not ext_group_type:
87 mr.errors.groupimport = 'Please provide external group type'
88 else:
89 ext_group_type = usergroup_pb2.GroupType(int(ext_group_type))
90 else:
91 vis_level = post_data.get('visibility')
92 ext_group_type = None
93 friend_projects = post_data.get('friendprojects', '')
94 if vis_level:
95 vis_level = usergroup_pb2.MemberVisibility(int(vis_level))
96 else:
97 mr.errors.groupimport = 'Cannot update settings for imported group'
98
99 if not mr.errors.AnyErrors():
100 project_ids, error = self.services.usergroup.ValidateFriendProjects(
101 mr.cnxn, self.services, friend_projects)
102 if error:
103 mr.errors.friendprojects = error
104
105 # 2. Call services layer to save changes.
106 if not mr.errors.AnyErrors():
107 group_settings = usergroup_pb2.UserGroupSettings(
108 who_can_view_members=vis_level,
109 ext_group_type=ext_group_type,
110 friend_projects=project_ids)
111 self.services.usergroup.UpdateSettings(
112 mr.cnxn, group_id, group_settings)
113
114 # 3. Determine the next page in the UI flow.
115 if mr.errors.AnyErrors():
116 self.PleaseCorrect(mr, initial_name=group_name)
117 else:
118 return framework_helpers.FormatAbsoluteURL(
119 mr, '/g/%s%s' % (group_name, urls.GROUP_ADMIN),
120 include_project=False, saved=1, ts=int(time.time()))
OLDNEW
« no previous file with comments | « appengine/monorail/sitewide/group_helpers.py ('k') | appengine/monorail/sitewide/groupcreate.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698