Diff for /MPIWGWeb/Attic/MPIWGRoot.py between versions 1.1.2.6 and 1.1.2.24

version 1.1.2.6, 2008/08/28 18:20:09 version 1.1.2.24, 2009/04/29 07:53:35
Line 40  def sortWeight(x,y): Line 40  def sortWeight(x,y):
 class MPIWGRoot(ZSQLExtendFolder):  class MPIWGRoot(ZSQLExtendFolder):
     """Stammordner fuer den Web-Server"""      """Stammordner fuer den Web-Server"""
   
       meta_type='MPIWGRoot'
   
     fieldLabels={'WEB_title':'WEB_Title',      fieldLabels={'WEB_title':'WEB_Title',
                  'xdata_01':'Responsible Scientists',                   'xdata_01':'Responsible Scientists',
                  'xdata_02':'Department',                   'xdata_02':'Department',
Line 58  class MPIWGRoot(ZSQLExtendFolder): Line 60  class MPIWGRoot(ZSQLExtendFolder):
                  'WEB_project_description':'WEB_project_description',                   'WEB_project_description':'WEB_project_description',
                  'WEB_related_pub':'WEB_related_pub'}                   'WEB_related_pub':'WEB_related_pub'}
           
       # (is this used?)
     folders=['MPIWGProject','Folder','ECHO_Navigation']      folders=['MPIWGProject','Folder','ECHO_Navigation']
     meta_type='MPIWGRoot'      # language of this instance
       lang = 'en'
       # types of objects that show up in navigation
       nav_meta_types = ['MPIWGTemplate','MPIWGLink','MPIWGFolder']
   
       def getGetNeighbourhood(self,obj, wordStr, length=100,tagging=True):
           """finde umgebung um die worte in wordStr, zurueckgegeben 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 groesse der Umgebung
           @param tagging: optional default wert true, kein span tag wird erzweugt falls tag=false
           """
           
           ret=[] # nimmt das Array auf, dass spaeter zurueckgegeben wird
           ranges=[] #Array mit tupeln x,y wobei x die Position des Anfang und y des Endes der i-ten Umgebung angiebt
           
           wordStr=wordStr.lstrip().rstrip()
           
           def isInRanges(nr,length):
               """test ob eine gegeben Position nr schon irgendwo in einer Umgebung ist, gibt den Index des ersten Wertes aus ranges zurueck, 
               -1, wenn kein Treffer
               
               @param nr: Position die geprueft werden soll
               @param length: Laenge des Wortes das geprueft 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=obj.harvest_page()
           if not txt:
               return ret
           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 vergroessere 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 hinzufuegen
                           ranges.append((x,y))
   
                           ret.append(str)
                       
                       pos=pos+len(word)
                   else:
                       break;
                   
           # now highlight everything        
           if tagging:
               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 copyAllImagesToMargin(self):
           """tranformiere alle Bilder in die Margins"""
           projects=self.getTree()
           ret=""
           for project in projects:
               proj=project[3]
               try:
                   persons=proj.copyImageToMargin();
               except:
                   logging.error("Cannnot do: %s"%repr(project))
   
     def transformProjectsToId(self):      def transformProjectsToId(self):
         """trnasformiere zu ID, Hilfsfunktion die die alten Templates analysiert und mit der neuen Liste          """trnasformiere zu ID, Hilfsfunktion die die alten Templates analysiert und mit der neuen Liste
Line 67  class MPIWGRoot(ZSQLExtendFolder): Line 172  class MPIWGRoot(ZSQLExtendFolder):
         projects=self.getTree()          projects=self.getTree()
         ret=""          ret=""
         for project in projects:          for project in projects:
               
             proj=project[3]              proj=project[3]
             persons=proj.identifyNames(proj.getContent('xdata_01'))              persons=proj.identifyNames(proj.getContent('xdata_01'))
             if not hasattr(proj,'responsibleScientistsList'):              if not hasattr(proj,'responsibleScientistsList'):
Line 85  class MPIWGRoot(ZSQLExtendFolder): Line 191  class MPIWGRoot(ZSQLExtendFolder):
                   
         return ret          return ret
                                   
                   
     def harvestProjects(self):      def harvestProjects(self):
         """harvest"""          """harvest"""
         folder="/tmp"          folder="/tmp"
Line 123  class MPIWGRoot(ZSQLExtendFolder): Line 230  class MPIWGRoot(ZSQLExtendFolder):
         else:          else:
             return array[idx]              return array[idx]
                   
       def getLang(self):
           """returns the default language"""
           return self.lang
   
     def browserCheck(self):      def browserCheck(self):
         """check the browsers request to find out the browser type"""          """check the browsers request to find out the browser type"""
Line 225  class MPIWGRoot(ZSQLExtendFolder): Line 335  class MPIWGRoot(ZSQLExtendFolder):
           
     def subNavStatic(self,obj):      def subNavStatic(self,obj):
         """subnav" von self"""          """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'])          subs=self.ZopeFind(obj,obj_metatypes=['MPIWGTemplate','MPIWGLink'])
         subret=[]          subret=[]
   
Line 240  class MPIWGRoot(ZSQLExtendFolder): Line 345  class MPIWGRoot(ZSQLExtendFolder):
         return subret          return subret
           
     def subNav(self,obj):      def subNav(self,obj):
         """return subnav elemente"""          """return sub-navigation elements i.e. below sections"""
         def sortWeight(x,y):          # get section -> parent should be MPIWGRoot
             x1=int(getattr(x[1],'weight','0'))          p = obj
             y1=int(getattr(y[1],'weight','0'))          sec = None
             return cmp(x1,y1)          # descend parents to the root (and remember the last id)
         #if obj.meta_type in ['MPIWGTemplate','MPIWGLink']:          while p is not None and p.meta_type != 'MPIWGRoot':
         #    id=obj.aq_parent.getId()              sec = p
         #else:              p = p.aq_parent
       
         #id=obj.getId()          subsecs = sec.objectItems(self.nav_meta_types)
           subsecs = [s for s in subsecs if s[1].title != ""]
                   subsecs.sort(sortWeight)
         #suche die zweite ebene          return subsecs
                           
         if not obj.aq_parent.getId() in ['de','en']:      def isType(self,object,meta_type):
             obj=obj.aq_parent          """teste ob ein object vom meta_type ist."""
                   return (object.meta_type==meta_type)
         while not self.ZopeFind(self,obj_ids=[obj.getId()]):  
             obj=obj.aq_parent  
           
         
         if hasattr(self,obj.getId()):  
               
             subs=self.ZopeFind(getattr(self,obj.getId()),obj_metatypes=['MPIWGTemplate','MPIWGLink'])  
             subret=[]  
   
             for x in subs:  
                 if not(x[1].title==""):  
                     subret.append(x)  
             subret.sort(sortWeight)  
             return subret  
         else:  
             return None  
   
     def isActive(self,name):      def isActive(self,name):
         """teste ob subnavigation aktiv"""          """teste ob subnavigation aktiv"""
Line 287  class MPIWGRoot(ZSQLExtendFolder): Line 376  class MPIWGRoot(ZSQLExtendFolder):
         secs = self.objectItems(['MPIWGFolder'])          secs = self.objectItems(['MPIWGFolder'])
         secs.sort(sortWeight)          secs.sort(sortWeight)
         #logging.debug("root: %s secs: %s"%(repr(self.absolute_url()), repr(secs)))          #logging.debug("root: %s secs: %s"%(repr(self.absolute_url()), repr(secs)))
         return secs          # return pure list of objects
           return [s[1] for s in secs]
   
     def getSectionStyle(self, name, style=""):      def getSectionStyle(self, name, style=""):
         """returns a string with the given style + '-sel' if the current section == name"""          """returns a string with the given style + '-sel' if the current section == name"""
Line 296  class MPIWGRoot(ZSQLExtendFolder): Line 386  class MPIWGRoot(ZSQLExtendFolder):
         else:          else:
             return style                  return style    
   
       def getFeatures(self, num=None):
           """returns a list of the last num Features"""
           dir = getattr(self, 'features')
           features = dir.objectItems(['MPIWGFeature'])
           features.sort(sortWeight)
           if num is not None:
               # take only the last num elements
               features = features[-num:]
           # return pure list of objects
           return [f[1] for f in features]
   
   
       def getMPIWGRoot(self):
           """returns the MPIWG root"""
           return self
   
     def MPIWGrootURL(self):      def MPIWGrootURL(self):
         """returns the URL to the root"""          """returns the URL to the root"""
         return self.absolute_url()          return self.absolute_url()
Line 327  class MPIWGRoot(ZSQLExtendFolder): Line 433  class MPIWGRoot(ZSQLExtendFolder):
   
     def isActiveMember(self,key):      def isActiveMember(self,key):
         """tested ob Mitarbeiter key ist aktiv"""          """tested ob Mitarbeiter key ist aktiv"""
           key=utf8ify(key)
         ret=self.getat(self.ZSQLInlineSearch(_table='personal_www',          ret=self.getat(self.ZSQLInlineSearch(_table='personal_www',
                                             _op_key='eq',key=key,                                              _op_key='eq',key=key,
                                             _op_publish_the_data='eq',                                              _op_publish_the_data='eq',
Line 482  class MPIWGRoot(ZSQLExtendFolder): Line 589  class MPIWGRoot(ZSQLExtendFolder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeMPIWGRootForm')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeMPIWGRootForm')).__of__(self)
         return pt()          return pt()
   
     def changeMPIWGRoot(self,title,disciplineList,themesList,connection_id,RESPONSE=None):      def changeMPIWGRoot(self,title,disciplineList,themesList,connection_id,lang=None,RESPONSE=None):
         """change"""          """change"""
         self.title=title          self.title=title
         self.connection_id=connection_id          self.connection_id=connection_id
         self.disciplineList=disciplineList          self.disciplineList=disciplineList
         self.themesList=themesList          self.themesList=themesList
           if lang is not None:
               self.lang = lang
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 525  class MPIWGRoot(ZSQLExtendFolder): Line 634  class MPIWGRoot(ZSQLExtendFolder):
                         else:                          else:
                             ret.append(project)                              ret.append(project)
                   
         logging.debug("getContexts: childs=%s parents=%s depth=%s => %s"%(childs,parents,depth,repr(ret)))          #logging.debug("getContexts: childs=%s parents=%s depth=%s => %s"%(childs,parents,depth,repr(ret)))
        
         return ret          return ret
   
           
Line 669  class MPIWGRoot(ZSQLExtendFolder): Line 779  class MPIWGRoot(ZSQLExtendFolder):
                   
                   
         result,msg=MPIWGStaff.createNewDBEntry(self,data['publish_the_data'],data['key'],data['last_name'],          result,msg=MPIWGStaff.createNewDBEntry(self,data['publish_the_data'],data['key'],data['last_name'],
                                   data['first_name'],data['title'],data['status'],"",                                    data['first_name'],data['titles_new'],data['status'],"",
                                   "",data['date_from'],data['date_to'],                                    "",data['date_from'],data['date_to'],
                                   data['department'],data['home_inst'],data['funded_by'],                                    data['department'],'',data['funded_by'],
                                   data['e_mail2'],data['current_work'],"yes",data['date_stay_at_mpiwg'],data['group'],"no",data['current_work'])                                    data['e_mail2'],data['current_work'],"yes",data['date_stay_at_mpiwg'],data['group'],"no",data['current_work'])
                   
         return result,msg          return result,msg
Line 786  class MPIWGRoot(ZSQLExtendFolder): Line 896  class MPIWGRoot(ZSQLExtendFolder):
         return "<html><body>DONE</body></html>"          return "<html><body>DONE</body></html>"
   
   
       
   
     def updatePersonalwww_html(self):      def updatePersonalwww_html(self):
         """update form for the homepages web form"""          """update form for the homepages web form"""
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','updatePersonalwww.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','updatePersonalwww.zpt')).__of__(self)
Line 818  class MPIWGRoot(ZSQLExtendFolder): Line 930  class MPIWGRoot(ZSQLExtendFolder):
         try:          try:
                           
             self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])              self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
               logger("MPIWG Root (reindexCatalog: projects)",logging.INFO,"DONE")
           except:
               logger("MPIWG Root (reindexCatalog: projects)",logging.WARNING," %s %s"%sys.exc_info()[:2])
           
           try:
               
               self.MembersCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
               logger("MPIWG Root (reindexCatalog: members)",logging.INFO,"DONE")
           except:
               logger("MPIWG Root (reindexCatalog: members)",logging.WARNING," %s %s"%sys.exc_info()[:2])
           
           try:
               
               self.fulltextProjectsMembers.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1'])
               logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.INFO,"DONE")
         except:          except:
             logger("MPIWG Root (updatehomepage)",logging.WARNING," %s %s"%sys.exc_info()[:2])              logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.WARNING," %s %s"%sys.exc_info()[:2])
                           
                   
           
Line 861  class MPIWGRoot(ZSQLExtendFolder): Line 988  class MPIWGRoot(ZSQLExtendFolder):
         else:          else:
             return entry              return entry
   
     def getTreeRSS(self,dep=None,date=None,onlyActive=0,onlyArchived=0):      def getTreeRSS(self,dep=None,date=None,onlyActive=1,onlyArchived=0):
         """generateTree"""          """generateTree"""
         rss="""<?xml version="1.0" encoding="utf-8"?>          rss="""<?xml version="1.0" encoding="utf-8"?>
                  <rss version="2.0">                   <rss version="2.0">
                    <channel>"""                     <channel>"""
                   
         for obj in self.getTree(dep, date, onlyActive, onlyArchived):          for obj in self.getTree(dep, date, onlyActive, onlyArchived):
               linkStr="""<link>http://www.mpiwg-berlin.mpg.de/en/research/projects/%s</link>"""
             rss+="""<item>"""              rss+="""<item>"""
             rss+="""<link>http://wwwneu.mpiwg-berlin.mpg.de/en/research/projects/%s</link>"""%obj[3].getId()              rss+=linkStr%obj[3].getId()
               rss+="""</item>"""
               if hasattr(obj[3],'publicationList'):
               rss+="""<item>"""
                   rss+=linkStr%(obj[3].getId()+"/publicationList");
             rss+="""</item>"""              rss+="""</item>"""
           
         rss+="""</channel>          rss+="""</channel>
         </rss>"""          </rss>"""
   
