diff --git a/ZScoDoc.py b/ZScoDoc.py index 59a26a6..d7f709a 100644 --- a/ZScoDoc.py +++ b/ZScoDoc.py @@ -273,10 +273,26 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp security.declareProtected("View", "list_depts") - def list_depts(self, REQUEST=None): - """List departments folders - (returns a list of Zope folders containing a ZScolar instance) + def list_depts(self, viewable=True, format=None, REQUEST=None): + """List departments + If viewable, list only depts viewable the current user. """ + authuser = REQUEST.AUTHENTICATED_USER + viewable = int(viewable) + return scu.sendResult( + REQUEST, + [ + d.id + for d in self._list_depts() + if (not viewable) or authuser.has_permission(ScoView, d.Scolarite) + ], + name="depts", + format=format, + ) + + def _list_depts(self, REQUEST=None): # not published + # List departments folders + # (returns a list of Zope folders containing a ZScolar instance) folders = self.objectValues("Folder") # select folders with Scolarite object: r = [] @@ -327,7 +343,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp if e: return e - if not force and DeptId not in [x.id for x in self.list_depts()]: + if not force and DeptId not in [x.id for x in self._list_depts()]: raise ValueError("nom de departement invalide") self.manage_delObjects(ids=[DeptId]) @@ -391,7 +407,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp def index_html(self, REQUEST=None, message=None): """Top level page for ScoDoc""" authuser = REQUEST.AUTHENTICATED_USER - deptList = self.list_depts() + deptList = self._list_depts() self._fix_users_folder() # fix our exUserFolder isAdmin = not self._check_admin_perm(REQUEST) try: @@ -406,7 +422,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp # Si l'URL indique que l'on est dans un folder, affiche page login du departement try: deptfoldername = REQUEST.URL0.split("ScoDoc")[1].split("/")[1] - if deptfoldername in [x.id for x in self.list_depts()]: + if deptfoldername in [x.id for x in self._list_depts()]: return self.index_dept(deptfoldername=deptfoldername, REQUEST=REQUEST) except: pass @@ -453,7 +469,7 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp dest_folder = "/Scolarite" else: dest_folder = "" - for deptFolder in self.list_depts(): + for deptFolder in self._list_depts(): if authuser.has_permission(ScoView, deptFolder.Scolarite): link_cls = "link_accessible" else: @@ -868,7 +884,7 @@ subversion: %(svn_version)s % self.absolute_url(), ] - deptList = [x.id for x in self.list_depts()] # definis dans Zope + deptList = [x.id for x in self._list_depts()] # definis dans Zope deptIds = set(self._list_depts_ids()) # definis sur le filesystem existingDepts = set(deptList) addableDepts = deptIds - existingDepts @@ -897,7 +913,7 @@ subversion: %(svn_version)s