Annotation of MPIWGWeb/MPIWGStaff.py, revision 1.10.2.3

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])
                    137: 
                    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.3! dwinter   204:     def editBibliography(self):
        !           205:         """edit the bibliography"""
        !           206:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editBibliographyEntry.zpt')).__of__(self)
        !           207:         return pt()
        !           208:     
        !           209:       
        !           210:         
1.10.2.2  dwinter   211:     def editPublications(self):
                    212:         """edit the bibliographie"""
                    213: 
                    214:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editPublications.zpt')).__of__(self)
                    215:         return pt()
1.10.2.3! dwinter   216:     
        !           217:     def changeSortingMode(self,sortingMode,RESPONSE=None,REQUEST=None):
        !           218:         """change sorting mode"""
        !           219:         self.sortingMode=sortingMode
        !           220:         
        !           221:         if RESPONSE and REQUEST:
        !           222:             REQUEST.RESPONSE.redirect(REQUEST['HTTP_REFERER'])
        !           223: 
        !           224:         return True
1.10.2.2  dwinter   225: 
1.10.2.3! dwinter   226:     def getSortingMode(self):
        !           227:         """get sorting mode"""
        !           228:         return getattr(self,'sortingMode','priority')
        !           229:     
1.10.2.2  dwinter   230:     def changePublications(self):
                    231:         """change the publication list"""
1.10.2.3! dwinter   232:         
        !           233:         self.updatePublicationDB(personId=self.getDBId())
1.10.2.2  dwinter   234:         self.changeResearch(noredirect=True)
                    235:         self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
                    236: 
                    237: 
1.10.2.3! dwinter   238:     def addPublications(self,submit=None,REQUEST=None,noredirect=None):
1.10.2.2  dwinter   239:         """add publications"""
                    240: 
1.10.2.3! dwinter   241:         #setzte flag ob aufruf aus suchformular
        !           242:         
        !           243:         if REQUEST.get("QUERY_STRING",None) and (not submit):
        !           244:             self.REQUEST.set('fromSearch','1')
        !           245:         else:
        !           246:             self.REQUEST.set('fromSearch','0')
        !           247:              
        !           248:         if not submit or (not (submit == "add")):
        !           249:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addPublications.zpt')).__of__(self)
        !           250:             return pt()
        !           251:         
        !           252:         #new entries
        !           253:         entries = REQUEST.form.get('addEntries',None)
        !           254:         if not (type(entries) is ListType):
        !           255:             entries=[entries]
        !           256:             
        !           257:         for bibId in entries: 
        !           258:             query="INSERT INTO %s " % "publications"
        !           259:             query+="(id_main,id_institutsbibliographie) "
        !           260:             query+="VALUES ('%s','%s')" %(sql_quote(self.getDBId()),sql_quote(bibId))
        !           261:             
        !           262:             self.ZSQLQuery(query)
        !           263:      
        !           264:         self.updatePublicationDB(personId=self.getDBId())
        !           265:         
        !           266:         if not noredirect:
        !           267:             
        !           268:             self.REQUEST.RESPONSE.redirect("./editPublications")
        !           269:             
        !           270:             return True
        !           271:         
        !           272:     
        !           273:     def getDBId(self):
        !           274:         """get id from the personal database"""
        !           275:         search=self.ZSQLInlineSearch(_table='personal_www',username=self.getId())
        !           276:         if search:
        !           277:             return search[0].id
        !           278:         else:
        !           279:             return None
        !           280:         
        !           281:     
        !           282:     
1.10.2.2  dwinter   283:     formatBiblHelp=bibliography.formatBiblHelp
                    284:     
1.10.2.3! dwinter   285:     def sortBibliography(self,list):
        !           286:         sortingMode=self.getSortingMode()
        !           287:         if sortingMode == "year":
        !           288:             return self.sortYear(list)
        !           289:         else:
        !           290:             return self.sortPriority(list)
1.10.2.2  dwinter   291:         
1.10.2.3! dwinter   292:     def sortPriority(self,list):
1.10.2.2  dwinter   293:         def sort(x,y):
                    294:             try:
                    295:                 xInt=int(x.priority)
                    296:             except:
                    297:                 xInt=0
                    298:             try:
                    299:                 yInt=int(y.priority)
                    300:             except:
                    301:                 yInt=0
                    302: 
                    303:             return cmp(xInt,yInt)
                    304: 
1.10.2.3! dwinter   305:         tmp=[x for x in list]
        !           306:         tmp.sort(sort)           
1.10.2.2  dwinter   307:         return tmp
                    308: 
1.10.2.3! dwinter   309:     def sortYear(self,list):
        !           310:         #TODO: sort TO APPEAR and TO BE PUBLISHED etc...
        !           311:         
        !           312:         def sort(x,y):
        !           313:             try:
        !           314:                 xInt=int(x.year)
        !           315:             except:
        !           316:                 xInt=0
        !           317:             try:
        !           318:                 yInt=int(y.year)
        !           319:             except:
        !           320:                 yInt=0
        !           321: 
        !           322:             return cmp(yInt,xInt)
        !           323:             
        !           324:             
        !           325:         tmp=[x for x in list]
        !           326:         
        !           327:         tmp.sort(sort)           
        !           328:         return tmp
        !           329:     
1.10.2.2  dwinter   330:     def deleteField(self,table,oid):
                    331:         """delete entry"""
                    332:         query="DELETE FROM %s WHERE oid = '%s'"%(table,oid)
                    333:         print "query"
                    334:         self.ZSQLQuery(query)
                    335:         self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
                    336:         
                    337:     
1.1       dwinter   338: def manage_addMPIWGStaffForm(self):
                    339:     """form for adding the project"""
1.10      dwinter   340:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGStaffForm.zpt')).__of__(self)
1.1       dwinter   341:     return pt()
                    342: 
                    343: def manage_addMPIWGStaff(self,id,lastName,firstName,RESPONSE=None):
                    344:     """add it"""
                    345:     newObj=MPIWGStaff(id,lastName,firstName)
                    346: 
                    347:     self._setObject(id,newObj)
                    348: 
                    349: 
                    350:     if RESPONSE is not None:
                    351:         RESPONSE.redirect('manage_main')
                    352: 
                    353:     

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