File:  [Repository] / MPIWGWeb / MPIWGStaff.py
Revision 1.10.2.4: download - view: text, annotated - select for diffs - revision graph
Tue Oct 11 13:14:01 2005 UTC (18 years, 8 months ago) by dwinter
Branches: r2
editing publications added

    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 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:     
  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:         
  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()
  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
  254: 
  255:     def getSortingMode(self):
  256:         """get sorting mode"""
  257:         return getattr(self,'sortingMode','priority')
  258:     
  259:     def integer(self,value):
  260:         try:
  261:             return int(value)
  262:         except:
  263:             return 0
  264:         
  265:         
  266:     def changePublications(self):
  267:         """change the publication list"""
  268:         self.changeResearch(noredirect=True)
  269:         
  270:         #self.updatePublicationDB(personId=self.getDBId())
  271:         self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
  272:         
  273: 
  274: 
  275:     def addPublications(self,submit=None,REQUEST=None,noredirect=None):
  276:         """add publications"""
  277: 
  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:     
  320:     formatBiblHelp=bibliography.formatBiblHelp
  321:     
  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)
  328:         
  329:     def sortPriority(self,list):
  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: 
  342:         tmp=[x for x in list]
  343:         tmp.sort(sort)           
  344:         return tmp
  345: 
  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:     
  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:     
  375: def manage_addMPIWGStaffForm(self):
  376:     """form for adding the project"""
  377:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGStaffForm.zpt')).__of__(self)
  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>