version 1.47.2.56, 2006/08/03 09:43:40
|
version 1.47.2.63, 2006/11/06 16:08:30
|
Line 47 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 123 class MPIWGLink(SimpleItem):
|
Line 147 class MPIWGLink(SimpleItem):
|
else: |
else: |
return self.getObj().weight |
return self.getObj().weight |
|
|
manage_options=SimpleItem.manage_options+( |
manage_options=( |
{'label':'main config','action':'changeLinkForm'}, |
{'label':'main config','action':'changeLinkForm'}, |
) |
)+SimpleItem.manage_options |
|
|
|
|
def changeLinkForm(self): |
def changeLinkForm(self): |
Line 270 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): |
def decode(self,str): |
"""decoder""" |
"""decoder""" |
if not str: |
if not str: |
Line 283 class MPIWGRoot(ZSQLExtendFolder):
|
Line 324 class MPIWGRoot(ZSQLExtendFolder):
|
|
|
return str |
return str |
|
|
|
|
|
def browserCheck(self): |
|
"""check the browsers request to find out the browser type""" |
|
bt = {} |
|
ua = self.REQUEST.get_header("HTTP_USER_AGENT") |
|
bt['ua'] = ua |
|
bt['isIE'] = False |
|
bt['isN4'] = False |
|
if string.find(ua, 'MSIE') > -1: |
|
bt['isIE'] = True |
|
else: |
|
bt['isN4'] = (string.find(ua, 'Mozilla/4.') > -1) |
|
|
|
try: |
|
nav = ua[string.find(ua, '('):] |
|
ie = string.split(nav, "; ")[1] |
|
if string.find(ie, "MSIE") > -1: |
|
bt['versIE'] = string.split(ie, " ")[1] |
|
except: pass |
|
|
|
bt['isMac'] = string.find(ua, 'Macintosh') > -1 |
|
bt['isWin'] = string.find(ua, 'Windows') > -1 |
|
bt['isIEWin'] = bt['isIE'] and bt['isWin'] |
|
bt['isIEMac'] = bt['isIE'] and bt['isMac'] |
|
bt['staticHTML'] = False |
|
|
|
return bt |
|
|
|
|
def versionHeaderEN(self): |
def versionHeaderEN(self): |
"""version header text""" |
"""version header text""" |
|
|
Line 412 class MPIWGRoot(ZSQLExtendFolder):
|
Line 482 class MPIWGRoot(ZSQLExtendFolder):
|
return True |
return True |
return False |
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: |
|
sec = paths[1] |
|
if sec.find('.') < 0: |
|
return sec |
|
else: |
|
return None |
|
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): |
def upDateSQL(self,fileName): |
"""updates SQL databases using fm.jar""" |
"""updates SQL databases using fm.jar""" |
Line 520 class MPIWGRoot(ZSQLExtendFolder):
|
Line 614 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 718 class MPIWGRoot(ZSQLExtendFolder):
|
Line 828 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 1015 class MPIWGRoot(ZSQLExtendFolder):
|
Line 1129 class MPIWGRoot(ZSQLExtendFolder):
|
return entry |
return entry |
|
|
|
|
def getTree(self,date=None,onlyActive=None): |
def getTree(self,dep=None,date=None,onlyActive=None): |
"""generate Tree from project list""" |
"""generate Tree from project list""" |
|
|
returnList=[] |
returnList=[] |
Line 1033 class MPIWGRoot(ZSQLExtendFolder):
|
Line 1147 class MPIWGRoot(ZSQLExtendFolder):
|
if idNr[0]=="x": # kompatibilitŠt mit alter Konvention, x vor der Nummer macht project inactive |
if idNr[0]=="x": # kompatibilitŠt mit alter Konvention, x vor der Nummer macht project inactive |
project[0].setActiveFlag(False) |
project[0].setActiveFlag(False) |
|
|
|
if (not dep) or (idNr[0]==dep): #falls dep gesetzt ist nur dieses hinzufźgen. |
if onlyActive and project[0].isActiveProject(): #nur active projekte |
if onlyActive and project[0].isActiveProject(): #nur active projekte |
returnList.append((depth,nr,title,project[0])) |
returnList.append((depth,nr,title,project[0])) |
elif not onlyActive: |
elif not onlyActive: |
returnList.append((depth,nr,title,project[0])) |
returnList.append((depth,nr,title,project[0])) |
return returnList |
return returnList |
|
|
def formatElementsAsList(self,elements): |
def formatElementsAsList(self,elements,onlyOneDept=False): |
"""formatiere tree als liste""" |
"""formatiere tree als liste""" |
|
|
actualDepth=0 |
actualDepth=0 |
Line 1085 class MPIWGRoot(ZSQLExtendFolder):
|
Line 1200 class MPIWGRoot(ZSQLExtendFolder):
|
if actualDepth==1: |
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'} |
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') |
|
if not onlyOneDept: |
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]) |
|
|
if self.REQUEST.has_key('date'): |
if self.REQUEST.has_key('date'): |
Line 1239 class MPIWGRoot(ZSQLExtendFolder):
|
Line 1355 class MPIWGRoot(ZSQLExtendFolder):
|
if person =="Otto Sibum" : person="H. Otto Sibum" |
if person =="Otto Sibum" : person="H. Otto Sibum" |
if person =="Norton Wise" : person="M. Norton Wise" |
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,person.encode('utf-8'))) |
ret.append("<a href=%s >%s</a>"%(proj[0].absolute_url+"/index.html",person)) |
if self.MPIWGrootURL().split("/")[-1]=='en': |
|
tmpPath="/en/staff/members/" |
|
else: |
|
tmpPath="/de/mitarbeiter/members/" |
|
ret.append("<a href=%s >%s</a>"%(tmpPath+proj[0].getObject().getId()+"/index.html",person)) |
else: |
else: |
#ret.append("%s"%person.encode('utf-8')) |
#ret.append("%s"%person.encode('utf-8')) |
ret.append("%s"%person) |
ret.append("%s"%person) |
Line 1384 class MPIWGRoot(ZSQLExtendFolder):
|
Line 1504 class MPIWGRoot(ZSQLExtendFolder):
|
return (fieldname in checkFields) |
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): |
def manage_addMPIWGRootForm(self): |
"""form for adding the root""" |
"""form for adding the root""" |
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGRootForm.zpt')).__of__(self) |
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMPIWGRootForm.zpt')).__of__(self) |
Line 1451 class MPIWGProject(CatalogAware,Folder):
|
Line 1626 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 1907 class MPIWGProject(CatalogAware,Folder):
|
Line 2083 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): |
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 |
"""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 |
alle Tags werden entfernt, die Fundstellen werden mit <span class="found">XX</span> getaggt, die Umgebungen werden |
case insensitive gesucht |
case insensitive gesucht |
@param wordStr: string mit Worten getrennt durch Leerzeichen, Phrasen sind mit " gekennzeichnet |
@param wordStr: string mit Worten getrennt durch Leerzeichen, Phrasen sind mit " gekennzeichnet |
"eine phrase", "*" bezeichnet wildcards und wird ignoriert" |
"eine phrase", "*" bezeichnet wildcards und wird ignoriert" |
@param length: optional, default wert 100, 2*length ist die grš§e der Umgebung |
@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 |
ret=[] # nimmt das Array auf, dass spŠter zurźckgegeben wird |
Line 1946 class MPIWGProject(CatalogAware,Folder):
|
Line 2123 class MPIWGProject(CatalogAware,Folder):
|
# words=[words] |
# words=[words] |
|
|
txt=self.harvest_page() |
txt=self.harvest_page() |
|
if not txt: |
|
return ret |
txt=re.sub("<.*?>", "", txt) # loesche alle Tags |
txt=re.sub("<.*?>", "", txt) # loesche alle Tags |
for word in words: |
for word in words: |
word=re.sub("_"," ",word) # ersetze zurueck "_" durch " " |
word=re.sub("_"," ",word) # ersetze zurueck "_" durch " " |
Line 1984 class MPIWGProject(CatalogAware,Folder):
|
Line 2162 class MPIWGProject(CatalogAware,Folder):
|
break; |
break; |
|
|
# now highlight everything |
# now highlight everything |
|
if tagging: |
for x in range(len(ret)): |
for x in range(len(ret)): |
for word in words: |
for word in words: |
repl=re.compile(word,re.IGNORECASE) |
repl=re.compile(word,re.IGNORECASE) |