File:  [Repository] / MPIWGWeb / MPIWGStaff.py
Revision 1.10.2.3: download - view: text, annotated - select for diffs - revision graph
Mon Oct 10 19:10:13 2005 UTC (18 years, 8 months ago) by dwinter
Branches: r2
edit bibliography

    1: """This file contains the classes for the organization of the staff"""
    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: 
    6: from OFS.Folder import Folder
    7: from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
    8: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    9: from Products.PageTemplates.PageTemplate import PageTemplate
   10: from Products.ZCatalog.CatalogPathAwareness import CatalogAware
   11: import os
   12: import bibliography
   13: from Globals import package_home
   14: from Products.PythonScripts.standard import sql_quote
   15: from types import *
   16: 
   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:
   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)
   26:     return pt
   27: 
   28: class MPIWGStaff(CatalogAware,ZSQLExtendFolder):
   29:     """Staff"""
   30: 
   31:     meta_type="MPIWGStaff"
   32:     default_catalog='MembersCatalog'
   33:     
   34:     def PrincipiaSearchSource(self):
   35:         """Return cataloguable key for ourselves."""
   36:         return str(self)
   37: 
   38:     manage_options = Folder.manage_options+(
   39:         {'label':'Edit','action':'changeMPIWGStaffForm'},
   40:         {'label':'Change Publications Special','action':'changePublications_specialForm'},
   41:         )
   42:     
   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: 
   50: 
   51:     def index_html(self):
   52:         """show homepage"""
   53:         pt = getTemplate(self, "members_main")
   54:         return pt()
   55: 
   56:     def changePublications_specialForm(self):
   57:         """Priority publications manual field"""
   58:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changePublications_special.zpt')).__of__(self)
   59:         return pt()
   60:         
   61:     def changePublications_special(self,usePublicationsSpecial=None,specialPublicationsField=None,RESPONSE=None):
   62:         """change publications special params"""
   63:         if usePublicationsSpecial:
   64:           self.usePublicationsSpecial=True
   65:          
   66:         else:
   67:           self.usePublicationsSpecial=False
   68: 
   69:         self.specialPublicationsField=specialPublicationsField[0:]
   70: 
   71:         if RESPONSE is not None:
   72:             RESPONSE.redirect('manage_main')
   73: 
   74:         
   75:     def publications_full(self):
   76:         """show publication"""
   77:         pt=getTemplate(self, "publications_full_main")
   78:         return pt()
   79: 
   80:     def talks_full(self):
   81:         """show talks"""
   82:         pt=getTemplate(self, 'talks_full_main')
   83:         return pt()
   84: 
   85:     def teaching_full(self):
   86:         """show talks"""
   87:         pt=getTemplate(self, 'teaching_full_main')
   88:         return pt()
   89:     
   90:     def changeMPIWGStaffForm(self):
   91:         """change form"""
   92:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGStaff.zpt')).__of__(self)
   93:         return pt()
   94: 
   95:     def changeMPIWGStaff(self,lastName,firstName,RESPONSE=None):
   96:         """change it"""
   97:         self.title="%s, %s"%(lastName,firstName)
   98:         self.lastName=lastName
   99:         self.firstName=firstName
  100: 
  101:         if RESPONSE is not None:
  102:             RESPONSE.redirect('manage_main')
  103: 
  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"""
  179: 
  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:         
  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:         
  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()
  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
  225: 
  226:     def getSortingMode(self):
  227:         """get sorting mode"""
  228:         return getattr(self,'sortingMode','priority')
  229:     
  230:     def changePublications(self):
  231:         """change the publication list"""
  232:         
  233:         self.updatePublicationDB(personId=self.getDBId())
  234:         self.changeResearch(noredirect=True)
  235:         self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
  236: 
  237: 
  238:     def addPublications(self,submit=None,REQUEST=None,noredirect=None):
  239:         """add publications"""
  240: 
  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:     
  283:     formatBiblHelp=bibliography.formatBiblHelp
  284:     
  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)
  291:         
  292:     def sortPriority(self,list):
  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: 
  305:         tmp=[x for x in list]
  306:         tmp.sort(sort)           
  307:         return tmp
  308: 
  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:     
  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:     
  338: def manage_addMPIWGStaffForm(self):
  339:     """form for adding the project"""
  340:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGStaffForm.zpt')).__of__(self)
  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>