Annotation of MPIWGWeb/MPIWGStaff.py, revision 1.10.2.4

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
                      4: # TODO: auswahl der ausgewaehlten publication auf der ersten seite der homepage
                      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.9       dwinter    10: from Products.ZCatalog.CatalogPathAwareness import CatalogAware
1.6       casties    11: import os
1.10.2.2  dwinter    12: import bibliography
1.6       casties    13: from Globals import package_home
1.10.2.2  dwinter    14: from Products.PythonScripts.standard import sql_quote
1.10.2.3  dwinter    15: from types import *
                     16: 
1.6       casties    17: 
                     18: def getTemplate(self, tpName):
                     19:     """get a template file either form the instance or from the product"""
                     20:     ext=self.ZopeFind(self.aq_parent,obj_ids=[tpName])
                     21:     if ext:
1.7       casties    22:         pt = getattr(self,ext[0][1].getId())
                     23:     else:
                     24:         pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/'+tpName)).__of__(self)
                     25:     assert(pt)
1.6       casties    26:     return pt
1.1       dwinter    27: 
1.9       dwinter    28: class MPIWGStaff(CatalogAware,ZSQLExtendFolder):
1.1       dwinter    29:     """Staff"""
                     30: 
                     31:     meta_type="MPIWGStaff"
1.9       dwinter    32:     default_catalog='MembersCatalog'
                     33:     
                     34:     def PrincipiaSearchSource(self):
                     35:         """Return cataloguable key for ourselves."""
                     36:         return str(self)
1.1       dwinter    37: 
1.6       casties    38:     manage_options = Folder.manage_options+(
                     39:         {'label':'Edit','action':'changeMPIWGStaffForm'},
1.10.2.1  dwinter    40:         {'label':'Change Publications Special','action':'changePublications_specialForm'},
1.6       casties    41:         )
                     42:     
1.1       dwinter    43:     def __init__(self,id, lastName,firstName):
                     44:         """init"""
                     45:         self.id=id
                     46:         self.title="%s, %s"%(lastName,firstName)
                     47:         self.lastName=lastName
                     48:         self.firstName=firstName
                     49: 
1.10.2.1  dwinter    50: 
1.1       dwinter    51:     def index_html(self):
1.3       dwinter    52:         """show homepage"""
1.6       casties    53:         pt = getTemplate(self, "members_main")
1.3       dwinter    54:         return pt()
1.1       dwinter    55: 
1.10.2.1  dwinter    56:     def changePublications_specialForm(self):
1.10.2.2  dwinter    57:         """Priority publications manual field"""
                     58:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changePublications_special.zpt')).__of__(self)
1.10.2.1  dwinter    59:         return pt()
1.10.2.2  dwinter    60:         
1.10.2.1  dwinter    61:     def changePublications_special(self,usePublicationsSpecial=None,specialPublicationsField=None,RESPONSE=None):
1.10.2.2  dwinter    62:         """change publications special params"""
                     63:         if usePublicationsSpecial:
1.10.2.1  dwinter    64:           self.usePublicationsSpecial=True
1.10.2.2  dwinter    65:          
                     66:         else:
                     67:           self.usePublicationsSpecial=False
1.10.2.1  dwinter    68: 
1.10.2.2  dwinter    69:         self.specialPublicationsField=specialPublicationsField[0:]
1.10.2.1  dwinter    70: 
                     71:         if RESPONSE is not None:
                     72:             RESPONSE.redirect('manage_main')
                     73: 
1.10.2.2  dwinter    74:         
1.3       dwinter    75:     def publications_full(self):
                     76:         """show publication"""
1.7       casties    77:         pt=getTemplate(self, "publications_full_main")
1.3       dwinter    78:         return pt()
                     79: 
                     80:     def talks_full(self):
                     81:         """show talks"""
1.7       casties    82:         pt=getTemplate(self, 'talks_full_main')
1.3       dwinter    83:         return pt()
                     84: 
                     85:     def teaching_full(self):
                     86:         """show talks"""
1.7       casties    87:         pt=getTemplate(self, 'teaching_full_main')
1.3       dwinter    88:         return pt()
                     89:     
1.1       dwinter    90:     def changeMPIWGStaffForm(self):
                     91:         """change form"""
