Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.47.2.30 and 1.47.2.58

version 1.47.2.30, 2005/10/14 15:21:22 version 1.47.2.58, 2006/08/15 13:28:29
Line 4  for organizing and maintaining the diffe Line 4  for organizing and maintaining the diffe
 """  """
 #TODO: mechanismus fur links to personen ueberarbeiten, da jetzt alle e_mails als members auftauchen unabhaengig vom status publish_the_data  #TODO: mechanismus fur links to personen ueberarbeiten, da jetzt alle e_mails als members auftauchen unabhaengig vom status publish_the_data
 #TODO: was passiert wenn aenderungen von jochen im filemaker nicht mit den aenderungen im sql uebereinstimmen  #TODO: was passiert wenn aenderungen von jochen im filemaker nicht mit den aenderungen im sql uebereinstimmen
   #TODO: in einzelnen projecte steht als pfad auf die bilder noch wwwneu statt www
   
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from Products.PageTemplates.PageTemplate import PageTemplate  from Products.PageTemplates.PageTemplate import PageTemplate
Line 46  def getTextFromNode(nodename): Line 47  def getTextFromNode(nodename):
            rc = rc + node.data             rc = rc + node.data
     return rc      return rc
   
   
   def sortStopWordsF(self,xo,yo):
       if not hasattr(self,'_v_stopWords'):
           self._v_stopWords=self.stopwords_en.data.split("\n")
       
       x=str(xo[1])
       y=str(yo[1])
       
       strx=x.split(" ")
       stry=y.split(" ")
       
       for tmp in strx:
           if tmp.lower() in self._v_stopWords:
               del strx[strx.index(tmp)]
       
       for tmp in stry:
           if tmp.lower() in self._v_stopWords:
               del stry[stry.index(tmp)]
               
       return cmp(" ".join(strx)," ".join(stry))
       
   def sortStopWords(self):
       return lambda x,y : sortStopWordsF(self,x,y)
       
 def sortF(x,y):  def sortF(x,y):
     try:      try:
         return cmp(x[1],y[1])          return cmp(x[1],y[1])
Line 269  class MPIWGRoot(ZSQLExtendFolder): Line 294  class MPIWGRoot(ZSQLExtendFolder):
     folders=['MPIWGProject','Folder','ECHO_Navigation']      folders=['MPIWGProject','Folder','ECHO_Navigation']
     meta_type='MPIWGRoot'      meta_type='MPIWGRoot'
   
       def harvestProjects(self):
           """harvest"""
           folder="/tmp"
           try:
               os.mkdir("/tmp/harvest_MPIWG")
           except:
               pass
           founds=self.ZopeFind(self.aq_parent.projects,obj_metatypes=['MPIWGProject'],search_sub=1)
           for found in founds:
               txt=found[1].harvest_page()
           
               if txt and (txt != ""):
                   name=found[0].replace("/","_")
                   fh=file("/tmp/harvest_MPIWG/"+name,"w")
                   fh.write(txt)
                   fh.close()
                   
       def decode(self,str):
           """decoder"""
           if not str:
               return ""
           if type(str) is StringType:
           try:            
                   return str.decode('utf-8')
           except:
           return str.decode('latin-1')
           else:
               
               return str
   
     def versionHeaderEN(self):      def versionHeaderEN(self):
         """version header text"""          """version header text"""
                   
Line 296  class MPIWGRoot(ZSQLExtendFolder): Line 351  class MPIWGRoot(ZSQLExtendFolder):
             ids=[int(x.id[1:]) for x in founds]              ids=[int(x.id[1:]) for x in founds]
             maximum=max(ids)              maximum=max(ids)
                           
             id_raw=self.ZSQLQuery("select nextval('id_raw_test')",debug=debug)              id_raw=self.ZSQLQuery("select nextval('id_raw')",debug=debug)
                           
             if id_raw:              if id_raw:
                 self.ZSQLQuery("drop sequence id_raw_test",debug=debug)                  self.ZSQLQuery("drop sequence id_raw",debug=debug)
                           
             self.ZSQLQuery("create sequence id_raw_test start %i"%(maximum+1),debug=debug)              self.ZSQLQuery("create sequence id_raw start %i"%(maximum+1),debug=debug)
                   
           
     def queryLink(self,link):      def queryLink(self,link):
