--- ECHO_content/ECHO_collection.py 2006/07/27 16:18:16 1.273 +++ ECHO_content/ECHO_collection.py 2006/10/18 15:16:23 1.277 @@ -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 @@ -67,11 +68,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 - + + + + +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=""): @@ -1090,7 +1106,7 @@ class ECHO_resource(CatalogAware,Folder, def getContentType(self): try: - return self.contentType + return normalizeCt(self.contentType) except: return "" @@ -1205,7 +1221,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:] @@ -1216,7 +1232,7 @@ 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: @@ -1262,6 +1278,7 @@ 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()) ct="" @@ -1269,13 +1286,16 @@ class ECHO_resource(CatalogAware,Folder, #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] @@ -1286,7 +1306,7 @@ class ECHO_resource(CatalogAware,Folder, #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()) return "" @@ -1452,11 +1472,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 @@ -1494,7 +1515,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 @@ -1521,10 +1542,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): @@ -1536,7 +1557,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""" @@ -1549,11 +1570,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')() @@ -1634,7 +1655,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() @@ -1643,7 +1664,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:] @@ -1920,6 +1941,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]) @@ -2332,12 +2430,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') @@ -2493,6 +2592,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'}, @@ -2977,7 +3077,7 @@ class ECHO_root(Folder,Persistent,Implic {'label':'Copy MD for indexing and search','action':'copySearchFields'}, ) - + def copySearchFields(self,RESPONSE=None): """copys < metadatafields to the object""" resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) @@ -3901,7 +4001,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