1.10      dwinter    92:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGStaff.zpt')).__of__(self)
1.1       dwinter    93:         return pt()
                     94: 
1.2       dwinter    95:     def changeMPIWGStaff(self,lastName,firstName,RESPONSE=None):
1.1       dwinter    96:         """change it"""
1.2       dwinter    97:         self.title="%s, %s"%(lastName,firstName)
1.1       dwinter    98:         self.lastName=lastName
                     99:         self.firstName=firstName
1.2       dwinter   100: 
                    101:         if RESPONSE is not None:
                    102:             RESPONSE.redirect('manage_main')
                    103: 
1.10.2.2  dwinter   104:     def edit(self):
                    105:         """Edit the pages"""
                    106: 
                    107:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff.zpt')).__of__(self)
                    108:         return pt()
                    109: 
                    110:     mainEditFile=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff_main.zpt'))
                    111: 
                    112:     def changeResearch(self,noredirect=None):
                    113:         """change the research entries"""
                    114:         newEntries={}
                    115:         id_main=self.REQUEST.form['id_main']
                    116: 
                    117:         mainfieldL=self.REQUEST.form['main_fields'].split(",")
                    118:         mainfield={}
                    119:         for x in mainfieldL:
                    120:             tmp=x.split('__')
                    121:             mainfield[tmp[0]]=tmp[1]
                    122:         for field in self.REQUEST.form.keys():
                    123:             splittedField=field.split("__")
                    124:             if len(splittedField)<3:
                    125:                 pass #kein datenbank eintrag
                    126: 
                    127:             elif splittedField[2]=='new': # store new entries
                    128:                 if not newEntries.has_key(splittedField[0]):
                    129:                     newEntries[splittedField[0]]={}
                    130:                     
                    131:                 newEntries[splittedField[0]][splittedField[1]]=self.REQUEST.form[field]
                    132: 
                    133:             else:
                    134:                 query="UPDATE %s "%splittedField[0]
                    135:                 query+="SET %s = '%s' "%(splittedField[1],sql_quote(self.REQUEST.form[field]))
                    136:                 query+="WHERE oid = '%s' "%sql_quote(splittedField[2])
1.10.2.4! dwinter   137:                 
1.10.2.2  dwinter   138:                 self.ZSQLQuery(query)
                    139: 
                    140: 
                    141:         #new entries
                    142:         for newEntry in newEntries.keys():
                    143:             query="INSERT INTO %s "%newEntry
                    144:             keys=['id_main']
                    145:             values=["'"+id_main+"'"]
                    146:             for key in newEntries[newEntry].keys():
                    147:                 keys.append(key)
                    148:                 values.append("'"+newEntries[newEntry][key]+"'")
                    149: 
                    150: 
                    151:             keystring=",".join(keys)
                    152:                 
                    153:             valuestring=",".join(values)
                    154:                 
                    155:             query+=" (%s) "%keystring
                    156:             query+="VALUES (%s)"%valuestring
                    157:             if not (newEntries[newEntry][mainfield[newEntry]].lstrip().rstrip()==""):
                    158:                 self.ZSQLQuery(query)
                    159: 
                    160:         if not noredirect:
                    161:             self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
                    162:         
                    163:     def editCV(self,cv=None,oid=None,RESPONSE=None):
                    164:          """edit Cv"""
                    165: 
                    166:          if (not cv):
                    167:              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editCV.zpt')).__of__(self)
                    168:              return pt()
                    169:         
                    170:          query="UPDATE personal_www SET cv ='%s' WHERE oid='%s'"
                    171: 
                    172:          self.ZSQLQuery(query%(cv,oid))
                    173:         
                    174:          if RESPONSE:
                    175:             RESPONSE.redirect("editCV")
                    176: 
                    177:     def editAwards(self,awards=None,oid=None,RESPONSE=None):
                    178:          """edit a awards"""