Line 1065  class MPIWGRoot(ZSQLExtendFolder): Line 1196  class MPIWGRoot(ZSQLExtendFolder):
                   
         if key=="":          if key=="":
             return ""              return ""
           try:
               key=utf8ify(key)
         catalogged=self.MembersCatalog({'getKey':key})          catalogged=self.MembersCatalog({'getKey':key})
         if len(catalogged)==0:          if len(catalogged)==0:
             return ""              return ""
         else:          else:
             return catalogged[0].getObject().getId()              return catalogged[0].getObject().getId()
                   
           except:
               return ""
   
                           
   
Line 1078  class MPIWGRoot(ZSQLExtendFolder): Line 1213  class MPIWGRoot(ZSQLExtendFolder):
         """give tuple member /projects"""          """give tuple member /projects"""
         ret=[]          ret=[]
         members=self.getAllMembers()          members=self.getAllMembers()
                  logging.error("X %s"%repr(members))
         #return str(members)          #return str(members)
         for x in members:          for x in members:
               logging.error("X %s"%repr(x))
             projects=self.getProjectsOfMember(key=x[1],date=date)              projects=self.getProjectsOfMember(key=x[1],date=date)
             if len(projects)>0:              if len(projects)>0:
                 ret.append((x[0],projects))                  ret.append((x[0],projects))