Line 340  class MPIWGRoot(ZSQLExtendFolder): Line 395  class MPIWGRoot(ZSQLExtendFolder):
             else:              else:
                 return False                  return False
                   
       def subNavStatic(self,obj):
           """subnav" von self"""
           def sortWeight(x,y):
               x1=int(getattr(x[1],'weight','0'))
               y1=int(getattr(y[1],'weight','0'))
               return cmp(x1,y1)
         
           subs=self.ZopeFind(obj,obj_metatypes=['MPIWGTemplate','MPIWGLink'])
           subret=[]
   
           for x in subs:
               if not(x[1].title==""):
                   subret.append(x)
           subret.sort(sortWeight)
           return subret
       
     def subNav(self,obj):      def subNav(self,obj):
         """return subnav elemente"""          """return subnav elemente"""
         def sortWeight(x,y):          def sortWeight(x,y):
Line 354  class MPIWGRoot(ZSQLExtendFolder): Line 425  class MPIWGRoot(ZSQLExtendFolder):
   
                   
         #suche die zweite ebene          #suche die zweite ebene
           
         if not obj.aq_parent.getId() in ['de','en']:          if not obj.aq_parent.getId() in ['de','en']:
             obj=obj.aq_parent              obj=obj.aq_parent
                           
         while not self.ZopeFind(self,obj_ids=[obj.getId()]):          while not self.ZopeFind(self,obj_ids=[obj.getId()]):
             obj=obj.aq_parent              obj=obj.aq_parent
                   
         
         if hasattr(self,obj.getId()):          if hasattr(self,obj.getId()):
                           
             subs=self.ZopeFind(getattr(self,obj.getId()),obj_metatypes=['MPIWGTemplate','MPIWGLink'])              subs=self.ZopeFind(getattr(self,obj.getId()),obj_metatypes=['MPIWGTemplate','MPIWGLink'])
Line 488  class MPIWGRoot(ZSQLExtendFolder): Line 561  class MPIWGRoot(ZSQLExtendFolder):
         self.id=id          self.id=id
         self.title=title          self.title=title
   
       def removeStopWords(self,xo):
           """remove stop words from xo"""
           if not hasattr(self,'_v_stopWords'):
               self._v_stopWords=self.stopwords_en.data.split("\n")
       
           x=str(xo)
       
           strx=x.split(" ")
     
           for tmp in strx:
        
               if tmp.lower() in self._v_stopWords:
                   del strx[strx.index(tmp)]
   
           return " ".join(strx)
       
     def urlQuote(self,str):      def urlQuote(self,str):
         """quote"""          """quote"""
         return urllib.quote(str)          return urllib.quote(str)
Line 633  class MPIWGRoot(ZSQLExtendFolder): Line 722  class MPIWGRoot(ZSQLExtendFolder):
         """test"""          """test"""
         return self.getProjectsByFieldContent('xdata_09',['biology'])[0].absolute_url          return self.getProjectsByFieldContent('xdata_09',['biology'])[0].absolute_url
   
     def getContexts(self,childs=None,parents=None,depth=None,date=None):      def getContexts(self,childs=None,parents=None,depth=None,date=None,onlyActive=True):
         """childs alle childs, alle parents"""          """childs alle childs, alle parents"""
         ret=[]          ret=[]
                   
Line 648  class MPIWGRoot(ZSQLExtendFolder): Line 737  class MPIWGRoot(ZSQLExtendFolder):
         if childs:          if childs:
             for project in self.getProjectFields('xdata_05',sort='int',date=date):              for project in self.getProjectFields('xdata_05',sort='int',date=date):
                 searchStr=childs+"(\..*)"                  searchStr=childs+"(\..*)"
                  
                   if (onlyActive and project[0].isActiveProject()) or (not onlyActive):
                 if re.match(searchStr,project[1]):                  if re.match(searchStr,project[1]):
                                           
                     if depth:                      if depth:
Line 684  class MPIWGRoot(ZSQLExtendFolder): Line 775  class MPIWGRoot(ZSQLExtendFolder):
                   
         if sort=="int":          if sort=="int":
             ret.sort(sortI)              ret.sort(sortI)
           elif sort=="stopWords":
    
               ret.sort(sortStopWords(self))
               
         else:          else:
             ret.sort(sortF)              ret.sort(sortF)
                   