1.1       dwinter   179: 
1.10.2.2  dwinter   180:          if (not awards):
                    181:              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editAwards.zpt')).__of__(self)
                    182:              return pt()
                    183:         
                    184:          query="UPDATE personal_www SET awards ='%s' WHERE oid='%s'"
                    185: 
                    186:          self.ZSQLQuery(query%(awards,oid))
                    187:         
                    188:          if RESPONSE:
                    189:             RESPONSE.redirect("editAwards")
                    190: 
                    191:     def editTalks(self):
                    192:         """edit talks"""
                    193: 
                    194:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editTalks.zpt')).__of__(self)
                    195:         return pt()
                    196:         
                    197:          
                    198:     def editTeaching(self):
                    199:         """edit Teaching"""
                    200: 
                    201:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editTeaching.zpt')).__of__(self)
                    202:         return pt()
                    203:         
1.10.2.4! dwinter   204:     def getDocTypes(self):
        !           205:         finds = self.ZopeFind(self.metadata.main.meta.bib,obj_metatypes=["OSAS_MetadataMapping__neu"])
        !           206: 
        !           207:         list= [x[0] for x in finds]
        !           208:         return "\n".join(list)
        !           209:     
        !           210:     def newBibliography(self,_docType=None, _addEntry=None,RESPONSE=None,**argv):
        !           211:         """add an entry to the bibliography"""
        !           212:         if not _docType: #kein docType
        !           213:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','newBibliographyEntryDocType.zpt')).__of__(self)
        !           214:             return pt() 
        !           215:         elif _docType and not _addEntry: #doctype aber keine daten
        !           216:             self.REQUEST['_docType']=_docType
        !           217:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','newBibliographyEntry.zpt')).__of__(self)
        !           218:             return pt() 
        !           219:         else: #doctype und daten
        !           220:             newId=self.ZSQLSimpleSearch("select nextval('id_raw')")[0].nextval
        !           221:             bookId="b%06i" % newId
        !           222:             
        !           223:             self.ZSQLAdd(argv,_table="bibliography",reference_type=_docType,id=bookId)
        !           224:             self.ZSQLAdd(_table="publications",id_gen_bib=bookId,id_main=self.getDBId(),publish='yes')
        !           225:             self.updatePublicationDB(personId=self.getDBId())
        !           226:             
        !           227:         
        !           228:         if RESPONSE:
        !           229:             RESPONSE.redirect("editPublications")
        !           230:             
        !           231:         return True
        !           232:     
1.10.2.3  dwinter   233:     def editBibliography(self):
                    234:         """edit the bibliography"""
                    235:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editBibliographyEntry.zpt')).__of__(self)
                    236:         return pt()
                    237:     
                    238:       
                    239:         
1.10.2.2  dwinter   240:     def editPublications(self):
                    241:         """edit the bibliographie"""
                    242: 
                    243:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editPublications.zpt')).__of__(self)
                    244:         return pt()
1.10.2.3  dwinter   245:     
                    246:     def changeSortingMode(self,sortingMode,RESPONSE=None,REQUEST=None):
                    247:         """change sorting mode"""
                    248:         self.sortingMode=sortingMode
                    249:         
                    250:         if RESPONSE and REQUEST:
                    251:             REQUEST.RESPONSE.redirect(REQUEST['HTTP_REFERER'])
                    252: 
                    253:         return True
1.10.2.2  dwinter   254: 
1.10.2.3  dwinter   255:     def getSortingMode(self):
                    256:         """get sorting mode"""
                    257:         return getattr(self,'sortingMode','priority')
                    258:     
1.10.2.4! dwinter   259:     def integer(self,value):
        !           260:         try:
        !           261:             return int(value)
        !           262:         except:
        !           263:             return 0
        !           264:         
        !           265:         
1.10.2.2  dwinter   266:     def changePublications(self):
                    267:         """change the publication list"""
                    268:         self.changeResearch(noredirect=True)
1.10.2.4! dwinter   269:         
        !           270:         #self.updatePublicationDB(personId=self.getDBId())
1.10.2.2  dwinter   271:         self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
1.10.2.4! dwinter   272:         
1.10.2.2  dwinter   273: 
                    274: 
1.10.2.3  dwinter   275:     def addPublications(self,submit=None,REQUEST=None,noredirect=None):
1.10.2.2  dwinter   276:         """add publications"""
                    277: 
