--- ECHO_content/ECHO_collection.py 2004/08/28 01:06:03 1.166
+++ ECHO_content/ECHO_collection.py 2004/11/10 16:32:11 1.188
@@ -29,9 +29,17 @@ from Products.PageTemplates.PageTemplate
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
from Globals import Persistent, package_home
from Acquisition import Implicit
-from ECHO_helpers import displayTypes
+from ECHO_helpers import *
import urllib
+import smtplib
import time
+from Ft.Xml.Domlette import NonvalidatingReader
+from Ft.Xml.Domlette import PrettyPrint
+from Ft.Xml import EMPTY_NAMESPACE
+
+import Ft.Xml.XPath
+import cStringIO
+import zLOG
try:
from psycopg import libpq
@@ -255,20 +263,8 @@ def content_html(self,type):
pt.content_type="text/html"
return pt()
-def toList(field):
- """Einzelfeld in Liste umwandeln"""
- if type(field)==StringType:
- return [field]
- else:
- return field
-def getText(nodelist):
- rc = ""
- for node in nodelist:
- if node.nodeType == node.TEXT_NODE:
- rc = rc + node.data
- return rc
def getTextFromNode(nodename):
nodelist=nodename.childNodes
@@ -303,6 +299,7 @@ class BrowserCheck:
"""check the browsers request to find out the browser type"""
def __init__(self, zope):
+ """initialisiere"""
self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT")
self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0)
self.isIE = string.find(self.ua, 'MSIE') > -1
@@ -315,8 +312,46 @@ class BrowserCheck:
self.isIEWin = self.isIE and self.isWin
self.isIEMac = self.isIE and self.isMac
+class Hello(Folder):
+ """helloo"""
+ def __init__(self):
+ self.test=test
+
+ meta_type="ECHO_copyright"
+
+
+
+ def __init__(self,id,title,copyrights):
+ """init"""
+ self.title=title
+ self.id=id
+ self.copyrights=copyrights[0:]
+
+ def getCopyrights(self):
+ """return coyprights"""
+ return self.copyrights
+
+ manage_options = Folder.manage_options+(
+ {'label':'Main Config','action':'ECHO_copyright_configForm'},
+ )
+
+ def ECHO_copyright_configForm(self):
+ """change form"""
+ pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self)
+ pt.content_type="text/html"
+ return pt()
+ def ECHO_copyright_config(self,title,RESPONSE=None):
+ """change"""
+ self.title=title
+ self.copyrights=[]
+ self.copyrights=getCopyrightsFromForm(self,self.REQUEST.form)[0:]
+
+ if RESPONSE is not None:
+ RESPONSE.redirect('manage_main')
+
+
def writeMetadata(url,metadict,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,xmlfrag=None,digiliburlprefix=None):
"""Einlesen der Metadaten und und erstellen des geaenderten XML file"""
@@ -390,10 +425,11 @@ def writeMetadata(url,metadict,project=N
metanode.removeChild(nodeOld[0]).unlink()
metanodeneu=dom.createElement(metaData)
- try:
- metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))
- except:
- metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))
+ metanodetext=dom.createTextNode(metadict[metaData])
+ #try:
+ #metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))
+ #except:
+ #metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))
metanodeneu.appendChild(metanodetext)
metanode.appendChild(metanodeneu)
@@ -420,7 +456,10 @@ def writeMetadata(url,metadict,project=N
if digiliburlprefix:
updateTextToolNode('digiliburlprefix',digiliburlprefix)
- return dom.toxml().encode('utf-8')
+ try:
+ return dom.toxml().encode('utf-8')
+ except:
+ return dom.toxml('utf-8')
@@ -520,6 +559,7 @@ class ECHO_copyright(Folder):
{'label':'Main Config','action':'ECHO_copyright_configForm'},
)
+
def ECHO_copyright_configForm(self):
"""change form"""
pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self)
@@ -578,7 +618,7 @@ class ECHO_layoutTemplate(ZopePageTempla
def manage_addECHO_layoutTemplateForm(self):
"""Form for adding"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddECHO_layoutTemplate.zpt')).__of__(self)
return pt()
from urllib import quote
@@ -1000,19 +1040,73 @@ class ECHO_resource(Folder,Persistent):
pt.content_type="text/html"
return pt()
+
+ def createImageUrl(self,pn=1):
+ """create ImageUrl"""
+
+
+ resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
+
+ digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix')
+ images=readFieldFromXML(self.metalink,'texttool','image')
+
+
+ if (not resourcepath) or (not digiliburlprefix) or (not images):
+ zLOG.LOG("ECHO (createImageUrl)",zLOG.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url())
+ return None
+ resourcepath=resourcepath.replace('/mpiwg/online','')
+ if not digiliburlprefix: digiliburlprefix="http://echo.mpiwg-berlin.mpg.de/zogilib?"
+
+ if (not images) or (not resourcepath): return None
+
+ return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn)
+ def copyTitleToInfoXML(self,RESPONSE=None):
+ """copy title from the resource"""
+ presentationXML=readFieldFromXML(self.metalink,'texttool','presentation')
+ resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
+ if (not presentationXML) or (not resourcepath):
+ if RESPONSE:
+ RESPONSE.write("Error: %s\n"%self.getId())
+ else:
+ return None,self.absolute_url()
+
+ try:
+ fh=file(os.path.join(resourcepath,presentationXML),'w')
+ fh.write("""
+
+ %s
+
+ yes
+ """%self.title)
+ fh.close()
+ return 1,self.getId()
+ except:
+ if RESPONSE:
+ RESPONSE.write("Error: %s\n"%self.getId())
+ else:
+ return None,self.absolute_url()
+
+
def setStartPage(self,startpage=None,RESPONSE=None):
"""set start page, if no startpage defined use the generic one of the resource"""
- if (not (type(startpage)==StringType)) and ("__generic" in startpage): # checke ob generic in der liste
+ if (not (type(startpage)==StringType)):
+ if ("__generic" in startpage): # checke ob generic in der liste
+ startpage=self.absolute_url()+"/startpage_html"
+ elif ("__firstPage" in startpage): # checke ob generic in der liste
+ startpage=self.createImageUrl()
+
+ if (not startpage):
startpage=self.absolute_url()+"/startpage_html"
-
- if (not startpage) or (startpage=="__generic"):
- startpage=self.absolute_url()+"/startpage_html"
-
+ elif (startpage=="__generic"):
+ startpage=self.absolute_url()+"/startpage_html"
+ elif (startpage=="__firstPage"):
+ startpage=self.createImageUrl()
params="startpage=%s"%startpage
-
+ print 'http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))
+
ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read()
@@ -1020,13 +1114,15 @@ class ECHO_resource(Folder,Persistent):
path=re.sub(self.REQUEST['SERVER_URL'],'',path)
path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
-
+
path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
- path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server
+ path=re.sub('http://vision.mpiwg-berlin.mpg.de','',path) # falls vision als server
+ path=re.sub('http://xserve02.mpiwg-berlin.mpg.de:18880','',path) # falls vision als server
+ path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
path=re.sub('/index.meta','',path)
@@ -1041,6 +1137,7 @@ class ECHO_resource(Folder,Persistent):
return pt()
+
def getTextToolsField(self,name,default=''):
"""Lese Textoolsfelder aus index.meta im path aus"""
@@ -1090,6 +1187,7 @@ class ECHO_resource(Folder,Persistent):
path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
+ path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server
@@ -1128,15 +1226,29 @@ class ECHO_resource(Folder,Persistent):
def getFullTextXML(self,noredirect=None):
"""getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong."""
+
try:
+ #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink)
fh=ECHO_helpers.urlopen(self.metalink)
+ #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"opened %s"%self.metalink)
dom=xml.dom.minidom.parse(fh)
texttools=dom.getElementsByTagName('texttool')
text=texttools[0].getElementsByTagName('text')
texturl=getText(text[0].childNodes)
-
+
+ #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"found %s"%texturl)
+ fh.close()
+ #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh")
+ #keine url
+ if not (texturl.split(":")[0] in ['http','ftp','file']):
+ if not noredirect:
+ return file(texturl).read()
+ else:
+ return texturl
+
if not noredirect:
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
+ zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl)
self.REQUEST.RESPONSE.redirect(texturl)
else:
return texturl
@@ -1162,6 +1274,8 @@ class ECHO_resource(Folder,Persistent):
archivepath=getText(text[0].childNodes)
archivepath=re.sub('/mpiwg/online/','',archivepath)
imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp
+ fh.close()
+
if not noredirect:
self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
self.REQUEST.RESPONSE.redirect(imageurl)
@@ -2088,7 +2202,7 @@ class ECHO_collection(Folder, Persistent
pt=PageTemplateFile('Products/ECHO_content/zpt/changeViewerTemplateSet').__of__(self)
return pt()
- def getViewerTemplateSets(self,obj_ids=None):
+ def getViewerTemplateSets(self,obj_ids=None,RESPONSE=None):
"""Get the ViewerTemplateSet title for configuration"""
ret=[]
@@ -2097,7 +2211,7 @@ class ECHO_collection(Folder, Persistent
for viewerTemplateSet in viewerTemplateSets:
ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
-
+
return ret
except:
@@ -2150,8 +2264,28 @@ class ECHO_collection(Folder, Persistent
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
+ def copyTitleToInfoXMLFolder(self,RESPONSE=None):
+ """copy title into the title field of info.xml
+ author and date werden leer!!!
+ """
-
+
+ resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
+
+
+ for resource in resources:
+ ret,txt=resource[1].copyTitleToInfoXML()
+ if (not ret) and RESPONSE:
+ RESPONSE.write("error: %s\n"%txt)
+ if ret and RESPONSE:
+ RESPONSE.write("ok: %s\n"%txt)
+
+ #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt)
+ if RESPONSE is not None:
+ RESPONSE.write("done!\n")
+ RESPONSE.close()
+ RESPONSE.redirect('manage_main')
+
def copySearchFields(self,RESPONSE=None):
"""copys import metadatafields to the object"""
resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
@@ -2277,6 +2411,11 @@ class ECHO_collection(Folder, Persistent
def getCollectionTreeXML(self):
"""Tree as XML"""
+ def addPassWd(str):
+ """adds a user/passwd to an url"""
+ txt2=re.sub(r"(http://)(.*?)","\g<1>www:3333@\g<2>",str)
+ return txt2
+
def getCollection(object,depth=0):
depth+=1
collections=""
@@ -2284,7 +2423,7 @@ class ECHO_collection(Folder, Persistent
element=getattr(object,entry)
try:
if element.meta_type in ["ECHO_collection","ECHO_group"]:
- collections+=""
+ collections+=""
collections+=getCollection(element,depth)+"\n"
except:
"""nothing"""
@@ -2541,7 +2680,7 @@ class ECHO_collection(Folder, Persistent
else:
return "#dddddd"
- def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None,location=None):
+ def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None,location=None,isAlwaysClickable=None):
"""Aenderung der Properties"""
self.secondaryLink=secondaryLink
@@ -2550,6 +2689,7 @@ class ECHO_collection(Folder, Persistent
self.bgcolour=bgcolour
self.viewClassification=viewClassification
self.location=location
+ self.isAlwaysClickable=isAlwaysClickable
if coords:
coordsnew=[ string.split(x,",") for x in coords]
@@ -2569,7 +2709,15 @@ class ECHO_collection(Folder, Persistent
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
+ def setAlwaysClickable(self,flag="yes"):
+ """set clickable"""
+ if flag=="yes":
+ self.isAlwaysClickable="yes"
+ else:
+ self.isAlwaysClickable=None
+ return flag
+
def showOverview(self):
"""overview"""
if 'ECHO_overview.html' in self.__dict__.keys():
@@ -2941,51 +3089,13 @@ def manage_addECHO_userFolderForm(self):
"""add a user folder form"""
return manage_addECHO_userFolder(self)
-def getEdges(seqs,urn):
- """edges"""
- ret=[]
- #print urn,seqs
- for seqsList in seqs[urn]:
-
- try:
- for seq in seqsList:
- ret+=seq.getElementsByTagName("RDF:li")
- except:
- ret+=seqsList.getElementsByTagName("RDF:li")
- return ret
-def createSubs(self,seqs,descrs,urn):
- """create subs"""
- for edge in getEdges(seqs,urn):
- cn=createNode(self,descrs[edge.getAttribute('RDF:resource')])
- if cn[0]=="CDLI_group":
- #print "HHHHHH",cn[1],seqs,descrs,cn[2]
- createSubs(cn[1],seqs,descrs,cn[2])
-def getEdges2(seqs,urn):
- """edges"""
- ret=[]
- #print urn,seqs
-
- return seqs[urn]
-
-def createSubs2(self,seqs,descrs,urn,level=0):
- """create subs"""
-
- for edge in getEdges2(seqs,urn):
- print "urnXX",urn.encode('utf-8'),level
- cn=createNode2(self,descrs,edge)
- if cn[0]=="CDLI_group":
-
- createSubs2(cn[1],seqs,descrs,cn[2],level+1)
- print "urnddonesubs",urn.encode('utf-8')
- print "urndonenode",urn.encode('utf-8')
- return
-def createNode2(self,descrs,node):
+def createNode(self,descrs,node):
name=descrs[node]['name']
type=descrs[node]['type']
urn=node
- print " will create",node.encode('utf-8')
+ #print " will create",node.encode('utf-8')
id=re.sub('[^a-zA-Z0-9]','',name).encode('ascii','ignore')
#print "id",id
#print type
@@ -3012,28 +3122,6 @@ def createNode2(self,descrs,node):
return "XX"
-def createNode(self,nodes):
- for node in nodes:
- name=getTextFromNode(node.getElementsByTagName("ECHONAVIGATION:name")[0])
- type=getTextFromNode(node.getElementsByTagName("ECHONAVIGATION:type")[0])
- urn=node.getAttribute("RDF:about")
-
- id=re.sub('[^a-zA-Z0-9]','',name).encode('ascii','ignore')
- #print "id",id
- #print type
- self.REQUEST.RESPONSE.write("%s
\n"%id)
- if type=="CDLI_group":
- print self.getId()
-
- manage_addECHO_collection(self,id,name,name,"","","","","")
- print "done::::",getattr(self,id)
- return type,getattr(self,id),urn
-
- if type=="CDLI_item":
- manage_addECHO_resource(self,id,name,name,"","",urn,"","")
- return "XX"
-
-
class ECHO_root(Folder,Persistent,Implicit):
"""ECHO Root Folder"""
@@ -3042,16 +3130,57 @@ class ECHO_root(Folder,Persistent,Implic
meta_type="ECHO_root"
+ ###CDLI adds -> have to be removed
def getTablet(self,item):
- print "getTablet"
- read=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read()
- print "gotTablet"
- read=re.sub("\[search\]","search",read)
- print "reggotTablet"
- return read[read.find("")+6:read.rfind("")]
+ #print "getTablet"
+ try:
+ read=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read()
+ read=re.sub("\[search\]","search",read)
+ return read[read.find("")+6:read.rfind("")]
+ except:
+ return "Sorry no connection to the data server enlil.museum.upenn.edu
"
+ #return "http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"
+ ###END CDLI add
+
+
+ def checkResource(self,id):
+ """checks if a resource is in the tree, gives back none or list of resources"""
+ if hasattr(self,"_v_checkResource") and self._v_checkResource.has_key(id): #existiert ein cache und id ist bereits drin?
+ return self._v_checkResource[id]
+
+ else:
+ resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],obj_ids=[id],search_sub=1)
+
+ if not hasattr(self,"_v_checkResource"): self._v_checkResource={}#lege cache an falls nicht existent
+ if resources:
+ self._v_checkResource[id]=resources[0:] # slicing to be sure that data is stabil
+ else:
+ self._v_checkResource[id]=None
+
+ return self._v_checkResource[id]
+
+ def sendForm(self,fromaddr,content,server='mail.mpiwg-berlin.mpg.de'):
+ """sendform"""
+ toaddrs=["dwinter@mpiwg-berlin.mpg.de"]
+
+ msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n"
+ % (fromaddr, ", ".join(toaddrs),"testsub"))
+ server = smtplib.SMTP(server)
+ #server.set_debuglevel(1)
+ msg=msg+content
+ server.sendmail(fromaddr, toaddrs, msg)
+ server.quit()
+
+ def generateFromRDFForm(self):
+ """change form"""
+ pt=PageTemplateFile('Products/ECHO_content/zpt/generateFromRDFForm').__of__(self)
+ pt.content_type="text/html"
+ return pt()
+
+ def generateFromRDF(self,file,startNode="/Cuneiform Corpus"):
+
+ """generate from RDF"""
- def generateFromRDF2(self):
- """generate from RDF2"""
global seqs
seqs={}
global descrs
@@ -3060,6 +3189,20 @@ class ECHO_root(Folder,Persistent,Implic
key=""
global value
value=""
+
+ def getEdges(seqs,urn):
+ """edges"""
+ ret=[]
+ return seqs[urn]
+
+ def createSubs(self,seqs,descrs,urn,level=0):
+ """create subs"""
+ for edge in getEdges(seqs,urn):
+ cn=createNode(self,descrs,edge)
+ if cn[0]=="CDLI_group":
+ createSubs(cn[1],seqs,descrs,cn[2],level+1)
+ return
+
def start_element(name,attrs):
global seqs
@@ -3116,40 +3259,20 @@ class ECHO_root(Folder,Persistent,Implic
p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data
- fileName="/Users/dwinter/Documents/Projekte/CDLI/test11.rdf"
- p.ParseFile(file(fileName))
+
+ p.ParseFile(file)
self.REQUEST.RESPONSE.write("Start
")
- createSubs2(self,seqs,descrs,"/Cuneiform Corpus")
+ createSubs(self,seqs,descrs,startNode)
self.REQUEST.RESPONSE.write("done
")
- print "done"
+ #print "done"
return "done"
- def generateFromRDF(self):
- """generate Structure from rdf"""
- dom=xml.dom.minidom.parse("/Users/dwinter/Documents/Projekte/CDLI/test10.rdf")
- seqs={}
- descrs={}
- for seq in dom.getElementsByTagName("RDF:Seq"):
- key=seq.getAttribute('RDF:about')
- try:
- seqs[key].append(seq)
- except:
- seqs[key]=[seq]
-
-
- for descr in dom.getElementsByTagName("RDF:Description"):
- key=descr.getAttribute('RDF:about')
- try:
- descrs[key].append(descr)
- except:
- descrs[key]=[descr]
- createSubs(self,seqs,descrs,"echo:collectionroot")
-
-
+
+
def changeWeightsInCollection(self):
"""change all lables of a collection"""
ret=""
@@ -3176,7 +3299,9 @@ class ECHO_root(Folder,Persistent,Implic
{'label':'Main Config','action':'ECHO_copyright_configForm'},
{'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
{'label':'Change Weights','action':'changeWeights'},
- )
+ {'label':'Generate from RDF','action':'generateFromRDFForm'},
+
+)
def showRDF(self):
@@ -3441,23 +3566,26 @@ class ECHO_root(Folder,Persistent,Implic
return "changed all contenttypes in: "+self.title
-
- def setCache(self,obj=None,RESPONSE=None):
+ def deleteCache(self,obj=None,RESPONSE=None):
"""setze alle collections auf cache = CacheManager"""
-
+
if not obj:
obj = self
- entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_collection'],search_sub=1)
+ entries=obj.ZopeFind(obj,search_sub=1)
for entry in entries:
- print entry[0]
- entry[1].ZCacheable_setManagerId('CacheManager')
+ if hasattr(entry[1],'_v_hash'):
+ entry[1]._v_hash=None
+
+
return "changed all CM in: "+self.title
+
+
def ECHO_newViewerLink(self,obj=None):
"""change links (:86 faellt weg)"""
@@ -3524,9 +3652,15 @@ class ECHO_root(Folder,Persistent,Implic
for link in links:
link.tagName="a"
- ref=link.getAttribute("ref")
+ ref=link.getAttribute("ref")
+ pn=link.getAttribute("page")
+
if self.checkRef(ref):
- link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
+ if pn:
+ link.setAttribute("href",self.aq_parent.absolute_url()+"/references?id="+ref+"&p="+pn)
+ else:
+ link.setAttribute("href",self.aq_parent.absolute_url()+"/references?id="+ref)
+
newxml=dom.toxml('utf-8')
@@ -3539,35 +3673,65 @@ class ECHO_root(Folder,Persistent,Implic
def xml2html(self,str,quote="yes"):
"""link2html fuer VLP muss hier noch raus"""
- print str
+
if str:
if quote=="yes2":
str=re.sub("\&","&",str)
- dom=xml.dom.minidom.parseString(str)
- links=dom.getElementsByTagName("link")
-
-
+ #dom=xml.dom.minidom.parseString(str)
+ dom = NonvalidatingReader.parseString(str,"http://www.mpiwg-berlin.mpg.de/")
+ #links=dom.getElementsByTagName("link")
+ links=Ft.Xml.XPath.Evaluate(".//link", contextNode=dom)
for link in links:
- link.tagName="a"
- ref=link.getAttribute("ref")
+ #link.tagName="a"
+
+ ref=link.getAttributeNS(EMPTY_NAMESPACE,"ref")
+ pn=link.getAttributeNS(EMPTY_NAMESPACE,"page")
+
+ cns=link.childNodes[0:]
+
+ newLink=dom.createElementNS(EMPTY_NAMESPACE,"a")
+ for x in cns:
+ newLink.appendChild(x)
+
+
+
+ link.parentNode.replaceChild(newLink,link)
if self.checkRef(ref):
- link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
+ if pn:
+ newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref+"&p="+pn)
+ else:
+ newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
- str= dom.toxml()
-
+ #str= dom.toxml('utf-8')
+ buf = cStringIO.StringIO()
+ PrettyPrint(dom, stream=buf, encoding='UTF-8')
+ str = buf.getvalue()
+ buf.close()
+ #str=PrettyPrint(dom.documentElement,encoding='UTF-8')
#print link.toxml('utf-8')
+ #print type(str)
retStr=regexpPage.search(str)
-
- return retStr.group(1)
+ try: # hack warum fehtl manchmal page??
+ return retStr.group(1)
+ except:
+ return str
return ""
def checkRef(self,ref):
- dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}
- res=None
- for db in dbs.keys():
-
- res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
- return res
+ if ref[0:3]=='lit':
+ if len(self.library_data({ 'id':ref}))>0:
+ return 1
+ try:
+ if ref[0:7]=="tec_cat":
+ return 1
+ except:
+ """nothing"""
+
+ dbs={'vl_technology':'','vl_people':'','vl_sites':''}
+ res=None
+ for db in dbs.keys():
+ res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
+ return res
#Ende Methode fuer vlp
@@ -3595,7 +3759,7 @@ class ECHO_root(Folder,Persistent,Implic
"""
for partner in partners:
- ret+="""\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace'))
+ ret+="""\n"""%(partner.getId(),partner.title)
return ret+"\n"
@@ -3702,11 +3866,22 @@ class ECHO_root(Folder,Persistent,Implic
def getMetaDatasXML(self,viewerType=None,filter=None):
"""gebe all ressourcen aus"""
+ # check if the request's host part was OK
+ http_host = self.REQUEST['HTTP_HOST']
+ host_port = self.REQUEST['SERVER_PORT']
+ fix_host = None
+ if http_host and http_host.rfind(host_port) == -1:
+ print "HTTP_HOST needs fixing!"
+ fix_host = http_host + ":" + host_port
+
ret="""
"""
for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
echo_url=resource[1].absolute_url()
+ if fix_host:
+ #print "replacing ", http_host, " by ", fix_host
+ echo_url = string.replace(echo_url, http_host, fix_host, 1)
if hasattr(resource[1],'link'):
meta_url=echo_url+"/getMetaDataXML"
@@ -3724,8 +3899,7 @@ class ECHO_root(Folder,Persistent,Implic
ret +="""\n"""
-
-
+
self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
self.REQUEST.RESPONSE.write(ret)
@@ -4126,3 +4300,4 @@ def manage_addECHO_institution(self, id,
except: url=REQUEST['URL1']
REQUEST.RESPONSE.redirect('%s/manage_main' % url)
return id
+