--- ECHO_content/ECHO_collection.py 2006/07/27 15:27:34 1.272 +++ ECHO_content/ECHO_collection.py 2009/04/14 15:21:10 1.303 @@ -1,4 +1,4 @@ -"""New version of the product started February, 8th. Without scientific classification, use content-type for further classification.""" +"""New version of the produc started February, 8th. Without scientific classification, use content-type for further classification.""" """Echo collection provides the classes for the ECHO content web-site. class ECHO_collection is the basis class for an ECHO collection. @@ -18,8 +18,9 @@ except: import urlparse import string import tempfile +import zipfile import re -import os +import os,shutil import OFS.Image from types import * from OFS.Cache import Cacheable @@ -39,8 +40,12 @@ from Globals import Persistent, package_ from Acquisition import Implicit from Products.ZCatalog.CatalogPathAwareness import CatalogAware from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon - +try: + from Products.MetaDataProvider.MetaDataClient import MetaDataClient +except: + print "no metadataclient" import urllib +import urllib2 import cgi import smtplib import time @@ -50,7 +55,7 @@ from Ft.Xml import EMPTY_NAMESPACE import Ft.Xml.XPath import cStringIO -import zLOG + import sys try: @@ -67,11 +72,26 @@ import urllib import xml.dom.minidom import ECHO_helpers from ECHO_helpers import * -from ECHO_language import * + +try: + from ECHO_language import * +except: + print "no echo_language" + class ECHO_language: + """ leere Klasse""" + pass + from ECHO_movie import * import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen import xmlrpclib - + +import logging + +#ersetzt logging.info +def logger(txt,method,txt2): + """logging""" + logging.info(txt+ txt2) + def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""): @@ -85,6 +105,13 @@ def setECHO_collectionInformation(self,t self.credits=toList(credits) self.weight=weight +import ECHO_resource +from ECHO_resource import manage_addECHO_resource + +class ECHO_resource(ECHO_resource.ECHO_resource): + """depricated use class in ECHO_resource.py""" + + class ECHO_partner(Image,Persistent,ECHO_basis): """ECHO Partner""" @@ -175,12 +202,15 @@ class ECHO_locale(ZopePageTemplate): meta_type="ECHO_locale" def __init__(self,id,lang,title,label,text=None,content_type=None): - self.lang=lang - self.title=title - self.label=label - if text: - self.pt_edit(text, content_type) - self.id=id + self.lang=lang + self.title=title + self.label=label + # default content + if not text: + text = open(self._default_content_fn).read() + content_type = 'text/html' + self.pt_edit(text, content_type) + self.id=id manage_options = ZopePageTemplate.manage_options+( {'label':'Main Config','action':'change_ECHO_localeForm'}, @@ -197,6 +227,8 @@ class ECHO_locale(ZopePageTemplate): self.title=title self.label=label if not text is None: + if content_type is None: + content_type = self.content_type self.pt_edit(text, content_type) if RESPONSE is not None: @@ -286,6 +318,8 @@ class ECHO_layoutTemplate(ZopePageTempla if text is None: self._default_content_fn = os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%EchoType) text = open(self._default_content_fn).read() + if content_type is None: + content_type = self.content_type self.pt_edit(text, content_type) @@ -343,7 +377,10 @@ class ECHO_fullText(ZopePageTemplate,ECH def getPage(self,nr='1'): """get page n""" #return self().encode('latin-1','ignore') - dom=xml.dom.minidom.parseString(self()) + try: + dom=xml.dom.minidom.parseString(self()) + except: + dom=xml.dom.minidom.parseString(self().encode('latin-1')) pages=dom.getElementsByTagName('page') return pages[int(nr)-1].toxml() @@ -384,1268 +421,7 @@ def manage_addECHO_fullText(self, id, ti return '' -class ECHO_resource(CatalogAware,Folder,Persistent,ECHO_basis): - """ECHO Ressource""" - security=ClassSecurityInfo() - meta_type='ECHO_resource' - default_catalog='resourceCatalog' - -# viewClassificationList=viewClassificationListMaster - - def PrincipiaSearchSource(self): - """Return cataloguable key for ourselves.""" - return str(self) - - getSubCols = ECHO_helpers.getSubCols - - def reindex(self): - """generate fields for indexing and reindex""" - - #TODO: korrigieren des metalink pfades konfigurierbar machen - splitted= [x for x in urlparse.urlparse(self.metalink)] - splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:] - - if splitted[0]=="http": - self.metalink=urlparse.urlunparse(splitted) - - - self.fullTextUrl=self.getFullTextXML(noredirect="yes") - - #TODO: korrigieren relative url to absoluter url volltexten, konfigurierbar? - splitted= [x for x in urlparse.urlparse(self.fullTextUrl)] - if splitted[0]=="": - splitted[0]="http" - splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:] - - self.fullTextUrl=urlparse.urlunparse(splitted) - - self.imagePath=self.getImagePath() - - self.reindex_object() - - - security.declareProtected('View','createPDF') - def createPDF(self,RESPONSE=None,local=None,dpi=150): - """erzeuge pdf file""" - pages=1 - dpi=float(dpi) - imagePath=self.getImagePath().replace("/mpiwg/online","") - - - image="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn="+imagePath+"&dw=%i&dh=%i&pn=%i" - xmlInfo="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/dlInfo-xml.jsp?fn="+imagePath - - dom=xml.dom.minidom.parse(urllib.urlopen(xmlInfo)) - for parameter in dom.getElementsByTagName('parameter'): - if parameter.getAttribute('name')=="pt": - pages=int(parameter.getAttribute('value')) - break - - - tempdir="/tmp/archivesImageServer" - if not os.path.exists(tempdir): - os.mkdir(tempdir) - - tmpPath=tempfile.mkdtemp(dir=tempdir) - - - tmpZip=tempfile.mktemp(dir=tempdir) - - tmpFn=os.path.split(tmpZip)[1] - - - - - if RESPONSE: - RESPONSE.setHeader("Content-Type","text/html") - RESPONSE.write("

I am creating the pdf

") - txt="

1. step: getting the images( %i pages)

"%pages - RESPONSE.write(txt) - - c=canvas.Canvas(tmpZip) - for i in range(1,pages+1): - if RESPONSE: - RESPONSE.write(str("

Get Page: %i
\n"%i)) - faktor=dpi/72.0 - - fn=tmpPath+"/%i"%i - - width,height=A4 - #print image%(width*faktor,height*faktor,i) - url=urllib.urlopen(image%(width*faktor,height*faktor,i)).read() - fh=file(fn,"w") - fh.write(url) - fh.close() - - - - c.drawImage(fn,0,0,width=width,height=height) - c.showPage() - c.save() - if RESPONSE: - RESPONSE.write("

finished
\n") - - if RESPONSE: - len=os.stat(tmpZip)[6] - downloadUrl=self.absolute_url()+"/downloadPDF" - RESPONSE.write("""

