Annotation of MPIWGWeb/MPIWGStaff.py, revision 1.10.2.87

1.1       dwinter     1: """This file contains the classes for the organization of the staff"""
1.10.2.3  dwinter     2: # TODO: pruefe ob die id der einzelnen tabellen, wie id in publications noch benutzt werden
                      3: # TODO: pruefe ob die bibliographischen felder in publications noch benutzt werden
1.10.2.5  dwinter     4: # TODO: wird username gebraucht?
1.10.2.3  dwinter     5: 
1.1       dwinter     6: from OFS.Folder import Folder
1.3       dwinter     7: from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
1.1       dwinter     8: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                      9: from Products.PageTemplates.PageTemplate import PageTemplate
1.10.2.62  dwinter    10: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
1.9       dwinter    11: from Products.ZCatalog.CatalogPathAwareness import CatalogAware
1.10.2.41  dwinter    12: from Products.versionedFile.extVersionedFile import extVersionedFileFolder
1.10.2.62  dwinter    13: from AccessControl import getSecurityManager
1.10.2.41  dwinter    14: 
1.6       casties    15: import os
1.10.2.33  dwinter    16: import logging
1.10.2.2  dwinter    17: import bibliography
1.10.2.51  dwinter    18: import email
1.6       casties    19: from Globals import package_home
1.10.2.2  dwinter    20: from Products.PythonScripts.standard import sql_quote
1.10.2.3  dwinter    21: from types import *
1.10.2.10  dwinter    22: from AccessControl import ClassSecurityInfo
1.10.2.50  dwinter    23: import time
1.10.2.33  dwinter    24: import logging
1.10.2.52  dwinter    25: import email
1.10.2.56  dwinter    26: import re
1.10.2.60  dwinter    27: from OFS.Cache import Cacheable
1.10.2.77  dwinter    28: import urllib2
1.10.2.81  dwinter    29: import transaction
1.10.2.83  dwinter    30: import SrvTxtUtils
                     31: 
1.10.2.55  dwinter    32: from MPIWGHelper import *
1.10.2.33  dwinter    33: #ersetzt logging
                     34: def logger(txt,method,txt2):
                     35:     """logging""" 
                     36:     logging.info(txt+ txt2)
1.10.2.16  dwinter    37: 
1.10.2.5  dwinter    38: departmentList="Renn\nRheinberger\nDaston\nKlein\nSibum\nIT\nInstitut\nBibliothek"
1.10.2.78  dwinter    39: coneService="http://127.0.0.1:8280/MetaDataManagerRestlet/cone/" # kann in MPIWGRoot konfiguriert werden.
1.6       casties    40: 
1.10.2.63  dwinter    41: 
1.1       dwinter    42: 
1.10.2.67  dwinter    43: 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=""):
1.10.2.33  dwinter    44:         """lege person in der datenbank an"""
                     45: 
                     46:         if date_to=="": # wenn date_to leer
                     47:              date_to="date_none"
                     48:         
                     49:         if date_from=="": # wenn date_fromleer
                     50:              date_from="date_none"
                     51:         msg=""
                     52:         #test ob id schon existiert
                     53:         if self.ZSQLQuery("select key from personal_www where key='%s'"%id):
                     54:             return False,"ERROR:key%s already exists"%key
                     55:         
                     56:         #eintragen