Line 761  class MPIWGRoot(ZSQLExtendFolder): Line 856  class MPIWGRoot(ZSQLExtendFolder):
                   
     def updateHomepages(self,RESPONSE=None):      def updateHomepages(self,RESPONSE=None):
         """ update"""          """ update"""
           
           RESPONSE.setHeader('Content-type', 'text/html')
         RESPONSE.write("<html><body>\n")          RESPONSE.write("<html><body>\n")
         url="http://itgroup.mpiwg-berlin.mpg.de:8050/FMPro?-db=personal-www&-format=-dso_xml&-lay=sql_export&-max=10000&-findall"          RESPONSE.write("Update Institutsbibliography\n")
           ret=self.upDateSQL('personalwww.xml')
       RESPONSE.write("done Insitutsbibliography:%s\n"%ret)
           url="http://itgroup.mpiwg-berlin.mpg.de:8050/FMPro?-db=personal-www&-format=-dso_xml&-lay=sql_export&-max=20000&-findall"
         dom = NonvalidatingReader.parseUri(url)          dom = NonvalidatingReader.parseUri(url)
         #fh=urllib.urlopen(url)          #fh=urllib.urlopen(url)
         #dom=xml.dom.minidom.parse(fh)          #dom=xml.dom.minidom.parse(fh)
   
         RESPONSE.write("got_xml_File\n")          RESPONSE.write("got_xml_File\n")
                   
                   
