Diff for /ECHO_content/ECHO_collection.py between versions 1.266 and 1.310.2.3

version 1.266, 2006/03/03 20:34:11 version 1.310.2.3, 2012/01/16 18:57:50
Line 1 Line 1
 """New version of the product started February, 8th. Without scientific classification, use content-type for further classification."""  """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.  """Echo collection provides the classes for the ECHO content web-site.
   
 class ECHO_collection is the basis class for an ECHO collection.  class ECHO_collection is the basis class for an ECHO collection.
Line 9  class ECHO_externalLink contains informa Line 9  class ECHO_externalLink contains informa
   
   
 """  """
 try:  
         from reportlab.pdfgen import canvas  
         from reportlab.lib.pagesizes import A4  
 except:  
         print "PDF generation will not work"  
             
 import urlparse  import urlparse
 import string  import string
 import tempfile  import tempfile
   import zipfile
 import re  import re
 import os  import os,shutil
 import OFS.Image  import OFS.Image
 from types import *  from types import *
 from OFS.Cache import Cacheable  from OFS.Cache import Cacheable
Line 34  from Globals import DTMLFile Line 31  from Globals import DTMLFile
 import Globals  import Globals
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from Products.PageTemplates.PageTemplate import PageTemplate  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 Globals import Persistent, package_home
 from Acquisition import Implicit  from Acquisition import Implicit
 from Products.ZCatalog.CatalogPathAwareness import CatalogAware  from Products.ZCatalog.CatalogPathAwareness import CatalogAware
   from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon
   try:
       from Products.MetaDataProvider.MetaDataClient import MetaDataClient
   except:
       print "no metadataclient"
 import urllib  import urllib
   import urllib2
 import cgi  import cgi
 import smtplib  import smtplib
 import time  import time
 from Ft.Xml.Domlette import NonvalidatingReader  #from Ft.Xml.Domlette import NonvalidatingReader
 from Ft.Xml.Domlette import PrettyPrint, Print  #from Ft.Xml.Domlette import PrettyPrint, Print
 from Ft.Xml import EMPTY_NAMESPACE  #from Ft.Xml import EMPTY_NAMESPACE
   #
 import Ft.Xml.XPath  #import Ft.Xml.XPath
 import cStringIO  import cStringIO
 import zLOG  
 import sys  import sys
   import logging
   
 try:  try:
         from psycopg import libpq          from psycopg import libpq
Line 66  import urllib Line 69  import urllib
 import xml.dom.minidom  import xml.dom.minidom
 import ECHO_helpers  import ECHO_helpers
 from ECHO_helpers import *  from ECHO_helpers import *
   
   try:
 from ECHO_language import *  from ECHO_language import *
   except:
       print "no echo_language"
       class ECHO_language:
           """ leere Klasse"""
           pass
   
 from ECHO_movie import *  from ECHO_movie import *
 import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen  import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen
 import xmlrpclib  import xmlrpclib
                           
   import logging
   
   #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=""):  def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""):
   
