"
+ collections+=""
collections+=getCollection(element,depth)+"\n"
except:
"""nothing"""
@@ -1566,26 +2076,20 @@ class ECHO_collection(Folder, Persistent
security.declarePublic('ECHO_rerenderLinksMD')
- def ECHO_rerenderLinksMD(self,obj=None):
- """Rerender all Links"""
- if not obj:
- obj = self
-
- entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
- for entry in entries:
- if entry[1].meta_type == 'ECHO_resource':
- entry[1].ECHO_getResourceMD(template="no")
- entry[1].generate_title()
- entry[1].generate_label()
+ def ECHO_rerenderLinksMDWarning(self):
+ """change form"""
+ pt=PageTemplateFile('Products/ECHO_content/zpt/rerenderLinksWarning').__of__(self)
+ pt.content_type="text/html"
+ return pt()
- else:
- self.ECHO_rerenderLinksMD(entry[1])
-
-
- return "Rerenderd all links to resources in: "+self.title
+
+ def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
+ """Rerender all Links"""
+ return ECHO_rerenderLinksMD(self,obj,types)
+
security.declarePublic('ECHO_newViewerLink')
@@ -1620,12 +2124,19 @@ class ECHO_collection(Folder, Persistent
self.bgcolour=bgcolour
- manage_options = Folder.manage_options+(
+ manage_options = Folder.manage_options+ Cacheable.manage_options+(
{'label':'Main Config','action':'ECHO_collection_config'},
- {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
+ {'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'},
- {'label':'Change Viewer Templates','action':'changeViewerTemplateSetsForm'},
+ {'label':'Set Startpage','action':'setStartpageFolderForm'},
+ {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},
+ {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
+ {'label':'ImportCollection','action':'updateCollection'},
+ {'label':'Copy MD for indexing and search','action':'copySearchFields'},
)
def getOverview(self):
@@ -1684,7 +2195,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
@@ -1693,6 +2204,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]
@@ -1712,7 +2224,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():
@@ -1724,24 +2244,34 @@ class ECHO_collection(Folder, Persistent
def index_html(self):
"""standard page"""
-
+ if self.ZCacheable_isCachingEnabled():
+
+ result = self.ZCacheable_get()
+ if result is not None:
+ # Got a cached value.
+ return result
+
if 'index.html' in self.__dict__.keys():
- return getattr(self,'index.html')()
+ ret=getattr(self,'index.html')()
elif 'overview' in self.__dict__.keys():
- return self.showOverview()
+ ret=self.showOverview()
elif hasattr(self,'collection_index_template'):
- return self.collection_index_template()
+ ret=self.collection_index_template()
elif hasattr(self,'main_index_template'):
- return self.main_index_template()
-
- pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
- pt.content_type="text/html"
- return pt()
+ ret=self.main_index_template()
+ else:
+ pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
+ pt.content_type="text/html"
+ ret=pt.render()
- def content_html(self):
+ self.ZCacheable_set(ret)
+ return ret
+
+ def content_html(self,**argv):
"""template fuer content"""
- return content_html(self,'collection')
+ #print "NN",argv
+ return ECHO_basis.content_html(self,'collection')
def getCredits(self):
"""Ausgabe der credits"""
@@ -1829,11 +2359,43 @@ class ECHO_group(ECHO_collection):
manage_options = Folder.manage_options+(
{'label':'Main Config','action':'ECHO_group_config'},
- {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
+ {'label':'Rerender Links','action':'ECHO_rerenderLinksMDWarning'},
{'label':'Graphics','action':'ECHO_graphicEntry'},
)
security.declareProtected('View','index_html')
+
+ def showRDF(self):
+ """showrdf"""
+ self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
+ ret="""\n\n"""
+ ret+=self.getRDF(urn="echo:collectionroot")+"\n"
+
+ ret+=""""""
+
+ return ret
+
+ def getRDF(self,urn=None):
+ """rdf of the collection"""
+ contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
+
+ ret=getRDFDescription(self,self.absolute_url(),urn=urn)
+
+
+ if not urn:
+ urn=self.absolute_url()
+ li="""\n"""
+
+
+ for content in contents:
+ ret+=content[1].getRDF()+"\n"
+
+ ret+="""\n"""%urn
+ for content in contents:
+ nurn=content[1].absolute_url()
+ ret+=li%nurn
+ return ret+""
+
def index_html(self):
"""standard page"""
displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
@@ -1872,7 +2434,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
@@ -1905,7 +2467,7 @@ class ECHO_group(ECHO_collection):
def content_html(self):
"""template fuer content"""
- return content_html(self,'group')
+ return ECHO_basis.content_html(self,'group')
@@ -2043,6 +2605,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"""
@@ -2050,9 +2646,234 @@ 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 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"""
+
+ 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):
+ """showrdf"""
+ self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
+ ret="""\n\n"""
+ ret+=self.getRDF(urn="echo:collectionroot")+"\n"
+
+ ret+=""""""
+ return ret
+
+
+ def reloadMetaDataFromStorageWarning(self,RESPONSE=None):
+ """warning"""
+ pt=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self)
+ pt.content_type="text/html"
+ return pt()
+
+ def reloadMetaDataFromStorage(self,RESPONSE=None):
+ """reload MD from Storage"""
+
+ return reloadMetaDataFromStorage(self,RESPONSE)
+
+ def getRDF(self,urn=None):
+ """rdf of the collection"""
+
+ contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
+
+ ret=getRDFDescription(self,self.absolute_url(),urn=urn)
+
+ li="""\n"""
+
+
+ for content in contents:
+ ret+=content[1].getRDF()+"\n"
+
+ ret+="""\n"""%urn
+ for content in contents:
+ nurn=content[1].absolute_url()
+ ret+=li%nurn
+ return ret+""
+
+
+ def showContent(self,path):
+ """return content/html"""
+
+ return ECHO_helpers.urlopen(path+"/content_html").read()
+
+ def getImageViewers(self):
+ """images"""
+ viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
+ return viewers
+
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
@@ -2140,7 +2961,7 @@ class ECHO_root(Folder,Persistent,Implic
return retStr
- def copyrightTypeSelector_HTML(self,selected=None,first=None):
+ def copyrightTypeSelector_HTML(self, object=None, selected=None,first=None):
"""give type selector"""
if not first:
@@ -2161,8 +2982,16 @@ class ECHO_root(Folder,Persistent,Implic
retStr+="""