Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.10 and 1.35

version 1.10, 2004/07/05 14:22:31 version 1.35, 2004/10/11 14:49:46
Line 5  for organizing and maintaining the diffe Line 5  for organizing and maintaining the diffe
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from Products.PageTemplates.PageTemplate import PageTemplate  from Products.PageTemplates.PageTemplate import PageTemplate
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate  from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
   from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
   from Globals import package_home
   import urllib
 import MPIWGStaff  import MPIWGStaff
 import string  import string
 import re  import re
   import os
 from types import *  from types import *
   
 import xmlhelper # Methoden zur Verwaltung der projekt xmls  import xmlhelper # Methoden zur Verwaltung der projekt xmls
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
 from OFS.Folder import Folder  from OFS.Folder import Folder
   
   from bibliography import *
   
 definedFields=['WEB_title','xdata_01','xdata_02','xdata_03','xdata_04','xdata_05','xdata_06','xdata_07','xdata_08','xdata_09','xdata_10','xdata_11','xdata_12','xdata_13','WEB_project_header','WEB_project_description','WEB_related_pub']  definedFields=['WEB_title','xdata_01','xdata_02','xdata_03','xdata_04','xdata_05','xdata_06','xdata_07','xdata_08','xdata_09','xdata_10','xdata_11','xdata_12','xdata_13','WEB_project_header','WEB_project_description','WEB_related_pub']
   
 checkFields = ['xdata_01']  checkFields = ['xdata_01']
Line 25  def sortF(x,y): Line 30  def sortF(x,y):
     try:      try:
         return cmp(x[1],y[1])          return cmp(x[1],y[1])
     except:      except:
           try:
               return cmp(str(x[1]),str(y[1]))
           except:           
               print "error",x[1],y[1]
         return 0          return 0
           
 def sortI(x,y):  def sortI(x,y):
Line 50  def sortI(x,y): Line 59  def sortI(x,y):
         return cmp(x[1],y[1])          return cmp(x[1],y[1])
   
           
 class MPIWGRoot(Folder):  class MPIWGRoot(ZSQLExtendFolder):
     """Stammordner für den Web-Server"""      """Stammordner für den Web-Server"""
   
     fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department',      fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department',
Line 64  class MPIWGRoot(Folder): Line 73  class MPIWGRoot(Folder):
     folders=['MPIWGProject','Folder']      folders=['MPIWGProject','Folder']
     meta_type='MPIWGRoot'      meta_type='MPIWGRoot'
   
     def getValue(self,field):      def upDateSQL(self,fileName):
           """updates SQL databases using fm.jar"""
           fmJarPath=os.path.join(package_home(globals()), 'updateSQL/fm.jar')
           xmlPath=os.path.join(package_home(globals()), "updateSQL/%s"%fileName)
   
           os.popen("java -classpath %s -Djava.awt.headless=true Convert %s"%(fmJarPath,xmlPath),"r").read()
           return 1
       
       def patchProjects(self,RESPONSE):
           """patch"""
           projects=self.ZopeFind(self.projects,obj_metatypes=['MPIWGProject'])
           for project in projects:
           tmp=project[1].WEB_project_description[0].replace("/CD/projects/","")[0:]
                   setattr(project[1],'WEB_project_description',[tmp[0:]])
                   RESPONSE.write("<p>%s</p>\n"%project[0])
               
       def replaceNotEmpty(self,format,field):
           """replace not empty"""
           if field and (not field==''):
               return format%field
           else:
               return ""
           
   
       def redirectIndex_html(self,request):
           #return request['URL1']+'/index_html'
           
           return urllib.urlopen(request['URL1']+'/index_html').read()
   
       
       def formatBibliography(self,here,found):
           """format"""
           return formatBibliography(here,found)
       
       def getValue(self,fieldStr):
         """Inhalt des Feldes"""          """Inhalt des Feldes"""
   
         if type(field)==StringType:          if type(fieldStr)==StringType:
               field=fieldStr
           else:
               field=fieldStr[0]
             try:              try:
                 if field[len(field)-1]==";":                  if field[len(field)-1]==";":
                     field=field[0:len(text)-1]                  field=field[0:len(field)-1]
             except:              except:
                     """nothing"""  
                           
               """nothing"""
           field=re.sub(r';([^\s])','; \g<1>',field)
             return field.encode('utf-8')              return field.encode('utf-8')
                   
         else:  
             return field[0].encode('utf-8')  
   
           
     def sortedNames(self,list):      def sortedNames(self,list):
         """sort names"""          """sort names"""
   
         def sortLastName(x,y):          def sortLastName(x_c,y_c):
               try:
                   x=urllib.unquote(x_c).encode('utf-8','ignore')
               except:
                   x=urllib.unquote(x_c)
   
               try:
                   y=urllib.unquote(y_c).encode('utf-8','ignore')
               except:
                   x=urllib.unquote(y_c)
                   
   
               
             try:              try:
                 last_x=x.split()[len(x.split())-1]                  last_x=x.split()[len(x.split())-1]
                 last_y=y.split()[len(y.split())-1]                  last_y=y.split()[len(y.split())-1]