Line 84  def setECHO_collectionInformation(self,t Line 102  def setECHO_collectionInformation(self,t
         self.credits=toList(credits)          self.credits=toList(credits)
         self.weight=weight          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):  class ECHO_partner(Image,Persistent,ECHO_basis):
     """ECHO Partner"""      """ECHO Partner"""
   
Line 177  class ECHO_locale(ZopePageTemplate): Line 202  class ECHO_locale(ZopePageTemplate):
                 self.lang=lang                  self.lang=lang
                 self.title=title                  self.title=title
                 self.label=label                  self.label=label
                 if text:              # default content
               if not text:
                   text = open(self._default_content_fn).read()
                   content_type = 'text/html'
                         self.pt_edit(text, content_type)                          self.pt_edit(text, content_type)
                 self.id=id                  self.id=id
   
Line 196  class ECHO_locale(ZopePageTemplate): Line 224  class ECHO_locale(ZopePageTemplate):
                 self.title=title                  self.title=title
                 self.label=label                  self.label=label
                 if not text is None:                  if not text is None:
                           if content_type is None:
                               content_type = self.content_type
                         self.pt_edit(text, content_type)                          self.pt_edit(text, content_type)
   
                 if RESPONSE is not None:                  if RESPONSE is not None:
Line 285  class ECHO_layoutTemplate(ZopePageTempla Line 315  class ECHO_layoutTemplate(ZopePageTempla
         if text is None:          if text is None:
             self._default_content_fn = os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%EchoType)              self._default_content_fn = os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%EchoType)
             text = open(self._default_content_fn).read()              text = open(self._default_content_fn).read()
           if content_type is None:
               content_type = self.content_type
         self.pt_edit(text, content_type)          self.pt_edit(text, content_type)
   
   
Line 342  class ECHO_fullText(ZopePageTemplate,ECH Line 374  class ECHO_fullText(ZopePageTemplate,ECH
         def getPage(self,nr='1'):          def getPage(self,nr='1'):
                 """get page n"""                  """get page n"""
                 #return self().encode('latin-1','ignore')                  #return self().encode('latin-1','ignore')
                   try:
                 dom=xml.dom.minidom.parseString(self())                  dom=xml.dom.minidom.parseString(self())
                   except:
                      dom=xml.dom.minidom.parseString(self.utf8ify(self()))
                 pages=dom.getElementsByTagName('page')                  pages=dom.getElementsByTagName('page')
                                   
                 return pages[int(nr)-1].toxml()                  return pages[int(nr)-1].toxml()
Line 383  def manage_addECHO_fullText(self, id, ti Line 418  def manage_addECHO_fullText(self, id, ti
     return ''      return ''
   
   
 class ECHO_resource(CatalogAware,Folder,Persistent,ECHO_basis):  
     """ECHO Ressource"""  
     security=ClassSecurityInfo()  
     meta_type='ECHO_resource'  
     default_catalog='resourceCatalog'  
       
 #    viewClassificationList=viewClassificationListMaster  
   
     def PrincipiaSearchSource(self):  
            """Return cataloguable key for ourselves."""  
            return str(self)  
   
     getSubCols = ECHO_helpers.getSubCols  
   
     def reindex(self):  
         """generate fields for indexing and reindex"""  
           
         #TODO: korrigieren des metalink pfades konfigurierbar machen  
         splitted= [x for x in urlparse.urlparse(self.metalink)]  
         splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:]  
           
         if splitted[0]=="http":  
             self.metalink=urlparse.urlunparse(splitted)  
           
   
         self.fullTextUrl=self.getFullTextXML(noredirect="yes")  
           
         #TODO: korrigieren relative url to absoluter url volltexten, konfigurierbar?  
         splitted= [x for x in urlparse.urlparse(self.fullTextUrl)]  
         if splitted[0]=="":  
             splitted[0]="http"  
             splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:]  
               
             self.fullTextUrl=urlparse.urlunparse(splitted)  
               
         self.imagePath=self.getImagePath()  
           
         self.reindex_object()  
     
     
     security.declareProtected('View','createPDF')  
     def createPDF(self,RESPONSE=None,local=None,dpi=150):  
             """erzeuge pdf file"""  
             pages=1  
             dpi=float(dpi)  
             imagePath=self.getImagePath().replace("/mpiwg/online","")  
               
               
             image="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn="+imagePath+"&dw=%i&dh=%i&pn=%i"  
             xmlInfo="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/dlInfo-xml.jsp?fn="+imagePath  
   
             dom=xml.dom.minidom.parse(urllib.urlopen(xmlInfo))  
             for parameter in dom.getElementsByTagName('parameter'):  
                     if parameter.getAttribute('name')=="pt":  
                             pages=int(parameter.getAttribute('value'))  
                             break  
               
   
             tempdir="/tmp/archivesImageServer"  
             if not os.path.exists(tempdir):  
                     os.mkdir(tempdir)   
     
             tmpPath=tempfile.mkdtemp(dir=tempdir)  
               
   
             tmpZip=tempfile.mktemp(dir=tempdir)  
   
             tmpFn=os.path.split(tmpZip)[1]  
   
   
       
   
             if RESPONSE:  
                     RESPONSE.setHeader("Content-Type","text/html")  
                     RESPONSE.write("<h1>I am creating  the pdf</h1>")  
                     txt="<h3>1. step: getting the images( %i pages)</h3>"%pages  
                     RESPONSE.write(txt)  
   
             c=canvas.Canvas(tmpZip)  
             for i in range(1,pages+1):  
                     if RESPONSE:  
                             RESPONSE.write(str("<p>Get Page: %i<br>\n"%i))  
                     faktor=dpi/72.0  
                       
                     fn=tmpPath+"/%i"%i  
   
                     width,height=A4  
                     #print image%(width*faktor,height*faktor,i)  
                     url=urllib.urlopen(image%(width*faktor,height*faktor,i)).read()  
                     fh=file(fn,"w")  
                     fh.write(url)  
                     fh.close()  
   
       
   
                     c.drawImage(fn,0,0,width=width,height=height)  
                     c.showPage()  
             c.save()  
             if RESPONSE:  
                     RESPONSE.write("<p>finished<br>\n")  
   
             if RESPONSE:  
                     len=os.stat(tmpZip)[6]  
                     downloadUrl=self.absolute_url()+"/downloadPDF"  
                     RESPONSE.write("""<h1><a href="downloadPDF?fn=%s">Click here for download ( %i Byte)</a></h1>\n"""%(tmpFn,len))  
                     RESPONSE.write("""<p>The file will be stored for a while, you can download it later, the URL is:</p>  
                     <p><a href="downloadPDF?fn=%s">%s?fn=%s</a></h1>\n"""%(tmpFn,downloadUrl,tmpFn))  
                     RESPONSE.close()  
   
   
     def downloadPDF(self,fn):  
             """download prepared set"""  
             filename="/tmp/archivesImageServer/"+fn  
             namePDF=self.getId()+".pdf"  
             self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%namePDF)  
             self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")  
             len=os.stat(filename)[6]  
             self.REQUEST.RESPONSE.setHeader("Content-Length",len)  
             images=file(filename).read()  
             self.REQUEST.RESPONSE.write(images)  
             self.REQUEST.RESPONSE.close()  
   
   
     def getRDF(self,urn=None):  
             """rdf"""  
             ret=getRDFDescription(self,self.link,urn=urn)  
             return ret+self.createSubElementRDF(urn=urn)   
   
     
     def changeAccessRightForm(self,preselect=None):  
         """change the access rights"""  
           
         pt=zptFile(self, 'zpt/ChangeECHO_resourceAccessRight.zpt')  
         return pt(preselect=preselect)  
       
     def changeAccessRight(self):  
         """changeRights"""  
         argv=self.REQUEST.form  
         self.setAccessRightXML(argv["%s_xml"%self.getId()])  
         self.accessRight=argv["%s_echo"%self.getId()]  
            
         self.REQUEST.RESPONSE.redirect('manage_main')  
           
       
     def getAccessRightSelectorHTML(self,outlook="select",xmldominant=None,preselect=None):  
             """htmlselector, xmldominant= in der regel wird der wert des xmlfiles ausgegeben ausser er existiert nicht"""  
             values=['','free','MPIWG']  
               
             if preselect:#set all to the preselected  
                 ar=(preselect,preselect)  
             else:#else set to actual value  
                 ar=self.getAccessRightMD()  
                   
             if outlook=="select":  
                     ret="""<select name="%s_xml">"""%self.getId()  
                     ret1="""<select name="%s_echo">"""%self.getId()  
                     for value in values:  
                             if value==ar[0]:  
                                     ret+="<option selected>%s</option>"%value  
                             else:  
                                     ret+="<option>%s</option>"%value  
                               
                             if value==ar[1]:  
                                     ret1+="<option selected>%s</option>"%value  
                             else:  
                                     ret1+="<option>%s</option>"%value  
                       
                       
                     if not xmldominant:  
                         return ret+"</select>",ret1+"</select>"  
                     else:  
                         if ar[0] is not None:  
                             return ret+"</select>"  
                         else:  
                             return "<p>No xml file (only local selection):"+ret1  
   
             else:  
                     ret=""  
                     ret1=""  
                     for value in values:  
                               
                             if value==ar[0]:  
                                     ret+="""<input type="radio" name="%s_xml" value="%s" checked>%s"""%(self.getId(),value,value)  
                             else:  
                                     ret+="""<input type="radio" name="%s_xml" value="%s">%s"""%(self.getId(),value,value)  
                                       
                             if value==ar[1]:  
                                     ret1+="""<input type="radio" name="%s_echo" value="%s" checked>%s"""%(self.getId(),value,value)  
                             else:  
                                     ret1+="""<input type="radio" name="%s_echo" value="%s">%s"""%(self.getId(),value,value)  
   
                     if not xmldominant:                          
                         return ret,ret1  
                     else:                           
                         if ar[0]:  
                             return ret  
                         else:  
                             return "<p>No xml file (only local selection)</p>"+ret1  
   
   
   
     def copyAccessRightsFromMD(self):  
             """kopiere rechte aus den metadaten"""  
             self.accessRight=self.getAccessRightMD()[0]  
               
               
               
               
       
     def getAccessRightMD(self):  
                 """set accessright"""  
                 url=self.metalink  
   
                 try:  
                     urllib.urlopen(url)  
                 except:  
                     zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])  
   
                     return None,getattr(self,'accessRight','')  
                   
               
                 try:  
                         dom = NonvalidatingReader.parseUri(url)  
                 except:  
                         zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])  
                         return (None,"Cannot parse: "+url+"<br>"+"%s (%s)"%sys.exc_info()[0:2])  
   
   
                 accessright=dom.xpath("//meta/access-conditions/access/@type")  
                 if accessright:  
                     accessright=accessright[0].value  
                 if str(accessright)=='institution':  
                     tmp=dom.xpath("//meta/access-conditions/access/name")  
                     if tmp:  
                         accessright=getTextFromNode(tmp[0])  
                       
                 if not accessright:  
                     accessright=""  
                   
                 return accessright,getattr(self,'accessRight','')               
   
     def changeAccessRightMD(self,accessright,RESPONSE=None):  
             """change the rights - not user anymore"""  
             #TODO: check if method still needed  
             params="accessright=%s"%accessright  
   
   
             #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()  
   
               
             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')  
   
                   
     def setAccessRightXML(self,accessright):  
                 """set accessright"""  
                 url=self.metalink  
                 accessrights=['MPIWG','free']#allowes rights  
                   
                 if accessright =='':  
                     """do nothing"""  
                     return ""  
                       
                       
                 try:  
                         geturl=""  
                         for line in ECHO_helpers.urlopen(url).readlines():  
                                 geturl=geturl+line   
   
   
                 except:  
                         return (None,"Cannot open: "+url)  
   
                 try:  
                         dom=xml.dom.minidom.parseString(geturl)  
                         root=dom.getElementsByTagName('resource')[0]  
                 except:  
                         return (None,"Cannot parse: "+url+"<br>"+geturl)  
   
                 metamains=dom.getElementsByTagName('meta')  
                   
                 if not metamains:  
                         nodenew=dom.createElement('meta')  
                         root.appendChild(nodenew)  
                         metamain=nodenew  
                 else:  
                         metamain=metamains[0]  
                   
                   
                 metanodes=metamain.getElementsByTagName('access-conditions')  
   
                 if not metanodes:  
                         nodenew=dom.createElement('access-conditions')  
                         metamain.appendChild(nodenew)  
                         metanode=nodenew  
                 else:  
                         metanode=metanodes[0]  
   
                 accesses=metanode.getElementsByTagName('access')  
   
                 #delete old  
                 if accesses:  
                      metanode.removeChild(accesses[0]).unlink()  
   
                 #create new  
                       
                 nodenew2=dom.createElement('access')  
                 metanode.appendChild(nodenew2)  
                 metanode2=nodenew2  
                   
                 attribute=metanode2.getAttribute('type')  
                   
                 if accessright=="free":  
                       
                      metanode2.setAttribute('type','free')  
                   
                 elif accessright.upper()=='MPIWG':  
                         metanode2.setAttribute('type','institution')  
                         nodenew4=dom.createElement('name')  
                         metanodetext=dom.createTextNode('MPIWG')  
                         nodenew4.appendChild(metanodetext)  
                         nodenew2.appendChild(nodenew4)  
                 #print dom.toxml().encode('utf-8')  
                 string= encodeRPC(dom.toxml().encode('utf-8'))  
                   
                 #TODO: make server configurable  
                 server=xmlrpclib.Server("http://foxridge.mpiwg-berlin.mpg.de/server")  
   
                 path=urlparse.urlparse(self.metalink)[2]  
            
                 server.writeMetaDataFile(path,string,"yes")  
           
     def setStartPageForm(self):  
             """Form for changing the startpage"""  
   
               
             pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt')  
             pt.content_type="text/html"  
             return pt()  
       
   
     def createImageUrl(self,pn=1):  
             """create ImageUrl"""  
   
               
             resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')  
               
             digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix')  
             images=readFieldFromXML(self.metalink,'texttool','image')  
   
   
             if (not resourcepath) or (not digiliburlprefix) or (not images):  
                     zLOG.LOG("ECHO (createImageUrl)",zLOG.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?"  
   
             if (not images) or (not resourcepath): return None  
   
             return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn)  
       
     def copyTitleToInfoXML(self,RESPONSE=None):  
             """copy title from the resource"""  
             presentationXML=readFieldFromXML(self.metalink,'texttool','presentation')  
             resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')  
             if (not presentationXML) or (not resourcepath):   
                 if RESPONSE:  
                         RESPONSE.write("Error: %s\n"%self.getId())  
                 else:  
                         return None,self.absolute_url()  
   
             try:  
                     fh=file(os.path.join(resourcepath,presentationXML),'w')  
                     fh.write("""<info>  
                     <author></author>  
                     <title>%s</title>  
                     <date></date>  
                     <display>yes</display>  
                     </info>"""%self.title)  
                     fh.close()  
                     return 1,self.getId()  
             except:  
                     if RESPONSE:  
                             RESPONSE.write("Error: %s\n"%self.getId())  
                     else:  
                             return None,self.absolute_url()  
   
               
     def setStartPage(self,startpage=None,RESPONSE=None):  
             """set start page, if no startpage defined use the generic one of the resource"""  
   
             if (not (type(startpage)==StringType)):  
                     if ("__generic" in startpage): # checke ob generic in der liste  
                             startpage=self.absolute_url()+"/startpage_html"  
                     elif ("__firstPage" in startpage): # checke ob generic in der liste  
                             startpage=self.createImageUrl()  
                               
             if (not startpage):  
                     startpage=self.absolute_url()+"/startpage_html"  
             elif (startpage=="__generic"):  
                     startpage=self.absolute_url()+"/startpage_html"  
             elif (startpage=="__firstPage"):  
                         startpage=self.createImageUrl()  
       
             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()  
           
               
             path=self.metalink  
               
             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','',path) # falls foxridge als server  
             path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server  
             path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server  
             path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server  
             path=re.sub('http://vision.mpiwg-berlin.mpg.de','',path) # falls vision als server  
             path=re.sub('http://xserve02.mpiwg-berlin.mpg.de:18880','',path) # falls vision als server  
             path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo  
             path=re.sub('/index.meta','',path)   
   
   
             ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()  
   
             if RESPONSE is not None:  
                         RESPONSE.redirect('manage_main')  
   
     def changeViewerTemplateSetForm(self):  
             """change the viewer template set"""  
             pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet')  
             return pt()  
   
   
      
     def getTextToolsField(self,name,default=''):  
         """Lese Textoolsfelder aus index.meta im path aus"""  
           
         try:  
             dom=xml.dom.minidom.parse(self.metalink)  
             node=dom.getElementsByTagName('texttool')[0] #getNode  
             subnode=node.getElementsByTagName(name)[0]  
   
             # bei text wird nur der Folder gebraucht  
             if name=="text":  
                 splitted=getText(subnode.childNodes).split("/")  
                 return splitted[len(splitted)-2]  
             else:  
                 return getText(subnode.childNodes)  
         except:  
             return default  
      
   
     def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):  
             """changeit"""  
   
             paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix']  
   
               
             #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate)  
   
             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)))  
             #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params)  
             # hack Pfad auf die Dokumente  
             path=self.metalink  
               
               
   
             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)  
   
             if RESPONSE is not None:  
                         RESPONSE.redirect('manage_main')  
   
       
   
     security.declarePublic('content_html')        
     def content_html(self):  
         """template fuer content"""  
         return ECHO_basis.content_html(self,'resource')  
       
 #    def getViewClassification(self):  
 #        if hasattr(self,'viewClassification'):  
 #            return self.viewClassification  
 #        else:  
 #            return ""  
   
     def getFullTextXML(self,noredirect=None):  
             """getFullTextXML; gives the FullText as an XML Document, and <error></error> if somthing goes wrong."""  
   
             try:  
                     #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink)  
                     fh=ECHO_helpers.urlopen(self.metalink)  
                     #zLOG.LOG("ECHO Fulltext",zLOG.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)  
                     fh.close()  
                     #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh")  
                     #keine url  
                     if not (texturl.split(":")[0] in ['http','ftp','file']):   
                         if not noredirect:  
                             return file(texturl).read()  
                         else:  
                             return texturl  
   
                     if not noredirect:  
                             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')    
                             zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl)  
                             self.REQUEST.RESPONSE.redirect(texturl)  
                     else:  
                             return texturl  
             except:  
   
                     if not noredirect:  
                             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')  
                             self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")  
                     else:  
                             return "<error>no fulltext available</error>"  
   
     def getImagePath(self):  
             """gibt pfad zum image aus"""  
             return self.getImageView(noredirect="yes",onlyPath="yes")  
       
     def getImageView(self,noredirect=None,onlyPath=None):  
             """getImages; give Imageviewr  and <error></error> if somthing goes wrong."""  
             try:  
                     fh=ECHO_helpers.urlopen(self.metalink)  
                     dom=xml.dom.minidom.parse(fh)  
                     texttools=dom.getElementsByTagName('texttool')  
                     text=texttools[0].getElementsByTagName('image')  
                     imagetemp=getText(text[0].childNodes)  
                       
                     text=dom.getElementsByTagName('archive-path')  
                     archivepath=getText(text[0].childNodes)  
                     archivepath=re.sub('/mpiwg/online/','',archivepath)   
                     imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp  
                     fh.close()  
   
                     if not noredirect:  
                             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')    
                             self.REQUEST.RESPONSE.redirect(imageurl)  
                     else:  
                             if not onlyPath:  
                                     return imageurl  
                             else:  
                                     return archivepath+"/"+imagetemp  
             except:  
   
                     if not noredirect:  
                             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')  
                             self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")  
                     else:  
                             return "<error>no images available</error>"  
   
       
     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 getCredits(self):  
         """Ausgabe der credits"""  
         if self.credits:  
             return self.credits  
         else:  
             return []  
   
   
       
     def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords):  
   
         self.id = id  
         """Festlegen der ID"""  
           
         self.label = label  
         self.link= link  
         self.metalink=metalink  
         self.title=title  
         self.weight=weight  
         self.credits=toList(credits)  
         self.description=description  
         self.contentType=contentType  
         self.copyrightType=copyrightType  
         self.renderingType=renderingType  
         self.responsible=responsible  
         self.resourceID=resourceID  
           
         if coords:  
             coordsnew=[ string.split(x,",") for x in coords]  
         else:  
             coordsnew=[]  
           
         self.coords=coordsnew  
 #       self.viewClassification=""  
   
   
   
     def getContentType(self):  
             try:  
                     return self.contentType  
             except:  
                     return ""  
   
     def getCopyrightType(self):  
             try:  
                     return self.copyrightType  
             except:  
                     return ""  
   
     def getRenderingType(self):  
             try:  
                     return self.renderingType  
             except:  
                     return ""  
   
     def ECHO_resource_config(self):  
         """Main configuration"""  
   
         if not hasattr(self,'weight'):  
             self.weight=""  
   
         pt=zptFile(self, 'zpt/ChangeECHO_resource.zpt')  
         return pt()  
       
   
     def ECHO_resource_config_main(self):  
         """Main configuration"""  
         if not hasattr(self,'weight'):  
             self.weight=""  
         pt=zptFile(self, 'zpt/ChangeECHO_resource_main.zpt')  
         return pt()  
   
     def ECHO_resource_config_coords(self):  
         """Coords configuration """  
         pt=zptFile(self, 'zpt/ChangeECHO_resource_coords.zpt')  
         return pt()  
   
     def ECHO_resource_config_credits(self):  
         """Main configuration"""  
         pt=zptFile(self, 'zpt/ChangeECHO_resource_credits.zpt')  
         return pt()  
   
     def ECHO_resource_config_metadata(self):  
         """Main configuration"""  
         if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):  
                 self.metaDataHash={}  
                 self.contentType=self.bib_type  
                 for data in self.metadata:  
                         data_neu=re.sub('-','_',data)  
                         self.metaDataHash[data_neu]=getattr(self,data)[0:]  
   
           
         pt=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt')  
         return pt()  
   
   
       
   
     def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):  
         """Aenderung der Properties"""  
         self.resourceID=resourceID  
         self.title=title  
         self.label=label  
         self.description=description  
   
         self.contentType=contentType  
         self.renderingType=renderingType  
         self.weight=weight  
           
         self.link=link  
         self.metalink=metalink  
           
         if RESPONSE is not None:  
             RESPONSE.redirect('manage_main')  
   
   
     def changeECHO_resource_coords(self,RESPONSE=None):  
         """Aenderung der Properties - coords"""  
         #return self.REQUEST  
         for area in self.getMapAreas():  
             id = area.getId()  
             if self.REQUEST.has_key('del.'+id):  
                 # delete this area  
                 self._delObject(id)  
                 # return to same menu  
                 if RESPONSE is not None:  
                     RESPONSE.redirect('ECHO_resource_config_coords')  
                 return  
             # modify this area  
             coordstring = self.REQUEST.get('coords.'+id, '')  
             coords = string.split(coordstring, ',')  
             angle = self.REQUEST.get('angle.'+id, '0')  
             type = self.REQUEST.get('type.'+id, 'area')  
             if len(coords) == 4:  
                 area.setCoordString(coordstring)  
                 area.setAngle(angle)  
                 area.setType(type)  
         # return to main menu      
         if RESPONSE is not None:  
             RESPONSE.redirect('manage_main')  
   
   
     def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):  
         """Aenderung der Properties"""  
         self.credits=credits  
         self.responsible=responsible  
         self.copyrightType=copyrightType  
           
         if RESPONSE is not None:  
             RESPONSE.redirect('manage_main')  
   
   
     def changeECHO_resource_metadata_local(self,RESPONSE=None):  
             """change metadata"""  
             tags=self.findTagsFromMapping(self.contentType)  
             for field in tags[1]:  
                     self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:]  
                           
   
                       
             if RESPONSE is not None:  
                     RESPONSE.redirect('manage_main')  
   
     def changeECHO_resource_metadata(self,RESPONSE=None):  
             """change metadata"""  
             tags=self.findTagsFromMapping(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])  
   
             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()  
   
   
             if RESPONSE is not None:  
                     RESPONSE.redirect('manage_main')  
   
       
   
     def getMDValueSimpleSearchField(self):  
             """returns value for simple search"""  
               
             try:  
                 return " ".join([self.getMDValue('title',generic="yes"),  
                              self.getMDValue('author',generic="yes"),  
                              self.getMDValue('year',generic="yes"),self.getTitle()])  
             except:  
                   
                 #zLOG.LOG(" ECHO_collection(getMDSimpleSearchField)",zLOG.INFO," ".join([self.getMDValue('title',generic="yes"),  
                  #            self.getMDValue('author',generic="yes"),  
                   #           self.getMDValue('year',generic="yes"),'']))  
                 return ""  
                                
     def getMDValue(self,fieldNameTest,empty=None,generic=None):  
             """get md values"""  
             #TODO: cache mappinghash  
               
             fieldName=None  
             if generic:  
                 if self.contentType:  
                     ct=self.contentType.replace(" ","_").lower()  
                 else:  
                     zLOG.LOG("ECHO_collection (getMDValue)", zLOG.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]  
                     self._v_mapHash[ct][fieldNameTest]=fieldName  
             if not fieldName:  
                 fieldName=fieldNameTest    
             if not empty:  
                #FIXME: warum gibt es manchmal kein metadatahas  
                 try:  
                       
                     ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)  
                 except:  
                     zLOG.LOG("ECHO (line 1069)",zLOG.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:  
                return ret  
   
     getFieldValue=getMDValue #depricated  
   
     def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None):  
             """new index.meta"""  
             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')  
   
             if not hasattr(self,'metaDataHash'):  
                   
                     self.copyIndex_meta2echo_resource()  
             try:  
                     return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)  
             except:  
                     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):  
             """return bibliographical metadata as stored in the object"""  
               
             try:  
                       
                     return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes")  
             except:  
                     return "<error> no metadata stored</error>"  
       
     def getXQueryMetaData(self,xquery):  
                 '''  
                 execute an xquery on the metadata and returns a list of tuples,   
                 each tuple represent the content of the node as text and the whole node as xml-fragment  
                 @param xquery: xquery auf den metadaten  
                 '''  
                   
                 try:  
                         md=writeMetadata(self.metalink,self.metaDataHash,xmlfrag="yes")  
                 except:  
                         return None  
   
                 dom = NonvalidatingReader.parseString(md,"http://www.mpiwg-berlin.mpg.de/")  
                   
                 results=Ft.Xml.XPath.Evaluate(xquery, contextNode=dom)  
               
                 ret=[]  
                 for result in results:  
                       
                     buf = cStringIO.StringIO()  
                     PrettyPrint(result, stream=buf)  
                     str = buf.getvalue()[0:]  
                     buf.close()  
                     ret.append((getTextFromNode(result),str))   
                           
                 return ret  
           
     def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):  
             """prints out metadata as stored in the echo environment, format is the index.meta format"""  
             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')  
             return writeMetadata(self.metalink,self.metaDataHash)  
   
     def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):  
         """Aenderung der Properties"""  
           
         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)  
         self.link=link  
         self.metalink=metalink  
           
         if RESPONSE is not None:  
             RESPONSE.redirect('manage_main')  
               
               
     manage_options = Folder.manage_options+(  
         {'label':'Main Config','action':'ECHO_resource_config_main'},  
         {'label':'Change Metadata','action':'ECHO_resource_config_metadata'},  
         {'label':'Graphic Coords','action':'ECHO_graphicEntry'},  
         {'label':'Sync Metadata','action':'ECHO_getResourceMD'},  
         {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'},  
         {'label':'set/change startpage','action':'setStartPageForm'},  
         {'label':'Copy MD for indexing and search','action':'copySearchFields'},  
         {'label':'Change AccessRights','action':'changeAccessRightForm'},   
         )  
   
   
     def isDefinedInThisSet(self,fields,field):  
             """checks if field is defined in fields"""  
             if (fields[0].has_key(field)) and not (fields[0][field]==""):  
                     return 1  
             else:  
                     
                     return 0  
               
     def getFieldLabel(self,fields,field):  
         """get labels"""  
         try:  
             ret =fields[0][field]  
             if ret == "":  
                 return field  
             else:  
                 return ret  
         except:  
             return field  
   
   
   
     def getFieldTag(self,fields,field):  
         """get labels"""  
         try:  
             ret =fields[0][field]  
             if ret == "":  
                 return field  
             else:  
                 return ret  
         except:  
             return field  
   
       
   
     def getMetaDataHash(self):  
             """md hash"""  
             return self.metaDataHash  
       
     def setFieldValue(self,field,value):  
         """get value"""  
         #TODO: remove setFieldValue  
           
         if not hasattr(self,'metaDataHash'):  
                 setattr(self,'metaDataHash',{})  
         self.metaDataHash[field]=value[0:]  
   
     def copySearchFields(self):  
             """copys metadatafields to the object"""  
             fields=['author','title','year']  
               
             for field in fields:  
                     setattr(self,'MD_'+field,self.getMDValue(field,generic="yes"))  
       
   
     def findLabelsFromMapping(self,referenceType):  
         """gib hash mit label -> generic zurueck"""  
         #return {},[]  
   
         temp=self.ZopeFind(self.standardMD)  
   
         if referenceType=="":  
                 referenceType="book"  
           
           
         bibdata={}  
         retdata={}  
         fields=[]  
         fieldlist=self.standardMD.fieldList  
   
         tags=self.findTagsFromMapping(self.contentType)  
         self.referencetypes=tags[2]  
         for referenceTypeF in self.referencetypes:  
   
                 if referenceTypeF[1].title.lower() == referenceType.lower():  
   
                         try:  
                                 bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields  
                                 referenceType=referenceTypeF[1].title  
                         except:  
                                 bibdata[referenceType]=referenceTypeF[1].fields  
                   
   
                         bibdata['data']=referenceTypeF[1]  
                         fields=bibdata[referenceType]  
                         for field in fieldlist:  
                             retdata[field]=referenceTypeF[1].getValue(field)[1]  
   
         return retdata,fieldlist,temp,fields  
   
     def findTagsFromMapping(self,referenceType):  
         """gib hash mit label -> generic zurueck"""  
           
   
         if referenceType=="":  
                 referenceType="book"  
           
         temp =  self.ZopeFind(self.standardMD)[0:]  
   
           
         #self.referencetypes=temp[0:]  
           
           
       
   
         bibdata={}  
         retdata={}  
         fieldlist=self.standardMD.fieldList  
         fields=[]  
         for referenceTypeF in temp:  
                 #print referenceType  
           
                 if referenceTypeF[1].title.lower() == referenceType.lower():   
                         try:  
                                 bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields  
                                 referenceType=referenceTypeF[1].title  
                         except:  
                                 bibdata[referenceType]=referenceTypeF[1].fields  
                         bibdata['data']=referenceTypeF[1]  
                         fields=bibdata[referenceType]  
                         for field in fieldlist:  
                             retdata[field]=referenceTypeF[1].getValue(field)[0]  
           
         return retdata,fieldlist,temp,fields  
   
       
     security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination  
     def copyIndex_meta2echo_resource(self,RESPONSE=None):  
             """copy MD von Index_meta to the echo_resource"""  
               
             (metadict, error)=readMetadata(self.metalink)  
   
   
               
             self.metaDataHash={}  
             if not error=="": #Fehler beim Auslesen des Metafiles  
                       
                     return "ERROR:",error,self.absolute_url()  
               
             self.contentType=metadict['bib_type'][0:]  
             fields=self.findTagsFromMapping(self.contentType)  
               
             #fields=self.findLabelsFromMapping(self.contentType)  
             for field in fields[1]:  
                       
                     if self.isDefinedInThisSet(fields,field):  
                             #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),''))  
                             self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),''))  
   
               
               
             if RESPONSE:  
                     return RESPONSE.redirect('manage_main')  
               
             return "OK:",self.absolute_url(),self.contentType  
           
     def ECHO_getResourceMD(self,template="yes",back=None,overwrite="no"):  
         """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""  
         (metadict, error)=readMetadata(self.metalink)  
           
         if back:  
             self.REQUEST.SESSION['back']=back  
   
         if not error=="": #Fehler beim Auslesen des Metafiles  
                 return "ERROR:",error  
           
         if (not self.contentType) or (overwrite=="yes"):  
                 self.contentType=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  
   
                 return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')()  
   
         #self.REQUEST.SESSION['metadict']=metadict  
           
           
           
   
         self.REQUEST.SESSION['diffs']=checkDiffs(self,metadict)  
   
   
         if template=="yes":  
                 #pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_resourceMD.zpt'),metadict=metadict).__of__(self)  
                 pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt')  
                   
                 return pt(metadict=metadict)  
   
           
   
       
       
     def ECHO_getMD(self,item):  
         """Ausgabe der MD"""  
         return getattr(self,item)  
   
     def checkRDF(self,path):  
             """check if pdf in the path"""  
             try:  
                     for fileName in os.listdir(path):  
                             if os.path.splitext(fileName)[1]==".pdf":  
                                     return os.path.join(path,fileName)  
                     return None  
             except:  
                     return None  
               
               
     security.declareProtected('View','index_html')  
     def index_html(self):  
         """standard page"""  
         pdf=self.checkRDF(self.link)  
         if pdf:  
                 fh=file(pdf,'r').read()  
                 self.REQUEST.RESPONSE.setHeader('Content-Type','application/pdf')  
                 self.REQUEST.RESPONSE.write(fh)  
                 self.REQUEST.RESPONSE.close()  
                 return   
         return self.REQUEST.RESPONSE.redirect(self.link)  
   
     def startpage_html(self):  
             """prints out a startpage for a resource for use e.g. in the BVE"""  
   
             # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt  
   
             sp=self.ZopeFind(self,obj_ids=['startpage.html'])  
   
             if sp:  
                     return sp[1]()  
   
             #pruefen ob irgendwo ein template  
             if hasattr(self,'startpage_index_template'):   
                     return self.startpage_index_template()  
   
             #generisches template ausgeben  
               
             pt=zptFile(self, 'zpt/ECHO_startpage_index_template_standard.zpt')  
             pt.content_type="text/html"  
             return pt()  
   
     def toc_html(self):  
               
             sp=self.ZopeFind(self,obj_ids=['toc.html'])  
                       
             if sp:  
                     return sp[0][1]()  
   
   
     security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination  
   
     def generate_label(self):  
         """Erzeugt_standard_Label aus Template"""  
         pt=getattr(self,"label_template_"+self.contentType.lower())  
   
         self.label=pt()[0:]  
         return pt()  
   
     security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination  
   
     def generate_title(self,RESPONSE=None):  
         """Erzeugt_standard_Label aus Template"""  
         pt=getattr(self,"label_template_"+self.contentType.lower())  
   
         self.title=pt()[0:]  
           
         return pt()  
   
 Globals.InitializeClass(ECHO_resource)  
   
 def manage_addECHO_resourceForm(self):  
         """Form for adding a ressource"""  
         pt=zptFile(self, 'zpt/AddECHO_resourceForm.zpt')  
         return pt()  
   
   
   
 def manage_addECHO_resource(self,id,title,label,description="",responsible="",link="",metalink="",weight="",copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None):  
     """addresource"""  
   
     newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords)  
   
     self._setObject(id,newObj)  
   
     if RESPONSE is not None:  
         RESPONSE.redirect('manage_main')  
     
   
 class ECHO_externalLink(Folder,ECHO_basis):  class ECHO_externalLink(Folder,ECHO_basis):
Line 1635  class ECHO_externalLink(Folder,ECHO_basi Line 437  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          self.id = id
         """Festlegen der ID"""          """Festlegen der ID"""
Line 1650  class ECHO_externalLink(Folder,ECHO_basi Line 452  class ECHO_externalLink(Folder,ECHO_basi
         self.responsible=responsible          self.responsible=responsible
         coordsnew=[ string.split(x,",") for x in coords]          coordsnew=[ string.split(x,",") for x in coords]
         self.coords=coordsnew          self.coords=coordsnew
           self.linkType = linkType        # Linktypen 'otherPresentation','external'
           
   
     def ECHO_externalLink_config(self):      def ECHO_externalLink_config(self):
         """Main configuration"""          """Main configuration"""
Line 1665  class ECHO_externalLink(Folder,ECHO_basi Line 469  class ECHO_externalLink(Folder,ECHO_basi
         return pt()          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"""          """Aenderung der Properties"""
         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)          setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
   
         self.link=link          self.link=link
           self.linkType = linkType
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
                           
       def getLinkType(self):
           """ return linkType """
           if hasattr(self,"linkType"):
                   return self.linkType
           else :
                   return 'otherPresentation'
                           
     manage_options = Folder.manage_options+(      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':'Main Config','action':'ECHO_externalLink_config'},
         {'label':'Graphic Coords','action':'ECHO_graphicEntry'},          {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
         )          )+Folder.manage_options
   
                   
     def index_html(self):      def index_html(self):