1.10.2.67  dwinter    57:         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 """
                     58:         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")
1.10.2.33  dwinter    59:         
                     60:         insert=[]
                     61:         for element in insertTuple:
                     62:             if element=="date_none": # date_none eintrag wird zu null uebersetzt
                     63:                 insert.append('null')
                     64:             else:
                     65:                 insert.append("%s"%self.ZSQLQuote(element))
                     66:             
                     67:         insertStr=",".join(insert)
                     68:         queryStr="INSERT INTO personal_www (%s) VALUES (%s)"%(columnlist,insertStr)
                     69:         self.ZSQLQuery("SET DATESTYLE TO 'German'")
                     70:         self.ZSQLQuery(queryStr)
1.10.2.39  dwinter    71:         logging.info("QQQQ %s:"%queryStr)
1.10.2.33  dwinter    72:         #currentwork
1.10.2.57  dwinter    73:         #if not (current_work==""):
                     74:         #    queryStr="INSERT INTO current_work (key_main,current,publish) VALUES ('%s',%s,'%s')"%(key,self.ZSQLQuote(current_work),"yes")
1.10.2.33  dwinter    75: 
1.10.2.57  dwinter    76:         #  self.ZSQLQuery(queryStr)
1.10.2.33  dwinter    77:         
                     78:         return True,msg
1.10.2.60  dwinter    79: class MPIWGStaff(CatalogAware,ZSQLExtendFolder,Cacheable):
1.1       dwinter    80:     """Staff"""
                     81: 
                     82:     meta_type="MPIWGStaff"
1.9       dwinter    83:     default_catalog='MembersCatalog'
1.10.2.5  dwinter    84:     departmentList=departmentList
1.10.2.85  dwinter    85:     #_v_cone=None;
1.10.2.10  dwinter    86:     security=ClassSecurityInfo()
1.10.2.5  dwinter    87:     
1.10.2.50  dwinter    88:     def redirect(self,RESPONSE,url):
                     89:         """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen"""
                     90:         
                     91:         timeStamp=time.time()
                     92:         
                     93:         if url.find("?")>-1: #giebt es schon parameter
                     94:             addStr="&time=%s"
                     95:         else:
                     96:             addStr="?time=%s"
1.10.2.52  dwinter    97:             
                     98:         RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT')
                     99:         logging.error(email.Utils.formatdate()+' GMT')
1.10.2.50  dwinter   100:         RESPONSE.redirect(url+addStr%timeStamp)
                    101:         
1.10.2.55  dwinter   102:     def getKeyUTF8(self):
                    103:         """get db_key utf8"""
1.10.2.87! dwinter   104:         logging.debug("KEY - MPIWGStaff 1:"+self.getKey())
        !           105:         logging.debug("KEY - MPIWGStaff 2 :"+utf8ify(self.getKey()))
1.10.2.80  dwinter   106:         
1.10.2.55  dwinter   107:         return utf8ify(self.getKey())
                    108:     
1.10.2.65  dwinter   109:     def setKey(self,key):
                    110:    """set key"""
                    111:    self.key=key
                    112: 
1.10.2.87! dwinter   113:     def rmKey(self):
        !           114:         """rm"""
        !           115:         self.key=None
        !           116:         return ""
        !           117: 
1.10.2.33  dwinter   118:     def getKey(self):
                    119:         """get database key"""
1.10.2.87! dwinter   120:         
        !           121: 
        !           122:         if getattr(self,'key',None):
        !           123:             logging.debug("KEY - MPIWGStaff 4:"+self.key)
1.10.2.55  dwinter   124:             #logging.error("SAVED KEY:%s"%self.key)
                    125:             return unicodify(self.key.lower())
                    126:             #return self.key.lower()
1.10.2.33  dwinter   127:         
                    128:         #fuer alt faelle ohne key
1.10.2.55  dwinter   129:         #logging.error("NEW KEY:%s"%(self.firstName+'_'+self.lastName).lower().replace(' ',''))
1.10.2.34  casties   130:         return (self.firstName+'_'+self.lastName).lower().replace(' ','')
1.10.2.33  dwinter   131:         
1.10.2.61  casties   132:     def getConnectionObj(self):
                    133:          """returns connection id (from root)"""
1.10.2.66  dwinter   134:          try:
                    135:              root = self.getMPIWGRoot()
                    136:              return root.getConnectionObj()
                    137:          except:
                    138:              return self.en.getConnectionObj()
1.10.2.67  dwinter   139: 
1.10.2.7  dwinter   140:     def isPublished(self):
                    141:         """gib publications status aus der datenbank aus"""
1.10.2.33  dwinter   142:         key=self.getKey()
1.10.2.35  casties   143:         query="select count(publish_the_data) from personal_www where lower(key)='%s' and publish_the_data='yes'"%key
1.10.2.7  dwinter   144:         
                    145:         res = self.ZSQLQuery(query)
                    146:         
                    147:         if res and res[0].count>0:
                    148:             return True
                    149:         else:
                    150:             return False
                    151:         
1.10.2.33  dwinter   152:  
1.10.2.62  dwinter   153:   
1.10.2.26  dwinter   154:     def updateDBEntry(self,publish_the_data,date_from,date_to,DBid=None,stay_at_mpiwg="",position="",abteilung=""): 
1.10.2.6  dwinter   155:         """zpddatedb"""
                    156:         if not DBid:
1.10.2.40  dwinter   157:                     DBid=self.getDBId()
1.10.2.30  casties   158:         
                    159:  
1.10.2.6  dwinter   160:         self.ZSQLQuery("SET DATESTYLE TO 'German'")
1.10.2.11  dwinter   161: 
1.10.2.22  dwinter   162:         test=self.ZSQLQuery("select id from personal_www where id='%s' "%DBid)
1.10.2.21  dwinter   163: 
1.10.2.22  dwinter   164:         
                    165:         if test and (len(test)>0): #dataset exists
1.10.2.33  dwinter   166:             logger("MPIWG Web",logging.INFO,'UPDATE: _table="personal_www",_identify="id=%s"'%DBid+',publish_the_data=%s'%publish_the_data+',date_from=%s'%date_from+',date_to=%s'%date_to+',stay_at_mpiwg=%s'%stay_at_mpiwg+',position=%s'%position)
                    167:             self.ZSQLChange(_table="personal_www",_identify="id=%s"%DBid,publish_the_data=publish_the_data,
1.10.2.6  dwinter   168:                                    date_from=date_from,
1.10.2.26  dwinter   169:                                    date_to=date_to,stay_at_mpiwg=stay_at_mpiwg,position=position,abteilung=abteilung)
1.10.2.33  dwinter   170:             return True
1.10.2.21  dwinter   171:         else:
1.10.2.33  dwinter   172:             return False
1.10.2.6  dwinter   173:           
1.10.2.5  dwinter   174:     def getPublicationSelectionMode(self):
                    175:         """get publication selection mode, default 'priority'"""
                    176:         return getattr(self,'publicationSelectionMode','priority')
                    177:         
                    178:     def changePublicationSelectionMode(self,publicationSelectionMode,RESPONSE=None):
                    179:         """change PublicationSelectionMode"""
                    180:         
                    181:         self.publicationSelectionMode=publicationSelectionMode
1.10.2.62  dwinter   182:         self.ZCacheable_invalidate()
1.10.2.5  dwinter   183:         if RESPONSE:
1.10.2.59  dwinter   184:             self.redirect(RESPONSE,"editPublications")
1.10.2.5  dwinter   185:             
1.10.2.41  dwinter   186:     
                    187:     def downloadCV(self,RESPONSE):
                    188:         """download cv file"""
                    189:         ob=self._getOb("downloadableFiles")._getOb("cv.pdf")
                    190:         
                    191:         RESPONSE.redirect(ob.absolute_url()+"/download")
                    192:     
                    193:     def getLastUpdateCV(self):
                    194:         """getDate of Last Update"""
1.10.2.42  dwinter   195:         try:
                    196:                 ob=self._getOb("downloadableFiles")._getOb("cv.pdf")
                    197:                 return ob.getLastChangeDate()
                    198:         except:
                    199:                 return "No file yet!"
1.10.2.41  dwinter   200:     def getLastUpdatePublications(self):
                    201:         """getDate of Last Update"""
1.10.2.42  dwinter   202:         try:
                    203:                 ob=self._getOb("downloadableFiles")._getOb("publications.pdf")
                    204:                 return ob.getLastChangeDate()
                    205:         except:
                    206:                 return "No file yet!"
1.10.2.41  dwinter   207:     def downloadPublications(self,RESPONSE):
                    208:         """download publications"""
                    209:         ob=self._getOb("downloadableFiles")._getOb("publications.pdf")
                    210:         
                    211:         RESPONSE.redirect(ob.absolute_url()+"/download")
                    212:    
                    213:     def changeDownloads(self,cv_pdf=None,cv_publish=None,publications_pdf=None,publications_publish=None,RESPONSE=None):
                    214:         """"change the downloadable files"""
1.10.2.62  dwinter   215:         self.ZCacheable_invalidate()
1.10.2.41  dwinter   216:         if not hasattr(self,'downloadableFiles'):
                    217:            
                    218:             extFolder =  extVersionedFileFolder()
                    219:             extFolder.id = "downloadableFiles"
                    220:             self._setObject(extFolder.id,extFolder)
                    221:             
                    222:         ob = self._getOb("downloadableFiles")
                    223:         
                    224:         if cv_publish:
                    225:             self.cv_publish=cv_publish
                    226:             
                    227:         if publications_publish:
                    228:             self.publications_publish=publications_publish
                    229:             
                    230:         if cv_pdf:
                    231:             if not hasattr(ob,"cv.pdf"):
                    232:                 ob.addFile("",cv_pdf,newName="cv.pdf")
