--- ECHO_content/ECHO_collection.py 2006/02/14 17:28:52 1.262
+++ ECHO_content/ECHO_collection.py 2007/03/09 17:57:13 1.286
@@ -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,12 +35,14 @@ 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 urllib2
import cgi
import smtplib
import time
@@ -49,7 +52,7 @@ from Ft.Xml import EMPTY_NAMESPACE
import Ft.Xml.XPath
import cStringIO
-import zLOG
+
import sys
try:
@@ -66,11 +69,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 +364,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 +624,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 +632,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 +657,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 +768,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 +822,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 +858,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 +892,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,22 +911,15 @@ class ECHO_resource(CatalogAware,Folder,
path=re.sub('/index.meta','',path)
- 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: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://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
- path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
- path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
-
- path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server
-
- return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
+ #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')
@@ -902,17 +941,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:
@@ -922,7 +961,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
@@ -1016,6 +1055,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"""
@@ -1056,7 +1114,7 @@ class ECHO_resource(CatalogAware,Folder,
def getContentType(self):
try:
- return self.contentType
+ return normalizeCt(self.contentType)
except:
return ""
@@ -1114,8 +1172,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
@@ -1129,6 +1221,9 @@ class ECHO_resource(CatalogAware,Folder,
self.link=link
self.metalink=metalink
+ self.newViewer=newViewer
+
+
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
@@ -1171,7 +1266,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:]
@@ -1182,18 +1277,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')
@@ -1209,7 +1310,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 ""
@@ -1222,20 +1323,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]
@@ -1243,19 +1348,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:
@@ -1271,8 +1376,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):
@@ -1408,11 +1517,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
@@ -1450,7 +1560,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
@@ -1477,10 +1587,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):
@@ -1492,7 +1602,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"""
@@ -1505,11 +1615,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')()
@@ -1556,6 +1666,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):
@@ -1590,7 +1705,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()
@@ -1599,7 +1714,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:]
@@ -1642,7 +1757,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"""
@@ -1657,6 +1772,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"""
@@ -1672,25 +1789,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"""
@@ -1698,10 +1840,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)
@@ -1715,7 +1857,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):
@@ -1754,7 +1896,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"""
@@ -1812,6 +2018,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])
@@ -2097,6 +2380,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"""
@@ -2146,7 +2451,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()
@@ -2194,11 +2499,13 @@ class ECHO_collection(CatalogAware, Fold
retStr="