"
+ collections+=""
collections+=getCollection(element,depth)+"\n"
except:
"""nothing"""
@@ -2534,7 +2647,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
@@ -2543,6 +2656,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]
@@ -2562,7 +2676,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():
@@ -2934,13 +3056,173 @@ def manage_addECHO_userFolderForm(self):
"""add a user folder form"""
return manage_addECHO_userFolder(self)
+
+
+def createNode(self,descrs,node):
+ name=descrs[node]['name']
+ type=descrs[node]['type']
+ urn=node
+ #print " will create",node.encode('utf-8')
+ 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":
+
+ try:
+ manage_addECHO_collection(self,id,name,name,"","","","","")
+
+ except:
+ self.REQUEST.RESPONSE.write("
Error%s
\n"%id)
+
+ self.REQUEST.RESPONSE.write("Creates:%s
\n"%getattr(self,id).absolute_url())
+
+ return type,getattr(self,id),urn
+
+ if type=="CDLI_item":
+ try:
+ manage_addECHO_resource(self,id,name,name,"","",urn,"","")
+ except:
+ self.REQUEST.RESPONSE.write("Error%s
\n"%id)
+ self.REQUEST.RESPONSE.write("Creates:%s
\n"%getattr(self,id).absolute_url())
+
+
+ return "XX"
+
+
class ECHO_root(Folder,Persistent,Implicit):
"""ECHO Root Folder"""
security=ClassSecurityInfo()
meta_type="ECHO_root"
+
+ ###CDLI adds -> have to be removed
+ def getTablet(self,item):
+ #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 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"""
+
+ global seqs
+ seqs={}
+ global descrs
+ descrs={}
+ global key
+ 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
+ global descrs
+ global key
+ global value
+ seq=""
+ if name=="RDF:Seq":
+ key=attrs.get('RDF:about')
+ try: # teste ob liste
+ x=seqs[key][0]
+ except:
+
+ seqs[key]=[]
+
+
+ elif name=="RDF:Description":
+ key=attrs.get('RDF:about')
+
+
+ elif name=="RDF:li":
+ name=attrs.get('RDF:resource')
+ seqs[key].append(name)
+
+ elif name=="ECHONAVIGATION:type":
+ value="type"
+
+ elif name=="ECHONAVIGATION:name":
+ value="name"
+ elif name=="ECHONAVIGATION:linkClickable":
+ value="linkClickable"
+
+ def end_element(name):
+ """nothing"""
+ key=""
+ value=""
+
+ def char_data(data):
+ """nothing"""
+
+ data=re.sub("\n","",data)
+ try:
+ if descrs[key].has_key(value):
+ descrs[key][value]+=data
+ else:
+ descrs[key][value]=data
+ except:
+
+ descrs[key]={}
+ descrs[key][value]=data
+
+ p = xml.parsers.expat.ParserCreate()
+
+ p.StartElementHandler = start_element
+ p.EndElementHandler = end_element
+ p.CharacterDataHandler = char_data
+
+
+ p.ParseFile(file)
+ self.REQUEST.RESPONSE.write("Start
")
+ createSubs(self,seqs,descrs,startNode)
+ self.REQUEST.RESPONSE.write("done
")
+ #print "done"
+
+
+ return "done"
+
+
+
def changeWeightsInCollection(self):
"""change all lables of a collection"""
ret=""
@@ -2967,7 +3249,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):
@@ -3233,6 +3517,26 @@ class ECHO_root(Folder,Persistent,Implic
return "changed all contenttypes in: "+self.title
+ def deleteCache(self,obj=None,RESPONSE=None):
+ """setze alle collections auf cache = CacheManager"""
+
+
+ if not obj:
+ obj = self
+
+ entries=obj.ZopeFind(obj,search_sub=1)
+
+ for entry in entries:
+ 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)"""
@@ -3298,9 +3602,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()+"/vlp_coll?id="+ref+"&p="+pn)
+ else:
+ link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
+
newxml=dom.toxml('utf-8')
@@ -3313,35 +3623,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
@@ -3369,7 +3709,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"
@@ -3476,11 +3816,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"
@@ -3498,8 +3849,7 @@ class ECHO_root(Folder,Persistent,Implic
ret +="""\n"""
-
-
+
self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
self.REQUEST.RESPONSE.write(ret)