Diff for /MPIWGWeb/MPIWGProjects.py between versions 1.47.2.95 and 1.47.2.99

version 1.47.2.95, 2008/08/29 07:31:05 version 1.47.2.99, 2008/09/03 21:16:40
Line 591  class MPIWGProject(CatalogAware,Folder): Line 591  class MPIWGProject(CatalogAware,Folder):
                   
     def setCompletedAt(self,date):      def setCompletedAt(self,date):
         """set the date of completion, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY"""          """set the date of completion, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY"""
         logging.info("DATE:"+repr(date))          #logging.info("DATE:"+repr(date))
         transformedDate=self.transformDate(date);          transformedDate=self.transformDate(date);
         logging.info("transformed"+repr(transformedDate))          #logging.info("transformed"+repr(transformedDate))
         if transformedDate is not None:          if transformedDate is not None:
             setattr(self,"completedAt",transformedDate)              setattr(self,"completedAt",transformedDate)
             return True;              return True;
Line 602  class MPIWGProject(CatalogAware,Folder): Line 602  class MPIWGProject(CatalogAware,Folder):
           
     def setStartedAt(self,date):      def setStartedAt(self,date):
         """set the date of start, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY"""          """set the date of start, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY"""
         logging.info("DATE:"+repr(date))          #logging.info("DATE:"+repr(date))
         transformedDate=self.transformDate(date);          transformedDate=self.transformDate(date);
         logging.info("transformed"+repr(transformedDate))          #logging.info("transformed"+repr(transformedDate))
         if transformedDate is not None:          if transformedDate is not None:
             setattr(self,"startedAt",transformedDate)              setattr(self,"startedAt",transformedDate)
             return True;              return True;
Line 728  class MPIWGProject(CatalogAware,Folder): Line 728  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,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  
           
         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=self.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 harvest_page(self,context=None):      def harvest_page(self,context=None):
         """seite fuer harvesting fuer die Projektsuche"""          """seite fuer harvesting fuer die Projektsuche"""
Line 1048  class MPIWGProject(CatalogAware,Folder): Line 962  class MPIWGProject(CatalogAware,Folder):
         return crumbs          return crumbs
   
     def getRootProject(self):      def getRootProject(self):
         """returns the current root (=top level) project"""          """returns the root (=top level) project of the current project"""
         ct=self.getContexts(parents=self.getContent('xdata_05'))          ct=self.getContexts(parents=self.getContent('xdata_05'))
         if len(ct) > 0:          if len(ct) > 0:
             return ct[-1][0]              return ct[-1][0]
Line 1107  class MPIWGProject(CatalogAware,Folder): Line 1021  class MPIWGProject(CatalogAware,Folder):
         #logging.info("XXXXXXXXXXXXX"+repr(self.responsibleScientistsList))          #logging.info("XXXXXXXXXXXXX"+repr(self.responsibleScientistsList))
       
                   
         keys = [x[1] for x in getattr(self,"responsibleScientistsList",[])]          keys = [unicodify(x[1]) for x in getattr(self,"responsibleScientistsList",[])]
           #logging.error("RESP. SCIEN:%s"%getattr(self,"responsibleScientistsList",[]))
           #logging.error("RESP. SCIEN:%s"%unicodify(key))
                           
         if key in keys:          if unicodify(key) in keys:
             return True              return True
         else:          else:
             return False              return False
                   
     def getPersonKeyList(self):      def getPersonKeyList(self):
         """gibt die key Lister der beteiligten Personen zurŸck"""          """gibt die key Liste der beteiligten Personen zurŸck (utf8 codiert)"""
         return [x[1] for x in getattr(self,'responsibleScientistsList',[])]          #logging.error("getPersonKeyList:%s"%getattr(self,'responsibleScientistsList',[]))
                  try:
               return [utf8ify(x[1]) for x in getattr(self,'responsibleScientistsList',[])]
           except:
               return[]
                   
                 
       def myCapitalize(self,txt):
           """kapitalisiere auch Namen mit -"""
           splitted=[x.capitalize() for x in txt.split("-")]
           return "-".join(splitted)
                           
     def identifyNames(self,nameList):      def identifyNames(self,nameList):
         """Bekommt eine Komma oder Semikolon getrennte Liste mit Name der Form Vorname MittelName(n) Nachname          """Bekommt eine Komma oder Semikolon getrennte Liste mit Name der Form Vorname MittelName(n) Nachname
         und ordnet diese dann Mitarbeiter IDs zu falls es schone eine Liste gibt wird im Projekte gibt wird diese Upgedated.          und ordnet diese dann Mitarbeiter IDs zu falls es schone eine Liste gibt wird im Projekte gibt wird diese Upgedated.
         @param nameList          @param nameList
         """          """
         nameList=nameList.replace(";",",") # falls ; als Trenner ersetze          
           if nameList.find(";")>-1: # rate Trenner ist ;
             names=nameList.split(";")  
             
           else:
         names=nameList.split(",")          names=nameList.split(",")
                   
           ##nameList=nameList.replace(";",",") # falls ; als Trenner ersetze    
         returnNamesDict={}          returnNamesDict={}
   
                 