1.10.2.5  dwinter   233:             
1.10.2.41  dwinter   234:             else:
                    235:                 cvFile = getattr(ob,"cv.pdf")
                    236:                 cvFile.addContentObject("","",file=cv_pdf)
                    237:         
                    238:         if publications_pdf:
                    239:             if not hasattr(ob,"publications.pdf"):
                    240:                 ob.addFile("",cv_pdf,newName="publications.pdf")
                    241:             
                    242:             else:
                    243:                 cvFile = getattr(ob,"publications.pdf")
                    244:                 cvFile.addContentObject("","",file=publications_pdf)
                    245:         
                    246:         if RESPONSE:
1.10.2.50  dwinter   247:             self.redirect(RESPONSE,self.REQUEST['HTTP_REFERER'])
1.10.2.48  dwinter   248:     
1.10.2.41  dwinter   249: 
1.10.2.5  dwinter   250:     def getPublishImage(self):
                    251:         """publish the image??, default no"""
                    252:         return getattr(self,'publishImage','no')
                    253:     
1.10.2.74  dwinter   254:     def updateImage(self,publishImage,file=None,rename=None,RESPONSE=None):
1.10.2.5  dwinter   255:         """update image"""
1.10.2.11  dwinter   256: 
                    257:         if file and not(file.filename==""):
                    258:             if self.getImageObj():
1.10.2.40  dwinter   259:                               self.getImageObj().updateImage(file,_rename=None,RESPONSE=None)
1.10.2.11  dwinter   260:             else:
1.10.2.40  dwinter   261:                 # create new image object
                    262:                 xp = file.filename.rfind('.')
                    263:                 if xp > 0:
                    264:                     ext = file.filename[xp:]
                    265:                     #fn = self.getId()+ext
                    266:                     fn = self.getId()
                    267:                     logger("MPWIG STAFF", logging.INFO, "new filename: %s"%fn)
                    268:                     self.getImageFolder().addImage2(file,fileName=fn)
                    269:                 else:
                    270:                     logger("MPWIG STAFF", logging.ERROR, "uploaded filename %s has no extension!"%file.filename)
1.10.2.5  dwinter   271:             
                    272:         self.publishImage=publishImage
                    273:         
                    274:         if RESPONSE:
1.10.2.50  dwinter   275:             self.redirect(RESPONSE,"edit")
1.10.2.5  dwinter   276:             
                    277:     def getImageFolder(self):
                    278:         """getImageFolder"""
1.10.2.16  dwinter   279:         #TODO: make place of staff image folder configurable
                    280:         
                    281:         try:
                    282:             return self.getPhysicalRoot().www_neu.images.staff_images
                    283:         except: 
1.10.2.40  dwinter   284:             logger("MPWIG STAFF", logging.ERROR, "image folder not found: has to be add /www_neu/staff_images") 
1.10.2.16  dwinter   285:             return None
                    286:         
1.10.2.5  dwinter   287:     def getImageObj(self):
                    288:         """getImage"""
                    289:         imageFolder=self.getImageFolder()
                    290:         
1.10.2.16  dwinter   291:         if not imageFolder: return None
                    292:         
1.10.2.5  dwinter   293:         image=getattr(imageFolder,self.getId(),None)
                    294: 
                    295:         if not image:
                    296:             for suffix in ['jpg','tif']:
                    297:                 
                    298:                 image=getattr(imageFolder,self.getId()+"."+suffix,None)
                    299:                 if image:
                    300:                     break
                    301:         return image
                    302:             
                    303:     def getImageUrl(self):
                    304:         """getImageUrl"""
                    305:         image=self.getImageObj()
                    306:         if not image:
                    307:             return None
                    308:         else:
                    309:             return self.getImageObj().absolute_url()+"/image"
1.9       dwinter   310:     
                    311:     def PrincipiaSearchSource(self):
                    312:         """Return cataloguable key for ourselves."""
                    313:         return str(self)
1.1       dwinter   314: 
1.6       casties   315:     manage_options = Folder.manage_options+(
                    316:         {'label':'Edit','action':'changeMPIWGStaffForm'},
1.10.2.1  dwinter   317:         {'label':'Change Publications Special','action':'changePublications_specialForm'},
1.10.2.62  dwinter   318:         ) + Cacheable.manage_options
1.6       casties   319:     
1.10.2.62  dwinter   320:     __manager_id = "ramCache"
1.10.2.33  dwinter   321:     def __init__(self,id, lastName,firstName,key):
1.1       dwinter   322:         """init"""
                    323:         self.id=id
1.10.2.33  dwinter   324:         self.title=key
1.1       dwinter   325:         self.lastName=lastName
                    326:         self.firstName=firstName
1.10.2.33  dwinter   327:         self.key=key
1.10.2.38  dwinter   328:     
                    329:     def getPersonID(self):
                    330:         """gibt den ID fuer die Person zurueck"
                    331:         im Moment ist personID = id, i.e. e-mail
                    332:         """
                    333:         return self.id
1.1       dwinter   334: 
1.10.2.77  dwinter   335:     def getConeUrl(self):
                    336:         """gibt coneURL zurueck"""
1.10.2.78  dwinter   337:         
                    338:         self.coneService=getattr(self, "coneServiceURL",coneService)
                    339:         logging.debug("coneservice:"+self.coneService)
1.10.2.85  dwinter   340:         
                    341:         if getattr(self,'_v_cone',None)==None:
1.10.2.77  dwinter   342:             try:  
1.10.2.83  dwinter   343:                 
1.10.2.85  dwinter   344:                 self._v_cone=SrvTxtUtils.getHttpData(self.coneService+self.getPersonID())
1.10.2.83  dwinter   345:                 #cone = urllib2.urlopen(self.coneService+self.getPersonID())              
                    346:                 #self._v_cone=cone.read()
                    347:                 if self._v_cone==None:
                    348:                     self._v_cone=""
1.10.2.77  dwinter   349:             except:
1.10.2.84  dwinter   350:                 self._v_cone=""
                    351:                 return ""
1.10.2.77  dwinter   352:             
                    353:         return self._v_cone
                    354:            
                    355:            
                    356:         
                    357:         
