--- ECHO_content/ECHO_collection.py 2012/01/19 19:03:28 1.310.2.6
+++ ECHO_content/ECHO_collection.py 2013/05/17 06:20:22 1.310.2.11
@@ -81,11 +81,13 @@ except:
pass
from ECHO_movie import *
-import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen
+#import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen
import xmlrpclib
import logging
+from ECHO_root import ECHO_root
+
#ersetzt logging.info
def logger(txt,method,txt2):
"""logging"""
@@ -542,6 +544,10 @@ class ECHO_link(ECHO_externalLink):
{'label':'add links config','action':'ECHO_link_addLinksForm'},
)
+ def getMDValueSimpleSearchField(self):
+ """returns value for simple search"""
+ return " ".join([self.getTitle(),self.getDescription()])
+
def ECHO_link_addLinksForm(self):
"""Main configuration"""
@@ -918,6 +924,40 @@ class ECHO_collection(CatalogAware, Fold
return ret+""
+ def getExportAsJSON(self,REQUEST=None):
+ import json
+ ret = self.getExport()
+
+ if REQUEST:
+ REQUEST.response.setHeader("Content-type", "text/json; charset=utf-8")
+
+ return json.dumps(ret)
+
+ def getExport(self,REQUEST=None):
+
+ """JSON export collection content"""
+ import json
+ ret={}
+ #contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
+ contents=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
+
+ ret['description']=self.getDescription();
+ ret['title']=self.getTitle();
+ ret['label']=self.getLabel();
+ ret['content']=[]
+ ret['echo_path']=self.absolute_url().replace(self.echo_pages.absolute_url(),'')
+
+
+ for content in contents:
+
+ ret['content'].append(content[1].getDRI(type="mpiwg"))
+
+ return ret
+
+
+
+
+
def changeLabels(self):
"""change form"""
@@ -1086,39 +1126,18 @@ class ECHO_collection(CatalogAware, Fold
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
- def changeViewerTemplateSetsForm(self):
+
+ def changeViewerForm(self):
"""change the viewer template set"""
- pt=zptFile(self, 'zpt/changeViewerTemplateSet')
+ pt=zptFile(self, 'zpt/changeECHOViewer')
return pt()
-
- def getViewerTemplateSets(self,obj_ids=None,RESPONSE=None):
- """Get the ViewerTemplateSet title for configuration"""
- ret=[]
-
- try:
- viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
-
- for viewerTemplateSet in viewerTemplateSets:
- ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
-
- return ret
-
- except:
- return [('no ViewerTemplateSetfolders','')]
-
+
def getTextToolsField(self,name,default=''):
- """Lese viewerTemplateSet der Collection not implemented yet!"""
+ """Lese text tool field der Collection not implemented yet!"""
return default
- def isSelectedViewerTemplateSet(self,obj,id):
- """is ausgewaehlt"""
-
- if self.REQUEST['viewerTemplateSet']==id:
- return 1
- else:
- return None
def changeViewer(self,newViewer,REQUEST=None,RESPONSE=None):
"""changes all ressources to the newViewer"""
@@ -1410,7 +1429,7 @@ class ECHO_collection(CatalogAware, Fold
{'label':'Export/Import Objects','action':'exportImportObjects_html'},
{'label':'Graphic Coords','action':'ECHO_graphicEntry'},
{'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
- {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},
+ {'label':'Change Image Viewer','action':'changeViewerForm'},
{'label':'ImportCollection','action':'importCollection'},
{'label':'Change access rights', 'action':'changeAccessRightsCollectionForm'},
)
@@ -1426,7 +1445,7 @@ class ECHO_collection(CatalogAware, Fold
if not hasattr(self,'sortfield'):
self.sortfield="weight"
- pt=zptFile(self, 'zpt/ChangeECHO_collection.zpt')
+ pt=zptFile(self, 'zpt/ChangeECHO_Collection.zpt')
return pt()
@@ -1893,875 +1912,6 @@ def createNode(self,descrs,node):
return "XX"
-class ECHO_root(Folder,Persistent,Implicit):
- """ECHO Root Folder"""
-
- security=ClassSecurityInfo()
-
- meta_type="ECHO_root"
- management_page_charset="utf-8"
-
- getSubCols = ECHO_helpers.getSubCols
-
- manage_options=Folder.manage_options+(
- {'label':'Main Config','action':'ECHO_copyright_configForm'},
- {'label':'Change Weights','action':'changeWeights'},
- {'label':'Generate from RDF','action':'generateFromRDFForm'},
- {'label':'update Resource Catalog','action':'updateResourceCatalog'},
- )
-
-
-
-
- def getECHORootURL(self):
- return self.absolute_url()
-
- def getECHORoot(self):
- return self
-
- def getBrowserType(self):
- """returns browserType object"""
- return browserType(self)
-
- def mod_re_sub(self,pattern,replace,string):
- """re.sub aus mod re zur Verfuegung stellen"""
- return re.sub(pattern,replace,string)
-
- def findObjectFromFulltext(self,existUri):
- '''
-
- @param url:
- @param existUri:
- '''
-
- if existUri:
- #TODO: at the moment assume that the filename is unique, the whole has to changed to a system of ids.
- filename=existUri.split("/")[-1]
-
- founds=self.resourceCatalog.search({'fullTextUrl':os.path.splitext(filename)[0]})
-
- ret=[(found.title,found.getObject().absolute_url(),found.getObject().aq_parent.absolute_url()) for found in founds]
-
- return ret
-
- def reindex(self,RESPONSE=None):
- """indiziere alle Objecte neu"""
-
- if RESPONSE:
- RESPONSE.write("
")
-
- resources=self.ZopeFind(self,obj_metatypes=["ECHO_resource"], search_sub=1)
-
- for resource in resources:
- resource[1].reindex()
- #print " done %s
\n"
- if RESPONSE:
- RESPONSE.write(" done %s
\n"%resource[0])
-
- if RESPONSE:
- RESPONSE.write(" ok
\n")
-
-
- def setLanguage(self,lang):
- """Set language cookie"""
- self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/")
-
- def switchLanguage(self):
- """Set language cookie"""
- if self.getLanguage()=="en":
- lang="de"
- else:
- lang="en"
-
- self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/")
- self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1'])
-
- def getLanguage(self):
- """get language cookie"""
- lang= self.REQUEST.cookies.get('lang_exhibition','de')
- if lang == '':
- lang="de"
- return lang
-
- def getContentOverviewTemplate(self):
- """produces overview template with macro"""
- pt = zptObjectOrFile(self, 'content_overview_template')
- return pt
-
- def mapstyle_css(self):
- """send mapstyle.css"""
- sendFile(self, 'html/ECHO_mapstyle.css', 'text/css')
-
-
- ###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 URLquote(self, text):
- """urllib.quote fuer Michael"""
- return urllib.quote(text)
-
-
- def checkResource(self,id):
- """checks if a resource is in the tree, gives back none or list of resources"""
- if not id:
- id=""
- splitted=id.split("/")
- id=splitted[len(splitted)-1]
- 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=zptFile(self, 'zpt/generateFromRDFForm')
- 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:
- pass
- return ret
-
- def changeWeights(self):
- """change form"""
- pt=zptFile(self, 'zpt/changeWeightForm')
- pt.content_type="text/html"
- return pt()
-
-
- 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 for index-meta-generation"""
- if not content or content=="":
- return ""
- ret="<%s>"%tag
- #ret+=urllib.quote(content)
- ret+=content
-
- ret+="%s>"%tag
- return ret
-
- def getValueFromClass(self,field,found):
- """ret attribute if existing"""
- try:
-
-
- return getattr(found,field)#.decode('ascii','ignore')
-
-
-
- except:
- logging.error("can't: decode: %s"%repr(field))
- logging.error(" %s %s"%(sys.exc_info()[0],sys.exc_info()[1]))
- return ""
-
- security.declarePublic('getImageTag')
- def getImageTag(self):
- """needed by main_template"""
- return ""
-
- secondaryLink="" #needed by main_template
- secondaryLinkTitle="" #needed by main_template
-
- def getBgcolour(self):
- """hack"""
- return "#dddddd"
-
- security.declareProtected('View','contentTypeSelector_HTML')
- def contentTypeSelector_HTML(self,selected=None):
- """give type selector"""
- if not selected:
- retStr="