--- 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 +