Click here for download ( %i Byte)

\n"""%(tmpFn,len)) - RESPONSE.write("""

The file will be stored for a while, you can download it later, the URL is:

-

%s?fn=%s\n"""%(tmpFn,downloadUrl,tmpFn)) - RESPONSE.close() - - - def downloadPDF(self,fn): - """download prepared set""" - filename="/tmp/archivesImageServer/"+fn - namePDF=self.getId()+".pdf" - self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%namePDF) - self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") - len=os.stat(filename)[6] - self.REQUEST.RESPONSE.setHeader("Content-Length",len) - images=file(filename).read() - self.REQUEST.RESPONSE.write(images) - self.REQUEST.RESPONSE.close() - - - def getRDF(self,urn=None): - """rdf""" - ret=getRDFDescription(self,self.link,urn=urn) - return ret+self.createSubElementRDF(urn=urn) - - - def changeAccessRightForm(self,preselect=None): - """change the access rights""" - - pt=zptFile(self, 'zpt/ChangeECHO_resourceAccessRight.zpt') - return pt(preselect=preselect) - - def changeAccessRight(self): - """changeRights""" - argv=self.REQUEST.form - self.setAccessRightXML(argv["%s_xml"%self.getId()]) - self.accessRight=argv["%s_echo"%self.getId()] - - self.REQUEST.RESPONSE.redirect('manage_main') - - - def getAccessRightSelectorHTML(self,outlook="select",xmldominant=None,preselect=None): - """htmlselector, xmldominant= in der regel wird der wert des xmlfiles ausgegeben ausser er existiert nicht""" - values=['','free','MPIWG'] - - if preselect:#set all to the preselected - ar=(preselect,preselect) - else:#else set to actual value - ar=self.getAccessRightMD() - - if outlook=="select": - ret=""""""%self.getId() - for value in values: - if value==ar[0]: - ret+=""%value - else: - ret+=""%value - - if value==ar[1]: - ret1+=""%value - else: - ret1+=""%value - - - if not xmldominant: - return ret+"",ret1+"" - else: - if ar[0] is not None: - return ret+"" - else: - return "

No xml file (only local selection):"+ret1 - - else: - ret="" - ret1="" - for value in values: - - if value==ar[0]: - ret+="""%s"""%(self.getId(),value,value) - else: - ret+="""%s"""%(self.getId(),value,value) - - if value==ar[1]: - ret1+="""%s"""%(self.getId(),value,value) - else: - ret1+="""%s"""%(self.getId(),value,value) - - if not xmldominant: - return ret,ret1 - else: - if ar[0]: - return ret - else: - return "

No xml file (only local selection)

"+ret1 - - - - def copyAccessRightsFromMD(self): - """kopiere rechte aus den metadaten""" - self.accessRight=self.getAccessRightMD()[0] - - - - - - def getAccessRightMD(self): - """set accessright""" - url=self.metalink - - try: - urllib.urlopen(url) - except: - zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) - - return None,getattr(self,'accessRight','') - - - try: - dom = NonvalidatingReader.parseUri(url) - except: - zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) - return (None,"Cannot parse: "+url+"
"+"%s (%s)"%sys.exc_info()[0:2]) - - - accessright=dom.xpath("//meta/access-conditions/access/@type") - if accessright: - accessright=accessright[0].value - if str(accessright)=='institution': - tmp=dom.xpath("//meta/access-conditions/access/name") - if tmp: - accessright=getTextFromNode(tmp[0]) - - if not accessright: - accessright="" - - return accessright,getattr(self,'accessRight','') - - def changeAccessRightMD(self,accessright,RESPONSE=None): - """change the rights - not user anymore""" - #TODO: check if method still needed - params="accessright=%s"%accessright - - - #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read() - - - ECHO_helpers.urlopen('http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/setAccessRightXML'+urllib.quote('?'+params))).read() - - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - def setAccessRightXML(self,accessright): - """set accessright""" - url=self.metalink - accessrights=['MPIWG','free']#allowes rights - - if accessright =='': - """do nothing""" - return "" - - - try: - geturl="" - for line in ECHO_helpers.urlopen(url).readlines(): - geturl=geturl+line - - - except: - return (None,"Cannot open: "+url) - - try: - dom=xml.dom.minidom.parseString(geturl) - root=dom.getElementsByTagName('resource')[0] - except: - return (None,"Cannot parse: "+url+"
"+geturl) - - metamains=dom.getElementsByTagName('meta') - - if not metamains: - nodenew=dom.createElement('meta') - root.appendChild(nodenew) - metamain=nodenew - else: - metamain=metamains[0] - - - metanodes=metamain.getElementsByTagName('access-conditions') - - if not metanodes: - nodenew=dom.createElement('access-conditions') - metamain.appendChild(nodenew) - metanode=nodenew - else: - metanode=metanodes[0] - - accesses=metanode.getElementsByTagName('access') - - #delete old - if accesses: - metanode.removeChild(accesses[0]).unlink() - - #create new - - nodenew2=dom.createElement('access') - metanode.appendChild(nodenew2) - metanode2=nodenew2 - - attribute=metanode2.getAttribute('type') - - if accessright=="free": - - metanode2.setAttribute('type','free') - - elif accessright.upper()=='MPIWG': - metanode2.setAttribute('type','institution') - nodenew4=dom.createElement('name') - metanodetext=dom.createTextNode('MPIWG') - nodenew4.appendChild(metanodetext) - nodenew2.appendChild(nodenew4) - #print dom.toxml().encode('utf-8') - string= encodeRPC(dom.toxml().encode('utf-8')) - - #TODO: make server configurable - server=xmlrpclib.Server("http://foxridge.mpiwg-berlin.mpg.de/server") - - path=urlparse.urlparse(self.metalink)[2] - - server.writeMetaDataFile(path,string,"yes") - - def setStartPageForm(self): - """Form for changing the startpage""" - - - pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt') - pt.content_type="text/html" - return pt() - - - def createImageUrl(self,pn=1): - """create ImageUrl""" - - - resourcepath=readFieldFromXML(self.metalink,'resource','archive-path') - - digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix') - images=readFieldFromXML(self.metalink,'texttool','image') - - - if (not resourcepath) or (not digiliburlprefix) or (not images): - zLOG.LOG("ECHO (createImageUrl)",zLOG.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url()) - return None - resourcepath=resourcepath.replace('/mpiwg/online','') - if not digiliburlprefix: digiliburlprefix="http://echo.mpiwg-berlin.mpg.de/zogilib?" - - if (not images) or (not resourcepath): return None - - return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn) - - def copyTitleToInfoXML(self,RESPONSE=None): - """copy title from the resource""" - presentationXML=readFieldFromXML(self.metalink,'texttool','presentation') - resourcepath=readFieldFromXML(self.metalink,'resource','archive-path') - if (not presentationXML) or (not resourcepath): - if RESPONSE: - RESPONSE.write("Error: %s\n"%self.getId()) - else: - return None,self.absolute_url() - - try: - fh=file(os.path.join(resourcepath,presentationXML),'w') - fh.write(""" - - %s - - yes - """%self.title) - fh.close() - return 1,self.getId() - except: - if RESPONSE: - RESPONSE.write("Error: %s\n"%self.getId()) - else: - return None,self.absolute_url() - - - def setStartPage(self,startpage=None,RESPONSE=None): - """set start page, if no startpage defined use the generic one of the resource""" - if (not (type(startpage)==StringType)): - if ("__generic" in startpage): # checke ob generic in der liste - startpage=self.absolute_url()+"/startpage_html" - elif ("__firstPage" in startpage): # checke ob generic in der liste - startpage=self.createImageUrl() - - if (not startpage): - startpage=self.absolute_url()+"/startpage_html" - elif (startpage=="__generic"): - startpage=self.absolute_url()+"/startpage_html" - elif (startpage=="__firstPage"): - startpage=self.createImageUrl() - - params="startpage=%s"%startpage - #print 'http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params)) - - ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read() - - - path=self.metalink - - path=re.sub(self.REQUEST['SERVER_URL'],'',path) - path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path) - - path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server - path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server - path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server - path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server - path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server - path=re.sub('http://vision.mpiwg-berlin.mpg.de','',path) # falls vision als server - path=re.sub('http://xserve02.mpiwg-berlin.mpg.de:18880','',path) # falls vision als server - path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo - path=re.sub('/index.meta','',path) - - - ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - def changeViewerTemplateSetForm(self): - """change the viewer template set""" - pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet') - return pt() - - - def setLink(self, link=None): - """change link field""" - if link is not None: - self.link = link - - - def getTextToolsField(self,name,default=''): - """Lese Textoolsfelder aus index.meta im path aus""" - - try: - dom=xml.dom.minidom.parse(self.metalink) - node=dom.getElementsByTagName('texttool')[0] #getNode - subnode=node.getElementsByTagName(name)[0] - - # bei text wird nur der Folder gebraucht - if name=="text": - splitted=getText(subnode.childNodes).split("/") - return splitted[len(splitted)-2] - else: - return getText(subnode.childNodes) - except: - return default - - - def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): - """changeit""" - - paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix'] - - - #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate) - - params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix) - - try: - ECHO_helpers.urlopen('http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read() - except: - zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2]) - zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,'http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))) - #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params) - # hack Pfad auf die Dokumente - path=self.metalink - - - - path=re.sub('/index.meta','',path) - - #TODO: direct access to the file system necessary, fix that also xmlrpc to the server where the index file is stored is possible - parsedUrl=urlparse.urlparse(path) - path=parsedUrl[2] - - try: - return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() - except: - zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) - zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path) - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - - security.declarePublic('content_html') - def content_html(self): - """template fuer content""" - return ECHO_basis.content_html(self,'resource') - -# def getViewClassification(self): -# if hasattr(self,'viewClassification'): -# return self.viewClassification -# else: -# return "" - - def getFullTextXML(self,noredirect=None): - """getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong.""" - - try: - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink) - fh=ECHO_helpers.urlopen(self.metalink) - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"opened %s"%self.metalink) - dom=xml.dom.minidom.parse(fh) - texttools=dom.getElementsByTagName('texttool') - text=texttools[0].getElementsByTagName('text') - texturl=getText(text[0].childNodes) - - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"found %s"%texturl) - fh.close() - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh") - #keine url - if not (texturl.split(":")[0] in ['http','ftp','file']): - if not noredirect: - return file(texturl).read() - else: - return texturl - - if not noredirect: - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl) - self.REQUEST.RESPONSE.redirect(texturl) - else: - return texturl - except: - - if not noredirect: - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - self.REQUEST.RESPONSE.write("no fulltext available") - else: - return "no fulltext available" - - def getImagePath(self): - """gibt pfad zum image aus""" - return self.getImageView(noredirect="yes",onlyPath="yes") - - def getImageView(self,noredirect=None,onlyPath=None): - """getImages; give Imageviewr and if somthing goes wrong.""" - try: - fh=ECHO_helpers.urlopen(self.metalink) - dom=xml.dom.minidom.parse(fh) - texttools=dom.getElementsByTagName('texttool') - text=texttools[0].getElementsByTagName('image') - imagetemp=getText(text[0].childNodes) - - text=dom.getElementsByTagName('archive-path') - archivepath=getText(text[0].childNodes) - archivepath=re.sub('/mpiwg/online/','',archivepath) - imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp - fh.close() - - if not noredirect: - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - self.REQUEST.RESPONSE.redirect(imageurl) - else: - if not onlyPath: - return imageurl - else: - return archivepath+"/"+imagetemp - except: - - if not noredirect: - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - self.REQUEST.RESPONSE.write("no fulltext available") - else: - return "no images available" - - - def getCopyrightsHTML(self): - """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus""" - - if hasattr(self,'copyrightModel'): - obj=self.copyrightModel - - else: - return "ERROR" - ret=[] - - for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID - - - try: - if hasattr(self.copyrightTypes,copyright[2]): - copyrightTypeObj=getattr(self.copyrightTypes,copyright[2]) - link="copyrightTypes/"+copyright[2]+'/copyright.html' - else: - copyrightTypeObj=getattr(obj,copyright[2]) - link="copyrightModel/"+copyright[2]+'/copyright.html' - - label=copyrightTypeObj.label - url=getattr(copyrightTypeObj, 'url', '') - - if url!='': - ret.append((url,copyright[0],copyright[1],copyright[2],label)) - else: - if hasattr(copyrightTypeObj, 'copyright.html'): - ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label)) - else: - ret.append(('empty',copyright[0],copyright[1],copyright[2],label)) - except: - """nothing""" - - return ret - - def getInstitutionsHTML(self): - """gibt Liste der foerdernden Institutionen aus""" - - if hasattr(self,'support'): - obj=self.support - ret=obj.getSupporter() - return ret - else: - return '' - - def getOwnerOriginalsHTML(self): - """gibt Liste der foerdernden Institutionen aus""" - - if hasattr(self,'ownerOriginal'): - obj=self.ownerOriginal - ret=obj.getOwner() - return ret - else: - return '' - - def getDigiCopyByHTML(self): - """gibt Liste der foerdernden Institutionen aus""" - - if hasattr(self,'digiCopyBy'): - obj=self.digiCopyBy - ret=obj.getDigiCopyBy() - return ret - else: - return '' - - def getCredits(self): - """Ausgabe der credits""" - if self.credits: - return self.credits - else: - return [] - - - - def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords): - - self.id = id - """Festlegen der ID""" - - self.label = label - self.link= link - self.metalink=metalink - self.title=title - self.weight=weight - self.credits=toList(credits) - self.description=description - self.contentType=contentType - self.copyrightType=copyrightType - self.renderingType=renderingType - self.responsible=responsible - self.resourceID=resourceID - - if coords: - coordsnew=[ string.split(x,",") for x in coords] - else: - coordsnew=[] - - self.coords=coordsnew -# self.viewClassification="" - - - - def getContentType(self): - try: - return self.contentType - except: - return "" - - def getCopyrightType(self): - try: - return self.copyrightType - except: - return "" - - def getRenderingType(self): - try: - return self.renderingType - except: - return "" - - def ECHO_resource_config(self): - """Main configuration""" - - if not hasattr(self,'weight'): - self.weight="" - - pt=zptFile(self, 'zpt/ChangeECHO_resource.zpt') - return pt() - - - def ECHO_resource_config_main(self): - """Main configuration""" - if not hasattr(self,'weight'): - self.weight="" - pt=zptFile(self, 'zpt/ChangeECHO_resource_main.zpt') - return pt() - - def ECHO_resource_config_coords(self): - """Coords configuration """ - pt=zptFile(self, 'zpt/ChangeECHO_resource_coords.zpt') - return pt() - - def ECHO_resource_config_credits(self): - """Main configuration""" - pt=zptFile(self, 'zpt/ChangeECHO_resource_credits.zpt') - return pt() - - def ECHO_resource_config_metadata(self): - """Main configuration""" - if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')): - self.metaDataHash={} - self.contentType=self.bib_type - for data in self.metadata: - data_neu=re.sub('-','_',data) - self.metaDataHash[data_neu]=getattr(self,data)[0:] - - - pt=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt') - return pt() - - - - - def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None): - """Aenderung der Properties""" - self.resourceID=resourceID - self.title=title - self.label=label - self.description=description - - self.contentType=contentType - self.renderingType=renderingType - self.weight=weight - - self.link=link - self.metalink=metalink - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - def changeECHO_resource_coords(self,RESPONSE=None): - """Aenderung der Properties - coords""" - #return self.REQUEST - for area in self.getMapAreas(): - id = area.getId() - if self.REQUEST.has_key('del.'+id): - # delete this area - self._delObject(id) - # return to same menu - if RESPONSE is not None: - RESPONSE.redirect('ECHO_resource_config_coords') - return - # modify this area - coordstring = self.REQUEST.get('coords.'+id, '') - coords = string.split(coordstring, ',') - angle = self.REQUEST.get('angle.'+id, '0') - type = self.REQUEST.get('type.'+id, 'area') - if len(coords) == 4: - area.setCoordString(coordstring) - area.setAngle(angle) - area.setType(type) - # return to main menu - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None): - """Aenderung der Properties""" - self.credits=credits - self.responsible=responsible - self.copyrightType=copyrightType - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - def changeECHO_resource_metadata_local(self,RESPONSE=None): - """change metadata""" - tags=self.findTagsFromMapping(self.contentType) - for field in tags[1]: - self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:] - - - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - def changeECHO_resource_metadata(self,RESPONSE=None): - """change metadata""" - tags=self.findTagsFromMapping(self.contentType) - self.OSAS_meta={} - for field in tags[1]: - try: - self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)] - self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)] - except: - zLOG.LOG("ECHO_collection (changeECHO_resource_metadata)",zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2]) - - print self.newMetaXML() - ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML')).read() - - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - - def getMDValueSimpleSearchField(self): - """returns value for simple search""" - - try: - return " ".join([self.getMDValue('title',generic="yes"), - self.getMDValue('author',generic="yes"), - self.getMDValue('year',generic="yes"),self.getTitle()]) - except: - - #zLOG.LOG(" ECHO_collection(getMDSimpleSearchField)",zLOG.INFO," ".join([self.getMDValue('title',generic="yes"), - # self.getMDValue('author',generic="yes"), - # self.getMDValue('year',generic="yes"),''])) - return "" - - def getMDValue(self,fieldNameTest,empty=None,generic=None): - """get md values""" - #TODO: cache mappinghash - - fieldName=None - if generic: - if self.contentType: - ct=self.contentType.replace(" ","_").lower() - else: - zLOG.LOG("ECHO_collection (getMDValue)", zLOG.INFO, "no_content type for %s"%self.getId()) - ct="" - - #caching - if not hasattr(self,'_v_mapHash'): #noch keine cachevariable - self._v_mapHash={} - - tmp=self._v_mapHash.get(ct,None) - if tmp: #teste ob type schon existiert - fieldName=tmp.get(fieldNameTest,None) - else: - self._v_mapHash[ct]={} - - #noch nicht gecached - if not fieldName and hasattr(self.standardMD,ct): - fieldName=getattr(self.standardMD,ct).generateMappingHash()[fieldNameTest][0] - self._v_mapHash[ct][fieldNameTest]=fieldName - if not fieldName: - fieldName=fieldNameTest - if not empty: - #FIXME: warum gibt es manchmal kein metadatahas - try: - - ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) - except: - zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId()) - return "" - - else: - - - ret= self.metaDataHash.get(fieldNameTest,empty) - - if type(ret) is StringType: - return ret.decode('utf-8') - else: - return ret - - getFieldValue=getMDValue #depricated - - def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None): - """new index.meta""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - - if not hasattr(self,'metaDataHash'): - - self.copyIndex_meta2echo_resource() - try: - - - return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix) - except: - #print self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix - - return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix) - - def showMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None): - """return bibliographical metadata as stored in the object""" - - try: - - return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes") - except: - return " no metadata stored" - - def getXQueryMetaData(self,xquery): - ''' - execute an xquery on the metadata and returns a list of tuples, - each tuple represent the content of the node as text and the whole node as xml-fragment - @param xquery: xquery auf den metadaten - ''' - - try: - md=writeMetadata(self.metalink,self.metaDataHash,xmlfrag="yes") - except: - return None - - dom = NonvalidatingReader.parseString(md,"http://www.mpiwg-berlin.mpg.de/") - - results=Ft.Xml.XPath.Evaluate(xquery, contextNode=dom) - - ret=[] - for result in results: - - buf = cStringIO.StringIO() - PrettyPrint(result, stream=buf) - str = buf.getvalue()[0:] - buf.close() - ret.append((getTextFromNode(result),str)) - - return ret - - def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None): - """prints out metadata as stored in the echo environment, format is the index.meta format""" - self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - return writeMetadata(self.metalink,self.metaDataHash) - - def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): - """Aenderung der Properties""" - - setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) - self.link=link - self.metalink=metalink - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - - - manage_options = Folder.manage_options+( - {'label':'Main Config','action':'ECHO_resource_config_main'}, - {'label':'Change Metadata','action':'ECHO_resource_config_metadata'}, - {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, - {'label':'Sync Metadata','action':'ECHO_getResourceMD'}, - {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'}, - {'label':'set/change startpage','action':'setStartPageForm'}, - {'label':'Copy MD for indexing and search','action':'copySearchFields'}, - {'label':'Change AccessRights','action':'changeAccessRightForm'}, - ) - - - def isDefinedInThisSet(self,fields,field): - """checks if field is defined in fields""" - if (fields[0].has_key(field)) and not (fields[0][field]==""): - return 1 - else: - - return 0 - - def getFieldLabel(self,fields,field): - """get labels""" - try: - ret =fields[0][field] - if ret == "": - return field - else: - return ret - except: - return field - - - - def getFieldTag(self,fields,field): - """get labels""" - try: - ret =fields[0][field] - if ret == "": - return field - else: - return ret - except: - return field - - - - def getMetaDataHash(self): - """md hash""" - return self.metaDataHash - - def setFieldValue(self,field,value): - """get value""" - #TODO: remove setFieldValue - - if not hasattr(self,'metaDataHash'): - setattr(self,'metaDataHash',{}) - self.metaDataHash[field]=value[0:] - - def copySearchFields(self): - """copys metadatafields to the object""" - fields=['author','title','year'] - - for field in fields: - setattr(self,'MD_'+field,self.getMDValue(field,generic="yes")) - - - def findLabelsFromMapping(self,referenceType): - """gib hash mit label -> generic zurueck""" - #return {},[] - - temp=self.ZopeFind(self.standardMD) - - if referenceType=="": - referenceType="book" - - - bibdata={} - retdata={} - fields=[] - fieldlist=self.standardMD.fieldList - - tags=self.findTagsFromMapping(self.contentType) - self.referencetypes=tags[2] - for referenceTypeF in self.referencetypes: - - if referenceTypeF[1].title.lower() == referenceType.lower(): - - try: - bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields - referenceType=referenceTypeF[1].title - except: - bibdata[referenceType]=referenceTypeF[1].fields - - - bibdata['data']=referenceTypeF[1] - fields=bibdata[referenceType] - for field in fieldlist: - retdata[field]=referenceTypeF[1].getValue(field)[1] - - return retdata,fieldlist,temp,fields - - def findTagsFromMapping(self,referenceType): - """gib hash mit label -> generic zurueck""" - - - if referenceType=="": - referenceType="book" - - temp = self.ZopeFind(self.standardMD)[0:] - - - #self.referencetypes=temp[0:] - - - - - bibdata={} - retdata={} - fieldlist=self.standardMD.fieldList - fields=[] - for referenceTypeF in temp: - #print referenceType - - if referenceTypeF[1].title.lower() == referenceType.lower(): - try: - bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields - referenceType=referenceTypeF[1].title - except: - bibdata[referenceType]=referenceTypeF[1].fields - bibdata['data']=referenceTypeF[1] - fields=bibdata[referenceType] - for field in fieldlist: - retdata[field]=referenceTypeF[1].getValue(field)[0] - - return retdata,fieldlist,temp,fields - - - security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination - def copyIndex_meta2echo_resource(self,RESPONSE=None): - """copy MD von Index_meta to the echo_resource""" - - (metadict, error)=readMetadata(self.metalink) - - - - self.metaDataHash={} - if not error=="": #Fehler beim Auslesen des Metafiles - - return "ERROR:",error,self.absolute_url() - - self.contentType=metadict['bib_type'][0:] - fields=self.findTagsFromMapping(self.contentType) - - #fields=self.findLabelsFromMapping(self.contentType) - for field in fields[1]: - - if self.isDefinedInThisSet(fields,field): - #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),'')) - self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),'')) - - - - if RESPONSE: - return RESPONSE.redirect('manage_main') - - return "OK:",self.absolute_url(),self.contentType - - def ECHO_getResourceMD(self,template="yes",back=None,overwrite="no"): - """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource""" - (metadict, error)=readMetadata(self.metalink) - - if back: - self.REQUEST.SESSION['back']=back - - if not error=="": #Fehler beim Auslesen des Metafiles - return "ERROR:",error - - if (not self.contentType) or (overwrite=="yes"): - self.contentType=metadict['bib_type'].lower() - - if not (metadict['bib_type'].lower()==self.contentType.lower()): - self.REQUEST.SESSION['contentStorage']=metadict['bib_type'] - self.REQUEST.SESSION['contentZope']=self.contentType - - return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')() - - #self.REQUEST.SESSION['metadict']=metadict - - - - - self.REQUEST.SESSION['diffs']=checkDiffs(self,metadict) - - - if template=="yes": - #pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_resourceMD.zpt'),metadict=metadict).__of__(self) - pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt') - - return pt(metadict=metadict) - - - - - - def ECHO_getMD(self,item): - """Ausgabe der MD""" - return getattr(self,item) - - def checkRDF(self,path): - """check if pdf in the path""" - try: - for fileName in os.listdir(path): - if os.path.splitext(fileName)[1]==".pdf": - return os.path.join(path,fileName) - return None - except: - return None - - - security.declareProtected('View','index_html') - def index_html(self): - """standard page""" - pdf=self.checkRDF(self.link) - if pdf: - fh=file(pdf,'r').read() - self.REQUEST.RESPONSE.setHeader('Content-Type','application/pdf') - self.REQUEST.RESPONSE.write(fh) - self.REQUEST.RESPONSE.close() - return - return self.REQUEST.RESPONSE.redirect(self.link) - - def startpage_html(self): - """prints out a startpage for a resource for use e.g. in the BVE""" - - # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt - - sp=self.ZopeFind(self,obj_ids=['startpage.html']) - - if sp: - return sp[1]() - - #pruefen ob irgendwo ein template - if hasattr(self,'startpage_index_template'): - return self.startpage_index_template() - - #generisches template ausgeben - - pt=zptFile(self, 'zpt/ECHO_startpage_index_template_standard.zpt') - pt.content_type="text/html" - return pt() - - def toc_html(self): - - sp=self.ZopeFind(self,obj_ids=['toc.html']) - - if sp: - return sp[0][1]() - - - security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination - - def generate_label(self): - """Erzeugt_standard_Label aus Template""" - pt=getattr(self,"label_template_"+self.contentType.lower()) - - self.label=pt()[0:] - return pt() - - security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination - - def generate_title(self,RESPONSE=None): - """Erzeugt_standard_Label aus Template""" - pt=getattr(self,"label_template_"+self.contentType.lower()) - - self.title=pt()[0:] - - return pt() - -Globals.InitializeClass(ECHO_resource) - -def manage_addECHO_resourceForm(self): - """Form for adding a ressource""" - pt=zptFile(self, 'zpt/AddECHO_resourceForm.zpt') - return pt() - - - -def manage_addECHO_resource(self,id,title,label,description="",responsible="",link="",metalink="",weight="",copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None): - """addresource""" - - newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords) - - self._setObject(id,newObj) - - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - class ECHO_externalLink(Folder,ECHO_basis): """Link zu einer externen Ressource""" @@ -1664,7 +440,7 @@ class ECHO_externalLink(Folder,ECHO_basi - def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords): + def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType): self.id = id """Festlegen der ID""" @@ -1679,6 +455,8 @@ class ECHO_externalLink(Folder,ECHO_basi self.responsible=responsible coordsnew=[ string.split(x,",") for x in coords] self.coords=coordsnew + self.linkType = linkType # Linktypen 'otherPresentation','external' + def ECHO_externalLink_config(self): """Main configuration""" @@ -1694,25 +472,50 @@ class ECHO_externalLink(Folder,ECHO_basi return pt() - def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): + def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None,linkType='otherPresentation'): """Aenderung der Properties""" setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) self.link=link + self.linkType = linkType if RESPONSE is not None: RESPONSE.redirect('manage_main') + def getLinkType(self): + """ return linkType """ + if hasattr(self,"linkType"): + return self.linkType + else : + return 'otherPresentation' + + def setLinkType(self,type): + """ set linkType """ + self.linkType = type + + def checkLink(self): + """ returns tuple (isWorking,Error) """ + try: + urllib2.urlopen(self.link) + return (True, '') + except urllib2.HTTPError, e: + return (False, e.code) + except urllib2.URLError, e: + return (False, str(e.reason)) + except: + return (False, 'unknown Error') + - manage_options = Folder.manage_options+( + manage_options = ( {'label':'Main Config','action':'ECHO_externalLink_config'}, {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, - ) + )+Folder.manage_options def index_html(self): """standard page""" return self.REQUEST.RESPONSE.redirect(self.link) + def manage_addECHO_externalLinkForm(self): """Form for external Links""" @@ -1720,10 +523,10 @@ def manage_addECHO_externalLinkForm(self return pt() -def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None): +def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None,linkType='otherPresentation'): """Add an external Link""" - newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords) + newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType) self._setObject(id,newObj) @@ -1737,7 +540,7 @@ class ECHO_link(ECHO_externalLink): meta_type="ECHO_link" manage_options = ECHO_externalLink.manage_options+( - {'label':'add links config','action':'ECHO_link_addLinksForm'}, + {'label':'add links config','action':'ECHO_link_addLinksForm'}, ) def ECHO_link_addLinksForm(self): @@ -1861,7 +664,7 @@ class ECHO_link(ECHO_externalLink): params['backLink']=self.aq_parent.absolute_url() params['startLink']=splitted[0]+"?"+urllib.urlencode(params) - + return self.REQUEST.RESPONSE.redirect(splitted[0]+"?"+urllib.urlencode(params)) else: return "" @@ -1872,10 +675,10 @@ def manage_addECHO_linkForm(self): return pt() -def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,RESPONSE=None): +def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,linkType="external",RESPONSE=None): """Add an external Link""" - newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords) + newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType) self._setObject(id,newObj) @@ -1898,6 +701,85 @@ class ECHO_collection(CatalogAware, Fold path="/mpiwg/online/permanent/shipbuilding" + + def exportImportObjects_html(self,RESPONSE): + """ImportObject""" + pt=zptFile(self, 'zpt/exportImportObjects.zpt') + pt.content_type="text/html" + return pt() + + def importObjects_html(self,RESPONSE): + """ImportObject""" + pt=zptFile(self, 'zpt/importObjects.zpt') + pt.content_type="text/html" + return pt() + + def importObjects(self,zfile,RESPONSE=None,REQUEST=None): + """import object from file""" + + zf=zipfile.ZipFile(zfile,"r") + tmpdir=tempfile.mkdtemp() # create tempdir + ret=None + + for name in zf.namelist(): + ds,fn=tempfile.mkstemp() + tf=file(fn,"w") + x=zf.read(name) + tf.write(x) + tf.close() + try: + self._importObjectFromFile(fn,set_owner=1) + except: + if not ret: + ret="" + ret+="Cannot import: %s (Already existing?)
"%name + os.close(ds) + os.remove(fn) + + zf.close() + if ret: + return """%s"""%ret + if RESPONSE: + RESPONSE.redirect(self.absolute_url()) + + def exportObjects_html(self,RESPONSE): + """Export objects""" + + pt=zptFile(self, 'zpt/exportObjects.zpt') + pt.content_type="text/html" + return pt() + + def exportObjects(self,ids,RESPONSE=None): + """export objects with type id""" + if not (type(ids) is ListType): + ids=[ids] + + tmpdir=tempfile.mkdtemp() # create tempdir + objs=self.ZopeFind(self,obj_ids=ids) + tmpfile=tempfile.mkstemp()[1] + + zf=zipfile.ZipFile(tmpfile,"w") + for obj in objs: + + f = os.path.join(tmpdir, '%s.zexp' %obj[0]) + #print E.absolute_url() + + obj[1]._p_jar.exportFile(obj[1]._p_oid, f) + + zf.write(f,obj[0]) + + zf.close() + shutil.rmtree(tmpdir) + if RESPONSE: + RESPONSE.setHeader("Content-Type","application/octet-stream") + len=os.stat(tmpfile)[6] + RESPONSE.setHeader("Content-Length",len) + RESPONSE.setHeader("Content-Disposition","""attachement; filename=%s"""%"export.zip") + fh=file(tmpfile) + for x in fh.read(): + RESPONSE.write(x) + fh.close() + def getMDValueSimpleSearchField(self): """returns value for simple search""" return " ".join([self.title,self.description]) @@ -1949,16 +831,16 @@ class ECHO_collection(CatalogAware, Fold if obj.meta_type=="ECHO_mapText": if splitted[1]=="en": - obj.locale_en.pt_edit(REQUEST.form[key],None) + obj.locale_en.pt_edit(REQUEST.form[key],obj.locale_en.content_type) else: - obj.pt_edit(REQUEST.form[key],None) + obj.pt_edit(REQUEST.form[key],obj.content_type) else: text=obj.ZopeFind(obj,obj_metatypes=['ECHO_mapText']) if splitted[1]=="en": - text[0][1].locale_en.pt_edit(REQUEST.form[key],None) + text[0][1].locale_en.pt_edit(REQUEST.form[key],text[0][1].locale_en.content_type) else: - text[0][1].pt_edit(REQUEST.form[key],None) + text[0][1].pt_edit(REQUEST.form[key],text[0][1].content_type) if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -1977,8 +859,11 @@ class ECHO_collection(CatalogAware, Fold for content in contents: + try: ret+=content[1].getRDF()+"\n" - + except: + logging.error("getRDF: "+repr(content[1].getRDF())) + ret+=self.unicodify(content[1].getRDF())+"\n" ret+="""\n"""%urn for content in contents: nurn=content[1].absolute_url() @@ -2183,6 +1068,28 @@ class ECHO_collection(CatalogAware, Fold else: return None + def changeViewer(self,newViewer,REQUEST=None,RESPONSE=None): + """changes all ressources to the newViewer""" + + resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + if RESPONSE is not None: + RESPONSE.write("") + + for resource in resources: + + done,msg=resource[1].changeViewer(newViewer) + if done: + if RESPONSE is not None: + RESPONSE.write("

OK: %s"%resource[0]) + else: + if RESPONSE is not None: + RESPONSE.write("

ERROR: %s (%s)"%(resource[1].absolute_url()+'/ECHO_resource_config_main',resource[0],msg)) + + + + if RESPONSE is not None: + RESPONSE.write("

Done

") + def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None): """change the templates""" @@ -2232,7 +1139,7 @@ class ECHO_collection(CatalogAware, Fold if ret and RESPONSE: RESPONSE.write("ok: %s\n"%txt) - #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt) + #logger("ECHO (copyTitleToInfoXMLFolder)",logging.INFO,txt) if RESPONSE is not None: RESPONSE.write("done!\n") RESPONSE.close() @@ -2310,12 +1217,13 @@ class ECHO_collection(CatalogAware, Fold for resource in dom.getElementsByTagName('resource'): link=getText(resource.getElementsByTagName('link')[0].childNodes) label=getText(resource.getElementsByTagName('label')[0].childNodes) + pageimglink=getText(resource.getElementsByTagName('pageimglink')[0].childNodes) #splitted=link.split("?")[0].split("/") #id=splitted[len(splitted)-1].encode('ascii') id=re.sub(" ","_",label).encode('ascii') ret+="

"+label+"

" - manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","") + manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","",pageimglink.encode('ascii'),link.encode('ascii'),"","") return ret security.declarePublic('getImageTag') @@ -2349,8 +1257,24 @@ class ECHO_collection(CatalogAware, Fold manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None) return "done" except: - return None + logging.error("ECHOcollection: (AddResource): %s %s"%sys.exc_info()[0:2]) + return None + def addResourceAndCreateLabelAndTitle(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): + """SSS""" + ret = self.addResource(id,title,label,description,contentType,responsible,link,metalink,weight,credits,coords,RESPONSE) + if ret is None: + return None + + try: + server2=getattr(self,id) + server2.copyIndex_meta2echo_resource() + server2.generate_label() + server2.generate_title() + except: + logging.error("An Error occured adding the resource A\n %s %s"%sys.exc_info()[0:2]) + return None + return "done" def getSecondaryLink(self): """secondary link""" try: @@ -2392,9 +1316,9 @@ class ECHO_collection(CatalogAware, Fold ret="""""" return ret+""+getCollection(self,pwstr=pwstr)+"" - def createAllJSAreas(self): + def createAllJSAreas(self,mapColTypes=None): """create area calls for JavaScript""" - areas = self.getAllMapAreas() + areas = self.getAllMapAreas(mapColTypes=mapColTypes) return self.createJSAreas(areas) @@ -2444,7 +1368,7 @@ class ECHO_collection(CatalogAware, Fold return ECHO_rerenderLinksMD(self,obj,types) - def __init__(self,id,title,label,description="",contentType="",responsible="",credits="",weight="",sortfield="",coords=[],secondaryLinkTitle="",secondaryLink="",imageTag="",bgcolour=""): + def __init__(self,id,title,label,description="",contentType="",responsible="",credits="",weight="",sortfield="",coords=[],secondaryLinkTitle="",secondaryLink="",imageTag="",bgcolour="",isVisible=True): self.id = id """Festlegen der ID""" @@ -2462,6 +1386,7 @@ class ECHO_collection(CatalogAware, Fold self.secondaryLinkTitle=secondaryLinkTitle self.secondaryLink=secondaryLink self.bgcolour=bgcolour + self.isVisible=isVisible manage_options = Folder.manage_options+ Cacheable.manage_options+( @@ -2471,6 +1396,7 @@ class ECHO_collection(CatalogAware, Fold {'label':'Localize','action':'localizeObjects'}, {'label':'Change Weights','action':'changeWeights'}, {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'}, + {'label':'Export/Import Objects','action':'exportImportObjects_html'}, {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, {'label':'create resources from XML','action':'createRessourcesFromXMLForm'}, {'label':'Set Startpage','action':'setStartpageFolderForm'}, @@ -2505,7 +1431,7 @@ class ECHO_collection(CatalogAware, Fold security.declarePublic('changeECHO_collection') - def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",location=None,isAlwaysClickable=None,prefix="",suffix=""): + def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",location=None,isAlwaysClickable=None,prefix="",suffix="",isVisible=True): """Aenderung der Properties""" self.secondaryLink=secondaryLink @@ -2516,6 +1442,7 @@ class ECHO_collection(CatalogAware, Fold self.isAlwaysClickable=isAlwaysClickable self.prefix=prefix[0:] self.suffix=suffix[0:] + self.setIsVisible(isVisible) setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) @@ -2616,9 +1543,11 @@ class ECHO_collection(CatalogAware, Fold """javascript""" return sendFile(self, 'js/hl_add.js', 'text/plain') - def getAllMapAreas(self,mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink']): + def getAllMapAreas(self,mapColTypes=None): """Give list of coordinates""" - + if mapColTypes is None: + mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink'] + areas=[] for entry in self.getSubCols(subColTypes=mapColTypes): object=entry @@ -2653,11 +1582,11 @@ def manage_addECHO_collectionForm(self): return pt() -def manage_addECHO_collection(self,id,title,label,description="",contentType="",responsible="",weight=0,sortfield="weight",coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""): +def manage_addECHO_collection(self,id,title,label,description="",contentType="",responsible="",weight=0,sortfield="weight",coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",isVisible=True): """add a echo collection""" - newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="") + newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="",isVisible=isVisible) self._setObject(id,newObj) @@ -2955,6 +1884,12 @@ class ECHO_root(Folder,Persistent,Implic {'label':'Copy MD for indexing and search','action':'copySearchFields'}, ) + + def getECHORootURL(self): + return self.absolute_url() + + def getECHORoot(self): + return self def copySearchFields(self,RESPONSE=None): """copys < metadatafields to the object""" @@ -3268,8 +2203,14 @@ class ECHO_root(Folder,Persistent,Implic """ret attribute if existing""" try: - return getattr(found,field).decode('ascii','ignore') + + 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') @@ -3506,7 +2447,10 @@ class ECHO_root(Folder,Persistent,Implic def formatAscii(self,str,url=None): """ersetze ascii umbrueche durch
""" - #url=None + + if not str: + return "" + if url: retStr="" @@ -3518,11 +2462,13 @@ class ECHO_root(Folder,Persistent,Implic retStr+="""%s
"""%(strUrl,word) str=retStr if str: - return re.sub(r"[\n]","
",str) + str = re.sub(r"[\n]","
",str) + return unicodify(str) else: - return "" + return u"" link2html=vlp_xmlhelpers.link2html + related2html=vlp_xmlhelpers.related2html xml2html=vlp_xmlhelpers.xml2html @@ -3613,7 +2559,7 @@ class ECHO_root(Folder,Persistent,Implic ret="""

