--- MPIWGWeb/MPIWGStaff.py 2008/08/26 16:04:25 1.10.2.51
+++ MPIWGWeb/MPIWGStaff.py 2009/04/17 14:29:13 1.10.2.66
@@ -7,8 +7,10 @@ from OFS.Folder import Folder
from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Products.PageTemplates.PageTemplate import PageTemplate
+from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
from Products.ZCatalog.CatalogPathAwareness import CatalogAware
from Products.versionedFile.extVersionedFile import extVersionedFileFolder
+from AccessControl import getSecurityManager
import os
import logging
@@ -20,7 +22,11 @@ from types import *
from AccessControl import ClassSecurityInfo
import time
import logging
+import email
+import re
+from OFS.Cache import Cacheable
+from MPIWGHelper import *
#ersetzt logging
def logger(txt,method,txt2):
"""logging"""
@@ -29,15 +35,7 @@ def logger(txt,method,txt2):
departmentList="Renn\nRheinberger\nDaston\nKlein\nSibum\nIT\nInstitut\nBibliothek"
-def getTemplate(self, tpName):
- """get a template file either form the instance or from the product"""
- ext=self.ZopeFind(self.aq_parent,obj_ids=[tpName])
- if ext:
- pt = getattr(self,ext[0][1].getId())
- else:
- pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/'+tpName)).__of__(self)
- assert(pt)
- return pt
+
def createNewDBEntry(self,publish_the_data,key,name,vorname,title,position,e_mail,e_mail_p,date_from,date_to,abteilung,heimat_inst,funded_by="",e_mail2="",txt="",txt_p="no",stay_at_mpiwg="",group="",web_object_created="no",current_work=""):
"""lege person in der datenbank an"""
@@ -53,8 +51,8 @@ def createNewDBEntry(self,publish_the_da
return False,"ERROR:key%s already exists"%key
#eintragen
- columnlist="""publish_the_data,key,last_name,first_name,title,status,e_mail,e_mail_p,date_from,date_to,department,home_inst,funded_by,e_mail2,date_stay_at_mpiwg,web_object_created,"group" """
- insertTuple=(publish_the_data,key,name,vorname,title,position,e_mail,e_mail_p,date_from,date_to,abteilung,heimat_inst,funded_by,e_mail2,stay_at_mpiwg,web_object_created,group)
+ columnlist="""publish_the_data,key,last_name,first_name,title,status,e_mail,e_mail_p,date_from,date_to,department,home_inst,funded_by,e_mail2,date_stay_at_mpiwg,web_object_created,"group",current_work,current_work_p """
+ insertTuple=(publish_the_data,key,name,vorname,title,position,e_mail,e_mail_p,date_from,date_to,abteilung,heimat_inst,funded_by,e_mail2,stay_at_mpiwg,web_object_created,group,current_work,"yes")
insert=[]
for element in insertTuple:
@@ -69,13 +67,13 @@ def createNewDBEntry(self,publish_the_da
self.ZSQLQuery(queryStr)
logging.info("QQQQ %s:"%queryStr)
#currentwork
- if not (current_work==""):
- queryStr="INSERT INTO current_work (key_main,current,publish) VALUES ('%s',%s,'%s')"%(key,self.ZSQLQuote(current_work),"yes")
+ #if not (current_work==""):
+ # queryStr="INSERT INTO current_work (key_main,current,publish) VALUES ('%s',%s,'%s')"%(key,self.ZSQLQuote(current_work),"yes")
- self.ZSQLQuery(queryStr)
+ # self.ZSQLQuery(queryStr)
return True,msg
-class MPIWGStaff(CatalogAware,ZSQLExtendFolder):
+class MPIWGStaff(CatalogAware,ZSQLExtendFolder,Cacheable):
"""Staff"""
meta_type="MPIWGStaff"
@@ -92,20 +90,37 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
addStr="&time=%s"
else:
addStr="?time=%s"
+
+ RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT')
+ logging.error(email.Utils.formatdate()+' GMT')
RESPONSE.redirect(url+addStr%timeStamp)
+ def getKeyUTF8(self):
+ """get db_key utf8"""
+ return utf8ify(self.getKey())
+
+ def setKey(self,key):
+ """set key"""
+ self.key=key
+
def getKey(self):
"""get database key"""
if hasattr(self,'key'):
- return self.key.lower()
+ #logging.error("SAVED KEY:%s"%self.key)
+ return unicodify(self.key.lower())
+ #return self.key.lower()
#fuer alt faelle ohne key
+ #logging.error("NEW KEY:%s"%(self.firstName+'_'+self.lastName).lower().replace(' ',''))
return (self.firstName+'_'+self.lastName).lower().replace(' ','')
- def getConnectionObj(self):#ueberschreibe connection id methode
-
- return getattr(self.de,self.de.connection_id)
-
+ def getConnectionObj(self):
+ """returns connection id (from root)"""
+ try:
+ root = self.getMPIWGRoot()
+ return root.getConnectionObj()
+ except:
+ return self.en.getConnectionObj()
def isPublished(self):
"""gib publications status aus der datenbank aus"""
key=self.getKey()
@@ -119,7 +134,7 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
return False
-
+
def updateDBEntry(self,publish_the_data,date_from,date_to,DBid=None,stay_at_mpiwg="",position="",abteilung=""):
"""zpddatedb"""
if not DBid:
@@ -148,7 +163,7 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
"""change PublicationSelectionMode"""
self.publicationSelectionMode=publicationSelectionMode
-
+ self.ZCacheable_invalidate()
if RESPONSE:
self.redirect(RESPONSE,"editPublications")
@@ -181,7 +196,7 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
def changeDownloads(self,cv_pdf=None,cv_publish=None,publications_pdf=None,publications_publish=None,RESPONSE=None):
""""change the downloadable files"""
-
+ self.ZCacheable_invalidate()
if not hasattr(self,'downloadableFiles'):
extFolder = extVersionedFileFolder()
@@ -284,8 +299,9 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
manage_options = Folder.manage_options+(
{'label':'Edit','action':'changeMPIWGStaffForm'},
{'label':'Change Publications Special','action':'changePublications_specialForm'},
- )
+ ) + Cacheable.manage_options
+ __manager_id = "ramCache"
def __init__(self,id, lastName,firstName,key):
"""init"""
self.id=id
@@ -300,16 +316,74 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
"""
return self.id
- def harvest_page(self):
+ def harvest_page_old(self,context=None):
"""geharvestete seite = verschlankte version von members_main"""
- pt = getTemplate(self, "harvest_members_main")
+ #pt = getTemplate(self, "harvest_members_main")
+
+ if not self.isPublished():
+ return ""
+ if not context:
+ context=self
+
+
+ ext=getattr(self,"harvest_members_main",None)
+ if ext:
+ return getattr(self,ext.getId())()
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','harvest_members_main')).__of__(context)
+
+
return pt()
+ def harvest_page(self):
+ """harvest"""
+ if not self.isPublished():
+ return ""
+ return getattr(self.en.staff.members,self.getId()).index_html()
+
+
def index_html(self):
"""show homepage"""
+
+ bound_names={}
+ request = self.REQUEST
+ if request is not None:
+ response = request.response
+ if not response.headers.has_key('content-type'):
+ response.setHeader('content-type', 'text/html')
+
+ security = getSecurityManager()
+ bound_names['user'] = security.getUser()
+
+ # Retrieve the value from the cache.
+ keyset = None
+ if self.ZCacheable_isCachingEnabled():
+
+ # Prepare a cache key.
+ keyset = {'here': self}
+
+ result = self.ZCacheable_get(keywords=keyset)
+
+ if result is not None:
+ # Got a cached value.
+ return result
+
pt = getTemplate(self, "members_main")
- return pt()
+ # Execute the template in a new security context.
+ security.addContext(self)
+
+ try:
+ result = pt.pt_render(extra_context=bound_names)
+ if keyset is not None:
+ # Store the result in the cache.
+ self.ZCacheable_set(result, keywords=keyset)
+
+ return result
+ finally:
+ security.removeContext(self)
+
+
def changePublications_specialForm(self):
"""Priority publications manual field"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changePublications_special.zpt')).__of__(self)
@@ -317,6 +391,7 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
def changePublications_special(self,usePublicationsSpecial=None,specialPublicationsField=None,RESPONSE=None):
"""change publications special params"""
+ self.ZCacheable_invalidate()
if usePublicationsSpecial:
self.usePublicationsSpecial=True
@@ -352,6 +427,7 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
security.declareProtected('View management screens','changeMPIWGStaff')
def changeMPIWGStaff(self,lastName,firstName,key=None,RESPONSE=None):
"""change it"""
+ self.ZCacheable_invalidate()
self.title="%s, %s"%(lastName,firstName)
self.lastName=lastName
self.firstName=firstName
@@ -371,6 +447,9 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
# self.REQUEST.RESPONSE.redirect(redURL)
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff.zpt')).__of__(self)
+
+
+ logging.error("XX:"+email.Utils.formatdate().split("-")[0]+'GMT')
return pt()
mainEditFile=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff_main.zpt'))
@@ -385,6 +464,33 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
return style
+ def getLabel(self):
+ """returns a label for this object"""
+ return self.title
+
+ def getBreadcrumbs(self):
+ """return list of breadcrumbs from here to the root"""
+ crumbs = []
+ # skip direct parent Folder /members/
+ parent = self.aq_parent.aq_parent
+ # get parents breadcrumbs
+ logging.debug("getbreadcrumbs-: title=%s self=%s parent=%s"%(self.title, repr(self), repr(parent)))
+ if hasattr(parent, 'getBreadcrumbs'):
+ logging.debug("getbreadcrumbs: recurse to %s"%parent)
+ crumbs = parent.getBreadcrumbs()
+
+ # try to get acquisition URL from parent
+ if hasattr(parent, 'absolute_url'):
+ baseUrl = "%s/%s/"%(parent.absolute_url(), 'members')
+ else:
+ baseUrl = "/en/staff/members/"
+
+ # add this
+ crumbs.append((self.getLabel(), baseUrl+self.getId(), self))
+
+ return crumbs
+
+
def changeCurrentWork(self,current_work,key,publish="yes",RESPONSE=None):
"""change current work"""
@@ -395,13 +501,14 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
query="UPDATE personal_www SET current_work_p =%s WHERE key='%s'"
self.ZSQLQuery(query%(self.ZSQLQuote(publish),key))
-
+ self.ZCacheable_invalidate()
if RESPONSE:
self.redirect(RESPONSE,"edit")
security.declareProtected('View management screens','changeResearch')
def changeResearch(self,noredirect=None,RESPONSE=None):
"""change the research entries"""
+ self.ZCacheable_invalidate()
newEntries={}
key_main=self.REQUEST.form['key_main']
@@ -460,7 +567,7 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
return pt()
query="UPDATE personal_www SET cv =%s WHERE oid='%s'"
-
+ self.ZCacheable_invalidate()
self.ZSQLQuery(query%(self.ZSQLQuote(cv),oid))
if RESPONSE:
@@ -482,12 +589,12 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
def editProfile(self,oid=None,RESPONSE=None, kupu=None, preview=None):
"""edit Profile, new entry replaces CD, current work and research interests"""
-
+
if (not oid):
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editProfile.zpt')).__of__(self)
return pt()
-
+ self.ZCacheable_invalidate()
if preview:
@@ -525,18 +632,18 @@ class MPIWGStaff(CatalogAware,ZSQLExtend
ret=""
founds=self.ZSQLInlineSearch(_table='research_interest',key_main=person.key)
if founds:
- ret="Research interests:
"
+ ret="
Research interests:
Current work:
Curriculum Vitae: