Diff for /MPIWGWeb/MPIWGStaff.py between versions 1.10.2.2 and 1.10.2.14

version 1.10.2.2, 2005/10/10 08:42:48 version 1.10.2.14, 2005/10/24 22:56:22
Line 1 Line 1
 """This file contains the classes for the organization of the staff"""  """This file contains the classes for the organization of the staff"""
   # TODO: pruefe ob die id der einzelnen tabellen, wie id in publications noch benutzt werden
   # TODO: pruefe ob die bibliographischen felder in publications noch benutzt werden
   # TODO: wird username gebraucht?
   
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder  from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
Line 8  import os Line 12  import os
 import bibliography  import bibliography
 from Globals import package_home  from Globals import package_home
 from Products.PythonScripts.standard import sql_quote  from Products.PythonScripts.standard import sql_quote
   from types import *
   from AccessControl import ClassSecurityInfo
   
   departmentList="Renn\nRheinberger\nDaston\nKlein\nSibum\nIT\nInstitut\nBibliothek"
   
   
 def getTemplate(self, tpName):  def getTemplate(self, tpName):
     """get a template file either form the instance or from the product"""      """get a template file either form the instance or from the product"""
Line 24  class MPIWGStaff(CatalogAware,ZSQLExtend Line 33  class MPIWGStaff(CatalogAware,ZSQLExtend
   
     meta_type="MPIWGStaff"      meta_type="MPIWGStaff"
     default_catalog='MembersCatalog'      default_catalog='MembersCatalog'
       departmentList=departmentList
       security=ClassSecurityInfo()
       
       def getConnectionObj(self):#ueberschreibe connection id methode    
            
               return getattr(self.de,self.de.connection_id)
           
       def isPublished(self):
           """gib publications status aus der datenbank aus"""
           username=self.getId()
           query="select count(publish_the_data) from personal_www where username='%s' and publish_the_data='yes'"%username
           
           res = self.ZSQLQuery(query)
           
           if res and res[0].count>0:
               return True
           else:
               return False
           
       def createNewDBEntry(self,publish_the_data,id,name,vorname,username,title,e_mail,e_mail_p,date_from,date_to,abteilung,heimat_inst,funded_by="",e_mail2="",txt="",txt_p="no",stay_at_mpiwg=""):
           """lege person in der datenbank an"""
           msg=""
           #test ob id schon existiert
           if self.ZSQLQuery("select id from personal_www where id='%s'"%id):
               return False,"ERROR:id %s already exists"%id
           
           if self.ZSQLQuery("select username from personal_www where username='%s' and publish_the_data='yes'"%username):
               
               return False,"ERROR:username %s already exists and has data published, id=%s not added (running update again might solve this problem)"%(username,id)
           
           if self.ZSQLQuery("select username from personal_www where username='%s' and not publish_the_data='yes'"%username):
               msg="WARNING:username %s not unique but id=%s added"%(username,id)
           #eintragen
           columnlist="publish_the_data,id,name,vorname,username,title,e_mail,e_mail_p,date_from,date_to,abteilung,heimat_inst,funded_by,e_mail2,stay_at_mpiwg"
           insertTuple=(publish_the_data,id,name,vorname,username,title,e_mail,e_mail_p,date_from,date_to,abteilung,heimat_inst,funded_by,e_mail2,stay_at_mpiwg)
           
           insert=[]
           for element in insertTuple:
               insert.append("'%s'"%element)
           
           insertStr=",".join(insert)
           queryStr="INSERT INTO personal_www (%s) VALUES (%s)"%(columnlist,insertStr)
           
           self.ZSQLQuery(queryStr)
           
           #currentwork
           if not (txt==""):
               queryStr="INSERT INTO current_work (id_main,current,publish) VALUES ('%s','%s','%s')"%(id,txt,txt_p)
               self.ZSQLQuery(queryStr)
           
           return True,msg
       
       def updateDBEntry(self,publish_the_data,date_from,date_to,DBid=None,stay_at_mpiwg=""): 
           """zpddatedb"""
           if not DBid:
               DBid=self.getDBId()
            
           self.ZSQLQuery("SET DATESTYLE TO 'German'")
   
           self.ZSQLChange(_table="personal_www",_identify="id=%s"%DBid,publish_the_data=publish_the_data,
                                      date_from=date_from,
                                      date_to=date_to,stay_at_mpiwg=stay_at_mpiwg)
                     
             
       def getPublicationSelectionMode(self):
           """get publication selection mode, default 'priority'"""
           return getattr(self,'publicationSelectionMode','priority')
           
       def changePublicationSelectionMode(self,publicationSelectionMode,RESPONSE=None):
           """change PublicationSelectionMode"""
           
           self.publicationSelectionMode=publicationSelectionMode
           
           if RESPONSE:
               RESPONSE.redirect("editPublications")
               
               
       def getPublishImage(self):
           """publish the image??, default no"""
           return getattr(self,'publishImage','no')
       
       def updateImage(self,file,publishImage,rename=None,RESPONSE=None):
           """update image"""
   
           if file and not(file.filename==""):
               if self.getImageObj():
                        self.getImageObj().updateImage(file,rename=None,RESPONSE=None)
               else:
                        self.getImageFolder().addImage2(file,fileName=self.getId())
               
           self.publishImage=publishImage
           
           if RESPONSE:
               RESPONSE.redirect("edit")
               
       def getImageFolder(self):
           """getImageFolder"""
           return self.getPhysicalRoot().www_neu.images.staff_images
       
       def getImageObj(self):
           """getImage"""
           imageFolder=self.getImageFolder()
           
           image=getattr(imageFolder,self.getId(),None)
   
           if not image:
               for suffix in ['jpg','tif']:
                   
                   image=getattr(imageFolder,self.getId()+"."+suffix,None)
                   if image:
                       break
           return image
               
       def getImageUrl(self):
           """getImageUrl"""
           image=self.getImageObj()
           if not image:
               return None
           else:
               return self.getImageObj().absolute_url()+"/image"
           
     def PrincipiaSearchSource(self):      def PrincipiaSearchSource(self):
         """Return cataloguable key for ourselves."""          """Return cataloguable key for ourselves."""
Line 86  class MPIWGStaff(CatalogAware,ZSQLExtend Line 215  class MPIWGStaff(CatalogAware,ZSQLExtend
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGStaff.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGStaff.zpt')).__of__(self)
         return pt()          return pt()
   
       security.declareProtected('View management screens','changeMPIWGStaff')
     def changeMPIWGStaff(self,lastName,firstName,RESPONSE=None):      def changeMPIWGStaff(self,lastName,firstName,RESPONSE=None):
         """change it"""          """change it"""
         self.title="%s, %s"%(lastName,firstName)          self.title="%s, %s"%(lastName,firstName)
Line 95  class MPIWGStaff(CatalogAware,ZSQLExtend Line 225  class MPIWGStaff(CatalogAware,ZSQLExtend
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
       security.declareProtected('View management screens','edit')
     def edit(self):      def edit(self):
         """Edit the pages"""          """Edit the pages"""
       #TODO: zusammenspiel mit apache, redirect auf 18080 rausnehmen bzw. zumindest verallgemeinern
           if self.REQUEST['SERVER_URL']=="http://www.mpiwg-berlin.mpg.de":
                   redURL="http://xserve04.mpiwg-berlin.mpg.de:18080/www_neu/de/mitarbeiter/members/%s/edit"%self.getId()
           
                   self.REQUEST.RESPONSE.redirect(redURL)
   
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff.zpt')).__of__(self)
         return pt()          return pt()
   
     mainEditFile=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff_main.zpt'))      mainEditFile=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMPIWGStaff_main.zpt'))
   
       def getPathStyle(self, path, selected, style=""):
           """returns a string with the given style + 'sel' if path == selected."""
   
           if path == selected:
               return style + 'sel'
           else:
               return style    
   
       security.declareProtected('View management screens','changeResearch')
     def changeResearch(self,noredirect=None):      def changeResearch(self,noredirect=None):
         """change the research entries"""          """change the research entries"""
         newEntries={}          newEntries={}
Line 154  class MPIWGStaff(CatalogAware,ZSQLExtend Line 299  class MPIWGStaff(CatalogAware,ZSQLExtend
         if not noredirect:          if not noredirect:
             self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])              self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
                   
       security.declareProtected('View management screens','editCV')    
     def editCV(self,cv=None,oid=None,RESPONSE=None):      def editCV(self,cv=None,oid=None,RESPONSE=None):
          """edit Cv"""           """edit Cv"""
   
Line 168  class MPIWGStaff(CatalogAware,ZSQLExtend Line 314  class MPIWGStaff(CatalogAware,ZSQLExtend
          if RESPONSE:           if RESPONSE:
             RESPONSE.redirect("editCV")              RESPONSE.redirect("editCV")
   
       security.declareProtected('View management screens','editAwards')    
     def editAwards(self,awards=None,oid=None,RESPONSE=None):      def editAwards(self,awards=None,oid=None,RESPONSE=None):
          """edit a awards"""           """edit a awards"""
   
Line 182  class MPIWGStaff(CatalogAware,ZSQLExtend Line 329  class MPIWGStaff(CatalogAware,ZSQLExtend
          if RESPONSE:           if RESPONSE:
             RESPONSE.redirect("editAwards")              RESPONSE.redirect("editAwards")
   
       security.declareProtected('View management screens','editTalks')    
     def editTalks(self):      def editTalks(self):
         """edit talks"""          """edit talks"""
   
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editTalks.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editTalks.zpt')).__of__(self)
         return pt()          return pt()
                   
                security.declareProtected('View management screens','editTeaching')    
     def editTeaching(self):      def editTeaching(self):
         """edit Teaching"""          """edit Teaching"""
   
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editTeaching.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editTeaching.zpt')).__of__(self)
         return pt()          return pt()
                   
       def getDocTypes(self):
           finds = self.ZopeFind(self.metadata.main.meta.bib,obj_metatypes=["OSAS_MetadataMapping__neu"])
   
           list= [x[0] for x in finds]
           return "\n".join(list)
   
       security.declareProtected('View management screens','editMainData')    
       def editMainData(self,REQUEST=None,RESPONSE=None,name=None,**argv):
           """edit main data"""
           
       
           if not name:
               pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editMainData.zpt')).__of__(self)
               return pt() 
           else:
               
               self.ZSQLChange(argv,_table="personal_www",_identify="<%s"%self.getDBId(),USE_FORM="yes")
               if RESPONSE:
                   RESPONSE.redirect("editMainData")
                   
       security.declareProtected('View management screens','newBibliogrpaphy')    
       def newBibliography(self,_docType=None, _addEntry=None,RESPONSE=None,**argv):
           
           """add an entry to the bibliography"""
           if not _docType: #kein docType
               pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','newBibliographyEntryDocType.zpt')).__of__(self)
               return pt() 
           elif _docType and not _addEntry: #doctype aber keine daten
               self.REQUEST['_docType']=_docType
               pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','newBibliographyEntry.zpt')).__of__(self)
               return pt() 
           else: #doctype und daten
               try:
                   newId=self.ZSQLSimpleSearch("select nextval('id_raw')")[0].nextval
               except:#id_raw existiert nich, dann neu erzeugen
                   
                   self.createOrUpdateId_raw()
                   newId=self.ZSQLSimpleSearch("select nextval('id_raw')")[0].nextval
                                   
               bookId="b%06i" % newId
               
               self.ZSQLAdd(argv,_table="bibliography",reference_type=_docType,id=bookId)
               self.ZSQLAdd(_table="publications",id_gen_bib=bookId,id_main=self.getDBId(),publish='yes')
               self.updatePublicationDB(personId=self.getDBId())
               
           
           if RESPONSE:
               RESPONSE.redirect("editPublications")
               
           return True
       
       security.declareProtected('View management screens','editImage')    
       def editImage(self):
           """edit images"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editImageStaff.zpt')).__of__(self)
           return pt()
       
       security.declareProtected('View management screens','editBibliography')    
       def editBibliography(self):
           """edit the bibliography"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editBibliographyEntry.zpt')).__of__(self)
           return pt()
       
         
       security.declareProtected('View management screens','editPublications')    
     def editPublications(self):      def editPublications(self):
         """edit the bibliographie"""          """edit the bibliographie"""
   
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editPublications.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editPublications.zpt')).__of__(self)
         return pt()          return pt()
   
       def changeSortingMode(self,sortingMode,RESPONSE=None,REQUEST=None):
           """change sorting mode"""
           self.sortingMode=sortingMode
           
           if RESPONSE and REQUEST:
               REQUEST.RESPONSE.redirect(REQUEST['HTTP_REFERER'])
   
           return True
   
       def getSortingMode(self):
           """get sorting mode"""
           return getattr(self,'sortingMode','priority')
       
       def integer(self,value):
           try:
               return int(value)
           except:
               return 0
           
       security.declareProtected('View management screens','changePublications')    
     def changePublications(self):      def changePublications(self):
         """change the publication list"""          """change the publication list"""
   
         self.changeResearch(noredirect=True)          self.changeResearch(noredirect=True)
           
           #self.updatePublicationDB(personId=self.getDBId())
         self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])          self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
   
   
     def addPublications(self):      security.declareProtected('View management screens','addPublications')    
       def addPublications(self,submit=None,REQUEST=None,noredirect=None):
         """add publications"""          """add publications"""
   
           #setzte flag ob aufruf aus suchformular
           
           if REQUEST.get("QUERY_STRING",None) and (not submit):
               self.REQUEST.set('fromSearch','1')
           else:
               self.REQUEST.set('fromSearch','0')
                
           if not submit or (not (submit == "add")):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addPublications.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addPublications.zpt')).__of__(self)
         return pt()          return pt()
   
           #new entries
           entries = REQUEST.form.get('addEntries',None)
           if not (type(entries) is ListType):
               entries=[entries]
               
           for bibId in entries: 
               query="INSERT INTO %s " % "publications"
               query+="(id_main,id_institutsbibliographie,publish) "
               query+="VALUES ('%s','%s','yes')" %(sql_quote(self.getDBId()),sql_quote(bibId))
               print "ADD",query
               #self.ZSQLAdd(_table="publications",id_institutsbibliographie=bibId,id_main=self.getDBId(),publish='yes')
               self.ZSQLQuery(query)
        
           self.updatePublicationDB(personId=self.getDBId())
           
           if not noredirect:
               
               self.REQUEST.RESPONSE.redirect("./editPublications")
               
               return True
           
       
       def getDBId(self):
           """get id from the personal database"""
           search=self.ZSQLInlineSearch(_table='personal_www',username=self.getId(),publish_the_data='yes')
           if search:#name existiert und published, dann nimm diesen falls es mehrereeventuell nich publizierte datensaetze gibt.
               return search[0].id
           else:#nicht publiziert dann nimm einen davon
               search2=self.ZSQLInlineSearch(_table='personal_www',username=self.getId())
               if search2:
                   return search2[0].id
               else:
                   return None
           
       
       
     formatBiblHelp=bibliography.formatBiblHelp      formatBiblHelp=bibliography.formatBiblHelp
           
     def sortPriority(self,list):      def sortBibliography(self,list,sortingMode=None):
         tmp=[x for x in list]          if not sortingMode:
               sortingMode=self.getSortingMode()
                   
           if sortingMode == "year":
               return self.sortYear(list)
           else:
               return self.sortPriority(list)
           
       def sortPriority(self,list):
         def sort(x,y):          def sort(x,y):
             try:              try:
                 xInt=int(x.priority)                  xInt=int(x.priority)
Line 231  class MPIWGStaff(CatalogAware,ZSQLExtend Line 517  class MPIWGStaff(CatalogAware,ZSQLExtend
   
             return cmp(xInt,yInt)              return cmp(xInt,yInt)
   
           tmp=[x for x in list]
           tmp.sort(sort)           
           return tmp
   
       def sortYear(self,list):
           #TODO: sort TO APPEAR and TO BE PUBLISHED etc...
           
           def sort(x,y):
               try:
                   xInt=int(x.year)
               except:
                   xInt=0
               try:
                   yInt=int(y.year)
               except:
                   yInt=0
   
               return cmp(yInt,xInt)
               
               
           tmp=[x for x in list]
           
         tmp.sort(sort)          tmp.sort(sort)
         return tmp          return tmp
   
     def deleteField(self,table,oid):      def deleteField(self,table,oid):
         """delete entry"""          """delete entry"""
         query="DELETE FROM %s WHERE oid = '%s'"%(table,oid)          query="DELETE FROM %s WHERE oid = '%s'"%(table,oid)
         print "query"  
         self.ZSQLQuery(query)          self.ZSQLQuery(query)
         self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])          self.REQUEST.RESPONSE.redirect(self.REQUEST['HTTP_REFERER'])
                   

Removed from v.1.10.2.2  
changed lines
  Added in v.1.10.2.14


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