Line 112  class MPIWGRoot(Folder): Line 169  class MPIWGRoot(Folder):
         self.id=id          self.id=id
         self.title=title          self.title=title
                   
       def urlQuote(self,str):
           """quote"""
           return urllib.quote(str)
   
       def urlUnQuote(self,str):
           """quote"""
           return urllib.unquote(str)
       
     def harvestHistoricalPersons(self):      def harvestHistoricalPersons(self):
         """erstelle liste aller erwaehnten actors"""          """erstelle liste aller erwaehnten actors"""
   
Line 130  class MPIWGRoot(Folder): Line 195  class MPIWGRoot(Folder):
             lg=len(project[1].xdata_03[0])-1              lg=len(project[1].xdata_03[0])-1
   
             if (lg>1) and (project[1].xdata_03[0][lg]==";"):              if (lg>1) and (project[1].xdata_03[0][lg]==";"):
                 project[1].xdata_03[0]=project[1].xdata_03[0][0:lg-1]                  project[1].xdata_03[0]=project[1].xdata_03[0][0:lg]
   
                       
             
Line 140  class MPIWGRoot(Folder): Line 205  class MPIWGRoot(Folder):
                     for person in project[1].xdata_03[0].split(";"):                      for person in project[1].xdata_03[0].split(";"):
                         personNormal=normalize(person)                          personNormal=normalize(person)
                         if personNormal in list.keys():                          if personNormal in list.keys():
                             list[personNormal].append(project[1])                              list[urllib.quote(personNormal)][1].append(project[1])
                         else:                          else:
                             list[personNormal]=[project[1]]                              list[urllib.quote(personNormal)]=(personNormal,[project[1]])
                 else: #guess , is sepeator                  else: #guess , is sepeator
                     for person in project[1].xdata_03[0].split(","):                      for person in project[1].xdata_03[0].split(","):
                         personNormal=normalize(person)                          personNormal=normalize(person)
                         if personNormal in list.keys():                          if urllib.quote(personNormal) in list.keys():
                             list[personNormal].append(project[1])                              list[urllib.quote(personNormal)][1].append(project[1])
                         else:                          else:
                             list[personNormal]=[project[1]]                              list[urllib.quote(personNormal)]=(personNormal,[project[1]])
   
             except:              except:
                 print "ERROR",project                  print "ERROR",project
Line 161  class MPIWGRoot(Folder): Line 226  class MPIWGRoot(Folder):
         self.personDict={}          self.personDict={}
         personDict=self.harvestHistoricalPersons()          personDict=self.harvestHistoricalPersons()
         for person in personDict.keys():          for person in personDict.keys():
             for project in personDict[person]:              for project in personDict[person][1]:
                 if person in self.personDict.keys():                  if person in self.personDict.keys():
                     self.personDict[person].append((project.absolute_url(),project.WEB_title[0],project.xdata_01[0]))                      self.personDict[person][1].append((project.absolute_url(),project.WEB_title[0],project.xdata_01[0]))
                 else:                  else:
                     self.personDict[person]=[(project.absolute_url(),project.WEB_title[0],project.xdata_01[0])]                      self.personDict[person]=(personDict[person][0],[(project.absolute_url(),project.WEB_title[0],project.xdata_01[0])])
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect("showHistoricalPersons")              RESPONSE.redirect("showHistoricalPersons")
                           
   
       def getPersonDict(self,name):
           """name von dict"""
   
           try:
               return self.personDict[name][0].encode('utf-8')
           except:
               return self.personDict[name][0]
               return self.personDict[name][0].decode('latin-1').encode('utf-8')
           
   
     def showHistoricalPersons(self):      def showHistoricalPersons(self):
         """show persons"""          """show persons"""
         pt=PageTemplateFile('Products/MPIWGWeb/zpt/showHistoricalPersons').__of__(self)          pt=PageTemplateFile('Products/MPIWGWeb/zpt/showHistoricalPersons').__of__(self)