1.10.2.56  dwinter   358:     def harvest_page_old(self,context=None):
1.10.2.28  dwinter   359:         """geharvestete seite = verschlankte version von members_main"""
1.10.2.56  dwinter   360:         #pt = getTemplate(self, "harvest_members_main")
                    361:         
                    362:         if not self.isPublished():
                    363:             return ""
                    364:         if not context:
                    365:             context=self
                    366:             
                    367:         
                    368:         ext=getattr(self,"harvest_members_main",None)
                    369:         if ext:
                    370:             return getattr(self,ext.getId())()
                    371:         
                    372:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','harvest_members_main')).__of__(context)    
                    373: 
                    374: 
1.10.2.28  dwinter   375:         return pt()
1.10.2.1  dwinter   376: 
1.10.2.79  dwinter   377:     def harvest_page(self,mode="normal"):
1.10.2.56  dwinter   378:         """harvest"""
1.10.2.82  dwinter   379:         logging.debug("AAAAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
1.10.2.56  dwinter   380:         if not self.isPublished():
1.10.2.79  dwinter   381:             return 
                    382:         st = getattr(self.en.staff.members,self.getId()).index_html(mode)
1.10.2.80  dwinter   383:         
                    384:         templates = self.en.getHarvestCache()
                    385:         #templates = getattr(self,'getHarvestCache',self.en.getHarvestCache)()
                    386:         rendered = st
                    387:         templates[self.absolute_url()]=rendered
1.10.2.81  dwinter   388:         transaction.commit()
1.10.2.80  dwinter   389:         return rendered
                    390:    
1.10.2.56  dwinter   391:         
                    392:     
1.10.2.79  dwinter   393:     def index_html(self,mode="normal"):
1.3       dwinter   394:         """show homepage"""
1.10.2.62  dwinter   395:     
                    396:         bound_names={}
                    397:         request = self.REQUEST
                    398:         if request is not None:
                    399:             response = request.response
                    400:             if not response.headers.has_key('content-type'):
                    401:                 response.setHeader('content-type', 'text/html')
                    402: 
                    403:         security = getSecurityManager()
                    404:         bound_names['user'] = security.getUser()
                    405: 
                    406:         # Retrieve the value from the cache.
                    407:         keyset = None
                    408:         if self.ZCacheable_isCachingEnabled():
                    409:             
                    410:             # Prepare a cache key.
                    411:             keyset = {'here': self}
                    412:                       
                    413:             result = self.ZCacheable_get(keywords=keyset)
                    414:            
                    415:             if result is not None:
                    416:                 # Got a cached value.
                    417:                 return result
1.10.2.71  casties   418:         
                    419:         # look for individual page
1.10.2.72  casties   420:         if self.hasObject("index.html"):
                    421:             pt = getattr(self, "index.html")
1.10.2.71  casties   422:         # else use template
1.10.2.72  casties   423:         else:
1.10.2.79  dwinter   424:             if mode=="slim":
                    425:                 pt = getTemplate(self, "members_main_slim")
                    426:             else:
                    427:                 pt = getTemplate(self, "members_main")
1.10.2.71  casties   428:         # Execute the template in a new security context.
1.10.2.62  dwinter   429:         security.addContext(self)
                    430: 
                    431:         try:
                    432:             result = pt.pt_render(extra_context=bound_names)
                    433:             if keyset is not None:
                    434:                 # Store the result in the cache.
                    435:                 self.ZCacheable_set(result, keywords=keyset)
                    436:                
                    437:             return result
                    438:         finally:
                    439:             security.removeContext(self)
                    440:        
1.1       dwinter   441: 
1.10.2.62  dwinter   442:    
1.10.2.1  dwinter   443:     def changePublications_specialForm(self):
1.10.2.2  dwinter   444:         """Priority publications manual field"""
                    445:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changePublications_special.zpt')).__of__(self)
1.10.2.1  dwinter   446:         return pt()
1.10.2.2  dwinter   447:         
1.10.2.1  dwinter   448:     def changePublications_special(self,usePublicationsSpecial=None,specialPublicationsField=None,RESPONSE=None):
1.10.2.2  dwinter   449:         """change publications special params"""
1.10.2.62  dwinter   450:         self.ZCacheable_invalidate()
1.10.2.2  dwinter   451:         if usePublicationsSpecial:
1.10.2.1  dwinter   452:           self.usePublicationsSpecial=True
1.10.2.2  dwinter   453:          
                    454:         else:
                    455:           self.usePublicationsSpecial=False
1.10.2.1  dwinter   456: 
1.10.2.2  dwinter   457:         self.specialPublicationsField=specialPublicationsField[0:]
1.10.2.1  dwinter   458: 
                    459:         if RESPONSE is not None:
1.10.2.50  dwinter   460:             self.redirect(RESPONSE,'manage_main')
1.10.2.1  dwinter   461: 
1.10.2.2  dwinter   462:         
1.3       dwinter   463:     def publications_full(self):
                    464:         """show publication"""
1.7       casties   465:         pt=getTemplate(self, "publications_full_main")
1.3       dwinter   466:         return pt()
                    467: 
                    468:     def talks_full(self):
                    469:         """show talks"""
1.7       casties   470:         pt=getTemplate(self, 'talks_full_main')
1.3       dwinter   471:         return pt()
                    472: 
                    473:     def teaching_full(self):
                    474:         """show talks"""
1.7       casties   475:         pt=getTemplate(self, 'teaching_full_main')
1.3       dwinter   476:         return pt()
                    477:     
1.1       dwinter   478:     def changeMPIWGStaffForm(self):
                    479:         """change form"""
1.10      dwinter   480:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGStaff.zpt')).__of__(self)
1.1       dwinter   481:         return pt()
1.10.2.10  dwinter   482:     
                    483:     security.declareProtected('View management screens','changeMPIWGStaff')
1.10.2.36  casties   484:     def changeMPIWGStaff(self,lastName,firstName,key=None,RESPONSE=None):
1.1       dwinter   485:         """change it"""
1.10.2.62  dwinter   486:         self.ZCacheable_invalidate()
1.2       dwinter   487:         self.title="%s, %s"%(lastName,firstName)
1.1       dwinter   488:         self.lastName=lastName
                    489:         self.firstName=firstName
1.10.2.36  casties   490:         if key:
                    491:             self.key = key
1.10.2.86  dwinter   492:             
                    493:         
1.2       dwinter   494:         if RESPONSE is not None:
1.10.2.50  dwinter   495:             self.redirect(RESPONSE,'manage_main')
1.10.2.10  dwinter   496:             
                    497:     security.declareProtected('View management screens','edit')
1.10.2.2  dwinter   498:     def edit(self):
                    499:         """Edit the pages"""
1.10.2.25  dwinter   500:         #TODO: zusammenspiel mit apache, redirect auf 18080 rausnehmen bzw. zumindest verallgemeinern
1.10.2.31  casties   501:         #if self.REQUEST['SERVER_URL']=="http://www.mpiwg-berlin.mpg.de":
                    502:         #        redURL="http://xserve04.mpiwg-berlin.mpg.de:18080/www_neu/de/mitarbeiter/members/%s/edit"%self.getId()
                    503:         #
                    504:         #        self.REQUEST.RESPONSE.redirect(redURL)
1.10.2.2  dwinter   505: 
                    506:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff.zpt')).__of__(self)
1.10.2.52  dwinter   507:         
                    508:         
1.10.2.75  dwinter   509:         logging.debug("XX:"+email.Utils.formatdate().split("-")[0]+'GMT')
1.10.2.2  dwinter   510:         return pt()
                    511: 
                    512:     mainEditFile=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff_main.zpt'))
1.10.2.47  dwinter   513:     addPublicationsBib=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addPublicationsBib.zpt'))
1.10.2.2  dwinter   514: 
1.10.2.12  casties   515:     def getPathStyle(self, path, selected, style=""):
                    516:         """returns a string with the given style + 'sel' if path == selected."""
                    517: 
                    518:         if path == selected:
                    519:             return style + 'sel'
                    520:         else:
                    521:             return style    
                    522: 
1.10.2.41  dwinter   523: 
1.10.2.53  casties   524:     def getLabel(self):
                    525:         """returns a label for this object"""
                    526:         return self.title
                    527: 
                    528:     def getBreadcrumbs(self):
                    529:         """return list of breadcrumbs from here to the root"""
                    530:         crumbs = []
                    531:         # skip direct parent Folder /members/
                    532:         parent = self.aq_parent.aq_parent
                    533:         # get parents breadcrumbs
                    534:         logging.debug("getbreadcrumbs-: title=%s self=%s parent=%s"%(self.title, repr(self), repr(parent)))
                    535:         if hasattr(parent, 'getBreadcrumbs'):
                    536:             logging.debug("getbreadcrumbs: recurse to %s"%parent)
                    537:             crumbs = parent.getBreadcrumbs()
                    538:         
                    539:         # try to get acquisition URL from parent
                    540:         if hasattr(parent, 'absolute_url'):
                    541:             baseUrl = "%s/%s/"%(parent.absolute_url(), 'members')
                    542:         else:
                    543:             baseUrl = "/en/staff/members/"
                    544:             
                    545:         # add this
                    546:         crumbs.append((self.getLabel(), baseUrl+self.getId(), self))
                    547:             
                    548:         return crumbs
                    549: 
                    550: 
1.10.2.49  dwinter   551:     def changeCurrentWork(self,current_work,key,publish="yes",RESPONSE=None):
1.10.2.44  dwinter   552:         """change current work"""
                    553:         
                    554:         query="UPDATE personal_www SET current_work =%s WHERE key='%s'"
                    555:          
                    556:         self.ZSQLQuery(query%(self.ZSQLQuote(current_work),key))
                    557:        
                    558:         query="UPDATE personal_www SET current_work_p =%s WHERE key='%s'"
                    559:          
                    560:         self.ZSQLQuery(query%(self.ZSQLQuote(publish),key))
1.10.2.62  dwinter   561:         self.ZCacheable_invalidate()
1.10.2.44  dwinter   562:         if RESPONSE:
1.10.2.50  dwinter   563:             self.redirect(RESPONSE,"edit")
1.10.2.44  dwinter   564:         
1.10.2.10  dwinter   565:     security.declareProtected('View management screens','changeResearch')
1.10.2.50  dwinter   566:     def changeResearch(self,noredirect=None,RESPONSE=None):
1.10.2.2  dwinter   567:         """change the research entries"""
1.10.2.62  dwinter   568:         self.ZCacheable_invalidate()
1.10.2.2  dwinter   569:         newEntries={}
1.10.2.33  dwinter   570:         key_main=self.REQUEST.form['key_main']
1.10.2.2  dwinter   571: 
                    572:         mainfieldL=self.REQUEST.form['main_fields'].split(",")
                    573:         mainfield={}
                    574:         for x in mainfieldL:
                    575:             tmp=x.split('__')
                    576:             mainfield[tmp[0]]=tmp[1]
                    577:         for field in self.REQUEST.form.keys():
                    578:             splittedField=field.split("__")
                    579:             if len(splittedField)<3:
                    580:                 pass #kein datenbank eintrag
                    581: 
                    582:             elif splittedField[2]=='new': # store new entries
                    583:                 if not newEntries.has_key(splittedField[0]):
                    584:                     newEntries[splittedField[0]]={}
                    585:                     
                    586:                 newEntries[splittedField[0]][splittedField[1]]=self.REQUEST.form[field]
                    587: 
                    588:             else:
                    589:                 query="UPDATE %s "%splittedField[0]
                    590:                 query+="SET %s = '%s' "%(splittedField[1],sql_quote(self.REQUEST.form[field]))
                    591:                 query+="WHERE oid = '%s' "%sql_quote(splittedField[2])
1.10.2.4  dwinter   592:                 
1.10.2.2  dwinter   593:                 self.ZSQLQuery(query)
                    594: 
                    595: 
                    596:         #new entries
                    597:         for newEntry in newEntries.keys():
                    598:             query="INSERT INTO %s "%newEntry
1.10.2.33  dwinter   599:             keys=['key_main']
                    600:             values=["'"+sql_quote(key_main)+"'"]
1.10.2.2  dwinter   601:             for key in newEntries[newEntry].keys():
                    602:                 keys.append(key)
1.10.2.27  dwinter   603:                 values.append("'"+sql_quote(newEntries[newEntry][key])+"'")
1.10.2.2  dwinter   604: 
                    605: 
                    606:             keystring=",".join(keys)
                    607:                 
                    608:             valuestring=",".join(values)
                    609:                 
                    610:             query+=" (%s) "%keystring
                    611:             query+="VALUES (%s)"%valuestring
                    612:             if not (newEntries[newEntry][mainfield[newEntry]].lstrip().rstrip()==""):
                    613:                 self.ZSQLQuery(query)
                    614: 
                    615:         if not noredirect:
1.10.2.50  dwinter   616:             self.redirect(RESPONSE,self.REQUEST['HTTP_REFERER'])
1.10.2.10  dwinter   617:             
                    618:     security.declareProtected('View management screens','editCV')    
1.10.2.2  dwinter   619:     def editCV(self,cv=None,oid=None,RESPONSE=None):
                    620:          """edit Cv"""
                    621: 
1.10.2.19  dwinter   622:          if (not oid):
1.10.2.2  dwinter   623:              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editCV.zpt')).__of__(self)
                    624:              return pt()
                    625:         
1.10.2.20  dwinter   626:          query="UPDATE personal_www SET cv =%s WHERE oid='%s'"
1.10.2.62  dwinter   627:          self.ZCacheable_invalidate()
1.10.2.20  dwinter   628:          self.ZSQLQuery(query%(self.ZSQLQuote(cv),oid))
1.10.2.2  dwinter   629:         
                    630:          if RESPONSE:
1.10.2.50  dwinter   631:             self.redirect(RESPONSE,"editCV")
1.10.2.43  dwinter   632:             
                    633:     
                    634:     def getProfile(self):
                    635:         """get the profile"""
1.10.2.51  dwinter   636:    self.REQUEST.RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT')
                    637:       
1.10.2.68  dwinter   638:         founds=self.ZSQLInlineSearchU(_table='personal_www',key=self.getKeyUTF8())
1.10.2.43  dwinter   639:         html="""<html><body>%s</body></html>"""
                    640:         if founds.profile and founds.profile != "":
                    641:            
                    642:             return html%founds.profile
                    643:         else:
                    644:                         
                    645:             return html%self.generateProfileForPerson(founds)
                    646:             
                    647:     def editProfile(self,oid=None,RESPONSE=None, kupu=None, preview=None):
                    648:          """edit Profile, new entry replaces CD, current work and research interests"""
1.10.2.62  dwinter   649:         
1.10.2.43  dwinter   650:          if (not oid):
                    651:              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editProfile.zpt')).__of__(self)
                    652:              return pt()
                    653:         
1.10.2.62  dwinter   654:          self.ZCacheable_invalidate() 
1.10.2.43  dwinter   655:          
                    656:          
                    657:          if preview:
                    658:              pass
                    659:              #TODO: not supported yet
                    660:              #kupu=preview
                    661:              # find content of body tags
                    662:         
                    663:          start=kupu.find("<body>")
                    664:          end=kupu.find("</body>")
                    665:          
                    666:          newcontent= kupu[start+6:end]
                    667:             
                    668:             
                    669:          
                    670:         
                    671:          if preview: 
                    672:             #TODO: not supported yet
                    673:             if RESPONSE:
1.10.2.50  dwinter   674:                 self.redirect(RESPONSE,"editProfile")
1.10.2.43  dwinter   675:             
                    676:             #return self.preview(newcontent)
                    677: 
                    678:          query="UPDATE personal_www SET profile=%s WHERE oid='%s'"       
                    679:          self.ZSQLQuery(query%(self.ZSQLQuote(newcontent),oid))
                    680:          logging.error("PROFILE:"+query%(self.ZSQLQuote(newcontent),oid))
                    681:          if RESPONSE:
1.10.2.50  dwinter   682:             self.redirect(RESPONSE,"editProfile")
1.10.2.43  dwinter   683: 
                    684: 
                    685: 
                    686:     def generateProfileForPerson(self,person):
                    687:         """erzeugt ein automatisches Profil aus den alten Eintraegen  CV, Current work, und research interests"""
                    688:         
                    689:         ret=""
1.10.2.76  dwinter   690:         #founds=self.ZSQLInlineSearch(_table='research_interest',key_main=person.getKeyUTF8())
                    691:         founds=self.ZSQLInlineSearch(_table='research_interest',key_main=person.key)
1.10.2.43  dwinter   692:         if founds:
1.10.2.54  dwinter   693:             ret="<p class=\"bio_section_header\">Research interests: </p><br/>"
1.10.2.43  dwinter   694:         for found in self.sortPriority(founds):
                    695:             ret+=found.interest+"<br/>"
                    696:         
1.10.2.45  dwinter   697:         
1.10.2.46  dwinter   698:         if (person.current_work) and (not person.current_work==""):
1.10.2.58  casties   699:             ret+="<p class=\"bio_section_header\">Current work: </p><br/>"
1.10.2.45  dwinter   700:       
                    701:             ret+=person.current_work+"<br/>"
1.10.2.58  casties   702:        if (person.cv) and (not person.cv==""):
                    703:             ret+="<p class=\"bio_section_header\">Curriculum Vitae: </p><br/>"
                    704:        ret+=self.formatAscii(person.cv)
1.10.2.43  dwinter   705:         
                    706:         return ret
1.10.2.41  dwinter   707:     security.declareProtected('View management screens','editDownloads')
                    708:     def editDownloads(self):    
                    709:         """editiere die Downloads von der Webseite"""
                    710:         
                    711:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editDownloads.zpt')).__of__(self)
                    712:         return pt()
                    713:     
1.10.2.48  dwinter   714:     security.declareProtected('View management screens','editAdditionalLinks.zpt')
                    715:     def editAdditionalLinks(self):    
                    716:         """editiere die Downloads von der Webseite"""
                    717:         
                    718:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editAdditionalLinks.zpt')).__of__(self)
                    719:         return pt()
                    720:     
                    721:     
1.10.2.10  dwinter   722:     security.declareProtected('View management screens','editAwards')    
1.10.2.2  dwinter   723:     def editAwards(self,awards=None,oid=None,RESPONSE=None):
                    724:          """edit a awards"""
1.10.2.19  dwinter   725:      
                    726:          if (not oid):
1.10.2.2  dwinter   727:              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editAwards.zpt')).__of__(self)
                    728:              return pt()
1.10.2.62  dwinter   729:          self.ZCacheable_invalidate()
1.10.2.20  dwinter   730:          query="UPDATE personal_www SET awards =%s WHERE oid='%s'"
1.10.2.19  dwinter   731:       
1.10.2.20  dwinter   732:          self.ZSQLQuery(query%(self.ZSQLQuote(awards),oid))
1.10.2.2  dwinter   733:         
1.10.2.86  dwinter   734:         
1.10.2.2  dwinter   735:          if RESPONSE:
1.10.2.50  dwinter   736:             self.redirect(RESPONSE,"editAwards")
1.10.2.2  dwinter   737: 
1.10.2.10  dwinter   738:     security.declareProtected('View management screens','editTalks')    
1.10.2.2  dwinter   739:     def editTalks(self):
                    740:         """edit talks"""
                    741: 
                    742:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editTalks.zpt')).__of__(self)
                    743:         return pt()
                    744:         
1.10.2.10  dwinter   745:     security.declareProtected('View management screens','editTeaching')    
1.10.2.2  dwinter   746:     def editTeaching(self):
                    747:         """edit Teaching"""
                    748: 
                    749:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editTeaching.zpt')).__of__(self)
                    750:         return pt()
                    751:         
1.10.2.4  dwinter   752:     def getDocTypes(self):
                    753:         finds = self.ZopeFind(self.metadata.main.meta.bib,obj_metatypes=["OSAS_MetadataMapping__neu"])
                    754: 
                    755:         list= [x[0] for x in finds]
                    756:         return "\n".join(list)
1.10.2.5  dwinter   757: 
1.10.2.10  dwinter   758:     security.declareProtected('View management screens','editMainData')    
1.10.2.33  dwinter   759:     def editMainData(self,REQUEST=None,RESPONSE=None):
1.10.2.5  dwinter   760:         """edit main data"""
1.10.2.62  dwinter   761:         self.ZCacheable_invalidate()
1.10.2.33  dwinter   762:         argv=REQUEST.form
                    763:         
                    764:         if not argv.has_key('last_name'):
1.10.2.5  dwinter   765:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMainData.zpt')).__of__(self)
                    766:             return pt() 
                    767:         else:
1.10.2.70  casties   768:             self.ZSQLChange(argv,_table="personal_www",_identify="lower(key)=%s"%utf8ify(self.getKey().lower()),USE_FORM="yes")
1.10.2.86  dwinter   769:             # aendere auch dien enstsprechen infos in der instance
                    770:             self.changeMPIWGStaff(argv['last_name'],argv['first_name']);
                    771:             
                    772:             
                    773:             
                    774:             self.reindex_object()
                    775:             
                    776:             
                    777:             
1.10.2.5  dwinter   778:             if RESPONSE:
1.10.2.50  dwinter   779:                 self.redirect(RESPONSE,"editMainData")
1.10.2.5  dwinter   780:                 
1.10.2.10  dwinter   781:     security.declareProtected('View management screens','newBibliogrpaphy')    
1.10.2.4  dwinter   782:     def newBibliography(self,_docType=None, _addEntry=None,RESPONSE=None,**argv):
1.10.2.5  dwinter   783:         
1.10.2.4  dwinter   784:         """add an entry to the bibliography"""
                    785:         if not _docType: #kein docType
                    786:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','newBibliographyEntryDocType.zpt')).__of__(self)
                    787:             return pt() 
                    788:         elif _docType and not _addEntry: #doctype aber keine daten
                    789:             self.REQUEST['_docType']=_docType
                    790:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','newBibliographyEntry.zpt')).__of__(self)
                    791:             return pt() 
                    792:         else: #doctype und daten
1.10.2.5  dwinter   793:             try:
                    794:                 newId=self.ZSQLSimpleSearch("select nextval('id_raw')")[0].nextval
                    795:             except:#id_raw existiert nich, dann neu erzeugen
                    796:                 
                    797:                 self.createOrUpdateId_raw()
                    798:                 newId=self.ZSQLSimpleSearch("select nextval('id_raw')")[0].nextval
                    799:                                 
1.10.2.4  dwinter   800:             bookId="b%06i" % newId
                    801:             
                    802:             self.ZSQLAdd(argv,_table="bibliography",reference_type=_docType,id=bookId)
1.10.2.39  dwinter   803: 
1.10.2.37  dwinter   804:             self.ZSQLAdd(_useRequest=False,_table="publications",id_gen_bib=bookId,key_main=self.getDBId(),publish='yes')
1.10.2.4  dwinter   805:             self.updatePublicationDB(personId=self.getDBId())
                    806:             
                    807:         
                    808:         if RESPONSE:
1.10.2.50  dwinter   809:             self.redirect(RESPONSE,"editPublications")
1.10.2.4  dwinter   810:             
                    811:         return True
                    812:     
1.10.2.10  dwinter   813:     security.declareProtected('View management screens','editImage')    
1.10.2.5  dwinter   814:     def editImage(self):
                    815:         """edit images"""
                    816:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editImageStaff.zpt')).__of__(self)
                    817:         return pt()
                    818:     
1.10.2.10  dwinter   819:     security.declareProtected('View management screens','editBibliography')    
1.10.2.3  dwinter   820:     def editBibliography(self):
                    821:         """edit the bibliography"""
                    822:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editBibliographyEntry.zpt')).__of__(self)
                    823:         return pt()
                    824:     
                    825:       
1.10.2.10  dwinter   826:     security.declareProtected('View management screens','editPublications')    
1.10.2.2  dwinter   827:     def editPublications(self):
                    828:         """edit the bibliographie"""
                    829: 
                    830:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editPublications.zpt')).__of__(self)
                    831:         return pt()
1.10.2.3  dwinter   832:     
                    833:     def changeSortingMode(self,sortingMode,RESPONSE=None,REQUEST=None):
                    834:         """change sorting mode"""
1.10.2.62  dwinter   835:         self.ZCacheable_invalidate()
1.10.2.3  dwinter   836:         self.sortingMode=sortingMode
                    837:         
                    838:         if RESPONSE and REQUEST:
1.10.2.54  dwinter   839:             self.redirect(RESPONSE,REQUEST['HTTP_REFERER'])
1.10.2.3  dwinter   840: 
                    841:         return True
1.10.2.2  dwinter   842: 
1.10.2.3  dwinter   843:     def getSortingMode(self):
                    844:         """get sorting mode"""
1.10.2.33  dwinter   845:         mode=getattr(self,'sortingMode','priority')
                    846:         if mode=="year":
                    847:             return "year DESC"
                    848:         else:
1.10.2.35  casties   849:             return mode
1.10.2.33  dwinter   850:         
1.10.2.4  dwinter   851:     def integer(self,value):
                    852:         try:
                    853:             return int(value)
                    854:         except:
                    855:             return 0
                    856:         
1.10.2.10  dwinter   857:     security.declareProtected('View management screens','changePublications')    
1.10.2.50  dwinter   858:     def changePublications(self,RESPONSE=None):
1.10.2.2  dwinter   859:         """change the publication list"""
                    860:         self.changeResearch(noredirect=True)
1.10.2.62  dwinter   861:         self.ZCacheable_invalidate()
1.10.2.4  dwinter   862:         #self.updatePublicationDB(personId=self.getDBId())
1.10.2.50  dwinter   863:         self.redirect(RESPONSE,self.REQUEST['HTTP_REFERER'])
1.10.2.4  dwinter   864:         
1.10.2.2  dwinter   865: 
1.10.2.55  dwinter   866:   
1.10.2.10  dwinter   867:     security.declareProtected('View management screens','addPublications')    
1.10.2.50  dwinter   868:     def addPublications(self,submit=None,REQUEST=None,noredirect=None,RESPONSE=None):
1.10.2.2  dwinter   869:         """add publications"""
                    870: 
1.10.2.3  dwinter   871:         #setzte flag ob aufruf aus suchformular
                    872:         
                    873:         if REQUEST.get("QUERY_STRING",None) and (not submit):
                    874:             self.REQUEST.set('fromSearch','1')
                    875:         else:
                    876:             self.REQUEST.set('fromSearch','0')
                    877:              
                    878:         if not submit or (not (submit == "add")):
                    879:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addPublications.zpt')).__of__(self)
                    880:             return pt()
                    881:         
                    882:         #new entries
                    883:         entries = REQUEST.form.get('addEntries',None)
                    884:         if not (type(entries) is ListType):
                    885:             entries=[entries]
1.10.2.37  dwinter   886:         
                    887:         
1.10.2.3  dwinter   888:         for bibId in entries: 
                    889:             query="INSERT INTO %s " % "publications"
1.10.2.33  dwinter   890:             query+="(key_main,id_institutsbibliographie,publish) "
                    891:             query+="VALUES ('%s','%s','yes')" %(sql_quote(self.getKey()),sql_quote(bibId))
1.10.2.18  dwinter   892:             
1.10.2.5  dwinter   893:             #self.ZSQLAdd(_table="publications",id_institutsbibliographie=bibId,id_main=self.getDBId(),publish='yes')
1.10.2.3  dwinter   894:             self.ZSQLQuery(query)
                    895:      
1.10.2.33  dwinter   896:         self.updatePublicationDB(personId=self.getKey())
1.10.2.3  dwinter   897:         
                    898:         if not noredirect:
                    899:             
1.10.2.50  dwinter   900:             self.redirect(RESPONSE,"./editPublications")
1.10.2.3  dwinter   901:             
                    902:             return True
                    903:         
                    904:     
                    905:     def getDBId(self):
                    906:         """get id from the personal database"""
1.10.2.33  dwinter   907:         
                    908:         #in der neuen version ist definitions gemaess der key der Datenbank gleich dem key im Object.
                    909:         # TODO: remove all occurences of getDBId and replaces it by getKey
                    910:         return self.getKey()
                    911:         
                    912: #        search=self.ZSQLInlineSearch(_table='personal_www',key=self.getKey(),publish_the_data='yes')
                    913: #        if search:#name existiert und published, dann nimm diesen falls es mehrereeventuell nich publizierte datensaetze gibt.
                    914: #            return search[0].id
                    915: #        else:#nicht publiziert dann nimm einen davon
                    916: #            search2=self.ZSQLInlineSearch(_table='personal_www',username=self.getId())
                    917: #            if search2:
                    918: #                return search2[0].id
                    919: #            else:
                    920: #                return None
1.10.2.3  dwinter   921:         
                    922:     
                    923:     
1.10.2.2  dwinter   924:     formatBiblHelp=bibliography.formatBiblHelp
                    925:     
1.10.2.33  dwinter   926:     def sortBibliography(self,list,sortingMode=None,max=None):
1.10.2.5  dwinter   927:         if not sortingMode:
                    928:             sortingMode=self.getSortingMode()
                    929:     
1.10.2.3  dwinter   930:         if sortingMode == "year":
1.10.2.33  dwinter   931:             l= self.sortYear(list)
1.10.2.3  dwinter   932:         else:
1.10.2.33  dwinter   933:             l=self.sortPriority(list)
                    934:         
                    935:         if max:
                    936:             return l[0:min(len(l),max)]
                    937:         else:
                    938:             return l
1.10.2.2  dwinter   939:         
1.10.2.3  dwinter   940:     def sortPriority(self,list):
1.10.2.2  dwinter   941:         def sort(x,y):
                    942:             try:
                    943:                 xInt=int(x.priority)
                    944:             except:
                    945:                 xInt=0
                    946:             try:
                    947:                 yInt=int(y.priority)
                    948:             except:
                    949:                 yInt=0
                    950: 
                    951:             return cmp(xInt,yInt)
                    952: 
1.10.2.33  dwinter   953:         if not list:
                    954:             return []
1.10.2.3  dwinter   955:         tmp=[x for x in list]
                    956:         tmp.sort(sort)           
1.10.2.33  dwinter   957:         
1.10.2.2  dwinter   958:         return tmp
                    959: 
1.10.2.3  dwinter   960:     def sortYear(self,list):
                    961:         #TODO: sort TO APPEAR and TO BE PUBLISHED etc...
                    962:         
                    963:         def sort(x,y):
                    964:             try:
                    965:                 xInt=int(x.year)
                    966:             except:
                    967:                 xInt=0
                    968:             try:
                    969:                 yInt=int(y.year)
                    970:             except:
                    971:                 yInt=0
                    972: 
                    973:             return cmp(yInt,xInt)
                    974:             
                    975:             
                    976:         tmp=[x for x in list]
                    977:         
                    978:         tmp.sort(sort)           
                    979:         return tmp
                    980:     
1.10.2.54  dwinter   981:     def deleteField(self,table,oid,RESPONSE=None):
1.10.2.2  dwinter   982:         """delete entry"""
                    983:         query="DELETE FROM %s WHERE oid = '%s'"%(table,oid)
1.10.2.5  dwinter   984: 
1.10.2.2  dwinter   985:         self.ZSQLQuery(query)
1.10.2.54  dwinter   986:         self.redirect(RESPONSE,self.REQUEST['HTTP_REFERER'])
1.10.2.2  dwinter   987:         
                    988:     
1.1       dwinter   989: def manage_addMPIWGStaffForm(self):
                    990:     """form for adding the project"""
1.10      dwinter   991:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGStaffForm.zpt')).__of__(self)
1.1       dwinter   992:     return pt()
                    993: 
                    994: def manage_addMPIWGStaff(self,id,lastName,firstName,RESPONSE=None):
                    995:     """add it"""
                    996:     newObj=MPIWGStaff(id,lastName,firstName)
                    997: 
                    998:     self._setObject(id,newObj)
                    999: 
                   1000: 
                   1001:     if RESPONSE is not None:
1.10.2.50  dwinter  1002:         self.redirect(RESPONSE,'manage_main')
1.1       dwinter  1003: 
                   1004:     

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>