"
+ collections+=""
collections+=getCollection(element,depth)+"\n"
except:
"""nothing"""
@@ -2217,6 +2580,7 @@ class ECHO_collection(Folder, Persistent
{'label':'Main Config','action':'ECHO_collection_config'},
{'label':'Change Labels','action':'changeLabels'},
{'label':'Change Titles','action':'changeTitles'},
+ {'label':'Change Weights','action':'changeWeights'},
{'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'},
{'label':'Graphics','action':'ECHO_graphicEntry'},
{'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
@@ -2283,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
@@ -2292,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]
@@ -2311,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():
@@ -2512,7 +2885,7 @@ class ECHO_group(ECHO_collection):
return pt()
def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
- """Änderung der Properties"""
+ """Änderung der Properties"""
self.secondaryLink=secondaryLink
self.secondaryLinkTitle=secondaryLinkTitle
@@ -2683,6 +3056,40 @@ 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"""
@@ -2690,11 +3097,161 @@ class ECHO_root(Folder,Persistent,Implic
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=""
+ argv=self.REQUEST.form
+
+ resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
+ for resource in resources:
+
+ try:
+ ret+=resource[1].getId()+" "+argv[resource[1].getId()]+""
+ resource[1].weight=argv[resource[1].getId()][0:]
+ except:
+ """not"""
+ return ret
+
+ def changeWeights(self):
+ """change form"""
+ pt=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self)
+ pt.content_type="text/html"
+ return pt()
+ getSubCols = ECHO_helpers.getSubCols
manage_options=Folder.manage_options+(
{'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):
@@ -2741,7 +3298,7 @@ class ECHO_root(Folder,Persistent,Implic
def showContent(self,path):
"""return content/html"""
- return urllib.urlopen(path+"/content_html").read()
+ return ECHO_helpers.urlopen(path+"/content_html").read()
def getImageViewers(self):
"""images"""
@@ -2750,7 +3307,7 @@ class ECHO_root(Folder,Persistent,Implic
def getBibTag(self,tag,content):
- """get field tag für index-meta-generation"""
+ """get field tag für index-meta-generation"""
if not content or content=="":
return ""
ret="<%s>"%tag
@@ -2888,7 +3445,7 @@ class ECHO_root(Folder,Persistent,Implic
"""nothing"""
return retStr
- mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version über echoroot??
+ mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version über echoroot??
def mediaTypeSelector_HTML(self,selected=None):
"""give type selector"""
@@ -2960,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)"""
@@ -3025,43 +3602,86 @@ 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')
- match=re.sub(r'<\?xml version=\"1.0\" encoding=\"utf-8\"\?>\n','',newxml)
- match=re.sub(r'','',match)
-
- return match
+
+ retStr=regexpTXT.search(newxml)
+
+ return retStr.group(1)
+
return ""
- def xml2html(self,str):
+ def xml2html(self,str,quote="yes"):
"""link2html fuer VLP muss hier noch raus"""
- if str:
-
- str=re.sub("\&","&",str)
- dom=xml.dom.minidom.parseString(str)
- links=dom.getElementsByTagName("link")
-
+ if str:
+ if quote=="yes2":
+ str=re.sub("\&","&",str)
+ #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)
- return dom.toxml('utf-8')
+ #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)
+ 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
@@ -3089,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"
@@ -3196,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"
@@ -3218,8 +3849,7 @@ class ECHO_root(Folder,Persistent,Implic
ret +="""\n"""
-
-
+
self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
self.REQUEST.RESPONSE.write(ret)
@@ -3488,15 +4118,15 @@ def manage_addECHO_linkList(self, id, la
class ECHO_support(Folder):
- """gefšrdert durch"""
+ """gefšrdert durch"""
meta_type="ECHO_support"
def __init__(self,id,institutions=None):
"""init"""
- ##self.title=title
self.id=id
+ self.title=''
self.institutions=toList(institutions)
def getSupporter(self):
@@ -3518,7 +4148,6 @@ class ECHO_support(Folder):
def ECHO_support_config(self,institutions=None,RESPONSE=None):
"""change"""
- ##self.title=title
self.institutions=toList(institutions)
if RESPONSE is not None:
@@ -3530,7 +4159,7 @@ def manage_addECHO_supportForm(self):
pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_support.zpt').__of__(self)
return pt()
-def manage_addECHO_support(self, id,title,institutions=None,RESPONSE=None):
+def manage_addECHO_support(self, id,institutions=None,RESPONSE=None):
"""add the copyright"""
meta_type="ECHO_support"
@@ -3620,4 +4249,4 @@ def manage_addECHO_institution(self, id,
try: url=self.DestinationURL()
except: url=REQUEST['URL1']
REQUEST.RESPONSE.redirect('%s/manage_main' % url)
- return id
\ No newline at end of file
+ return id