Line 236  class MPIWGRoot(Folder): Line 311  class MPIWGRoot(Folder):
                 if re.match(searchStr,project[1]):                  if re.match(searchStr,project[1]):
                                           
                     if depth:                      if depth:
                         print "ho"  
                         if int(depth)>=len(project[1].split("."))-len(childs.split(".")):                          if int(depth)>=len(project[1].split("."))-len(childs.split(".")):
                                           
                             ret.append(project)                              ret.append(project)
Line 310  class MPIWGRoot(Folder): Line 385  class MPIWGRoot(Folder):
                           
                           
             splitted=line.split(",")              splitted=line.split(",")
             print splitted             # print splitted
                   
             if not (splitted[0]==""):              if not (splitted[0]==""):
                 newObj=MPIWGStaff.MPIWGStaff(splitted[0],splitted[1],splitted[2])                  newObj=MPIWGStaff.MPIWGStaff(splitted[0],splitted[1],splitted[2])
                                   
                 try:                  try:
                     project._setObject(splitted[0],newObj)                      project._setObject(splitted[0],newObj)
                     print "done:",splitted[0]                      #print "done:",splitted[0]
                 except:                  except:
                     print "not done:",splitted[0]                      print "not done:",splitted[0]
                                           
Line 335  class MPIWGRoot(Folder): Line 410  class MPIWGRoot(Folder):
         for x in self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff']):          for x in self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff']):
                                ret.append(x[1].title.decode('utf-8'))                                 ret.append(x[1].title.decode('utf-8'))
                           
         #ret.sort()          ret.sort()
         #print ret          #print ret
       
         return ret          return ret
