"""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.
class ECHO_resource contains information on ECHO resources (e.g. an Display environment for Metadata
class ECHO_externalLink contains information on externalLinks
"""
import urlparse
import string
import tempfile
import zipfile
import re
import os,shutil
import OFS.Image
from types import *
from OFS.Cache import Cacheable
from OFS.Image import Image
from Globals import DTMLFile
from OFS.Folder import Folder
from OFS.SimpleItem import SimpleItem
from AccessControl import ClassSecurityInfo
from AccessControl.User import UserFolder
from Globals import InitializeClass
from Globals import DTMLFile
import Globals
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Products.PageTemplates.PageTemplate import PageTemplate
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 ECHO_helpers
from Acquisition import aq_parent
try:
from Products.MetaDataProvider.MetaDataClient import MetaDataClient
except:
print "no metadataclient"
import urllib
import urllib2
import cgi
import smtplib
import time
#from Ft.Xml.Domlette import NonvalidatingReader
#from Ft.Xml.Domlette import PrettyPrint, Print
#from Ft.Xml import EMPTY_NAMESPACE
#
#import Ft.Xml.XPath
import cStringIO
import sys
import logging
try:
from psycopg import libpq
except:
try:
from pyPgSQL import libpq
except:
print "ECHO_collection: Warning - No libpq imported!"
import xml.dom.minidom
import urllib
import xml.dom.minidom
import ECHO_helpers
from ECHO_helpers 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
from ECHO_root import ECHO_root
#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=""):
"""Allegemeine Informationen zu einer ECHO Collection"""
self.label = label
self.title=title
self.description=description
self.contentType=contentType
self.responsible=responsible
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"""
meta_type="ECHO_partner"
def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''):
self.__name__=id
self.title=title
self.url=url
self.person=person
self.email=email
self.country=country
self.color=color
self.precondition=precondition
self.copyrightType=copyrightType
data, size = self._read_data(file)
content_type=self._get_content_type(file, data, id, content_type)
self.update_data(data, content_type, size)
manage_options = Image.manage_options+(
{'label':'Partner Information','action':'ECHO_partner_config'},
)
def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None):
"""Change main information"""
self.url=url
self.person=person
self.email=email
self.country=country
self.color=color
self.copyrightType=copyrightType
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
def ECHO_partner_config(self):
"""Main configuration"""
if not hasattr(self,'url'):
self.url=""
pt=zptFile(self, 'zpt/ChangeECHO_partner.zpt')
return pt()
manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
Kind='ECHO_partner',kind='ECHO_partner')
def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='',
REQUEST=None):
"""
Add a new ECHO_partner object.
Creates a new ECHO_partner object 'id' with the contents of 'file'.
Based on Image.manage_addImage
"""
id=str(id)
title=str(title)
content_type=str(content_type)
precondition=str(precondition)
id, title = OFS.Image.cookId(id, title, file)
self=self.this()
# First, we create the image without data:
self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition))
# Now we "upload" the data. By doing this in two steps, we
# can use a database trick to make the upload more efficient.
if file:
self._getOb(id).manage_upload(file)
if content_type:
self._getOb(id).content_type=content_type
if REQUEST is not None:
try: url=self.DestinationURL()
except: url=REQUEST['URL1']
REQUEST.RESPONSE.redirect('%s/manage_main' % url)
return id
class ECHO_locale(ZopePageTemplate):
"""localisierung"""
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
# 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'},
)
def change_ECHO_localeForm(self):
"""change form"""
pt=zptFile(self, 'zpt/ChangeECHO_localeForm.zpt')
return pt()
def change_ECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None):
"""change echo locale"""
self.lang=lang
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:
RESPONSE.redirect('manage_main')
def manage_addECHO_localeForm(self):
"""Form for adding"""
pt=zptFile(self, 'zpt/AddECHO_localeForm.zpt')
return pt()
def manage_addECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None):
"""add echo locale"""
id="locale_"+lang
self._setObject(id, ECHO_locale(id,lang,title,label,text,content_type))
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
class ECHO_copyright(Folder,ECHO_basis):
"""Copyright informationen"""
meta_type="ECHO_copyright"
def __init__(self,id,title,copyrights):
"""init"""
self.title=title
self.id=id
self.copyrights=copyrights[0:]
def getCopyrights(self):
"""return coyprights"""
return self.copyrights
manage_options = Folder.manage_options+(
{'label':'Main Config','action':'ECHO_copyright_configForm'},
)
def ECHO_copyright_configForm(self):
"""change form"""
pt=zptFile(self, 'zpt/ChangeECHO_copyright')
pt.content_type="text/html"
return pt()
def ECHO_copyright_config(self,title,RESPONSE=None):
"""change"""
self.title=title
self.copyrights=[]
self.copyrights=getCopyrightsFromForm(self,self.REQUEST.form)[0:]
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
def manage_addECHO_copyrightForm(self):
"""Form for adding"""
pt=zptFile(self, 'zpt/AddECHO_copyright.zpt')
return pt()
def manage_addECHO_copyright(self, id,title,RESPONSE=None):
"""add the copyright"""
meta_type="ECHO_copyright"
#first generate copyrights as list of tripels (mediaType,partner,copyrightType)
self._setObject(id, ECHO_copyright(id, title,getCopyrightsFromForm(self,self.REQUEST.form)))
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
class ECHO_layoutTemplate(ZopePageTemplate,ECHO_basis):
"""Create a layout Template for different purposes"""
meta_type="ECHO_layoutTemplate"
def __init__(self, id, text=None, content_type=None,EchoType=None):
self.id = str(id)
self.ZBindings_edit(self._default_bindings)
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)
def manage_addECHO_layoutTemplateForm(self):
"""Form for adding"""
pt=zptFile(self, 'zpt/AddECHO_layoutTemplate.zpt')
return pt()
def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
"Add a Page Template with optional file content."
if type(EchoType)==StringType:
EchoTypes=[EchoType]
else:
EchoTypes=EchoType
for singleType in EchoTypes:
id = str(singleType)+"_template"
if REQUEST is None:
self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
ob = getattr(self, id)
if title:
ob.pt_setTitle(title)
return ob
else:
file = REQUEST.form.get('file')
headers = getattr(file, 'headers', None)
if headers is None or not file.filename:
zpt = ECHO_layoutTemplate(id,EchoType=singleType)
else:
zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
self._setObject(id, zpt)
ob = getattr(self, id)
if title:
ob.pt_setTitle(title)
try:
u = self.DestinationURL()
except AttributeError:
u = REQUEST['URL1']
REQUEST.RESPONSE.redirect(u+'/manage_main')
return ''
class ECHO_fullText(ZopePageTemplate,ECHO_basis,ECHO_language):
"""echo fulltext in xml"""
meta_type="ECHO_fullText"
def getPage(self,nr='1'):
"""get page n"""
#return self().encode('latin-1','ignore')
try:
dom=xml.dom.minidom.parseString(self())
except:
dom=xml.dom.minidom.parseString(self.utf8ify(self()))
pages=dom.getElementsByTagName('page')
return pages[int(nr)-1].toxml()
# Product registration and Add support
manage_addECHO_fullTextForm = PageTemplateFile(
'zpt/AddECHO_fullText.zpt', globals())
def manage_addECHO_fullText(self, id, title=None, text=None,
REQUEST=None, submit=None):
"Add a Page Template with optional file content."
id = str(id)
if REQUEST is None:
self._setObject(id, ECHO_fullText(id, text))
ob = getattr(self, id)
if title:
ob.pt_setTitle(title)
return ob
else:
file = REQUEST.form.get('file')
headers = getattr(file, 'headers', None)
if headers is None or not file.filename:
zpt = ECHO_fullText(id)
else:
zpt = ECHO_fullText(id, file, headers.get('content_type'))
self._setObject(id, zpt)
try:
u = self.DestinationURL()
except AttributeError:
u = REQUEST['URL1']
if submit == " Add and Edit ":
u = "%s/%s" % (u, urllib.quote(id))
REQUEST.RESPONSE.redirect(u+'/manage_main')
return ''
class ECHO_externalLink(Folder,ECHO_basis):
"""Link zu einer externen Ressource"""
security=ClassSecurityInfo()
meta_type='ECHO_externalLink'
security.declarePublic('content_html')
def content_html(self):
"""template fuer content"""
ret= ECHO_basis.content_html(self,'externalLink')
if type(ret) is StringType:
return ret.decode('utf-8')
else:
return ret
def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType):
self.id = id
"""Festlegen der ID"""
self.credits=toList(credits)
self.label = label
self.link= link
self.title=title
self.weight=weight
self.description=description
self.contentType=contentType
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"""
if not hasattr(self,'weight'):
self.weight=""
if not hasattr(self,'coords'):
self.coords=['']
pt=zptFile(self, 'zpt/ChangeECHO_externalLink.zpt')
return pt()
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 = (
{'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"""
pt=zptFile(self, 'zpt/AddECHO_externalLinkForm.zpt')
return pt()
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,linkType)
self._setObject(id,newObj)
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
class ECHO_link(ECHO_externalLink):
"""external_link"""
meta_type="ECHO_link"
manage_options = ECHO_externalLink.manage_options+(
{'label':'add links config','action':'ECHO_link_addLinksForm'},
)
def getMDValueSimpleSearchField(self):
"""returns value for simple search"""
return " ".join([self.getTitle(),self.getDescription()])
def ECHO_link_addLinksForm(self):
"""Main configuration"""
pt=zptFile(self, 'zpt/ChangeECHO_link_addLinks.zpt')
return pt()
def ECHO_link_addLinks(self,addLinks,RESPONSE):
"""add links"""
self.addLinks=addLinks
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
def content_html(self):
"""template fuer link"""
if hasattr(self,"link_template"):
ret=ECHO_basis.content_html(self,'link')
else:
ret=ECHO_basis.content_html(self,'collection')
#return ret
return ret
#
#
# try:
# return ret.decode('utf-8')
# except:
# try:
# return ret.decode('latin-1')
# except:
#
# 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"""
if self.link:
splitted=self.link.split("?")
if len(splitted)>1:
params=cgi.parse_qs(splitted[1])
for x in params.keys():
if type(params[x]) is ListType:
params[x]=params[x][0]
else:
params={}
if getattr(self,'addLinks','yes')=="yes":
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 ""
def manage_addECHO_linkForm(self):
"""Form for external Links"""
pt=zptFile(self, 'zpt/AddECHO_linkForm.zpt')
return pt()
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,linkType)
self._setObject(id,newObj)
getattr(self,id).addLinks='no'
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
class ECHO_collection(CatalogAware, Folder, Persistent, Implicit, Cacheable,ECHO_basis):
"""ECHO Collection"""
management_page_charset="utf-8"
security=ClassSecurityInfo()
meta_type='ECHO_collection'
default_catalog='resourceCatalog'
rootMetaTypes = ['ECHO_root', 'ECHO_main', 'ECHO_nav']
# viewClassificationList=viewClassificationListMaster
displayTypes=displayTypes
path="/mpiwg/online/permanent/shipbuilding"
def getSection(self, crumbs=None):
"""returns the current section name"""
# use breadcrumbs if available
if crumbs is not None and len(crumbs) > 0:
return crumbs[0][2].getId()
p = self
sec = None
# descend parents to the root (and remember the last id)
while p is not None and p.meta_type not in self.rootMetaTypes:
sec = p.getId()
p = aq_parent(p.context)
return sec
def getSubSection(self, crumbs=None):
"""returns the current subsection name"""
# use breadcrumbs if available
if crumbs is not None and len(crumbs) > 1:
return crumbs[1][2].getId()
p = self
sec = None
subsec = None
# descend parents to the root (and remember the last id)
while p is not None and p.meta_type not in self.rootMetaTypes:
subsec = sec
sec = p.getId()
p = aq_parent(p.context)
return subsec
def getCrumb(self):
"""returns breadcrumb for this object"""
return ECHO_helpers.getCrumb(self)
def getHierCrumbs(self):
"""returns a list of hierarchical breadcrumbs from self to the ECHO_root"""
return ECHO_helpers.getHierCrumbs(self)
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])
def getTitleAndLabel(self):
"""gibt title und label zurueck"""
return (getattr(self,'title',''),getattr(self,'label',''))
def localizeObjects(self):
"""localize all objects"""
contents=self.ZopeFind(self,obj_metatypes=['ECHO_externalLink','ECHO_link','ECHO_mapText'])
find=self.ZopeFind(self,obj_ids=('locale_en'))
if not find:
self.manage_addECHO_locale("en",'','')
for content in contents:
if content[1].meta_type in ['ECHO_link','ECHO_externalLink']:
find=content[1].ZopeFind(content[1],obj_metatypes=('ECHO_mapText'))
if find:
root=find[0][1]
locale=find[0][1].ZopeFind(find[0][1],obj_ids=('locale_en'))
else:
root=None
else:
root=content[1]
locale=content[1].ZopeFind(content[1],obj_ids=('locale_en'))
if root and not locale:
root.manage_addECHO_locale("en",'','')
pt=zptFile(self, 'zpt/localizeObjects.zpt')
return pt()
def localize(self,REQUEST,RESPONSE):
"""localize"""
for key in REQUEST.form.keys():
splitted=key.split("!")
if splitted[0]=="" or splitted[0]=="en" or splitted[0]=="title" or splitted[0]=="label":
if splitted[0]=="en":
setattr(self.locale_en,splitted[1],REQUEST.form[key])
else:
setattr(self,splitted[0],REQUEST.form[key])
else:
obj=getattr(self,splitted[0])
if obj.meta_type=="ECHO_mapText":
if splitted[1]=="en":
obj.locale_en.pt_edit(REQUEST.form[key],obj.locale_en.content_type)
else:
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],text[0][1].locale_en.content_type)
else:
text[0][1].pt_edit(REQUEST.form[key],text[0][1].content_type)
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
def getRDF(self,urn=None):
"""rdf of the collection"""
contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
ret=getRDFDescription(self,self.absolute_url(),urn=urn)
if not urn:
urn=self.absolute_url()
li="""\n"""
for content in contents:
try:
ret+=content[1].getRDF()+"\n"
except:
logging.error("getrdf: "+repr(content[1].getRDF()))
try:
ret+=self.unicodify(content[1].getRDF())+"\n"
except:
logging.error("--still cannot do it")
ret+=repr(content[1].getRDF())+"\n"
ret+="""\n"""%urn
for content in contents:
nurn=content[1].absolute_url()
ret+=li%nurn
return ret+""
def getExportCollectionsAsJSON(self,metatypes=['ECHO_resource'],REQUEST=None):
import json
ret = self.getExport(metatypes=metatypes)
if REQUEST:
REQUEST.response.setHeader("Content-type", "text/json; charset=utf-8")
return json.dumps(ret)
def getExport(self,metatypes=['ECHO_resource'],REQUEST=None):
"""JSON export collection content"""
import json
ret={}
#contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
contents=self.ZopeFind(self,obj_metatypes=metatypes)
ret['description']=self.getDescription();
ret['title']=self.getTitle();
ret['label']=self.getLabel();
ret['content']=[]
ret['echo_path']=self.absolute_url().replace(self.echo_pages.absolute_url(),'')
for content in contents:
ret['content'].append(content[1].getDRI(type="mpiwg"))
return ret
def getDRI(self,type="escidoc"):
"""sofar cho collections don't have dris
therefore return the path"""
return self.absolute_url().replace(self.echo_pages.absolute_url(),'')
def changeLabels(self):
"""change form"""
pt=zptFile(self, 'zpt/changeLabelsForm')
pt.content_type="text/html"
return pt()
def changeTitles(self):
"""change form"""
pt=zptFile(self, 'zpt/changeTitleForm')
pt.content_type="text/html"
return pt()
def changeWeights(self):
"""change form"""
pt=zptFile(self, 'zpt/changeWeightForm')
pt.content_type="text/html"
return pt()
def changeMetaDataLinks(self):
"""change form"""
pt=zptFile(self, 'zpt/changeMetaDataLinkForm')
pt.content_type="text/html"
return pt()
def changeAccessRightsCollectionForm(self,preselect=None):
"""change access rights of all resources in this collection"""
pt=zptFile(self, 'zpt/changeAccessRightsCollectionForm')
pt.content_type="text/html"
return pt(preselect=preselect)
def changeAccessRightsCollection(self):
"""change"""
ret=""
argv=self.REQUEST.form
resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
for resource in resources:
if argv.has_key(resource[1].getId()+'_xml'):
ret+=resource[1].getId()+" "+argv[resource[1].getId()+'_xml']+""
resource[1].setAccessRightXML(argv[resource[1].getId()+'_xml'])
resource[1].accessRight=argv[resource[1].getId()+'_xml']
elif argv.has_key(resource[1].getId()+'_echo'):
ret+="only local:"+resource[1].getId()+" "+argv[resource[1].getId()+'_echo']+""
resource[1].accessRight=argv[resource[1].getId()+'_echo']
else:
ret+="ERROR:" +resource[0]
return ret
def changeMetaDataLinkInCollection(self):
"""change all lables of a collection"""
ret=""
argv=self.REQUEST.form
resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
for resource in resources:
try:
ret+=resource[1].getId()+" "+argv[resource[1].getId()]+""
resource[1].metalink=argv[resource[1].getId()][0:]
except:
pass
return ret
def changeMetaDataLinkInCollection(self):
"""change all lables of a collection"""
ret=""
argv=self.REQUEST.form
resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
for resource in resources:
try:
ret+=resource[1].getId()+" "+argv[resource[1].getId()]+""
resource[1].metalink=argv[resource[1].getId()][0:]
except:
pass
return ret
def changeWeightsInCollection(self):
"""change all lables of a collection"""
ret=""
argv=self.REQUEST.form
resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
for resource in resources:
try:
ret+=resource[1].getId()+" "+argv[resource[1].getId()]+""
resource[1].weight=argv[resource[1].getId()][0:]
except:
pass
return ret
def changeTitlesInCollection(self):
"""change all lables of a collection"""
ret=""
argv=self.REQUEST.form
resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
for resource in resources:
try:
ret+=resource[1].getId()+" "+argv[resource[1].getId()]+""
resource[1].title=argv[resource[1].getId()][0:]
except:
pass
return ret
def changeLabelsInCollection(self):
"""change all lables of a collection"""
ret=""
argv=self.REQUEST.form
resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
for resource in resources:
try:
ret+=resource[1].getId()+" "+argv[resource[1].getId()]+""
resource[1].label=argv[resource[1].getId()][0:]
except:
pass
return ret
def importCollection(self,path=None,viewerUrl=None,metaDataUrl=None,replacePathPermanent=None,replacePathExperimental=None,RESPONSE=None):
"""liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
if path is None:
pt=zptFile(self, 'zpt/importCollection.zpt')
return pt()
files=os.listdir(path)
ret=""
for fileName in files:
if fileName:
if (replacePathExperimental and replacePathExperimental!=''):
path=re.sub(replacePathExperimental,"/mpiwg/online/experimental",path)
if (replacePathPermanent and replacePathPermanent!=''):
path=re.sub(replacePathPermanent,"/mpiwg/online/permanent",path)
link=viewerUrl%(path+"/"+fileName+"/pageimg")
metalink=metaDataUrl+"/"+path+"/"+fileName+"/index.meta"
try:
#link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb"
newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'','book','','','','','','')
self._setObject(fileName,newObj)
genObj=getattr(self,fileName)
#genObj.createIndexFile()
ret+="OK:"+fileName+" "
except:
print "ERROR"
ret+="ERROR:"+fileName+" "
return ret
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
def changeViewerForm(self):
"""change the viewer template set"""
pt=zptFile(self, 'zpt/changeECHOViewer')
return pt()
def getTextToolsField(self,name,default=''):
"""Lese text tool field der Collection not implemented yet!"""
return default
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 copyTitleToInfoXMLFolder(self,RESPONSE=None):
"""copy title into the title field of info.xml
author and date werden leer!!!
"""
resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
for resource in resources:
ret,txt=resource[1].copyTitleToInfoXML()
if (not ret) and RESPONSE:
RESPONSE.write("error: %s\n"%txt)
if ret and RESPONSE:
RESPONSE.write("ok: %s\n"%txt)
#logger("ECHO (copyTitleToInfoXMLFolder)",logging.INFO,txt)
if RESPONSE is not None:
RESPONSE.write("done!\n")
RESPONSE.close()
RESPONSE.redirect('manage_main')
def copySearchFields(self,RESPONSE=None):
"""copys < metadatafields to the object"""
resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
for resource in resources:
resource[1].copySearchFields()
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
def getPartnerCopyright(self,name,sonst="generic"):
"""gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung"""
#print "hi",name,sonst
#print getattr(self.partners,name).copyrightType
try:
partner=getattr(self.partners,name)
return partner.copyrightType
except:
print "error"
return sonst
def partnerSelector_HTML(self,selected=None):
"""give type selector"""
if not selected:
retStr="