|
|
| version 1.10.2.55, 2008/09/02 12:00:06 | version 1.10.2.80, 2012/01/09 10:36:48 |
|---|---|
| Line 7 from OFS.Folder import Folder | Line 7 from OFS.Folder import Folder |
| from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder | from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder |
| from Products.PageTemplates.PageTemplateFile import PageTemplateFile | from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
| from Products.PageTemplates.PageTemplate import PageTemplate | from Products.PageTemplates.PageTemplate import PageTemplate |
| from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate | |
| from Products.ZCatalog.CatalogPathAwareness import CatalogAware | from Products.ZCatalog.CatalogPathAwareness import CatalogAware |
| from Products.versionedFile.extVersionedFile import extVersionedFileFolder | from Products.versionedFile.extVersionedFile import extVersionedFileFolder |
| from AccessControl import getSecurityManager | |
| import os | import os |
| import logging | import logging |
| Line 21 from AccessControl import ClassSecurityI | Line 23 from AccessControl import ClassSecurityI |
| import time | import time |
| import logging | import logging |
| import email | import email |
| import re | |
| from OFS.Cache import Cacheable | |
| import urllib2 | |
| from MPIWGHelper import * | from MPIWGHelper import * |
| #ersetzt logging | #ersetzt logging |
| def logger(txt,method,txt2): | def logger(txt,method,txt2): |
| Line 28 def logger(txt,method,txt2): | Line 34 def logger(txt,method,txt2): |
| logging.info(txt+ txt2) | logging.info(txt+ txt2) |
| departmentList="Renn\nRheinberger\nDaston\nKlein\nSibum\nIT\nInstitut\nBibliothek" | departmentList="Renn\nRheinberger\nDaston\nKlein\nSibum\nIT\nInstitut\nBibliothek" |
| coneService="http://127.0.0.1:8280/MetaDataManagerRestlet/cone/" # kann in MPIWGRoot konfiguriert werden. | |
| 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=""): | def createNewDBEntry(self,publish_the_data,key,name,vorname,titles_new,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""" | """lege person in der datenbank an""" |
| if date_to=="": # wenn date_to leer | if date_to=="": # wenn date_to leer |
| Line 54 def createNewDBEntry(self,publish_the_da | Line 52 def createNewDBEntry(self,publish_the_da |
| return False,"ERROR:key%s already exists"%key | return False,"ERROR:key%s already exists"%key |
| #eintragen | #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" """ | columnlist="""publish_the_data,key,last_name,first_name,titles_new,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) | insertTuple=(publish_the_data,key,name,vorname,titles_new,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=[] | insert=[] |
| for element in insertTuple: | for element in insertTuple: |
| Line 70 def createNewDBEntry(self,publish_the_da | Line 68 def createNewDBEntry(self,publish_the_da |
| self.ZSQLQuery(queryStr) | self.ZSQLQuery(queryStr) |
| logging.info("QQQQ %s:"%queryStr) | logging.info("QQQQ %s:"%queryStr) |
| #currentwork | #currentwork |
| if not (current_work==""): | #if not (current_work==""): |
| queryStr="INSERT INTO current_work (key_main,current,publish) VALUES ('%s',%s,'%s')"%(key,self.ZSQLQuote(current_work),"yes") | # 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 | return True,msg |
| class MPIWGStaff(CatalogAware,ZSQLExtendFolder): | class MPIWGStaff(CatalogAware,ZSQLExtendFolder,Cacheable): |
| """Staff""" | """Staff""" |
| meta_type="MPIWGStaff" | meta_type="MPIWGStaff" |
| default_catalog='MembersCatalog' | default_catalog='MembersCatalog' |
| departmentList=departmentList | departmentList=departmentList |
| _v_cone=None; | |
| security=ClassSecurityInfo() | security=ClassSecurityInfo() |
| def redirect(self,RESPONSE,url): | def redirect(self,RESPONSE,url): |
| Line 100 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 99 class MPIWGStaff(CatalogAware,ZSQLExtend |
| def getKeyUTF8(self): | def getKeyUTF8(self): |
| """get db_key utf8""" | """get db_key utf8""" |
| logging.debug("KEY - MPIWGStaff:"+self.getKey()) | |
| logging.debug("KEY - MPIWGStaff:"+utf8ify(self.getKey())) | |
| return utf8ify(self.getKey()) | return utf8ify(self.getKey()) |
| def setKey(self,key): | |
| """set key""" | |
| self.key=key | |
| def getKey(self): | def getKey(self): |
| """get database key""" | """get database key""" |
| if hasattr(self,'key'): | if hasattr(self,'key'): |
| Line 113 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 119 class MPIWGStaff(CatalogAware,ZSQLExtend |
| #logging.error("NEW KEY:%s"%(self.firstName+'_'+self.lastName).lower().replace(' ','')) | #logging.error("NEW KEY:%s"%(self.firstName+'_'+self.lastName).lower().replace(' ','')) |
| return (self.firstName+'_'+self.lastName).lower().replace(' ','') | return (self.firstName+'_'+self.lastName).lower().replace(' ','') |
| def getConnectionObj(self):#ueberschreibe connection id methode | def getConnectionObj(self): |
| """returns connection id (from root)""" | |
| return getattr(self.de,self.de.connection_id) | try: |
| root = self.getMPIWGRoot() | |
| return root.getConnectionObj() | |
| except: | |
| return self.en.getConnectionObj() | |
| def isPublished(self): | def isPublished(self): |
| """gib publications status aus der datenbank aus""" | """gib publications status aus der datenbank aus""" |
| Line 159 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 169 class MPIWGStaff(CatalogAware,ZSQLExtend |
| """change PublicationSelectionMode""" | """change PublicationSelectionMode""" |
| self.publicationSelectionMode=publicationSelectionMode | self.publicationSelectionMode=publicationSelectionMode |
| self.ZCacheable_invalidate() | |
| if RESPONSE: | if RESPONSE: |
| self.redirect(RESPONSE,"<Publications") | self.redirect(RESPONSE,"editPublications") |
| def downloadCV(self,RESPONSE): | def downloadCV(self,RESPONSE): |
| Line 192 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 202 class MPIWGStaff(CatalogAware,ZSQLExtend |
| def changeDownloads(self,cv_pdf=None,cv_publish=None,publications_pdf=None,publications_publish=None,RESPONSE=None): | def changeDownloads(self,cv_pdf=None,cv_publish=None,publications_pdf=None,publications_publish=None,RESPONSE=None): |
| """"change the downloadable files""" | """"change the downloadable files""" |
| self.ZCacheable_invalidate() | |
| if not hasattr(self,'downloadableFiles'): | if not hasattr(self,'downloadableFiles'): |
| extFolder = extVersionedFileFolder() | extFolder = extVersionedFileFolder() |
| Line 231 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 241 class MPIWGStaff(CatalogAware,ZSQLExtend |
| """publish the image??, default no""" | """publish the image??, default no""" |
| return getattr(self,'publishImage','no') | return getattr(self,'publishImage','no') |
| def updateImage(self,file,publishImage,rename=None,RESPONSE=None): | def updateImage(self,publishImage,file=None,rename=None,RESPONSE=None): |
| """update image""" | """update image""" |
| if file and not(file.filename==""): | if file and not(file.filename==""): |
| Line 295 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 305 class MPIWGStaff(CatalogAware,ZSQLExtend |
| manage_options = Folder.manage_options+( | manage_options = Folder.manage_options+( |
| {'label':'Edit','action':'changeMPIWGStaffForm'}, | {'label':'Edit','action':'changeMPIWGStaffForm'}, |
| {'label':'Change Publications Special','action':'changePublications_specialForm'}, | {'label':'Change Publications Special','action':'changePublications_specialForm'}, |
| ) | ) + Cacheable.manage_options |
| __manager_id = "ramCache" | |
| def __init__(self,id, lastName,firstName,key): | def __init__(self,id, lastName,firstName,key): |
| """init""" | """init""" |
| self.id=id | self.id=id |
| Line 311 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 322 class MPIWGStaff(CatalogAware,ZSQLExtend |
| """ | """ |
| return self.id | return self.id |
| def harvest_page(self): | def getConeUrl(self): |
| """gibt coneURL zurueck""" | |
| self.coneService=getattr(self, "coneServiceURL",coneService) | |
| logging.debug("coneservice:"+self.coneService) | |
| if self._v_cone==None: | |
| try: | |
| cone = urllib2.urlopen(self.coneService+self.getPersonID()) | |
| self._v_cone=cone.read() | |
| except: | |
| return None | |
| return self._v_cone | |
| def harvest_page_old(self,context=None): | |
| """geharvestete seite = verschlankte version von members_main""" | """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() | return pt() |
| def index_html(self): | def harvest_page(self,mode="normal"): |
| """harvest""" | |
| if not self.isPublished(): | |
| return | |
| st = getattr(self.en.staff.members,self.getId()).index_html(mode) | |
| templates = self.en.getHarvestCache() | |
| #templates = getattr(self,'getHarvestCache',self.en.getHarvestCache)() | |
| rendered = st | |
| templates[self.absolute_url()]=rendered | |
| return rendered | |
| def index_html(self,mode="normal"): | |
| """show homepage""" | """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 | |
| # look for individual page | |
| if self.hasObject("index.html"): | |
| pt = getattr(self, "index.html") | |
| # else use template | |
| else: | |
| if mode=="slim": | |
| pt = getTemplate(self, "members_main_slim") | |
| else: | |
| pt = getTemplate(self, "members_main") | 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): | def changePublications_specialForm(self): |
| """Priority publications manual field""" | """Priority publications manual field""" |
| Line 328 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 431 class MPIWGStaff(CatalogAware,ZSQLExtend |
| def changePublications_special(self,usePublicationsSpecial=None,specialPublicationsField=None,RESPONSE=None): | def changePublications_special(self,usePublicationsSpecial=None,specialPublicationsField=None,RESPONSE=None): |
| """change publications special params""" | """change publications special params""" |
| self.ZCacheable_invalidate() | |
| if usePublicationsSpecial: | if usePublicationsSpecial: |
| self.usePublicationsSpecial=True | self.usePublicationsSpecial=True |
| Line 363 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 467 class MPIWGStaff(CatalogAware,ZSQLExtend |
| security.declareProtected('View management screens','changeMPIWGStaff') | security.declareProtected('View management screens','changeMPIWGStaff') |
| def changeMPIWGStaff(self,lastName,firstName,key=None,RESPONSE=None): | def changeMPIWGStaff(self,lastName,firstName,key=None,RESPONSE=None): |
| """change it""" | """change it""" |
| self.ZCacheable_invalidate() | |
| self.title="%s, %s"%(lastName,firstName) | self.title="%s, %s"%(lastName,firstName) |
| self.lastName=lastName | self.lastName=lastName |
| self.firstName=firstName | self.firstName=firstName |
| Line 384 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 489 class MPIWGStaff(CatalogAware,ZSQLExtend |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff.zpt')).__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff.zpt')).__of__(self) |
| logging.error("XX:"+email.Utils.formatdate().split("-")[0]+'GMT') | logging.debug("XX:"+email.Utils.formatdate().split("-")[0]+'GMT') |
| return pt() | return pt() |
| mainEditFile=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff_main.zpt')) | mainEditFile=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff_main.zpt')) |
| Line 436 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 541 class MPIWGStaff(CatalogAware,ZSQLExtend |
| query="UPDATE personal_www SET current_work_p =%s WHERE key='%s'" | query="UPDATE personal_www SET current_work_p =%s WHERE key='%s'" |
| self.ZSQLQuery(query%(self.ZSQLQuote(publish),key)) | self.ZSQLQuery(query%(self.ZSQLQuote(publish),key)) |
| self.ZCacheable_invalidate() | |
| if RESPONSE: | if RESPONSE: |
| self.redirect(RESPONSE,"edit") | self.redirect(RESPONSE,"edit") |
| security.declareProtected('View management screens','changeResearch') | security.declareProtected('View management screens','changeResearch') |
| def changeResearch(self,noredirect=None,RESPONSE=None): | def changeResearch(self,noredirect=None,RESPONSE=None): |
| """change the research entries""" | """change the research entries""" |
| self.ZCacheable_invalidate() | |
| newEntries={} | newEntries={} |
| key_main=self.REQUEST.form['key_main'] | key_main=self.REQUEST.form['key_main'] |
| Line 501 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 607 class MPIWGStaff(CatalogAware,ZSQLExtend |
| return pt() | return pt() |
| query="UPDATE personal_www SET cv =%s WHERE oid='%s'" | query="UPDATE personal_www SET cv =%s WHERE oid='%s'" |
| self.ZCacheable_invalidate() | |
| self.ZSQLQuery(query%(self.ZSQLQuote(cv),oid)) | self.ZSQLQuery(query%(self.ZSQLQuote(cv),oid)) |
| if RESPONSE: | if RESPONSE: |
| Line 512 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 618 class MPIWGStaff(CatalogAware,ZSQLExtend |
| """get the profile""" | """get the profile""" |
| self.REQUEST.RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT') | self.REQUEST.RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT') |
| founds=self.ZSQLInlineSearchU(_table='personal_www',key=self.getKey()) | founds=self.ZSQLInlineSearchU(_table='personal_www',key=self.getKeyUTF8()) |
| html="""<html><body>%s</body></html>""" | html="""<html><body>%s</body></html>""" |
| if founds.profile and founds.profile != "": | if founds.profile and founds.profile != "": |
| Line 528 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 634 class MPIWGStaff(CatalogAware,ZSQLExtend |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editProfile.zpt')).__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editProfile.zpt')).__of__(self) |
| return pt() | return pt() |
| self.ZCacheable_invalidate() | |
| if preview: | if preview: |
| Line 564 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 670 class MPIWGStaff(CatalogAware,ZSQLExtend |
| """erzeugt ein automatisches Profil aus den alten Eintraegen CV, Current work, und research interests""" | """erzeugt ein automatisches Profil aus den alten Eintraegen CV, Current work, und research interests""" |
| ret="" | ret="" |
| #founds=self.ZSQLInlineSearch(_table='research_interest',key_main=person.getKeyUTF8()) | |
| founds=self.ZSQLInlineSearch(_table='research_interest',key_main=person.key) | founds=self.ZSQLInlineSearch(_table='research_interest',key_main=person.key) |
| if founds: | if founds: |
| ret="<p class=\"bio_section_header\">Research interests: </p><br/>" | ret="<p class=\"bio_section_header\">Research interests: </p><br/>" |
| Line 572 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 679 class MPIWGStaff(CatalogAware,ZSQLExtend |
| if (person.current_work) and (not person.current_work==""): | if (person.current_work) and (not person.current_work==""): |
| ret="<p class=\"bio_section_header\">Current work: </p><br/>" | ret+="<p class=\"bio_section_header\">Current work: </p><br/>" |
| ret+=person.current_work+"<br/>" | ret+=person.current_work+"<br/>" |
| if (person.cv) and (not person.cv==""): | |
| ret+="<br/>" | ret+="<p class=\"bio_section_header\">Curriculum Vitae: </p><br/>" |
| ret+=self.formatAscii(person.cv) | ret+=self.formatAscii(person.cv) |
| return ret | return ret |
| Line 602 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 709 class MPIWGStaff(CatalogAware,ZSQLExtend |
| if (not oid): | if (not oid): |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editAwards.zpt')).__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editAwards.zpt')).__of__(self) |
| return pt() | return pt() |
| self.ZCacheable_invalidate() | |
| query="UPDATE personal_www SET awards =%s WHERE oid='%s'" | query="UPDATE personal_www SET awards =%s WHERE oid='%s'" |
| self.ZSQLQuery(query%(self.ZSQLQuote(awards),oid)) | self.ZSQLQuery(query%(self.ZSQLQuote(awards),oid)) |
| Line 633 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 740 class MPIWGStaff(CatalogAware,ZSQLExtend |
| security.declareProtected('View management screens','editMainData') | security.declareProtected('View management screens','editMainData') |
| def editMainData(self,REQUEST=None,RESPONSE=None): | def editMainData(self,REQUEST=None,RESPONSE=None): |
| """edit main data""" | """edit main data""" |
| self.ZCacheable_invalidate() | |
| argv=REQUEST.form | argv=REQUEST.form |
| if not argv.has_key('last_name'): | if not argv.has_key('last_name'): |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMainData.zpt')).__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMainData.zpt')).__of__(self) |
| return pt() | return pt() |
| else: | else: |
| self.ZSQLChange(argv,_table="personal_www",_identify="key=%s"%self.getKey(),USE_FORM="yes") | self.ZSQLChange(argv,_table="personal_www",_identify="lower(key)=%s"%utf8ify(self.getKey().lower()),USE_FORM="yes") |
| if RESPONSE: | if RESPONSE: |
| self.redirect(RESPONSE,"editMainData") | self.redirect(RESPONSE,"editMainData") |
| Line 698 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 805 class MPIWGStaff(CatalogAware,ZSQLExtend |
| def changeSortingMode(self,sortingMode,RESPONSE=None,REQUEST=None): | def changeSortingMode(self,sortingMode,RESPONSE=None,REQUEST=None): |
| """change sorting mode""" | """change sorting mode""" |
| self.ZCacheable_invalidate() | |
| self.sortingMode=sortingMode | self.sortingMode=sortingMode |
| if RESPONSE and REQUEST: | if RESPONSE and REQUEST: |
| Line 723 class MPIWGStaff(CatalogAware,ZSQLExtend | Line 831 class MPIWGStaff(CatalogAware,ZSQLExtend |
| def changePublications(self,RESPONSE=None): | def changePublications(self,RESPONSE=None): |
| """change the publication list""" | """change the publication list""" |
| self.changeResearch(noredirect=True) | self.changeResearch(noredirect=True) |
| self.ZCacheable_invalidate() | |
| #self.updatePublicationDB(personId=self.getDBId()) | #self.updatePublicationDB(personId=self.getDBId()) |
| self.redirect(RESPONSE,self.REQUEST['HTTP_REFERER']) | self.redirect(RESPONSE,self.REQUEST['HTTP_REFERER']) |