Line 784  class MPIWGRoot(ZSQLExtendFolder): Line 885  class MPIWGRoot(ZSQLExtendFolder):
             name=getTextFromNode(row.xpath('./dn:Name',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])              name=getTextFromNode(row.xpath('./dn:Name',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
             vorname=getTextFromNode(row.xpath('./dn:Vorname',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])              vorname=getTextFromNode(row.xpath('./dn:Vorname',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
             title=getTextFromNode(row.xpath('./dn:Title',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])              title=getTextFromNode(row.xpath('./dn:Title',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
               position=getTextFromNode(row.xpath('./dn:Position',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
             e_mail=getTextFromNode(row.xpath('./dn:e_mail',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])              e_mail=getTextFromNode(row.xpath('./dn:e_mail',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
             e_mail_p=getTextFromNode(row.xpath('./dn:e_mail_p',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])              e_mail_p=getTextFromNode(row.xpath('./dn:e_mail_p',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
             date_from=getTextFromNode(row.xpath('./dn:Date_from',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])              date_from=getTextFromNode(row.xpath('./dn:Date_from',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
Line 793  class MPIWGRoot(ZSQLExtendFolder): Line 895  class MPIWGRoot(ZSQLExtendFolder):
             funded_by=getTextFromNode(row.xpath('./dn:funded_by',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])              funded_by=getTextFromNode(row.xpath('./dn:funded_by',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
             e_mail2=getTextFromNode(row.xpath('./dn:e_mail2',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])              e_mail2=getTextFromNode(row.xpath('./dn:e_mail2',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
             publish_the_data=getTextFromNode(row.xpath('./dn:publish_the_data',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])              publish_the_data=getTextFromNode(row.xpath('./dn:publish_the_data',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
                          stay_at_mpiwg=getTextFromNode(row.xpath('./dn:stay_at_mpiwg',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0])
             #cwNode=row.xpath('./dn:current_work.current',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]              #cwNode=row.xpath('./dn:current_work.current',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]
             cw=row.xpath('./dn:current_work/dn:DATA',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})              cw=row.xpath('./dn:current_work/dn:DATA',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})
             if cw:              if cw:
Line 819  class MPIWGRoot(ZSQLExtendFolder): Line 921  class MPIWGRoot(ZSQLExtendFolder):
                     RESPONSE.write("<p>new:%s</p>\n"%username.encode('utf-8'))                      RESPONSE.write("<p>new:%s</p>\n"%username.encode('utf-8'))
                     obj=getattr(memberFolder,username)                      obj=getattr(memberFolder,username)
                     ret=obj.createNewDBEntry(publish_the_data,id,name,                      ret=obj.createNewDBEntry(publish_the_data,id,name,
                                           vorname,username,title,e_mail,                                            vorname,username,title,position,e_mail,
                                           e_mail_p,date_from,date_to,                                            e_mail_p,date_from,date_to,
                                           abteilung,heimat_inst,funded_by,                                            abteilung,heimat_inst,funded_by,
                                           e_mail2,txt,txt_p)                                            e_mail2,txt,txt_p,stay_at_mpiwg)
                     RESPONSE.write("""<p>%s</p>"""%ret[1].encode('utf-8'))                      RESPONSE.write("""<p>%s</p>"""%ret[1].encode('utf-8'))
                 except:                  except:
                     RESPONSE.write("<p>ERROR:%s %s %s</p>\n"%(username.encode('utf-8'),name.encode('utf-8'),vorname.encode('utf-8')))                      RESPONSE.write("<p>ERROR:%s %s %s</p>\n"%(username.encode('utf-8'),name.encode('utf-8'),vorname.encode('utf-8')))
Line 846  class MPIWGRoot(ZSQLExtendFolder): Line 948  class MPIWGRoot(ZSQLExtendFolder):
   
                 obj=getattr(memberFolder,username)                  obj=getattr(memberFolder,username)
                                   
                 obj.updateDBEntry(DBid=id,publish_the_data=publish_the_data,                  done= obj.updateDBEntry(DBid=id,publish_the_data=publish_the_data,
                                    date_from=date_from,                                     date_from=date_from,
                                    date_to=date_to)                                     date_to=date_to,stay_at_mpiwg=stay_at_mpiwg,position=position,abteilung=abteilung)
                   if not done and (publish_the_data=='yes'):
   
         self.reindexCatalogs(RESPONSE)                      ret=obj.createNewDBEntry(publish_the_data,id,name,
                                             vorname,username,title,position,e_mail,
                                             e_mail_p,date_from,date_to,
                                             abteilung,heimat_inst,funded_by,
                                             e_mail2,txt,txt_p,stay_at_mpiwg)
                       if not ret[0]:
           
         self.updatePublicationDB()                               RESPONSE.write("<p>Error: %s</p>\n"%repr(ret[1]))
                       else:
                           RESPONSE.write("<p>New: %s</p>\n"%repr(ret[1]))
                         
         if RESPONSE:          #TODO: reindexCatlogs and updatePublications wieder einbaue
             RESPONSE.redirect('manage_main')          #self.reindexCatalogs(RESPONSE)
   
           #self.updatePublicationDB()
                   
           #self.ZSQLResetConnection()
           RESPONSE.write("<h2>Done</h2></body></html>")
                         
         return True          return True
             
Line 874  class MPIWGRoot(ZSQLExtendFolder): Line 987  class MPIWGRoot(ZSQLExtendFolder):
                   
           
                         
              
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
Line 918  class MPIWGRoot(ZSQLExtendFolder): Line 1032  class MPIWGRoot(ZSQLExtendFolder):
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
                   
   #    def getAllMembers(self,reset=None):
   #        """give list of all members"""
   #        ret=[]
   #
   #
   #        if reset or (getattr(self,'_v_membersList',None) is None):
   #            for member in self.members._objects:
   #                if member['meta_type']=='MPIWGStaff':
   #                    memberObj=getattr(self.members,member['id'])
   #                    if memberObj.isPublished():
   #                           ret.append(memberObj.title.decode('utf-8'))
   #            
   #            ret.sort()
   #            self._v_membersList=ret[0:]
   #        print ret
   #  
   #        return self._v_membersList
   
     def getAllMembers(self):      def getAllMembers(self):
         """give list of all members"""          #ret=[]
         ret=[]  
   
         #for x in self.members.objectValues('MPIWGStaff'):          results=self.MembersCatalog({'isPublished':True})
             #print x.title  
         #    ret.append(x.title.decode('utf-8'))  
   
         for x in self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff']):  
             if x[1].isPublished():  
                                ret.append(x[1].title.decode('utf-8'))  
                           
         ret.sort()          ret=[", ".join([proj.lastName, proj.firstName]).decode('utf-8') for proj in results]
         #print ret  
       
       ret.sort()
         return ret          return ret
   
     def printAllMembers(self):      def printAllMembers(self):
         """prin"""          """print"""
         members=self.getAllMembers()          members=self.getAllMembers()
         ret=""          ret=""
         for x in members:          for x in members:
Line 952  class MPIWGRoot(ZSQLExtendFolder): Line 1076  class MPIWGRoot(ZSQLExtendFolder):
             return entry              return entry
   
   
     def getTree(self,date=None):      def getTree(self,date=None,onlyActive=None):
         """generate Tree from project list"""          """generate Tree from project list"""
   
         returnList=[]          returnList=[]
Line 966  class MPIWGRoot(ZSQLExtendFolder): Line 1090  class MPIWGRoot(ZSQLExtendFolder):
                     #title=project[0].WEB_title                      #title=project[0].WEB_title
                     title=[project[0].getContent('WEB_title')]                      title=[project[0].getContent('WEB_title')]
                     #print title                      #print title
                     if idNr[0]!="x":  
                        returnList.append((depth,nr,title,project[0]))  
                   
                       if idNr[0]=="x": # kompatibilitŠt mit alter Konvention, x vor der Nummer macht project inactive
                           project[0].setActiveFlag(False)
                      
                       if onlyActive and project[0].isActiveProject(): #nur active projekte
                          returnList.append((depth,nr,title,project[0]))
                       elif not onlyActive:
                         returnList.append((depth,nr,title,project[0]))
         return returnList          return returnList
   
     def formatElementsAsList(self,elements):      def formatElementsAsList(self,elements):
Line 1015  class MPIWGRoot(ZSQLExtendFolder): Line 1144  class MPIWGRoot(ZSQLExtendFolder):
             ret+="""<li>\n"""              ret+="""<li>\n"""
                           
             if actualDepth==1:              if actualDepth==1:
                 departmentName={'1':'Department I','2':'Department II','3':'Department III', '4':'Ind. Research Group','5':'Ind. Research Group'}                   departmentName={'1':'Department I','2':'Department II','3':'Department III', '4':'Ind. Research Group','5':'Ind. Research Group','6':'Ind. Research Group','7':'Research Network'} 
                 department=element[3].getContent('xdata_05')                  department=element[3].getContent('xdata_05')
                 ret+="""<a href="#top"><img src="../grafik/totop.gif" vspace="10" border="0"></a><br><a name="dept%s"></a>%s: """%(department,departmentName[department])                  ret+="""<a href="#top"><img src="../grafik/totop.gif" vspace="10" border="0"></a><br><a name="dept%s"></a>%s: """%(department,departmentName[department])
   
Line 1033  class MPIWGRoot(ZSQLExtendFolder): Line 1162  class MPIWGRoot(ZSQLExtendFolder):
                 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'))                  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":              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">Ind. Research Group II: %s</a></h2>"""%(element[3].absolute_url()+"/index.html",element[3].getContent('WEB_title'))
               if element[3].getContent('xdata_05') == "6":
                   return """<h2 class="hier"><a href="%s">Research Network "History of Scientific Objects": %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'))              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'))
   
Line 1083  class MPIWGRoot(ZSQLExtendFolder): Line 1214  class MPIWGRoot(ZSQLExtendFolder):
   
                   
         for idNr in form.keys():          for idNr in form.keys():
               
               splitted=idNr.split('_')
               
               if len(splitted)==1: # name des Feldes = idNr, dann Aendere id_nr
             if not (fields[int(idNr)][3].xdata_05==form[idNr]):              if not (fields[int(idNr)][3].xdata_05==form[idNr]):
                 fields[int(idNr)][3].xdata_05=form[idNr]                  fields[int(idNr)][3].xdata_05=form[idNr]
                 fields[int(idNr)][3].copyObjectToArchive()                  fields[int(idNr)][3].copyObjectToArchive()
                   
                   if form.has_key(idNr+'_active'): # active flag is set
                     
                       fields[int(splitted[0])][3].setActiveFlag(True)
                   else:
                     
                       fields[int(splitted[0])][3].setActiveFlag(False)
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('showTree')              RESPONSE.redirect('showTree')
Line 1169  class MPIWGRoot(ZSQLExtendFolder): Line 1310  class MPIWGRoot(ZSQLExtendFolder):
         """give tuple member /projects"""          """give tuple member /projects"""
         ret=[]          ret=[]
         members=self.getAllMembers()          members=self.getAllMembers()
          
         #return str(members)          #return str(members)
         for x in members:          for x in members:
            
             ret+=self.getProjectsOfMember(name=x,date=date)              ret+=self.getProjectsOfMember(name=x,date=date)
                           
         return ret          return ret
Line 1238  class MPIWGRoot(ZSQLExtendFolder): Line 1381  class MPIWGRoot(ZSQLExtendFolder):
         if splittedNew[0]=='':          if splittedNew[0]=='':
             del splittedNew[0]              del splittedNew[0]
         search=string.join(splittedNew,' AND ')          search=string.join(splittedNew,' AND ')
           
         if not search=='':          if not search=='':
             proj=self.MembersCatalog({'title':search})              proj=self.MembersCatalog({'title':search})
   
Line 1368  class MPIWGProject(CatalogAware,Folder): Line 1512  class MPIWGProject(CatalogAware,Folder):
     meta_type='MPIWGProject'      meta_type='MPIWGProject'
     default_catalog='ProjectCatalog'      default_catalog='ProjectCatalog'
   
    
     def sortedByPlace(self,metatype):      def sortedByPlace(self,metatype):
         """find metatype and sort by place"""          """find metatype and sort by place"""
         def sort(x,y):          def sort(x,y):
Line 1397  class MPIWGProject(CatalogAware,Folder): Line 1542  class MPIWGProject(CatalogAware,Folder):
           
     def copyImageToMargin(self,RESPONSE=None):      def copyImageToMargin(self,RESPONSE=None):
         """copy inline images to marginal images"""          """copy inline images to marginal images"""
         self.getContent('WEB_project_description',filter='yes')  
   
         filename=self.imageURL.split("/")[-1]          
           #getImages from WEB_project_description
           description=self.getContent('WEB_project_description')
           
           text2=description
           splitted=text2.split("""<p class="picture">""")
           
           imageURLs=[]
           imageCaptions=[]
           for split in  splitted[1:]:
                   tmp=split.split("</p>")
                   #return repr(splitted[1])
                   try:
                           imageURLs.append(tmp[0].split("\"")[1].encode('utf-8'))
                   except:
                           imageURLs.append(tmp[0].split("src=")[1].split(" ")[0].encode('utf-8'))
                   
                   split2="</p>".join(tmp[1:])
   
   
                   splitted=split2.split("""<p class="picturetitle">""")
                   if len(splitted)>1:
                       tmp=splitted[1].split("</p>")
                       imageCaptions.append(tmp[0].encode('utf-8'))
   
   
                   else:
                       #keine caption
   
                       imageCaptions.append("")
                   
             
   
           
           
           
           
           #eintragen:
           for imageURL in imageURLs:
               filename=imageURL.split("/")[-1]
         #lege neues images object an, mit leerem bild          #lege neues images object an, mit leerem bild
   
         if self.ZopeFind(self,obj_ids=[filename]):          if self.ZopeFind(self,obj_ids=[filename]):
             #existiert das bild schon, dann neueun filenamen                  #existiert das bild schon, dann neuen filenamen
             filename="project_image_"+filename              filename="project_image_"+filename
                           
         self.addImage(None,self.imagecap,filename=filename)              self.addImage(None,imageCaptions[imageURLs.index(imageURL)],filename=filename)
         #hole die bilddaten aus der url          #hole die bilddaten aus der url
         data=urllib.urlopen(self.absolute_url()+"/"+self.imageURL).read()              url=self.absolute_url()+"/"+imageURL
               #url=self.absolute_url()+"/"+filename
           
               try:#relative url
                   data=urllib.urlopen(url).read()
               except:
                   try:#absolute
                       data=urllib.urlopen(self.imageURL).read()
                   except:
                       zLOG.LOG("MPIWG Project",zLOG.ERROR,"can't open: %s"%url)
   
         obj=getattr(self,filename)          obj=getattr(self,filename)
         obj.update_data(data)          obj.update_data(data)
Line 1538  class MPIWGProject(CatalogAware,Folder): Line 1730  class MPIWGProject(CatalogAware,Folder):
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect('manageImages')              RESPONSE.redirect('manageImages')
   
       
       def hasChildren(self,date=None,onlyActive=True):
           """check if project has children"""
           ct=self.getContexts(childs=self.getContent('xdata_05'),
                                    depth=1,date=date,onlyActive=onlyActive)
           
           if ct and len(ct)>0:
                return True
           else:
                return False
            
     def addImage(self,fileHd,caption,RESPONSE=None,filename=None):      def addImage(self,fileHd,caption,RESPONSE=None,filename=None):
         """add an MPIWG_Project_image"""          """add an MPIWG_Project_image"""
   
Line 1695  class MPIWGProject(CatalogAware,Folder): Line 1898  class MPIWGProject(CatalogAware,Folder):
         self.creationTime=time.strftime("%Y%m%d%H%M%S",time.localtime())[0:]          self.creationTime=time.strftime("%Y%m%d%H%M%S",time.localtime())[0:]
         self.id=id          self.id=id
         self.title=id          self.title=id
           self.isActiveFlag=True #Flag is true is the project is still active, False if accomplished
           
         if argv:          if argv:
             for arg in definedFields:              for arg in definedFields:
                 try:                  try:
Line 1715  class MPIWGProject(CatalogAware,Folder): Line 1920  class MPIWGProject(CatalogAware,Folder):
         )          )
   
   
       def isActiveProject(self):
           """check if the project is still active, default is true, set to false is the project is accomplished"""
           return getattr(self,'isActiveFlag',True)
           
       def setActiveFlag(self,status=True):
           """set the active flag"""
           self.isActiveFlag=status
           
     def checkDate(self,date):      def checkDate(self,date):
         """teste ob zum Zeitpunkt date eine andere version existierte"""          """teste ob zum Zeitpunkt date eine andere version existierte"""
                   
Line 1756  class MPIWGProject(CatalogAware,Folder): Line 1969  class MPIWGProject(CatalogAware,Folder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','no_project')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','no_project')).__of__(self)
         return pt()          return pt()
           
       def getGetNeighbourhood(self,wordStr, length=100):
           """finde umgebung um die worte in wordStr, zurŸckgegeben wird eine Array mit den Umgebungen von Fundstellen der Worte
           alle Tags werden entfernt, die Fundstellen werden mit <span class="found">XX</span> getaggt, die Umgebungen werden 
           case insensitive gesucht
           @param wordStr: string mit Worten getrennt durch Leerzeichen, Phrasen sind mit " gekennzeichnet
                           "eine phrase", "*"  bezeichnet wildcards und wird ignoriert"
           @param length: optional, default wert 100, 2*length ist die grš§e der Umgebung
           """
           
           ret=[] # nimmt das Array auf, dass spŠter zurŸckgegeben wird
           ranges=[] #Array mit tupeln x,y wobei x die Position des Anfang und y des Endes der i-ten Umgebung angiebt
           
           def isInRanges(nr,length):
               """test ob eine gegeben Position nr schon irgendwo in einer Umgebung ist, gibt den Index des ersten Wertes aus ranges zurŸck, 
               -1, wenn kein Treffer
               
               @param nr: Position die geprŸft werden soll
               @param length: LŠnge des Wortes das geprŸft werden soll
               """
               for x in ranges:
                   if (x[0]<=nr) and (nr < (x[1]-length)):
                       return ranges.index(x)
               return -1
                   
           # deal with phrases, in Phrasen werden die Leerzeichen durch "_" ersetzt.
           def rep_empty(str):
               x= re.sub(" ","_",str.group(0))
               return re.sub("\"","",x)
               
           wordStr=re.sub("\".*?\"", rep_empty,wordStr)#ersetze leerzeichen in " " durch "_" und loesche "
           
           #deal with wildcards, for our purposes it is enough to delete the wildcard 
           wordStr=wordStr.replace("*","")
           
           words=wordStr.split(" ")
           #if not words is ListType:
           #   words=[words]
               
           txt=self.harvest_page()
          
           txt=re.sub("<.*?>", "", txt) # loesche alle Tags
           for word in words:
               word=re.sub("_"," ",word) # ersetze zurueck "_" durch " "
               pos=0
               
               n=txt.lower().count(word.lower()) # wie oft tritt das Wort auf
   
               for i in range(n):
                   pos=txt.lower().find(word.lower(),pos)
   
                   if pos > 0:
                       x=max(0,pos-length)
                       y=min(len(txt),pos+length)
                     
                       
                       #is word already in one of the results
                       nr=isInRanges(pos,len(word))
                       if nr >=0:# word ist in einer schon gefunden Umgebung, dann vergrš§ere diese
                           x=min(ranges[nr][0],x)
                           y=max(ranges[nr][1],y)
                 
                       str=txt[x:y]
                   
                       if nr >=0: # word ist in einer schon gefunden Umgebung
                           ranges[nr]=(x,y) # neue Position der Umgebung
   
                           ret[nr]=str # neue Umgebung
                       else: # andernfalls neue Umgebung hinzufŸgen
                           ranges.append((x,y))
   
                           ret.append(str)
                       
                       pos=pos+len(word)
                   else:
                       break;
                   
           # now highlight everything        
           for x in range(len(ret)):
               for word in words:
                   repl=re.compile(word,re.IGNORECASE)
                   ret[x]=repl.sub(""" <span class="found">%s</span>"""%word.upper(),ret[x])
   
           return ret
                                   
       def harvest_page(self,context=None):
           """seite fuer harvesting fuer die Projektsuche"""
           if not context:
               context=self
               
           if self.isActiveProject() and self.isActual():
                ext=getattr(self,"harvest_main",None)
                if ext:
                    return getattr(self,ext.getId())()
   
                pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','harvest_main')).__of__(context)    
   
   
                return pt()
            
     def index_html(self,request=True,context=None):      def index_html(self,request=True,context=None):
         """show homepage"""          """show homepage"""
         if not context:          if not context:
Line 1906  class MPIWGProject(CatalogAware,Folder): Line 2218  class MPIWGProject(CatalogAware,Folder):
                   
         return True          return True
   
     security.declareProtected('View managment screens','edit')      security.declareProtected('View management screens','edit')
     def edit(self,western=None):      def edit(self,western=None):
         """Edit pages"""          """Edit pages"""
         if western:          if western:
Line 1916  class MPIWGProject(CatalogAware,Folder): Line 2228  class MPIWGProject(CatalogAware,Folder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProjectNeu.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProjectNeu.zpt')).__of__(self)
         return pt()          return pt()
   
       edit_MPIWGProject_main = PageTemplateFile('zpt/edit_MPIWGProject_main', globals())
   
       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    
   
     def preview(self,description):      def preview(self,description):
         """preview"""          """preview"""
         tmpPro=getattr(self,"previewTemplate",None)          tmpPro=getattr(self,"previewTemplate",None)
Line 1925  class MPIWGProject(CatalogAware,Folder): Line 2247  class MPIWGProject(CatalogAware,Folder):
         for field in definedFields:          for field in definedFields:
             setattr(tmpPro,field,getattr(self,field))              setattr(tmpPro,field,getattr(self,field))
         tmpPro.WEB_project_description=description[0:]          tmpPro.WEB_project_description=description[0:]
                   tmpPro.invisible=True
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','previewFrame.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','previewFrame.zpt')).__of__(self)
         return pt()          return pt()
   
Line 1974  class MPIWGProject(CatalogAware,Folder): Line 2296  class MPIWGProject(CatalogAware,Folder):
                                   
                 setattr(self,x,[self.REQUEST[x].decode('utf-8')])                  setattr(self,x,[self.REQUEST[x].decode('utf-8')])
   
           if self.REQUEST.has_key('active'):
               self.setActiveFlag(True)
           else:
               self.setActiveFlag(False)
         if fromEdit and (RESPONSE is not None):          if fromEdit and (RESPONSE is not None):
             RESPONSE.redirect('./editMPIWGBasisEditor')              RESPONSE.redirect('./editMPIWGBasisEditor')
   
Line 2033  class MPIWGProject(CatalogAware,Folder): Line 2359  class MPIWGProject(CatalogAware,Folder):
         splitted=[y.rstrip().lstrip() for y in splitted]          splitted=[y.rstrip().lstrip() for y in splitted]
                   
         for x in splitted:          for x in splitted:
               x=re.sub(r"[^A-z ]","",x)
             if (not x==u'') and x in wert:              if (not x==u'') and x in wert:
                 return 1                  return 1
         return 0          return 0
Line 2043  class MPIWGProject(CatalogAware,Folder): Line 2370  class MPIWGProject(CatalogAware,Folder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasisNeu.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasisNeu.zpt')).__of__(self)
         return pt()          return pt()
   
           security.declareProtected('View management screens','editMPIWGBasisForm')
     def editMPIWGBasisForm(self):      def editMPIWGBasisForm(self):
         """editform"""          """editform"""
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasis.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGBasis.zpt')).__of__(self)
         return pt()          return pt()
   
           security.declareProtected('View management screens','editMPIWGRelatedPublicationsForm')
     def editMPIWGRelatedPublicationsForm(self):      def editMPIWGRelatedPublicationsForm(self):
         """Edit related Publications"""          """Edit related Publications"""
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGRelatedPublications.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGRelatedPublications.zpt')).__of__(self)

Removed from v.1.47.2.30  
changed lines
  Added in v.1.47.2.58


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