--- MPIWGWeb/MPIWGProjects.py 2006/08/15 13:28:29 1.47.2.58 +++ MPIWGWeb/MPIWGProjects.py 2006/10/27 18:37:20 1.47.2.62 @@ -453,6 +453,26 @@ class MPIWGRoot(ZSQLExtendFolder): return True return False + def getSection(self): + """returns the current section name""" + root = self.absolute_url() + url = self.REQUEST['URL'] + path = string.replace(url, root, '') + paths = path.split('/') + if len(paths) > 0: + return paths[1] + return None + + def getSectionStyle(self, name, style=""): + """returns a string with the given style + '-sel' if the current section == name""" + if self.getSection() == name: + return style + '-sel' + else: + return style + + def MPIWGrootURL(self): + """returns the URL to the root""" + return self.absolute_url() def upDateSQL(self,fileName): """updates SQL databases using fm.jar""" @@ -1076,7 +1096,7 @@ class MPIWGRoot(ZSQLExtendFolder): return entry - def getTree(self,date=None,onlyActive=None): + def getTree(self,dep=None,date=None,onlyActive=None): """generate Tree from project list""" returnList=[] @@ -1094,13 +1114,14 @@ class MPIWGRoot(ZSQLExtendFolder): 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])) + if (not dep) or (idNr[0]==dep): #falls dep gesetzt ist nur dieses hinzufŸgen. + 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 - def formatElementsAsList(self,elements): + def formatElementsAsList(self,elements,onlyOneDept=False): """formatiere tree als liste""" actualDepth=0 @@ -1146,7 +1167,8 @@ class MPIWGRoot(ZSQLExtendFolder): if actualDepth==1: 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') - ret+="""
%s: """%(department,departmentName[department]) + if not onlyOneDept: + ret+="""
%s: """%(department,departmentName[department]) if self.REQUEST.has_key('date'): ret+="""%s"""%(self.generateUrlProject(element[3].absolute_url())+"/index.html",self.REQUEST['date'],element[3].getContent('WEB_title')) @@ -1444,7 +1466,62 @@ class MPIWGRoot(ZSQLExtendFolder): return (fieldname in checkFields) - + + def generateNameIndex(self): + """erzeuge einen index verwendeter personen""" + import psycopg + o = psycopg.connect('dbname=authorities user=dwinter password=3333',serialize=0) + results={} + print self.fulltext.historicalNames.items() + for nameItem in self.fulltext.historicalNames.items(): #gehe durch alle namen des lexikons + + c = o.cursor() + name=nameItem[0] + print "check",name + c.execute("select lastname,firstname from persons where lower(lastname) = '%s'"%quote(name)) + tmpres=c.fetchall() + firstnames=[result[1] for result in tmpres] # find all firstnames + if tmpres: + lastname=tmpres[0][0] + + for found in self.fulltext({'names':name}): + if found.getObject().isActual(): + for nh in found.getObject().getGetNeighbourhood(name, length=50,tagging=False): #hole umgebung + #schaue nun ob der vorname hinter oder vor dem name ist + position=nh.find(lastname) + # vorher + #print "NH",nh + bevorS=nh[0:position].split() + #print "BV",bevorS + if len(bevorS)>1: + try: + bevor=[bevorS[-1],bevorS[-2]] + except: + bevor=[bevorS[0]] + else: + bevor=[] + #nachher + behindS= re.split("[,|;| ]",nh[position:]) + #print "BH",behindS + if len(behindS)>2: + try: + behind=behindS[1:3] + except: + behind=[bevorS[1]] + else: + behind=[] + for firstname in firstnames: + if firstname in bevor+behind: #Namen wie mit Adelspraedikaten werden so erstmal nich gefunden + id="%s,%s"%(lastname,firstname) + if not results.has_key(id): + results[id]=[] + objId=found.getObject().getId() + if not (objId in results[id]): + print "added %s for %s"%(id,objId) + results[id].append(objId) + self.nameIndex=results + return results + def manage_addMPIWGRootForm(self): """form for adding the root""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGRootForm.zpt')).__of__(self) @@ -1730,7 +1807,7 @@ class MPIWGProject(CatalogAware,Folder): if RESPONSE: RESPONSE.redirect('manageImages') - + def hasChildren(self,date=None,onlyActive=True): """check if project has children""" ct=self.getContexts(childs=self.getContent('xdata_05'), @@ -1969,13 +2046,14 @@ class MPIWGProject(CatalogAware,Folder): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','no_project')).__of__(self) return pt() - def getGetNeighbourhood(self,wordStr, length=100): + def getGetNeighbourhood(self,wordStr, length=100,tagging=True): """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 XX 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 + @param tagging: optional default wert true, kein span tag wird erzweugt falls tag=false """ ret=[] # nimmt das Array auf, dass spŠter zurŸckgegeben wird @@ -2008,7 +2086,8 @@ class MPIWGProject(CatalogAware,Folder): # 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 " " @@ -2046,10 +2125,11 @@ class MPIWGProject(CatalogAware,Folder): break; # now highlight everything - for x in range(len(ret)): - for word in words: - repl=re.compile(word,re.IGNORECASE) - ret[x]=repl.sub(""" %s"""%word.upper(),ret[x]) + if tagging: + for x in range(len(ret)): + for word in words: + repl=re.compile(word,re.IGNORECASE) + ret[x]=repl.sub(""" %s"""%word.upper(),ret[x]) return ret