Line 1104  class MPIWGRoot(ZSQLExtendFolder): Line 1240  class MPIWGRoot(ZSQLExtendFolder):
                   
         ret=[]            ret=[]  
         if key:               if key:     
             proj=self.ProjectCatalog({'getPersonKeyList':key})              proj=self.ProjectCatalog({'getPersonKeyList':utf8ify(key)})
         else:          else:
             return ret # key muss definiert sein              return ret # key muss definiert sein
                   
Line 1112  class MPIWGRoot(ZSQLExtendFolder): Line 1248  class MPIWGRoot(ZSQLExtendFolder):
         if proj:          if proj:
             proj2=[]              proj2=[]
             for x in proj:              for x in proj:
                   #logging.error("proj:%s"%repr(x.getPath()))
                 if (not getattr(x.getObject(),'invisible',None)) and (getattr(x.getObject(),'archiveTime','')==''):                     if (not getattr(x.getObject(),'invisible',None)) and (getattr(x.getObject(),'archiveTime','')==''):   
                       proj2.append(x)                        proj2.append(x)
   
Line 1123  class MPIWGRoot(ZSQLExtendFolder): Line 1260  class MPIWGRoot(ZSQLExtendFolder):
         proj2.sort(sortP)          proj2.sort(sortP)
   
         projectListe=[]          projectListe=[]
                   #logging.error("getprojectsofmember proj2: %s"%repr(proj2))
         for proj in proj2:             for proj in proj2:   
             obj=proj.getObject()              obj=proj.getObject()
             add=False              add=False
Line 1151  class MPIWGRoot(ZSQLExtendFolder): Line 1288  class MPIWGRoot(ZSQLExtendFolder):
             if add:              if add:
                 projectListe.append(obj)                  projectListe.append(obj)
                                   
                #logging.error("getprojectsofmember projectliste: %s"%repr(projectListe))
         return projectListe          return projectListe
             
     def givePersonList(self,name):      def givePersonList(self,name):

Removed from v.1.1.2.6  
changed lines
  Added in v.1.1.2.24


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