Mercurial > hg > MPIWGWeb
diff MPIWGStaff.py @ 186:3ea224968f95
fix traversal to MPIWGStaffMember objects.
author | casties |
---|---|
date | Fri, 14 Jun 2013 15:29:57 +0200 |
parents | a8d5ba6729f3 |
children | 71c2d76f09b5 |
line wrap: on
line diff
--- a/MPIWGStaff.py Fri Jun 14 15:04:35 2013 +0200 +++ b/MPIWGStaff.py Fri Jun 14 15:29:57 2013 +0200 @@ -5,6 +5,10 @@ from OFS.Folder import Folder from Products.PageTemplates.PageTemplateFile import PageTemplateFile +from zope.interface import implements +from zope.publisher.interfaces import IPublishTraverse +from ZPublisher.BaseRequest import DefaultPublishTraverse + from AccessControl import ClassSecurityInfo from App.class_init import InitializeClass from App.ImageFile import ImageFile @@ -37,6 +41,7 @@ class MPIWGStaffFolder(ZDBInterfaceFolder): """Folder of staff objects""" + implements(IPublishTraverse) meta_type="MPIWGStaffFolder" security=ClassSecurityInfo() @@ -52,63 +57,24 @@ # hook into traversal to create folder of virtual staff objects # like /members/$username/index_html # - def __before_publishing_traverse__(self, object, request): - stack = request.TraversalRequestNameStack - logging.debug("MPIWGStaffFolder: traverse stack=%s self=%s"%(repr(stack),repr(self))) + def publishTraverse(self, request, name): + """change the traversal""" + # get stored path + logging.debug("publishtraverse: name=%s"%(name)) - # TODO: should we do more checks? - if stack and len(stack) > 0: - try: - # id is the first path component - id = stack[-1] - logging.debug(id) - - member = self.getMember(username=id) - if member is not None: - member = member.__of__(self) - request.set('MPIWGStaffMember', member) - stack.pop(-1) + # try name as username + member = self.getMember(username=name) + if member is not None: + # traverse to MPIWGStaffMember object + member = member.__of__(self) + return member + + # use default traverser + tr = DefaultPublishTraverse(self, request) + ob = tr.publishTraverse(request, name) + return ob + - #weitere parameter - if len(stack)> 0: - mode = stack[-1] - request.set('MPIWGStaffMode', mode) - stack.pop(-1) - - - except (IndexError, ValueError): - # missing context or not an integer id; perhaps some URL hacking going on? - logging.error("error traversing user id!") - raise Redirect(self.absolute_url()) # redirects to `/members`, adjust as needed - - - - - def index_html(self,REQUEST,RESPONSE): - """show homepage""" - logging.debug("MPIWGStaffFolder: index_html!") - member = REQUEST.get('MPIWGStaffMember', None) - mode = REQUEST.get('MPIWGStaffMode', None) - if member is not None: - if mode is not None: - return member.execute(mode,REQUEST); - - logging.debug("member: key=%s"%(member.getKey())) - pt = None - try: - # get template /template/member_index_html - pt = getattr(self.template, 'member_index_html', None) - except: - logging.error("No template /template/member_index_html") - # TODO: error page? - return "No template /template/member_index_html" - - if pt is not None: - return pt(member=member) - - return REQUEST - - def getMember(self, username=None, key=None): """returns a MPIWGStaffMember object if the username exists""" member = None @@ -287,6 +253,17 @@ self.folder = folder self.content = dbresult + + def index_html(self, REQUEST, RESPONSE): + """show homepage""" + # get template /template/member_index_html (with acquisition) + pt = getattr(self.template, 'member_index_html', None) + if pt is not None: + return pt(member=self) + + return "No template /template/member_index_html" + + def isValid(self): """returns if this member exists""" return len(self.content) > 0 @@ -433,9 +410,6 @@ security.declareProtected('View management screens','edit') def edit(self,REQUEST=None): """Edit the basic information""" - - - if REQUEST: argv=REQUEST.form @@ -901,4 +875,6 @@ return ret +# initialize security +InitializeClass(MPIWGStaffFolder) InitializeClass(MPIWGStaffMember)