Line 1685  class ECHO_externalLink(Folder,ECHO_basi Line 513  class ECHO_externalLink(Folder,ECHO_basi
                   
         return self.REQUEST.RESPONSE.redirect(self.link)          return self.REQUEST.RESPONSE.redirect(self.link)
   
   
 def manage_addECHO_externalLinkForm(self):  def manage_addECHO_externalLinkForm(self):
         """Form for external Links"""          """Form for external Links"""
         pt=zptFile(self, 'zpt/AddECHO_externalLinkForm.zpt')          pt=zptFile(self, 'zpt/AddECHO_externalLinkForm.zpt')
         return pt()          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"""      """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)      self._setObject(id,newObj)
   
Line 1747  class ECHO_link(ECHO_externalLink): Line 576  class ECHO_link(ECHO_externalLink):
 #                  #                
 #                        return ret  #                        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):          def index_html(self):
                 """standard link"""                  """standard link"""
Line 1779  def manage_addECHO_linkForm(self): Line 672  def manage_addECHO_linkForm(self):
         return pt()          return pt()
   
   
 def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,RESPONSE=None):  def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,linkType="external",RESPONSE=None):
     """Add an external Link"""      """Add an external Link"""
   
     newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)      newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType)
   
     self._setObject(id,newObj)      self._setObject(id,newObj)
           
