Merge branch 'main' into avm99963-monorail

Merged commit 34d8229ae2b51fb1a15bd208e6fe6185c94f6266

GitOrigin-RevId: 7ee0917f93a577e475f8e09526dd144d245593f4
diff --git a/project/peoplelist.py b/project/peoplelist.py
index f2aff1a..f888208 100644
--- a/project/peoplelist.py
+++ b/project/peoplelist.py
@@ -1,7 +1,6 @@
-# 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
 
 """A class to display a paginated list of project members.
 
@@ -19,7 +18,6 @@
 import ezt
 
 from businesslogic import work_env
-from framework import flaskservlet
 from framework import framework_bizobj
 from framework import framework_constants
 from framework import framework_helpers
@@ -35,10 +33,10 @@
 
 
 class PeopleList(servlet.Servlet):
-  """People list page shows a paginatied list of project members."""
+  """People list page shows a paginated list of project members."""
 
   _PAGE_TEMPLATE = 'project/people-list-page.ezt'
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_PEOPLE
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_PEOPLE
 
   def AssertBasePermission(self, mr):
     super(PeopleList, self).AssertBasePermission(mr)
@@ -93,8 +91,8 @@
         mr.GetPositiveIntParam('start'), mr.project_name, urls.PEOPLE_LIST,
         url_params=url_params)
 
-    offer_membership_editing = mr.perms.HasPerm(
-        permissions.EDIT_PROJECT, mr.auth.user_id, mr.project)
+    offer_membership_editing = permissions.CanEditProjectConfig(
+        mr, self.services)
 
     check_abandonment = permissions.ShouldCheckForAbandonment(mr)
 
@@ -154,8 +152,7 @@
 
   def ProcessFormData(self, mr, post_data):
     """Process the posted form."""
-    permit_edit = mr.perms.HasPerm(
-        permissions.EDIT_PROJECT, mr.auth.user_id, mr.project)
+    permit_edit = permissions.CanEditProjectConfig(mr, self.services)
     if not permit_edit:
       raise permissions.PermissionException(
           'User is not permitted to edit project membership')
@@ -217,9 +214,7 @@
       String URL to redirect the user to after processing.
     """
     # 1. Parse and validate user input.
-    remove_strs = post_data.getall('remove')
-    # TODO(crbug.com/monorail/10936): getall in Flask is getlist
-    # remove_strs = post_data.getlist('remove')
+    remove_strs = post_data.getlist('remove')
     logging.info('remove_strs = %r', remove_strs)
     remove_ids = set(
         self.services.user.LookupUserIDs(mr.cnxn, remove_strs).values())
@@ -236,8 +231,8 @@
     return framework_helpers.FormatAbsoluteURL(
         mr, urls.PEOPLE_LIST, saved=1, ts=int(time.time()))
 
-  # def GetPeopleListPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetPeopleListPage(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostPeopleListPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostPeopleListPage(self, **kwargs):
+    return self.handler(**kwargs)