1.10.2.3  dwinter   278:         #setzte flag ob aufruf aus suchformular
                    279:         
                    280:         if REQUEST.get("QUERY_STRING",None) and (not submit):
                    281:             self.REQUEST.set('fromSearch','1')
                    282:         else:
                    283:             self.REQUEST.set('fromSearch','0')
                    284:              
                    285:         if not submit or (not (submit == "add")):
                    286:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addPublications.zpt')).__of__(self)
                    287:             return pt()
                    288:         
                    289:         #new entries
                    290:         entries = REQUEST.form.get('addEntries',None)
                    291:         if not (type(entries) is ListType):
                    292:             entries=[entries]
                    293:             
                    294:         for bibId in entries: 
                    295:             query="INSERT INTO %s " % "publications"
                    296:             query+="(id_main,id_institutsbibliographie) "
                    297:             query+="VALUES ('%s','%s')" %(sql_quote(self.getDBId()),sql_quote(bibId))
                    298:             
                    299:             self.ZSQLQuery(query)
                    300:      
                    301:         self.updatePublicationDB(personId=self.getDBId())
                    302:         
                    303:         if not noredirect:
                    304:             
                    305:             self.REQUEST.RESPONSE.redirect("./editPublications")
                    306:             
                    307:             return True
                    308:         
                    309:     
                    310:     def getDBId(self):
                    311:         """get id from the personal database"""
                    312:         search=self.ZSQLInlineSearch(_table='personal_www',username=self.getId())
                    313:         if search:
                    314:             return search[0].id
                    315:         else:
                    316:             return None
                    317:         
                    318:     
                    319:     
1.10.2.2  dwinter   320:     formatBiblHelp=bibliography.formatBiblHelp
                    321:     
1.10.2.3  dwinter   322:     def sortBibliography(self,list):
                    323:         sortingMode=self.getSortingMode()
                    324:         if sortingMode == "year":
                    325:             return self.sortYear(list)
                    326:         else:
                    327:             return self.sortPriority(list)
1.10.2.2  dwinter   328:         
1.10.2.3  dwinter   329:     def sortPriority(self,list):
1.10.2.2  dwinter   330:         def sort(x,y):
                    331:             try:
                    332:                 xInt=int(x.priority)
                    333:             except:
                    334:                 xInt=0
                    335:             try:
                    336:                 yInt=int(y.priority)
                    337:             except:
                    338:                 yInt=0
                    339: 
                    340:             return cmp(xInt,yInt)
                    341: 
1.10.2.3  dwinter   342:         tmp=[x for x in list]
                    343:         tmp.sort(sort)           
1.10.2.2  dwinter   344:         return tmp
                    345: 
1.10.2.3  dwinter   346:     def sortYear(self,list):
                    347:         #TODO: sort TO APPEAR and TO BE PUBLISHED etc...
                    348:         
                    349:         def sort(x,y):
                    350:             try:
                    351:                 xInt=int(x.year)
                    352:             except:
                    353:                 xInt=0
                    354:             try:
                    355:                 yInt=int(y.year)
                    356:             except:
                    357:                 yInt=0
                    358: 
                    359:             return cmp(yInt,xInt)
                    360:             
                    361:             
                    362:         tmp=[x for x in list]
                    363:         
                    364:         tmp.sort(sort)           
                    365:         return tmp
                    366:     
1.10.2.2  dwinter   367:     def deleteField(self,table,oid):
                    368:         """delete entry"""
                    369:         query="DELETE FROM %s WHERE oid = '%s'"%(table,oid)
                    370:         print "query"
                    371:         self.ZSQLQuery(query)
                    372:         self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
                    373:         
                    374:     
1.1       dwinter   375: def manage_addMPIWGStaffForm(self):
                    376:     """form for adding the project"""
1.10      dwinter   377:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGStaffForm.zpt')).__of__(self)
1.1       dwinter   378:     return pt()
                    379: 
                    380: def manage_addMPIWGStaff(self,id,lastName,firstName,RESPONSE=None):
                    381:     """add it"""
                    382:     newObj=MPIWGStaff(id,lastName,firstName)
                    383: 
                    384:     self._setObject(id,newObj)
                    385: 
                    386: 
                    387:     if RESPONSE is not None:
                    388:         RESPONSE.redirect('manage_main')
                    389: 
                    390:     

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