version 1.47.2.53, 2006/07/13 09:56:56
|
version 1.47.2.56, 2006/08/03 09:43:40
|
Line 354 class MPIWGRoot(ZSQLExtendFolder):
|
Line 354 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 368 class MPIWGRoot(ZSQLExtendFolder):
|
Line 384 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 647 class MPIWGRoot(ZSQLExtendFolder):
|
Line 665 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 662 class MPIWGRoot(ZSQLExtendFolder):
|
Line 680 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 995 class MPIWGRoot(ZSQLExtendFolder):
|
Line 1015 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 1009 class MPIWGRoot(ZSQLExtendFolder):
|
Line 1029 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": # kompatibilitt 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 1128 class MPIWGRoot(ZSQLExtendFolder):
|
Line 1153 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 1285 class MPIWGRoot(ZSQLExtendFolder):
|
Line 1320 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 1632 class MPIWGProject(CatalogAware,Folder):
|
Line 1668 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 1789 class MPIWGProject(CatalogAware,Folder):
|
Line 1836 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 1809 class MPIWGProject(CatalogAware,Folder):
|
Line 1858 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 1850 class MPIWGProject(CatalogAware,Folder):
|
Line 1907 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, zurckgegeben 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 spter zurckgegeben 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 zurck, |
|
-1, wenn kein Treffer |
|
|
|
@param nr: Position die geprft werden soll |
|
@param length: Lnge des Wortes das geprft 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 hinzufgen |
|
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 2078 class MPIWGProject(CatalogAware,Folder):
|
Line 2234 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') |
|
|