Resources in ECHO

""" - resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) + resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource','VLP_resource'],search_sub=1) ret+="""

Found %i resources

"""%len(resources) resources.sort(sortHTML) for resource in resources: @@ -3639,7 +2585,7 @@ class ECHO_root(Folder,Persistent,Implic """gebe all ressourcen aus""" ret=""" """ - for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1): + for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource','VLP_resource'],search_sub=1): echo_url=resource[1].absolute_url() if hasattr(resource[1],'link'): @@ -3656,6 +2602,20 @@ class ECHO_root(Folder,Persistent,Implic self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") self.REQUEST.RESPONSE.write(ret) + def getCollectionsXML(self,viewerType=None,filter=None): + """gebe collections aus""" + ret=""" + """ + for resource in self.ZopeFind(self,obj_metatypes=['ECHO_collection','ECHO_group'],search_sub=1): + + echo_url=resource[1].absolute_url() + + ret+="""\n"""%urllib.quote(echo_url,safe='/:?') + ret +="""\n""" + + self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") + self.REQUEST.RESPONSE.write(ret) + def getFullTextsXML(self,viewerType=None,filter=None): """gebe all ressourcen aus""" ret=""" @@ -3879,7 +2839,7 @@ class ECHO_linkList(ZopePageTemplate,ECH def getcontentType(self): """get contentType""" if hasattr(self,'contentType'): - return self.contentType + return normalizeCt(self.contentType) else: return 0 @@ -3890,6 +2850,8 @@ class ECHO_linkList(ZopePageTemplate,ECH self.ZBindings_edit(self._default_bindings) if text is None: text = '' + if content_type is None: + content_type = self.content_type self.pt_edit(text, contentType)