changeset 186:3ea224968f95

fix traversal to MPIWGStaffMember objects.
author casties
date Fri, 14 Jun 2013 15:29:57 +0200
parents a8d5ba6729f3
children 71c2d76f09b5
files MPIWGRoot.py MPIWGStaff.py css/edit.css zpt/updatePersonalwww_check.zpt
diffstat 4 files changed, 42 insertions(+), 62 deletions(-) [+]
line wrap: on
line diff
--- a/MPIWGRoot.py	Fri Jun 14 15:04:35 2013 +0200
+++ b/MPIWGRoot.py	Fri Jun 14 15:29:57 2013 +0200
@@ -296,7 +296,7 @@
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','showNewDBEntries.zpt')).__of__(self)
         return pt(newEntries=res)
    
-    def createNewStaffObjects(self,RESPONSE):
+    def _createNewStaffObjects(self,RESPONSE):
         """create new staff object"""        
         memberFolder=getattr(self,'members')
         args=self.REQUEST.form
@@ -416,11 +416,10 @@
       
         if news and (len(news)>0):
             ret+="<h2>Hinzugef&uuml;gt</h2>"
-            ret+="<p>Neueintr&auml;ge erscheinen erst auf der Homepage, wenn ihnen eine e-mail Adresse zugeordnet wurde.</p>"
             ret+="<ul>"
             
         for new in news:
-            if args.has_key(self.urlQuote(new.encode('utf-8'))): # entry was selected
+            if args.has_key(new.encode('utf-8')): # entry was selected
                 result,msg=self.generateNewPersonEntry(resultSet[new])
                 if not result:
                     logging.error("Error (generateNewPersonEntry) %s"%msg)
--- 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) 
--- a/css/edit.css	Fri Jun 14 15:04:35 2013 +0200
+++ b/css/edit.css	Fri Jun 14 15:29:57 2013 +0200
@@ -1,5 +1,10 @@
 @CHARSET "UTF-8";
 
+body {
+    font-family: Verdana, Arial, sans-serif;
+    font-size: 12px;
+}
+
 .title {
     color: #010658;
 }
--- a/zpt/updatePersonalwww_check.zpt	Fri Jun 14 15:04:35 2013 +0200
+++ b/zpt/updatePersonalwww_check.zpt	Fri Jun 14 15:29:57 2013 +0200
@@ -12,7 +12,7 @@
 					<span tal:replace="python:resultSet[new]['last_name']">last</span> 
 				</td>	
 				<td>
-					<input type="checkbox" tal:attributes="name python:here.urlQuote(new.encode('utf-8'))" checked="True" value="new"/>
+					<input type="checkbox" tal:attributes="name python:new.encode('utf-8')" checked="True" value="new"/>
 				</td>
 			</tr>
 		</table>