--- ECHO_content/ECHO_collection.py 2006/02/14 19:29:45 1.263 +++ ECHO_content/ECHO_collection.py 2007/01/31 14:12:39 1.284 @@ -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 @@ -34,10 +35,11 @@ from Globals import DTMLFile import Globals from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate -from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate +from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate,manage_addPageTemplate from Globals import Persistent, package_home from Acquisition import Implicit from Products.ZCatalog.CatalogPathAwareness import CatalogAware +from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon import urllib import cgi @@ -49,7 +51,7 @@ from Ft.Xml import EMPTY_NAMESPACE import Ft.Xml.XPath import cStringIO -import zLOG + import sys try: @@ -66,11 +68,30 @@ 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 normalizeCt(str): + """normalizes content_type""" + #str= str.replace(" ","_") + return str.replace("-"," ").lower() def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""): @@ -342,7 +363,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().encode('utf-8','ignore')) + 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() @@ -599,7 +623,7 @@ class ECHO_resource(CatalogAware,Folder, try: urllib.urlopen(url) except: - zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (getAccessRightMD)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) return None,getattr(self,'accessRight','') @@ -607,7 +631,7 @@ class ECHO_resource(CatalogAware,Folder, try: dom = NonvalidatingReader.parseUri(url) except: - zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (getAccessRightMD)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) return (None,"Cannot parse: "+url+"
"+"%s (%s)"%sys.exc_info()[0:2]) @@ -632,9 +656,14 @@ class ECHO_resource(CatalogAware,Folder, #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read() + tries=0 + for i in range(10): + x=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 x=="ok": + + break; + - 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') @@ -738,7 +767,7 @@ class ECHO_resource(CatalogAware,Folder, if (not resourcepath) or (not digiliburlprefix) or (not images): - zLOG.LOG("ECHO (createImageUrl)",zLOG.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url()) + logger("ECHO (createImageUrl)",logging.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?" @@ -792,9 +821,14 @@ class ECHO_resource(CatalogAware,Folder, 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() - + + tries=0 + for i in range(10): + x=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() + if x=="ok": + + break; + path=self.metalink @@ -823,6 +857,11 @@ class ECHO_resource(CatalogAware,Folder, 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""" @@ -852,11 +891,17 @@ class ECHO_resource(CatalogAware,Folder, 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))) + try: + tries=0 + for i in range(10): + x=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() + if x=="ok": + + break; + + except: + logger("ECHO_ressource (changeViewerTemplateSet)", logging.ERROR,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_ressource (changeViewerTemplateSet)", logging.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 @@ -865,15 +910,15 @@ class ECHO_resource(CatalogAware,Folder, 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) + #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: + logger("ECHO_Resource (changeViewerTemplateSet)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (changeViewerTemplateSet)", logging.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') @@ -895,17 +940,17 @@ class ECHO_resource(CatalogAware,Folder, """getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong.""" try: - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink) + #logger("ECHO Fulltext",logging.INFO,"open %s"%self.metalink) fh=ECHO_helpers.urlopen(self.metalink) - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"opened %s"%self.metalink) + #logger("ECHO Fulltext",logging.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) + #logger("ECHO Fulltext",logging.INFO,"found %s"%texturl) fh.close() - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh") + #logger("ECHO Fulltext",logging.INFO,"closed fh") #keine url if not (texturl.split(":")[0] in ['http','ftp','file']): if not noredirect: @@ -915,7 +960,7 @@ class ECHO_resource(CatalogAware,Folder, if not noredirect: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl) + logger("ECHO Fulltext",logging.INFO,"redirect to:%s"%texturl) self.REQUEST.RESPONSE.redirect(texturl) else: return texturl @@ -1009,6 +1054,25 @@ class ECHO_resource(CatalogAware,Folder, 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""" @@ -1049,7 +1113,7 @@ class ECHO_resource(CatalogAware,Folder, def getContentType(self): try: - return self.contentType + return normalizeCt(self.contentType) except: return "" @@ -1107,8 +1171,42 @@ class ECHO_resource(CatalogAware,Folder, + def changeViewer(self,newViewer): + """set newViewer to the url of the new viewer + only if metalink is set, otherwise it gives false + """ + + vl,msg=self.checkValidityOfMetaLink() + + if vl: + self.newViewer=newViewer + return vl,msg + else: + return vl,msg + + def checkValidityOfMetaLink(self): + """checks if the metalink is valid xml""" + + ml=self.metalink + + try: + txt=urllib.urlopen(ml) - def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None): + except: + return False,"Cannot open: %s)"%ml + + txt.close() + try: + dom = NonvalidatingReader.parseUri(ml) + except: + return False, "Connot parse: %s)"%ml + + if len(dom.xpath("//texttool"))==0: + return False, "No texttools: %s)"%ml + + return True,"" + + def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,newViewer='',RESPONSE=None): """Aenderung der Properties""" self.resourceID=resourceID self.title=title @@ -1122,6 +1220,9 @@ class ECHO_resource(CatalogAware,Folder, self.link=link self.metalink=metalink + self.newViewer=newViewer + + if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -1164,7 +1265,7 @@ class ECHO_resource(CatalogAware,Folder, def changeECHO_resource_metadata_local(self,RESPONSE=None): """change metadata""" - tags=self.findTagsFromMapping(self.contentType) + tags=self.findTagsFromMapping(normalizeCt(self.contentType)) for field in tags[1]: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:] @@ -1175,18 +1276,24 @@ class ECHO_resource(CatalogAware,Folder, def changeECHO_resource_metadata(self,RESPONSE=None): """change metadata""" - tags=self.findTagsFromMapping(self.contentType) + tags=self.findTagsFromMapping(normalizeCt(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]) + logger("ECHO_collection (changeECHO_resource_metadata)",logging.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() - + tries=0 + for i in range(10): + x=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 x=="ok": + + break; + + if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -1202,7 +1309,7 @@ class ECHO_resource(CatalogAware,Folder, self.getMDValue('year',generic="yes"),self.getTitle()]) except: - #zLOG.LOG(" ECHO_collection(getMDSimpleSearchField)",zLOG.INFO," ".join([self.getMDValue('title',generic="yes"), + #logger(" ECHO_collection(getMDSimpleSearchField)",logging.INFO," ".join([self.getMDValue('title',generic="yes"), # self.getMDValue('author',generic="yes"), # self.getMDValue('year',generic="yes"),''])) return "" @@ -1215,20 +1322,24 @@ class ECHO_resource(CatalogAware,Folder, if generic: if self.contentType: ct=self.contentType.replace(" ","_").lower() + ct=self.contentType.replace("-","_").lower() else: - zLOG.LOG("ECHO_collection (getMDValue)", zLOG.INFO, "no_content type for %s"%self.getId()) + logger("ECHO_collection (getMDValue)", logging.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] @@ -1236,19 +1347,19 @@ class ECHO_resource(CatalogAware,Folder, if not fieldName: fieldName=fieldNameTest if not empty: - #FIXME: warum gibt es manchmal kein metadatahas + #FIXME: warum gibt es manchmal kein metadatahas try: - ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType) + ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%normalizeCt(self.contentType)) except: - zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId()) + logger("ECHO (line 1069)",logging.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: @@ -1264,8 +1375,12 @@ class ECHO_resource(CatalogAware,Folder, 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): @@ -1401,11 +1516,12 @@ class ECHO_resource(CatalogAware,Folder, fields=[] fieldlist=self.standardMD.fieldList - tags=self.findTagsFromMapping(self.contentType) + tags=self.findTagsFromMapping(normalizeCt(self.contentType)) self.referencetypes=tags[2] for referenceTypeF in self.referencetypes: - - if referenceTypeF[1].title.lower() == referenceType.lower(): + + + if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()): try: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields @@ -1443,7 +1559,7 @@ class ECHO_resource(CatalogAware,Folder, for referenceTypeF in temp: #print referenceType - if referenceTypeF[1].title.lower() == referenceType.lower(): + if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()): try: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields referenceType=referenceTypeF[1].title @@ -1470,10 +1586,10 @@ class ECHO_resource(CatalogAware,Folder, return "ERROR:",error,self.absolute_url() - self.contentType=metadict['bib_type'][0:] - fields=self.findTagsFromMapping(self.contentType) + self.contentType=normalizeCt(metadict['bib_type'])[0:] + fields=self.findTagsFromMapping(normalizeCt(self.contentType)) - #fields=self.findLabelsFromMapping(self.contentType) + #fields=self.findLabelsFromMapping(normalizeCt(self.contentType)) for field in fields[1]: if self.isDefinedInThisSet(fields,field): @@ -1485,7 +1601,7 @@ class ECHO_resource(CatalogAware,Folder, if RESPONSE: return RESPONSE.redirect('manage_main') - return "OK:",self.absolute_url(),self.contentType + return "OK:",self.absolute_url(),normalizeCt(self.contentType) def ECHO_getResourceMD(self,template="yes",back=None,overwrite="no"): """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource""" @@ -1498,11 +1614,11 @@ class ECHO_resource(CatalogAware,Folder, return "ERROR:",error if (not self.contentType) or (overwrite=="yes"): - self.contentType=metadict['bib_type'].lower() + self.contentType=normalizeCt(normalizeCt(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 + if not (normalizeCt(metadict['bib_type']).lower()==normalizeCt(self.contentType).lower()): + self.REQUEST.SESSION['contentStorage']=normalizeCt(metadict['bib_type']) + self.REQUEST.SESSION['contentZope']=normalizeCt(self.contentType) return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')() @@ -1549,6 +1665,11 @@ class ECHO_resource(CatalogAware,Folder, self.REQUEST.RESPONSE.write(fh) self.REQUEST.RESPONSE.close() return + + if getattr(self,'newViewer',''): #benutze den neuen viewer + url=self.newViewer+'url='+self.metalink+"&mode=texttool" + return self.REQUEST.RESPONSE.redirect(url) + return self.REQUEST.RESPONSE.redirect(self.link) def startpage_html(self): @@ -1583,7 +1704,7 @@ class ECHO_resource(CatalogAware,Folder, def generate_label(self): """Erzeugt_standard_Label aus Template""" - pt=getattr(self,"label_template_"+self.contentType.lower()) + pt=getattr(self,"label_template_"+normalizeCt(self.contentType).lower()) self.label=pt()[0:] return pt() @@ -1592,7 +1713,7 @@ class ECHO_resource(CatalogAware,Folder, def generate_title(self,RESPONSE=None): """Erzeugt_standard_Label aus Template""" - pt=getattr(self,"label_template_"+self.contentType.lower()) + pt=getattr(self,"label_template_"+normalizeCt(self.contentType).lower()) self.title=pt()[0:] @@ -1635,7 +1756,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""" @@ -1650,6 +1771,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""" @@ -1665,13 +1788,25 @@ 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 manage_options = Folder.manage_options+( @@ -1684,6 +1819,7 @@ class ECHO_externalLink(Folder,ECHO_basi """standard page""" return self.REQUEST.RESPONSE.redirect(self.link) + def manage_addECHO_externalLinkForm(self): """Form for external Links""" @@ -1691,10 +1827,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) @@ -1708,7 +1844,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): @@ -1747,7 +1883,71 @@ class ECHO_link(ECHO_externalLink): # # return ret # - + 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 index_html(self): """standard link""" @@ -1805,6 +2005,83 @@ 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(): + fn=tempfile.mkstemp()[1] + 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.remove(fn) + + 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]) @@ -2090,6 +2367,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""" @@ -2139,7 +2438,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() @@ -2187,11 +2486,13 @@ class ECHO_collection(CatalogAware, Fold retStr="