Line 1144  class MPIWGProject(CatalogAware,Folder): Line 1072  class MPIWGProject(CatalogAware,Folder):
                 lastname=nameSplitted[0]                  lastname=nameSplitted[0]
                                 
             #finde Mitarbeiter mit den entsprechenden Name              #finde Mitarbeiter mit den entsprechenden Name
             logging.info("Search: %s %s %s"%(name,firstname,lastname))              
             firstname=firstname.capitalize()              firstname=self.myCapitalize(firstname).encode('utf-8')
             lastname=lastname.capitalize()              lastname=self.myCapitalize(lastname).encode('utf-8')
               logging.info("Search: %s %s %s"%(name,repr(firstname),repr(lastname)))
             try:              try:
                 cataloggedNames=self.MembersCatalog(firstName=firstname,lastName=lastname)                  cataloggedNames=self.MembersCatalog({'firstName':firstname,'lastName':lastname})
             except:              except:
                 cataloggedNames=[]                  cataloggedNames=[]
                   logging.error("ERROR: identifyNames %s %s"%sys.exc_info()[0:2])
               
             #Teste ob die ensprechenden Namen schon der Liste zu geordnet sind              #Teste ob die ensprechenden Namen schon der Liste zu geordnet sind
             #if not hasattr(self,'responsibleScientistsList'):              #if not hasattr(self,'responsibleScientistsList'):
             #     self.responsibleScientistsList={}              #     self.responsibleScientistsList={}
Line 1209  class MPIWGProject(CatalogAware,Folder): Line 1140  class MPIWGProject(CatalogAware,Folder):
                     keys[nr]=self.REQUEST[key]                      keys[nr]=self.REQUEST[key]
                                   
                     
         for nr in names.keys():          for nr in names.keys():#schreibe keys und namen in die Liste, stelle ausserdem sicher, dass name unicode
              tmpList.append((names[nr],keys.get(nr,"")))               tmpList.append((unicodify(names[nr]),unicodify(keys.get(nr,""))))
                             
         self.responsibleScientistsList=tmpList          self.responsibleScientistsList=tmpList
         if fromEdit and (RESPONSE is not None):          if fromEdit and (RESPONSE is not None):
             #RESPONSE.redirect('./editMPIWGBasisEditor')              #RESPONSE.redirect('./editMPIWGBasisEditor')
             return self.editMPIWGBasisEditor(identifiedNames=self.identifyNames(self.REQUEST.get('xdata_01','')))              return self.editMPIWGBasisEditor(identifiedNames=self.identifyNames(self.decode(self.REQUEST.get('xdata_01',''))))
                           
         else:          else:
             if RESPONSE is not None:              if RESPONSE is not None:
Line 1286  class MPIWGProject(CatalogAware,Folder): Line 1217  class MPIWGProject(CatalogAware,Folder):
             identifiedNames=self.identifyNames(self.getContent('xdata_01'))              identifiedNames=self.identifyNames(self.getContent('xdata_01'))
            # identifiedNames=self.getFullNameEntries()             # identifiedNames=self.getFullNameEntries()
                           
           logging.error("IdentifiedNames: %s"% repr(identifiedNames))
         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(identifiedNames=identifiedNames)          return pt(identifiedNames=identifiedNames)
   

Removed from v.1.47.2.95  
changed lines
  Added in v.1.47.2.99


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