--- ECHO_content/ECHO_collection.py 2012/01/18 16:57:00 1.310.2.5
+++ ECHO_content/ECHO_collection.py 2012/09/03 13:11:09 1.310.2.9
@@ -36,6 +36,7 @@ from Globals import Persistent, package_
from Acquisition import Implicit
from Products.ZCatalog.CatalogPathAwareness import CatalogAware
from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon
+import ECHO_helpers
from Acquisition import aq_parent
try:
from Products.MetaDataProvider.MetaDataClient import MetaDataClient
@@ -80,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"""
@@ -732,25 +735,15 @@ class ECHO_collection(CatalogAware, Fold
p = aq_parent(p.context)
return subsec
+
+
+ def getCrumb(self):
+ """returns breadcrumb for this object"""
+ return ECHO_helpers.getCrumb(self)
def getHierCrumbs(self):
"""returns a list of hierarchical breadcrumbs from self to the ECHO_root"""
- # crumb for this object
- crumb = {'obj': self,
- 'url': self.absolute_url(),
- 'label': self.getLabel()}
- crumbs = [crumb]
- # call the parent's method recursively
- parent = aq_parent(self)
- if hasattr(parent, 'getHierCrumbs'):
- if self.title:
- return parent.getHierCrumbs() + crumbs
- else:
- # if there's no title, skip this level
- return parent.getHierCrumbs()
-
- return crumbs
-
+ return ECHO_helpers.getHierCrumbs(self)
def exportImportObjects_html(self,RESPONSE):
@@ -1095,39 +1088,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"""
@@ -1419,7 +1391,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'},
)
@@ -1435,7 +1407,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()
@@ -1902,875 +1874,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="