1
1
from plone .autoform .form import AutoExtensibleForm
2
2
from plone .base import PloneMessageFactory as _
3
+ from plone .memoize .view import memoize
3
4
from plone .supermodel import model
5
+ from Products .CMFCore .permissions import ListPortalMembers
6
+ from Products .CMFCore .utils import getToolByName
4
7
from Products .Five .browser .pagetemplatefile import ViewPageTemplateFile
5
8
from z3c .form import button
6
9
from z3c .form import form
@@ -97,6 +100,32 @@ class MemberSearchForm(AutoExtensibleForm, form.Form):
97
100
98
101
submitted = False
99
102
103
+ @property
104
+ @memoize
105
+ def listing_allowed (self ):
106
+ """
107
+ Check if the user has the necessary "List Portal Members" permissions
108
+ to view the list of search results.
109
+ """
110
+ pm = getToolByName (self .context , "portal_membership" )
111
+ return pm .checkPermission (ListPortalMembers , self .context )
112
+
113
+ @property
114
+ def results (self ):
115
+ """
116
+ Retrieve, merge, and sort the list of results based on search criteria.
117
+
118
+ This is based on the methods previously defined in the
119
+ Products.PlonePAS.browser.search module.
120
+ """
121
+ # First of all check if we have the proper permissions
122
+ if not self .listing_allowed :
123
+ return []
124
+
125
+ view = self .context .restrictedTraverse ("@@pas_search" )
126
+ criteria = extractCriteriaFromRequest (self .request .form .copy ())
127
+ return view .searchUsers (sort_by = "fullname" , ** criteria )
128
+
100
129
@button .buttonAndHandler (_ ("label_search" , default = "Search" ), name = "search" )
101
130
def handleApply (self , action ):
102
131
request = self .request
@@ -108,7 +137,3 @@ def handleApply(self, action):
108
137
109
138
if request .get ("form.buttons.search" , None ):
110
139
self .submitted = True
111
-
112
- view = self .context .restrictedTraverse ("@@pas_search" )
113
- criteria = extractCriteriaFromRequest (self .request .form .copy ())
114
- self .results = view .searchUsers (sort_by = "fullname" , ** criteria )
0 commit comments