Line 366  class MPIWGRoot(Folder): Line 441  class MPIWGRoot(Folder):
                     splittedId=idNr.split(".")                      splittedId=idNr.split(".")
                     depth=len(splittedId)                      depth=len(splittedId)
                     nr=idNr                      nr=idNr
                     title=project[0].WEB_title                      #title=project[0].WEB_title
                                           title=[project[0].getContent('WEB_title')]
                       #print title
                     returnList.append((depth,nr,title,project[0]))                      returnList.append((depth,nr,title,project[0]))
                   
         return returnList          return returnList
   
   
       def formatElementForOverview(self,element):
           """format the element for output in overview"""
           if element[0]==1: #department
               #print element[3].getContent('xdata_05')
               if element[3].getContent('xdata_05') == "4":
                   return """<h2 class="hier"><a href="%s">Ind. Research Group I: %s</a></h2>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title'))
               if element[3].getContent('xdata_05') == "5":
                   return """<h2 class="hier"><a href="%s">Ind. Research Group II: %s</a></h2>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title'))
               
               return """<h2 class="hier"><a href="%s">Department %s: %s</a></h2>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('xdata_05'),element[3].getContent('WEB_title'))
   
           elif element[0]==2: #mainprojects
               return """<h3 class="hier"><a href="%s">%s</a></h3><p>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title'))
   
           elif element[0]==3:
               return """<p class="hier"><a href="%s">%s</a></p>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title'))
   
           
     def changePosition(self,treeId,select,RESPONSE=None):      def changePosition(self,treeId,select,RESPONSE=None):
         """Change Postion Entry"""          """Change Postion Entry"""
         numbers=[]          numbers=[]
Line 430  class MPIWGRoot(Folder): Line 525  class MPIWGRoot(Folder):
                   
                           
                   
       def getRelativeUrlFromPerson(self,list):
           """get urls to person list"""
           ret=[]
           persons=list.split(";")
           for person in persons:
               
               if len(person)>1: #nicht nur Trennzeichen
                   splitted=person.split(",")
                   if len(splitted)==1:
                       splitted=person.split(" ")
                   splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
                   if splittedNew[0]=='':
                       del splittedNew[0]
                   search=string.join(splittedNew,' AND ')
                   
                   if not search=='':
   
                       try:
                           proj=self.MembersCatalog({'title':search})
                       except:
                           proj=None
   
                   if proj:
                       #ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url,person.encode('utf-8')))
                       ret.append("<a href=%s >%s</a>"%('members/'+proj[0].id+'/index.html',person))
                   else:
                       #ret.append("%s"%person.encode('utf-8'))
                       ret.append("%s"%person)
           return string.join(ret,";")
                   
                           
     def getUrlFromPerson(self,list):      def getUrlFromPerson(self,list):
Line 441  class MPIWGRoot(Folder): Line 565  class MPIWGRoot(Folder):
             if len(person)>1: #nicht nur Trennzeichen              if len(person)>1: #nicht nur Trennzeichen
                 splitted=person.split(",")                  splitted=person.split(",")
                 if len(splitted)==1:                  if len(splitted)==1:
                     splitted=person.split(" ")                      splitted=person.lstrip().rstrip().split(" ")
                 splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]                  splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
                 if splittedNew[0]=='':                  if splittedNew[0]=='':
                     del splittedNew[0]                      del splittedNew[0]
Line 455  class MPIWGRoot(Folder): Line 579  class MPIWGRoot(Folder):
                         proj=None                          proj=None
   
                 if proj:                  if proj:
                     ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url,person))              if person =="Otto Sibum" : person="H. Otto Sibum"
               if person =="Norton Wise" : person="M. Norton Wise"
                       #ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url,person.encode('utf-8')))
                       ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url+"/index.html",person))
                 else:                  else:
                       #ret.append("%s"%person.encode('utf-8'))
                     ret.append("%s"%person)                      ret.append("%s"%person)
         return string.join(ret,";")          return string.join(ret,";")
                                                     
Line 466  class MPIWGRoot(Folder): Line 594  class MPIWGRoot(Folder):
         members=self.getAllMembers()          members=self.getAllMembers()
         #return str(members)          #return str(members)
         for x in members:          for x in members:
             #y=x.encode('utf-8')              ret+=self.getProjectsOfMember(name=x)
             y=x              
             splitted=y.split(",")          return ret
   
       def getProjectsOfMember(self,name=None,email=None):
           """get project of a member"""
           def sortP(x,y):
               """sort by sorting number"""
               #print x.xdata_05,y.xdata_05
               return cmp(x.WEB_title,y.WEB_title)
           
          
           ret=[]
             splitNeu=[]              splitNeu=[]
             for s in splitted:          if email:
                 splitNeu.append("\""+s+"\"")              members=self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff'],obj_ids=[email])
               name =  members[0][1].title.decode('utf-8')
   
           y=name
           splitted=y.split(",")
           #XXXX
           splitNeu=["\'"+splitted[1]+" "+splitted[0]+"\'"]
           
           #for s in splitted:
           #    splitNeu.append("\""+s+"\"")
             search=string.join(splitNeu,' AND ')              search=string.join(splitNeu,' AND ')
                           
             proj=self.ProjectCatalog({'xdata_01':search})              proj=self.ProjectCatalog({'xdata_01':search})
   
             if proj:              if proj:
                 ret.append((y,proj))              proj2=[]
               for x in proj:
                
                   if not((splitted[1]==" Christoph") and (splitted[0]=="Hoffmann") and (str(x.WEB_title).find('Einstein')>0)):
                          
                          #print repr(splitted[1]),repr(splitted[0]),repr(x.WEB_title)
                          proj2.append(x)
           #    proj2.sort(sortP)
           #    ret.append((y,proj2))
           else:
               proj2=[]
   
             proj=self.ProjectCatalog({'xdata_08':search})              proj=self.ProjectCatalog({'xdata_08':search})
             if proj:              if proj:
                 ret.append((y,proj))              names=[x.WEB_title for x in proj]
               for x in proj:
                   if not x.WEB_title in names:
                       proj2.append(x)
   
   
           proj2.sort(sortP)
   
           if len(proj2)>0:
               ret.append((y,proj2))
   
         return ret          return ret
        
     def givePersonList(self,name):      def givePersonList(self,name):
         """check if person is in personfolder and return list of person objects"""          """check if person is in personfolder and return list of person objects"""
                   
         splitted=name.split(",")          splitted=name.split(",")
         if len(splitted)==1:          if len(splitted)==1:
             splitted=name.split(" ")              splitted=name.lstrip().rstrip().split(" ")
         splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]          splittedNew=[split.lstrip() for split in splitted]
           
         if splittedNew[0]=='':          if splittedNew[0]=='':
             del splittedNew[0]              del splittedNew[0]
         search=string.join(splittedNew,' AND ')          search=string.join(splittedNew,' AND ')
Line 636  class MPIWGProject(Folder): Line 805  class MPIWGProject(Folder):
         {'label':'Edit Themes & Disciplines','action':'editMPIWGDisciplinesThemesForm'},          {'label':'Edit Themes & Disciplines','action':'editMPIWGDisciplinesThemesForm'},
         )          )
   
   
       def index_html(self):
           """show homepage"""
       ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"])
   
           if ext:
               return getattr(self,ext[0][1].getId())()
   
           pt=PageTemplateFile('Products/MPIWGWeb/zpt/project_main').__of__(self)
           return pt()
   
     def getDataFields(self):      def getDataFields(self):
         """giveListofDatafields"""          """giveListofDatafields"""
         ret=[]          ret=[]
         for x in range(1,14):          for x in range(1,14):
               if not x in [6,10,9]: # not used fields
             ret.append('xdata_%02i'%x)              ret.append('xdata_%02i'%x)
         return ret          return ret
                           
Line 666  class MPIWGProject(Folder): Line 847  class MPIWGProject(Folder):
                 try:                  try:
                     text =x.encode('utf-8')                      text =x.encode('utf-8')
                 except:                  except:
                     text="ERROR"                      text=x.decode('latin-1').encode('utf-8')
                   
         #delete separator (;) if  is there is one          #delete separator (;) if  is there is one
           ## try:
   ##             print text, text[len(text)-1]
   ##         except:
   ##             print "error:",text
         try:          try:
             if text[len(text)-1]==";":              if text[len(text)-1]==";":
                 text=text[0:len(text)-1]                  text=text[0:len(text)-1]
             
                   
         except:          except:
             """nothing"""              """nothing"""
                           
         return text          text2=re.sub(r';([^\s])','; \g<1>',text)
           #teste ob ergebnis leer und header dann nehme title
           
           if (text2=='') and (field=='WEB_project_header'):
               return self.getContent('WEB_title')
   
           #teste ob WEB_project_description und keine führenden p tags
           if (len(text2)>4) and (not text2[0:3]=='<p>') and (field=='WEB_project_description'):
               return "<p>"+text2+"</p>"
           #if text2=="Otto Sibum":
           #text2="H. Otto Sibum"
           return text2
           
     def show_html(self):      def show_html(self):
         """simple index"""          """simple index"""
Line 789  def manage_addMPIWGProjectForm(self): Line 986  def manage_addMPIWGProjectForm(self):
 def manage_addMPIWGProject(self,id,RESPONSE=None):  def manage_addMPIWGProject(self,id,RESPONSE=None):
     """method to add a project"""      """method to add a project"""
     #print argv      #print argv
     if self.REQUEST.has_key('fileupload'):      fileupload=self.REQUEST.get('fileupload',None)
         fileupload=self.REQUEST['fileupload']  
         if fileupload:          if fileupload:
           print fileupload
             file_name=fileupload.filename              file_name=fileupload.filename
             filedata=fileupload.read()              filedata=fileupload.read()
   

Removed from v.1.10  
changed lines
  Added in v.1.35


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