Line 1805  class ECHO_collection(CatalogAware, Fold Line 698  class ECHO_collection(CatalogAware, Fold
   
     path="/mpiwg/online/permanent/shipbuilding"      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 != 'ECHO_root' and p.meta_type!='ECHO_main' and p.meta_type!='ECHO_nav':
               sec = p.getId()
               p = p.aq_parent
        
           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 != 'ECHO_root' and p.meta_type!='ECHO_main' and p.meta_type!='ECHO_nav':
               subsec = sec
               sec = p.getId()
               p = p.aq_parent
             
           return subsec
   
       
       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?)<br>"%name
              os.close(ds)
                  os.remove(fn)
   
           zf.close()
   
           if ret:
               return """<html><body>%s</body></html>"""%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):      def getMDValueSimpleSearchField(self):
           """returns value for simple search"""            """returns value for simple search"""
           return " ".join([self.title,self.description])            return " ".join([self.title,self.description])
Line 1856  class ECHO_collection(CatalogAware, Fold Line 862  class ECHO_collection(CatalogAware, Fold
   
                             if obj.meta_type=="ECHO_mapText":                              if obj.meta_type=="ECHO_mapText":
                                     if splitted[1]=="en":                                      if splitted[1]=="en":
                                             obj.locale_en.pt_edit(REQUEST.form[key],None)                                              obj.locale_en.pt_edit(REQUEST.form[key],obj.locale_en.content_type)
                                     else:                                      else:
                                             obj.pt_edit(REQUEST.form[key],None)                                              obj.pt_edit(REQUEST.form[key],obj.content_type)
                             else:                              else:
                                     text=obj.ZopeFind(obj,obj_metatypes=['ECHO_mapText'])                                      text=obj.ZopeFind(obj,obj_metatypes=['ECHO_mapText'])
                                     if splitted[1]=="en":                                      if splitted[1]=="en":
                                                                                           
                                             text[0][1].locale_en.pt_edit(REQUEST.form[key],None)                                              text[0][1].locale_en.pt_edit(REQUEST.form[key],text[0][1].locale_en.content_type)
                                     else:                                      else:
                                             text[0][1].pt_edit(REQUEST.form[key],None)                                              text[0][1].pt_edit(REQUEST.form[key],text[0][1].content_type)
             if RESPONSE is not None:              if RESPONSE is not None:
                         RESPONSE.redirect('manage_main')                          RESPONSE.redirect('manage_main')
   
Line 1880  class ECHO_collection(CatalogAware, Fold Line 886  class ECHO_collection(CatalogAware, Fold
             if not urn:              if not urn:
                     urn=self.absolute_url()                      urn=self.absolute_url()
                                           
             li="""<RDF:li RDF:resource="%s" />\n"""              li="""<rdf:li rdf:resource="%s" />\n"""
   
                           
             for content in contents:              for content in contents:
           try:
                     ret+=content[1].getRDF()+"\n"                      ret+=content[1].getRDF()+"\n"
                                       except:
             ret+="""<RDF:Seq RDF:about="%s">\n"""%urn              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+="""<rdf:Seq rdf:about="%s">\n"""%urn
             for content in contents:              for content in contents:
                     nurn=content[1].absolute_url()                      nurn=content[1].absolute_url()
                     ret+=li%nurn                      ret+=li%nurn
             return ret+"</RDF:Seq>"              return ret+"</rdf:Seq>"
                           
   
           
Line 2020  class ECHO_collection(CatalogAware, Fold Line 1033  class ECHO_collection(CatalogAware, Fold
                             pass                              pass
             return ret              return ret
                 
     def importCollection(self,path=None,RESPONSE=None):      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"""          """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
                   
         if path is None:          if path is None:
Line 2033  class ECHO_collection(CatalogAware, Fold Line 1046  class ECHO_collection(CatalogAware, Fold
                           
             if fileName:              if fileName:
                                   
                 tempPath=re.sub("/mpiwg/online","",path)                  if (replacePathExperimental and replacePathExperimental!=''):
                 link="http://echo.mpiwg-berlin.mpg.de/zogilib_book?fn="+tempPath+"/"+fileName+"/pageimg"                      path=re.sub(replacePathExperimental,"/mpiwg/online/experimental",path)
                      
                   if (replacePathPermanent and replacePathPermanent!=''):
                       path=re.sub(replacePathPermanent,"/mpiwg/online/permanent",path)
                                   
                 metalink=self.path+"/"+fileName+"/index.meta"                  link=viewerUrl%(path+"/"+fileName+"/pageimg")
                   
                   metalink=metaDataUrl+"/"+path+"/"+fileName+"/index.meta"
                 try:                  try:
   
                         #link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb"                          #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,'generated','book','','','','','','')                          newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'','book','','','','','','')
                         self._setObject(fileName,newObj)                          self._setObject(fileName,newObj)
                                   
                         genObj=getattr(self,fileName)                          genObj=getattr(self,fileName)
Line 2090  class ECHO_collection(CatalogAware, Fold Line 1108  class ECHO_collection(CatalogAware, Fold
         else:          else:
             return None              return None
   
     def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):      def changeViewer(self,newViewer,REQUEST=None,RESPONSE=None):
             """change the templates"""          """changes all ressources to the newViewer"""
   
             resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)              resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
           if RESPONSE is not None:
                       RESPONSE.write("<html><body>")
   
             for resource in resources:              for resource in resources:
   
                     resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)              done,msg=resource[1].changeViewer(newViewer)
               if done:
             if RESPONSE is not None:              if RESPONSE is not None:
                     RESPONSE.redirect('manage_main')                      RESPONSE.write("<p>OK: %s"%resource[0])
               else:
                   if RESPONSE is not None:
     def setStartpageFolderForm(self):                      RESPONSE.write("<p><a href='%s'>ERROR: %s (%s)</a>"%(resource[1].absolute_url()+'/ECHO_resource_config_main',resource[0],msg))
             """Form for changing the startpage"""  
   
               
             pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPageFolder.zpt')  
             pt.content_type="text/html"  
             return pt()  
           
     def setStartpageFolder(self,startpage=None,RESPONSE=None):  
             """change the templates"""  
   
             resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)  
   
             for resource in resources:          if RESPONSE is not None:
                       RESPONSE.write("<p>Done</p></body></html>")
   
                     resource[1].setStartPage(startpage)  
   
             if RESPONSE is not None:  
                     RESPONSE.redirect('manage_main')  
   
     def copyTitleToInfoXMLFolder(self,RESPONSE=None):      def copyTitleToInfoXMLFolder(self,RESPONSE=None):
             """copy title into the title field of info.xml              """copy title into the title field of info.xml
Line 2139  class ECHO_collection(CatalogAware, Fold Line 1148  class ECHO_collection(CatalogAware, Fold
                     if ret and RESPONSE:                      if ret and RESPONSE:
                             RESPONSE.write("ok: %s\n"%txt)                              RESPONSE.write("ok: %s\n"%txt)
                                           
                     #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt)                         #logger("ECHO (copyTitleToInfoXMLFolder)",logging.INFO,txt)   
             if RESPONSE is not None:              if RESPONSE is not None:
                     RESPONSE.write("done!\n")                      RESPONSE.write("done!\n")
                     RESPONSE.close()                      RESPONSE.close()
Line 2156  class ECHO_collection(CatalogAware, Fold Line 1165  class ECHO_collection(CatalogAware, Fold
             if RESPONSE is not None:              if RESPONSE is not None:
                     RESPONSE.redirect('manage_main')                      RESPONSE.redirect('manage_main')
                                           
     def reloadMetaDataFromStorageWarning(self,RESPONSE=None):  
             """warning"""  
             pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt')  
             pt.content_type="text/html"  
             return pt()  
   
     def reloadMetaDataFromStorage(self,RESPONSE=None):  
             """copy metadata from the storage to ECHO"""  
   
             return reloadMetaDataFromStorage(self,RESPONSE)  
   
           
     def getPartnerCopyright(self,name,sonst="generic"):      def getPartnerCopyright(self,name,sonst="generic"):
Line 2187  class ECHO_collection(CatalogAware, Fold Line 1186  class ECHO_collection(CatalogAware, Fold
                  retStr="<option>\n"                   retStr="<option>\n"
                                     
          try: # erste version copyrightTypes exists           try: # erste version copyrightTypes exists
                  for partner in self.credits:                   for partner in self.getPartners():
                          if selected and (partner==selected):                           partnerTitle = partner.title
                                  retStr+="""<option selected value="%s">%s\n"""%(partner,partner)                           partnerId = partner.__name__
                            if selected and (partnerId==selected):
                                    retStr+="""<option selected value="%s">%s\n"""%(partnerId,partnerTitle)
                          else:                                           else:                
                                  retStr+="""<option value="%s">%s\n"""%(partner,partner)                                   retStr+="""<option value="%s">%s\n"""%(partnerId,partnerTitle)
          except:           except:
                  """nothing"""                   """nothing"""
          return retStr           return retStr
Line 2215  class ECHO_collection(CatalogAware, Fold Line 1216  class ECHO_collection(CatalogAware, Fold
             for resource in dom.getElementsByTagName('resource'):              for resource in dom.getElementsByTagName('resource'):
                     link=getText(resource.getElementsByTagName('link')[0].childNodes)                      link=getText(resource.getElementsByTagName('link')[0].childNodes)
                     label=getText(resource.getElementsByTagName('label')[0].childNodes)                      label=getText(resource.getElementsByTagName('label')[0].childNodes)
                       pageimglink=getText(resource.getElementsByTagName('pageimglink')[0].childNodes)
                     #splitted=link.split("?")[0].split("/")                      #splitted=link.split("?")[0].split("/")
                     #id=splitted[len(splitted)-1].encode('ascii')                      #id=splitted[len(splitted)-1].encode('ascii')
                     id=re.sub(" ","_",label).encode('ascii')                      id=re.sub(" ","_",label).encode('ascii')
                                           
                     ret+="<p>"+label+"</p>"                      ret+="<p>"+label+"</p>"
                     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              return ret
                   
     security.declarePublic('getImageTag')      security.declarePublic('getImageTag')
Line 2254  class ECHO_collection(CatalogAware, Fold Line 1256  class ECHO_collection(CatalogAware, Fold
             manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)              manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
             return "done"              return "done"
         except:          except:
               logging.error("ECHOcollection: (AddResource): %s %s"%sys.exc_info()[0:2])
             return None              return None
   
       def addResourceAndCreateLabelAndTitle(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
           """SSS"""
           ret = self.addResource(id,title,label,description,contentType,responsible,link,metalink,weight,credits,coords,RESPONSE)
           if ret is None:
               return None
           
           try:
               server2=getattr(self,id)
               server2.copyIndex_meta2echo_resource()
               server2.generate_label()
               server2.generate_title()
           except:
                 logging.error("An Error occured adding the resource A\n %s %s"%sys.exc_info()[0:2])
                 return None
           return "done"
     def getSecondaryLink(self):      def getSecondaryLink(self):
         """secondary link"""          """secondary link"""
         try:          try:
Line 2297  class ECHO_collection(CatalogAware, Fold Line 1315  class ECHO_collection(CatalogAware, Fold
         ret="""<?xml version="1.0" encoding="utf-8" ?>"""          ret="""<?xml version="1.0" encoding="utf-8" ?>"""
         return ret+"<collection>"+getCollection(self,pwstr=pwstr)+"</collection>"          return ret+"<collection>"+getCollection(self,pwstr=pwstr)+"</collection>"
           
     def createAllJSAreas(self):      def createAllJSAreas(self,mapColTypes=None):
         """create area calls for JavaScript"""          """create area calls for JavaScript"""
         areas = self.getAllMapAreas()          areas = self.getAllMapAreas(mapColTypes=mapColTypes)
         return self.createJSAreas(areas)          return self.createJSAreas(areas)
   
           
Line 2349  class ECHO_collection(CatalogAware, Fold Line 1367  class ECHO_collection(CatalogAware, Fold
         return ECHO_rerenderLinksMD(self,obj,types)          return ECHO_rerenderLinksMD(self,obj,types)
   
                   
     def __init__(self,id,title,label,description="",contentType="",responsible="",credits="",weight="",sortfield="",coords=[],secondaryLinkTitle="",secondaryLink="",imageTag="",bgcolour=""):      def __init__(self,id,title,label,description="",contentType="",responsible="",credits="",weight="",sortfield="",coords=[],secondaryLinkTitle="",secondaryLink="",imageTag="",bgcolour="",isVisible=True):
   
         self.id = id          self.id = id
         """Festlegen der ID"""          """Festlegen der ID"""
Line 2367  class ECHO_collection(CatalogAware, Fold Line 1385  class ECHO_collection(CatalogAware, Fold
         self.secondaryLinkTitle=secondaryLinkTitle          self.secondaryLinkTitle=secondaryLinkTitle
         self.secondaryLink=secondaryLink          self.secondaryLink=secondaryLink
         self.bgcolour=bgcolour          self.bgcolour=bgcolour
           self.isVisible=isVisible
                   
   
     manage_options = Folder.manage_options+ Cacheable.manage_options+(      manage_options = Folder.manage_options+ Cacheable.manage_options+(
Line 2376  class ECHO_collection(CatalogAware, Fold Line 1395  class ECHO_collection(CatalogAware, Fold
         {'label':'Localize','action':'localizeObjects'},          {'label':'Localize','action':'localizeObjects'},
         {'label':'Change Weights','action':'changeWeights'},          {'label':'Change Weights','action':'changeWeights'},
         {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'},          {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'},
           {'label':'Export/Import Objects','action':'exportImportObjects_html'},
         {'label':'Graphic Coords','action':'ECHO_graphicEntry'},          {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
         {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},          {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
         {'label':'Set Startpage','action':'setStartpageFolderForm'},  
         {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},          {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},
         {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},  
         {'label':'ImportCollection','action':'importCollection'},          {'label':'ImportCollection','action':'importCollection'},
         {'label':'Copy MD for indexing and search','action':'copySearchFields'},  
         {'label':'Change access rights',  'action':'changeAccessRightsCollectionForm'},          {'label':'Change access rights',  'action':'changeAccessRightsCollectionForm'},
         )          )
   
Line 2410  class ECHO_collection(CatalogAware, Fold Line 1427  class ECHO_collection(CatalogAware, Fold
   
                                   
     security.declarePublic('changeECHO_collection')               security.declarePublic('changeECHO_collection')         
     def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",location=None,isAlwaysClickable=None,prefix="",suffix=""):      def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",location=None,isAlwaysClickable=None,prefix="",suffix="",isVisible=True):
         """Aenderung der Properties"""          """Aenderung der Properties"""
   
         self.secondaryLink=secondaryLink          self.secondaryLink=secondaryLink
Line 2421  class ECHO_collection(CatalogAware, Fold Line 1438  class ECHO_collection(CatalogAware, Fold
         self.isAlwaysClickable=isAlwaysClickable          self.isAlwaysClickable=isAlwaysClickable
         self.prefix=prefix[0:]          self.prefix=prefix[0:]
         self.suffix=suffix[0:]          self.suffix=suffix[0:]
           self.setIsVisible(isVisible)
                   
         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)          setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
                                   
Line 2440  class ECHO_collection(CatalogAware, Fold Line 1458  class ECHO_collection(CatalogAware, Fold
           
     def showOverview(self):      def showOverview(self):
         """overview"""          """overview"""
         if 'ECHO_overview.html' in self.__dict__.keys():          # use ECHO_overview.html template in this instance
             return getattr(self,'ECHO_overview.html')()          if 'ECHO_overview.html' in self:
               return self['ECHO_overview.html']()
           
           # use ECHO_overview_main template in path
           if hasattr(self, 'ECHO_overview_main'):
               return getattr(self, 'ECHO_overview_main')()
           
           # use template from Product
         pt=zptFile(self, 'zpt/ECHO_content_overview.zpt')          pt=zptFile(self, 'zpt/ECHO_content_overview.zpt')
         return pt()          return pt()
   
Line 2450  class ECHO_collection(CatalogAware, Fold Line 1475  class ECHO_collection(CatalogAware, Fold
     def index_html(self):      def index_html(self):
         """standard page"""          """standard page"""
         if self.ZCacheable_isCachingEnabled():          if self.ZCacheable_isCachingEnabled():
               
             result = self.ZCacheable_get()              result = self.ZCacheable_get()
             if result is not None:              if result is not None:
                 # Got a cached value.                  # Got a cached value.
                 return result                  return result
                   
         if 'index.html' in self.__dict__.keys():          # old Zope 2.9 method
             ret=getattr(self,'index.html')()          #if 'index.html' in self.__dict__.keys():
           #    ret=getattr(self,'index.html')()
   
           # use Zope 2.12 IContainer for child access
           if 'index.html' in self:
               # use index.html template if it exists
               ret = self['index.html']()
                   
         elif 'overview' in self.__dict__.keys():          elif 'overview' in self:
               # use red-rectangle template when there's an 'overview'
             ret=self.showOverview()              ret=self.showOverview()
   
           # use getattr for acquisition
         elif hasattr(self,'collection_index_template'):          elif hasattr(self,'collection_index_template'):
               # use 'collection_index_template' in acquisition path
             ret=self.collection_index_template()                  ret=self.collection_index_template()    
         elif hasattr(self,'main_index_template'):  
   
           elif hasattr(self,'main_index_template'):
               # use 'main_index_template' in acquisition path
             ret=self.main_index_template.__of__(self)(self.main_template)              ret=self.main_index_template.__of__(self)(self.main_template)
               
         else:          else:
               # use template from Product
             pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt')              pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt')
             pt.content_type="text/html"              pt.content_type="text/html"
             ret=pt.render()              ret=pt.render()
Line 2521  class ECHO_collection(CatalogAware, Fold Line 1558  class ECHO_collection(CatalogAware, Fold
         """javascript"""          """javascript"""
         return sendFile(self, 'js/hl_add.js', 'text/plain')          return sendFile(self, 'js/hl_add.js', 'text/plain')
   
     def getAllMapAreas(self,mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink']):      def getAllMapAreas(self,mapColTypes=None):
         """Give list of coordinates"""          """Give list of coordinates"""
           if mapColTypes is None:
               mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink']
                   
         areas=[]          areas=[]
         for entry in self.getSubCols(subColTypes=mapColTypes):          for entry in self.getSubCols(subColTypes=mapColTypes):
Line 2558  def manage_addECHO_collectionForm(self): Line 1597  def manage_addECHO_collectionForm(self):
         return pt()          return pt()
   
   
 def manage_addECHO_collection(self,id,title,label,description="",contentType="",responsible="",weight=0,sortfield="weight",coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):  def manage_addECHO_collection(self,id,title,label,description="",contentType="",responsible="",weight=0,sortfield="weight",coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",isVisible=True):
     """add a echo collection"""      """add a echo collection"""
           
   
     newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")      newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="",isVisible=isVisible)
   
     self._setObject(id,newObj)      self._setObject(id,newObj)
   
Line 2592  class ECHO_group(ECHO_collection): Line 1631  class ECHO_group(ECHO_collection):
                           
             if not urn:              if not urn:
                     urn=self.absolute_url()                      urn=self.absolute_url()
             li="""<RDF:li RDF:resource="%s" />\n"""              li="""<rdf:li rdf:resource="%s" />\n"""
                           
                           
             for content in contents:              for content in contents:
                     ret+=content[1].getRDF()+"\n"                      ret+=self.unicodify(content[1].getRDF())+"\n"
                                           
             ret+="""<RDF:Seq RDF:about="%s">\n"""%urn              ret+="""<rdf:Seq rdf:about="%s">\n"""%urn
             for content in contents:              for content in contents:
                     nurn=content[1].absolute_url()                      nurn=content[1].absolute_url()
                     ret+=li%nurn                      ret+=li%nurn
             return ret+"</RDF:Seq>"              return ret+"</rdf:Seq>"
                           
         def index_html(self):          def index_html(self):
                 """standard page"""                  """standard page"""
Line 2786  class ECHO_userFolder(UserFolder): Line 1825  class ECHO_userFolder(UserFolder):
                         return 1                          return 1
             return 0              return 0
   
 Globals.default__class_init__(ECHO_userFolder)  # ROC: problem with 2.12
   #Globals.default__class_init__(ECHO_userFolder)
   
   
   
Line 2853  class ECHO_root(Folder,Persistent,Implic Line 1893  class ECHO_root(Folder,Persistent,Implic
   
     manage_options=Folder.manage_options+(      manage_options=Folder.manage_options+(
                 {'label':'Main Config','action':'ECHO_copyright_configForm'},                  {'label':'Main Config','action':'ECHO_copyright_configForm'},
                 {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},  
                 {'label':'Change Weights','action':'changeWeights'},                  {'label':'Change Weights','action':'changeWeights'},
                 {'label':'Generate from RDF','action':'generateFromRDFForm'},                  {'label':'Generate from RDF','action':'generateFromRDFForm'},
                 {'label':'update Resource Catalog','action':'updateResourceCatalog'},                  {'label':'update Resource Catalog','action':'updateResourceCatalog'},
                 {'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)  
   
             for resource in resources:  
   
                     resource[1].copySearchFields()      def getECHORootURL(self):
           return self.absolute_url()
       
       def getECHORoot(self):
           return self
       
   
             if RESPONSE is not None:  
                     RESPONSE.redirect('manage_main')  
         
     def mod_re_sub(self,pattern,replace,string):      def mod_re_sub(self,pattern,replace,string):
         """re.sub aus mod re zur Verfuegung stellen"""          """re.sub aus mod re zur Verfuegung stellen"""
Line 3031  class ECHO_root(Folder,Persistent,Implic Line 2068  class ECHO_root(Folder,Persistent,Implic
                     global key                      global key
                     global value                      global value
                     seq=""                      seq=""
                     if name=="RDF:Seq":                      if name=="rdf:Seq":
                             key=attrs.get('RDF:about')                              key=attrs.get('rdf:about')
                             try: # teste ob liste                              try: # teste ob liste
                                     x=seqs[key][0]                                      x=seqs[key][0]
                             except:                              except:
Line 3040  class ECHO_root(Folder,Persistent,Implic Line 2077  class ECHO_root(Folder,Persistent,Implic
                                     seqs[key]=[]                                      seqs[key]=[]
   
                                           
                     elif name=="RDF:Description":                      elif name=="rdf:Description":
                             key=attrs.get('RDF:about')                              key=attrs.get('rdf:about')
                                                           
   
                     elif name=="RDF:li":                      elif name=="rdf:li":
                             name=attrs.get('RDF:resource')                              name=attrs.get('rdf:resource')
                             seqs[key].append(name)                              seqs[key].append(name)
   
                     elif name=="ECHONAVIGATION:type":                      elif name=="echonavigation:type":
                             value="type"                              value="type"
   
                     elif name=="ECHONAVIGATION:name":                      elif name=="echonavigation:name":
                             value="name"                              value="name"
                     elif name=="ECHONAVIGATION:linkClickable":                      elif name=="echonavigation:linkClickable":
                             value="linkClickable"                              value="linkClickable"
                                                           
             def end_element(name):              def end_element(name):
Line 3116  class ECHO_root(Folder,Persistent,Implic Line 2153  class ECHO_root(Folder,Persistent,Implic
                 return pt()                  return pt()
       
   
     def reloadMetaDataFromStorageWarning(self,RESPONSE=None):  
             """warning"""  
             pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt')  
             pt.content_type="text/html"  
             return pt()  
   
     def reloadMetaDataFromStorage(self,RESPONSE=None):  
             """reload MD from Storage"""  
   
             return reloadMetaDataFromStorage(self,RESPONSE)  
       
     def getRDF(self,urn=None):      def getRDF(self,urn=None):
             """rdf of the collection"""              """rdf of the collection"""
   
Line 3134  class ECHO_root(Folder,Persistent,Implic Line 2160  class ECHO_root(Folder,Persistent,Implic
   
             ret=getRDFDescription(self,self.absolute_url(),urn=urn)              ret=getRDFDescription(self,self.absolute_url(),urn=urn)
                           
             li="""<RDF:li RDF:resource="%s" />\n"""              li="""<rdf:li rdf:resource="%s" />\n"""
   
                           
             for content in contents:              for content in contents:
                     ret+=content[1].getRDF()+"\n"                      ret+=content[1].getRDF()+"\n"
                                           
             ret+="""<RDF:Seq RDF:about="%s">\n"""%urn              ret+="""<rdf:Seq rdf:about="%s">\n"""%urn
             for content in contents:              for content in contents:
                     nurn=content[1].absolute_url()                      nurn=content[1].absolute_url()
                     ret+=li%nurn                      ret+=li%nurn
             return ret+"</RDF:Seq>"              return ret+"</rdf:Seq>"
                           
   
     def showContent(self,path):      def showContent(self,path):
Line 3173  class ECHO_root(Folder,Persistent,Implic Line 2199  class ECHO_root(Folder,Persistent,Implic
             """ret attribute if existing"""              """ret attribute if existing"""
             try:              try:
                                           
                     return getattr(found,field).decode('ascii','ignore')  
                       return getattr(found,field)#.decode('ascii','ignore')
   
   
   
             except:              except:
                       logging.error("can't: decode: %s"%repr(field))
                       logging.error("      %s %s"%(sys.exc_info()[0],sys.exc_info()[1]))
                     return ""                      return ""
   
     security.declarePublic('getImageTag')      security.declarePublic('getImageTag')
Line 3411  class ECHO_root(Folder,Persistent,Implic Line 2443  class ECHO_root(Folder,Persistent,Implic
   
     def formatAscii(self,str,url=None):      def formatAscii(self,str,url=None):
         """ersetze ascii umbrueche durch <br>"""          """ersetze ascii umbrueche durch <br>"""
         #url=None  
       if not str: 
               return ""
   
         if url:          if url:
                           
             retStr=""              retStr=""
Line 3423  class ECHO_root(Folder,Persistent,Implic Line 2458  class ECHO_root(Folder,Persistent,Implic
                 retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)                  retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
             str=retStr              str=retStr
         if str:          if str:
             return re.sub(r"[\n]","<br/>",str)              str = re.sub(r"[\n]","<br/>",str)
               return unicodify(str)
         else:          else:
             return ""              return u""
                   
     link2html=vlp_xmlhelpers.link2html      link2html=vlp_xmlhelpers.link2html
       related2html=vlp_xmlhelpers.related2html
   
     xml2html=vlp_xmlhelpers.xml2html      xml2html=vlp_xmlhelpers.xml2html
     
Line 3460  class ECHO_root(Folder,Persistent,Implic Line 2497  class ECHO_root(Folder,Persistent,Implic
     def getPartners(self):      def getPartners(self):
         """Get list of Partners. Presently only from a subfolder partners"""          """Get list of Partners. Presently only from a subfolder partners"""
         if hasattr(self,'partners'):                      if hasattr(self,'partners'):            
                 return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]                  ret = [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
                   def sort_title(one, another) : return cmp(one.title, another.title)
                   ret.sort(sort_title)
                   return ret
         else:          else:
                 return []                  return []
       
Line 3515  class ECHO_root(Folder,Persistent,Implic Line 2555  class ECHO_root(Folder,Persistent,Implic
                           
             ret="""<html><body><h2>Resources in ECHO</h3>"""              ret="""<html><body><h2>Resources in ECHO</h3>"""
                           
             resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)              resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource','VLP_resource'],search_sub=1)
             ret+="""<h3>Found %i resources</h3>"""%len(resources)              ret+="""<h3>Found %i resources</h3>"""%len(resources)
             resources.sort(sortHTML)              resources.sort(sortHTML)
             for resource in resources:              for resource in resources:
Line 3541  class ECHO_root(Folder,Persistent,Implic Line 2581  class ECHO_root(Folder,Persistent,Implic
             """gebe all ressourcen aus"""              """gebe all ressourcen aus"""
             ret="""<?xml version="1.0" ?>              ret="""<?xml version="1.0" ?>
                      <index>"""                       <index>"""
             for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):              for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource','VLP_resource'],search_sub=1):
   
                     echo_url=resource[1].absolute_url()                      echo_url=resource[1].absolute_url()
                     if hasattr(resource[1],'link'):                      if hasattr(resource[1],'link'):
Line 3558  class ECHO_root(Folder,Persistent,Implic Line 2598  class ECHO_root(Folder,Persistent,Implic
             self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")              self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
             self.REQUEST.RESPONSE.write(ret)              self.REQUEST.RESPONSE.write(ret)
   
       def getCollectionsXML(self,viewerType=None,filter=None):
               """gebe collections aus"""
               ret="""<?xml version="1.0" ?>
                        <index>"""
               for resource in self.ZopeFind(self,obj_metatypes=['ECHO_collection','ECHO_group'],search_sub=1):
   
                       echo_url=resource[1].absolute_url()
                    
                       ret+="""\n<collection echoLink="%s"/>"""%urllib.quote(echo_url,safe='/:?')
               ret +="""\n</index>"""
               
               self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
               self.REQUEST.RESPONSE.write(ret)
   
     def getFullTextsXML(self,viewerType=None,filter=None):      def getFullTextsXML(self,viewerType=None,filter=None):
             """gebe all ressourcen aus"""              """gebe all ressourcen aus"""
             ret="""<?xml version="1.0" ?>              ret="""<?xml version="1.0" ?>
Line 3650  class ECHO_root(Folder,Persistent,Implic Line 2704  class ECHO_root(Folder,Persistent,Implic
             return """<html><body><h3>No resourceCatalog available</h3></body></html>"""              return """<html><body><h3>No resourceCatalog available</h3></body></html>"""
                   
         else:          else:
               class element:
                   def __init__(self,group,name):
                       self.group=group
                       self.name=name
               catalog.manage_delObjects('author splitter')
               #elements=[element('Stop Words',""" Don't remove stop words' """),element('Word Splitter','ECHO author splitter')]
               elements=[element('Word Splitter','ECHO author splitter')]
               manage_addLexicon(catalog,id="author splitter",elements=elements)
               
             return catalog.manage_catalogReindex(REQUEST,RESPONSE,'manage_main')              return catalog.manage_catalogReindex(REQUEST,RESPONSE,'manage_main')
                           
                   
Line 3772  class ECHO_linkList(ZopePageTemplate,ECH Line 2835  class ECHO_linkList(ZopePageTemplate,ECH
     def getcontentType(self):      def getcontentType(self):
         """get contentType"""          """get contentType"""
         if hasattr(self,'contentType'):          if hasattr(self,'contentType'):
             return self.contentType              return normalizeCt(self.contentType)
         else:          else:
             return 0              return 0
   
Line 3783  class ECHO_linkList(ZopePageTemplate,ECH Line 2846  class ECHO_linkList(ZopePageTemplate,ECH
          self.ZBindings_edit(self._default_bindings)           self.ZBindings_edit(self._default_bindings)
          if text is None:           if text is None:
              text = ''               text = ''
            if content_type is None:
                content_type = self.content_type
          self.pt_edit(text, contentType)           self.pt_edit(text, contentType)
   
   
Line 3883  def manage_addECHO_support(self, id,inst Line 2948  def manage_addECHO_support(self, id,inst
         if RESPONSE is not None:          if RESPONSE is not None:
                 RESPONSE.redirect('manage_main')                  RESPONSE.redirect('manage_main')
                                   
   # ECHO - owner of original
   class ECHO_ownerOriginal(Folder,ECHO_basis):
           """besitzer des originals"""
           meta_type="ECHO_ownerOriginal"
           security=ClassSecurityInfo()
           
           
           def __init__(self,id,institutions=None):
                   """init"""
                   self.id=id
                   self.title=''
                   self.institutions=toList(institutions)
   
           security.declarePublic('getOwner')
           def getOwner(self):
                   """return institutions"""
                   if self.institutions:
                           return self.institutions
                   else:
                           return []
                   
           manage_options = Folder.manage_options+(
                   {'label':'Main Config','action':'ECHO_ownerOriginal_configForm'},
                   )
   
           def ECHO_ownerOriginal_configForm(self):
                   """change form"""
                   pt=zptFile(self, 'zpt/ChangeECHO_ownerOriginal')
                   pt.content_type="text/html"
                   return pt()
   
           def ECHO_ownerOriginal_config(self,institutions=None,RESPONSE=None):
                   """change"""
                   self.institutions=toList(institutions)
   
                   if RESPONSE is not None:
                           RESPONSE.redirect('manage_main')
   
                   
   def manage_addECHO_ownerOriginalForm(self):
       """Form for adding"""
       pt=zptFile(self, 'zpt/AddECHO_ownerOriginal.zpt')
       return pt()
   
   def manage_addECHO_ownerOriginal(self, id,institutions=None,RESPONSE=None):
           """add the copyright"""
   
           meta_type="ECHO_ownerOriginal"
           
           
           self._setObject(id, ECHO_ownerOriginal(id,institutions))
   
           if RESPONSE is not None:
                   RESPONSE.redirect('manage_main')
                   
   # --------------------------------------------------------------------------------             
   
   # ECHO - digitized copy by
   class ECHO_digiCopyBy(Folder,ECHO_basis):
           """besitzer des originals"""
           meta_type="ECHO_digiCopyBy"
           security=ClassSecurityInfo()
           
           
           def __init__(self,id,institutions=None):
                   """init"""
                   self.id=id
                   self.title=''
                   self.institutions=toList(institutions)
   
           security.declarePublic('getDigiCopyBy')
           def getDigiCopyBy(self):
                   """return institutions"""
                   if self.institutions:
                           return self.institutions
                   else:
                           return []
                   
           manage_options = Folder.manage_options+(
                   {'label':'Main Config','action':'ECHO_digiCopyBy_configForm'},
                   )
   
           def ECHO_digiCopyBy_configForm(self):
                   """change form"""
                   pt=zptFile(self, 'zpt/ChangeECHO_digiCopyBy')
                   pt.content_type="text/html"
                   return pt()
   
           def ECHO_digiCopyBy_config(self,institutions=None,RESPONSE=None):
                   """change"""
                   self.institutions=toList(institutions)
   
                   if RESPONSE is not None:
                           RESPONSE.redirect('manage_main')
   
                   
   def manage_addECHO_digiCopyByForm(self):
       """Form for adding"""
       pt=zptFile(self, 'zpt/AddECHO_digiCopyBy.zpt')
       return pt()
   
   def manage_addECHO_digiCopyBy(self, id,institutions=None,RESPONSE=None):
           """add the copyright"""
   
           meta_type="ECHO_digiCopyBy"
           
           
           self._setObject(id, ECHO_digiCopyBy(id,institutions))
   
           if RESPONSE is not None:
                   RESPONSE.redirect('manage_main')
                   
   # --------------------------------------------------------------------------------  
   
 class ECHO_institution(Image,Persistent,ECHO_basis):  class ECHO_institution(Image,Persistent,ECHO_basis):
     """ECHO Institution"""      """ECHO Institution"""
Line 4003  def repairCoords(self): Line 3181  def repairCoords(self):
                     col.addMapArea(area)                      col.addMapArea(area)
         msg += "\nDone!"          msg += "\nDone!"
         return msg          return msg
   
   from ECHO_Nav import ECHO_navigation
   
   class ECHO_main(ECHO_root,ECHO_navigation):
       """echo main object combines ECHO_root and ECHO_navigation"""
       
       meta_type="ECHO_main"
       
       def __init__(self,id,title):
           """init"""
           self.id=id
           self.title=title
           self.pathToHierarchy="/"+self.id # hierarchie always starts with the object.
           self.displayedMetaTypes=displayTypes
           
           
       manage_options = Folder.manage_options+(
           {'label':'Main Config','action':'ECHO_navigationConfigForm'},
           {'label':'Cache','action':'ECHO_cacheManageForm'},
           {'label':'Main Config','action':'ECHO_copyright_configForm'},
           {'label':'Change Weights','action':'changeWeights'},
           {'label':'Generate from RDF','action':'generateFromRDFForm'},
           {'label':'update Resource Catalog','action':'updateResourceCatalog'},
           {'label':'Copy MD for indexing and search','action':'copySearchFields'},
           )
   
       
   def manage_addECHO_mainForm(self):
       """Form for adding"""
       pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_main.zpt')).__of__(self)
       return pt()
   
   def manage_addECHO_main(self,id,title,RESPONSE=None):
       """Add an ECHO_main"""
       self._setObject(id,ECHO_main(id,title))
       
       obj=self._getOb(id)
       text=file(os.path.join(package_home(globals()),'zpt','main_template')).read()
       
       manage_addPageTemplate(obj,'main_template',text=text)               
       
     
       if RESPONSE is not None:
           RESPONSE.redirect('manage_main')

Removed from v.1.266  
changed lines
  Added in v.1.310.2.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>