--- ECHO_content/ECHO_collection.py 2006/07/27 16:18:16 1.273
+++ ECHO_content/ECHO_collection.py 2006/11/21 16:49:58 1.278
@@ -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 """
"+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) @@ -3545,6 +3645,7 @@ class ECHO_root(Folder,Persistent,Implic return "" link2html=vlp_xmlhelpers.link2html + related2html=vlp_xmlhelpers.related2html xml2html=vlp_xmlhelpers.xml2html @@ -3901,7 +4002,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