Diff for /ECHO_content/ECHO_collection.py between versions 1.147 and 1.179

version 1.147, 2004/07/18 18:13:41 version 1.179, 2004/10/18 17:00:09
Line 14  import re Line 14  import re
 import os  import os
 import OFS.Image  import OFS.Image
 from types import *  from types import *
   from OFS.Cache import Cacheable
 from OFS.Image import Image  from OFS.Image import Image
 from Globals import DTMLFile  from Globals import DTMLFile
 from OFS.Folder import Folder  from OFS.Folder import Folder
Line 30  from Globals import Persistent, package_ Line 31  from Globals import Persistent, package_
 from Acquisition import Implicit  from Acquisition import Implicit
 from ECHO_helpers import displayTypes  from ECHO_helpers import displayTypes
 import urllib  import urllib
   import smtplib
   import time
   from Ft.Xml.Domlette import NonvalidatingReader
   from Ft.Xml.Domlette import PrettyPrint
   from Ft.Xml import EMPTY_NAMESPACE
   
   import Ft.Xml.XPath
   import cStringIO
   import zLOG
   
 try:  try:
     from psycopg import libpq      from psycopg import libpq
Line 46  import xml.dom.minidom Line 56  import xml.dom.minidom
 from ECHO_graphicalOverview import javaHandler,javaScriptMain  from ECHO_graphicalOverview import javaHandler,javaScriptMain
 import ECHO_helpers  import ECHO_helpers
   
 def getRDFDescription(self,linkURL,urn=None,nameDef=None):  def donatus(txt2):
       import xmlrpclib
   
       server = xmlrpclib.ServerProxy("http://archimedes.fas.harvard.edu/cgi-bin/donatus-rpc")
   
       txt=txt2.encode('utf-8')
       bin=xmlrpclib.Binary(txt)
   
       
   
       ret=server.donatus.analyze(bin)
   
           
       return ret['morphData'].data
   
   
   def donatusVariant2Lemma(morphData):
       """creates hash variant -> morphdata"""
       ret={}
       dom=xml.dom.minidom.parseString(morphData)
       lemmas=dom.getElementsByTagName('lemma')
       for lemma in lemmas:
           variants=lemma.getElementsByTagName('variant')
           for variant in variants:
               atr=variant.getAttribute('form')
               if ret.has_key(atr):
                   ret[atr].append=lemma.getAttribute('form')
               else:
                   ret[atr]=[lemma.getAttribute('form')]
   
       return ret
   
   #regexp for extracting elements from xml
   patternTXT=r"<\s*txt.*?>(.*?)</txt>"
   regexpTXT = re.compile(patternTXT, re.IGNORECASE + re.DOTALL)
   patternPage=r"<\s*page.*?>(.*?)</page>"
   regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL)
   
           
   def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
           """Rerender all Links"""
       ret=""
       
           if not obj:
               obj = self
               
           entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource'],search_sub=1)
   
           for entry in entries:
           if entry[1].meta_type == 'ECHO_resource':
               try:
                   entry[1].ECHO_getResourceMD(template="no")
                                   if "title" in types:
                                       entry[1].generate_title()
                                   if "label" in types:
                                       entry[1].generate_label()
                   ret+="OK:"+entry[0]+"-- "+entry[1].getTitle().decode('utf-8')+"-- "+entry[1].getTitle().decode('utf-8')+"<br>"
               except:
                   ret+="Error:"+entry[0]+"<br>"
   
           
                   
                   
           return "<html><body>"+ret+"Rerenderd all links to resources in: "+self.title+"</html></body>"
   
   def reloadMetaDataFromStorage(self,RESPONSE=None):
           """copy metadata from the storage to ECHO"""
           ret=""
           resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
   
           for resource in resources:
               x=str(resource[1].copyIndex_meta2echo_resource())+"<br>"
               ret+=x
               #print x
               
   
           if RESPONSE is not None:
               #RESPONSE.redirect('./manage_main')
               return "<html><body>"+ret+"</html></body>"
   
           return ret
       
   def getRDFDescription(self,linkURL,urn=None,nameDef=None,typeName=None):
         """rdf"""          """rdf"""
           
         ret=""          ret=""
         about="""<RDF:Description about="%s">"""          about="""<RDF:Description RDF:about="%s">"""
         name="""<ECHONAVIGATION:name>%s</ECHONAVIGATION:name>"""          name="""<ECHONAVIGATION:name>%s</ECHONAVIGATION:name>"""
         link="""<ECHONAVIGATION:link xlink:href="%s">%s</ECHONAVIGATION:link>"""          link="""<ECHONAVIGATION:link xlink:href="%s">%s</ECHONAVIGATION:link>"""
           clickable="""<ECHONAVIGATION:linkClickable>%s</ECHONAVIGATION:linkClickable>"""
         #link="""<ECHONAVIGATION:link RDF:about="%s"/>"""          #link="""<ECHONAVIGATION:link RDF:about="%s"/>"""
         type="""<ECHONAVIGATION:type>%s</ECHONAVIGATION:type>"""          type="""<ECHONAVIGATION:type>%s</ECHONAVIGATION:type>"""
             #xlink="""<ECHONAVIGATION:xlink xlink:href="%s"/>"""                  #xlink="""<ECHONAVIGATION:xlink xlink:href="%s"/>"""    
         if not urn:          if not urn:
             urn="urn:"+re.sub('/',':',self.absolute_url())              #urn="urn:"+re.sub('/',':',self.absolute_url())
               urn=self.absolute_url()
         about2=about%urn          about2=about%urn
         if not nameDef:          if not nameDef:
             if hasattr(self,'label') and not (self.label==""):              if hasattr(self,'label') and not (self.label==""):
Line 74  def getRDFDescription(self,linkURL,urn=N Line 168  def getRDFDescription(self,linkURL,urn=N
         linkURL=re.sub('http:','',linkURL)          linkURL=re.sub('http:','',linkURL)
         linkURL2=re.sub('&','&amp;',linkURL)          linkURL2=re.sub('&','&amp;',linkURL)
         link2=link%(("http:"+linkURL2),("http:"+urllib.quote(linkURL)))          link2=link%(("http:"+linkURL2),("http:"+urllib.quote(linkURL)))
           clickable2=clickable%"true"
   
           if not typeName:
         type2=type%self.meta_type          type2=type%self.meta_type
           else:
               type2=type%typeName
                   
         ret=about2+"\n"+name2+"\n"+link2+"\n"+type2+"\n"+"\n</RDF:Description>"          #ret=about2+"\n"+name2+"\n"+link2+"\n"+type2+"\n"+clickable2+"\n</RDF:Description>"
           ret=about2+"\n"+name2+"\n"+type2+"\n"+clickable2+"\n</RDF:Description>"
         return ret          return ret
           
 def getCopyrightsFromForm(self,argv):   def getCopyrightsFromForm(self,argv): 
Line 179  def getText(nodelist): Line 278  def getText(nodelist):
            rc = rc + node.data             rc = rc + node.data
     return rc      return rc
   
   def getTextFromNode(nodename):
       nodelist=nodename.childNodes
       rc = ""
       for node in nodelist:
           if node.nodeType == node.TEXT_NODE:
              rc = rc + node.data
       return rc
   
 def sendFile(self, filename, type):  def sendFile(self, filename, type):
     """sends an object or a local file (in the product) as response"""      """sends an object or a local file (in the product) as response"""
Line 220  class BrowserCheck: Line 326  class BrowserCheck:
   
   
                   
 def writeMetadata(url,metadict,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):  def writeMetadata(url,metadict,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,xmlfrag=None,digiliburlprefix=None):
     """Einlesen der Metadaten und und erstellen des geaenderten XML file"""      """Einlesen der Metadaten und und erstellen des geaenderten XML file"""
   
     def updateTextToolNode(tag,value):      def updateTextToolNode(tag,value):
         #print dom,tag,value          #print dom,tag,value
         metanode=dom.getElementsByTagName('texttool')[0]          metanode=dom.getElementsByTagName('texttool')[0]
Line 238  def writeMetadata(url,metadict,project=N Line 345  def writeMetadata(url,metadict,project=N
         node.appendChild(nodetext)          node.appendChild(nodetext)
         metanode.appendChild(node)          metanode.appendChild(node)
   
                   if xmlfrag:
           geturl="""<?xml version="1.0" ?>
                              <resource type="MPIWG">
                  <meta>
                   <bib type="Book">
                           </bib>
                   </meta>
                   </resource>"""
           dom=xml.dom.minidom.parseString(geturl)
       else:
     try:      try:
         geturl=""          geturl=""
         for line in urllib.urlopen(url).readlines():              for line in ECHO_helpers.urlopen(url).readlines():
             geturl=geturl+line              geturl=geturl+line
                   
                   
Line 253  def writeMetadata(url,metadict,project=N Line 369  def writeMetadata(url,metadict,project=N
     except:      except:
         return (None,"Cannot parse: "+url+"<br>"+geturl)          return (None,"Cannot parse: "+url+"<br>"+geturl)
   
       
   
     metanodes=dom.getElementsByTagName('bib')      metanodes=dom.getElementsByTagName('bib')
   
     if not metanodes:      if not metanodes:
Line 280  def writeMetadata(url,metadict,project=N Line 398  def writeMetadata(url,metadict,project=N
                 metanode.removeChild(nodeOld[0]).unlink()                  metanode.removeChild(nodeOld[0]).unlink()
   
         metanodeneu=dom.createElement(metaData)          metanodeneu=dom.createElement(metaData)
         try:                  metanodetext=dom.createTextNode(metadict[metaData])
             metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))          #try:
         except:              #metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))
             metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))          #except:
               #metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))
         metanodeneu.appendChild(metanodetext)          metanodeneu.appendChild(metanodetext)
         metanode.appendChild(metanodeneu)          metanode.appendChild(metanodeneu)
   
Line 307  def writeMetadata(url,metadict,project=N Line 426  def writeMetadata(url,metadict,project=N
         updateTextToolNode('xslt',xslt)          updateTextToolNode('xslt',xslt)
   
           
       if digiliburlprefix:
           updateTextToolNode('digiliburlprefix',digiliburlprefix)
           
           try:    
     return dom.toxml().encode('utf-8')      return dom.toxml().encode('utf-8')
       except:
        return dom.toxml('utf-8')
   
           
           
Line 319  def readMetadata(url): Line 443  def readMetadata(url):
     metadict={}      metadict={}
     try:      try:
         geturl=""          geturl=""
         for line in urllib.urlopen(url).readlines():          for line in ECHO_helpers.urlopen(url).readlines():
             geturl=geturl+line              geturl=geturl+line
                   
                   
Line 408  class ECHO_copyright(Folder): Line 532  class ECHO_copyright(Folder):
         {'label':'Main Config','action':'ECHO_copyright_configForm'},          {'label':'Main Config','action':'ECHO_copyright_configForm'},
         )          )
   
   
     def ECHO_copyright_configForm(self):      def ECHO_copyright_configForm(self):
         """change form"""          """change form"""
         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self)          pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self)
Line 466  class ECHO_layoutTemplate(ZopePageTempla Line 591  class ECHO_layoutTemplate(ZopePageTempla
   
 def manage_addECHO_layoutTemplateForm(self):  def manage_addECHO_layoutTemplateForm(self):
     """Form for adding"""      """Form for adding"""
     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddECHO_layoutTemplate.zpt')).__of__(self)
     return pt()      return pt()
   
 from urllib import quote  from urllib import quote
Line 511  def manage_addECHO_layoutTemplate(self, Line 636  def manage_addECHO_layoutTemplate(self,
     REQUEST.RESPONSE.redirect(u+'/manage_main')      REQUEST.RESPONSE.redirect(u+'/manage_main')
     return ''      return ''
   
   class ECHO_fullText(ZopePageTemplate):
       """echo fulltext in xml"""
   
       meta_type="ECHO_fullText"
   
       def donatusVariant2Lemma(self,nr='1'):
           """analyze by donatus"""
           return donatusVariant2Lemma(donatus(self.lemmatize(nr)))
   
       def tagLex(self,nr="1"):
           """generate Links"""
           global retLex
           global toggle
   
           toggle=0
           retLex=""
   
           lemmatized=self.lemmatize(nr)[0:]
           #print "ho",repr(lemmatized)
           variants=donatusVariant2Lemma(donatus(lemmatized))
           
           def createTag(name,attrs):
                           global toggle
               
               if name=="w":
                   toggle=1
                   return ""
               else:
                   tag="<"
                   tag+=name
                   for attr in attrs.keys():
                       tag+=""" %s="%s" """%(attr,attrs[attr])
                   tag+=">"
               return tag
                   
           def createData(data):
               global toggle
               astring="""<a href="http://141.14.236.86/cgi-bin/toc/dict?step=remotetable;word=%s;lang=de" target="_blank">%s</a> """
               if toggle: # tag war ein w
                   toggle=0
                   if variants.has_key(data):
                       return astring%(variants[data][0],data)
                   else:
                       return astring%(data,data)
                   
                       
   
           # 3 handler functions
           def start_element(name, attrs):
               global retLex
               
               retLex+=createTag(name,attrs)
           def end_element(name):
               global retLex
               if not name=="w":
                   retLex+="</%s>"%(name.encode('utf-8'))
               
               
           def char_data(data):
               global retLex
               if data:
                   try:
                       retLex+=createData(data)
                   except:
                       """no"""
                       
           p = xml.parsers.expat.ParserCreate()
   
           p.StartElementHandler = start_element
           p.EndElementHandler = end_element
           p.CharacterDataHandler = char_data
           
           p.Parse(lemmatized.encode('utf-8'),1)
           #print repr(lemmatized.encode('utf-8'))
       
           return retLex
       
           
       def lemmatize(self,nr='1',lang="de"):
           """lemmatize"""
           global ret
           ret=""
           
           def createTag(name,attrs):
               tag="<"
               tag+=name
               for attr in attrs.keys():
                   tag+=""" %s="%s" """%(attr,attrs[attr])
               tag+=">"
               return tag
                   
           def insertW(str):
               splitted=str.split()
               wordlist=["<w>%s</w>"%split for split in splitted]
               return string.join(wordlist,'\n')
   
           # 3 handler functions
           def start_element(name, attrs):
               global ret
               ret+=createTag(name,attrs)
           def end_element(name):
               global ret
               ret+="</%s>"%(name.encode('utf-8'))
               
           def char_data(data):
               global ret
               ret+=insertW(data)
   
           p = xml.parsers.expat.ParserCreate()
   
           p.StartElementHandler = start_element
           p.EndElementHandler = end_element
           p.CharacterDataHandler = char_data
   
           p.Parse(self.getPage(nr), 1)
           txt="""<wtag locator="xxx">
           <section lang="%s"><s>%s</s></section>
           </wtag>"""
           ret=txt%(lang,ret)
           
           return ret
       
       def getPage(self,nr='1'):
           """get page n"""
           dom=xml.dom.minidom.parseString(self())
           pages=dom.getElementsByTagName('page')
           
           return pages[int(nr)-1].toxml('utf-8')
       
   # Product registration and Add support
   manage_addECHO_fullTextForm = PageTemplateFile(
       'zpt/AddECHO_fullText.zpt', globals())
   
   from urllib import quote
   
   def manage_addECHO_fullText(self, id, title=None, text=None,
                              REQUEST=None, submit=None):
       "Add a Page Template with optional file content."
   
       id = str(id)
       if REQUEST is None:
           self._setObject(id, ECHO_fullText(id, text))
           ob = getattr(self, id)
           if title:
               ob.pt_setTitle(title)
           return ob
       else:
           file = REQUEST.form.get('file')
           headers = getattr(file, 'headers', None)
           if headers is None or not file.filename:
               zpt = ECHO_fullText(id)
           else:
               zpt = ECHO_fullText(id, file, headers.get('content_type'))
   
           self._setObject(id, zpt)
   
           try:
               u = self.DestinationURL()
           except AttributeError:
               u = REQUEST['URL1']
   
           if submit == " Add and Edit ":
               u = "%s/%s" % (u, quote(id))
           REQUEST.RESPONSE.redirect(u+'/manage_main')
       return ''
   
 class ECHO_resource(Folder,Persistent):  class ECHO_resource(Folder,Persistent):
     """ECHO Ressource"""      """ECHO Ressource"""
Line 528  class ECHO_resource(Folder,Persistent): Line 817  class ECHO_resource(Folder,Persistent):
         """showrdf"""          """showrdf"""
             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')              self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
         ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n"""          ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n"""
         ret+=self.getRDF(urn="echo:collectionroot")+"\n"          ret+=self.getRDF(urn="echo:colllectionroot")+"\n"
   
         ret+="""</RDF:RDF>"""          ret+="""</RDF:RDF>"""
             return ret               return ret 
Line 536  class ECHO_resource(Folder,Persistent): Line 825  class ECHO_resource(Folder,Persistent):
     def getRDF(self,urn=None):      def getRDF(self,urn=None):
         """rdf"""          """rdf"""
         ret=getRDFDescription(self,self.link,urn=urn)          ret=getRDFDescription(self,self.link,urn=urn)
         return ret+self.createSubElementRDF()           return ret+self.createSubElementRDF(urn=urn) 
   
   
     def createSubElementRDF(self):      def createSubElementRDF(self,urn=None):
         """rdf list"""          """rdf list"""
         urn="urn:"+re.sub('/',':',self.absolute_url())           if not urn:
               urn=self.absolute_url()
         ret=""          ret=""
   
         rettemp="""<RDF:Seq about="%s">\n"""%urn          rettemp="""<RDF:Seq RDF:about="%s">\n"""%urn
         flag=0          flag=0
                   
         li="""<RDF:li resource="%s" />\n"""          li="""<RDF:li RDF:resource="%s" />\n"""
         if not ('<error>' in self.getFullTextXML(noredirect='Yes')):          if not ('<error>' in self.getFullTextXML(noredirect='Yes')):
             nurn="urn:"+re.sub('/',':',self.absolute_url()+'/getFullTextXML')              nurn=self.absolute_url()+'/getFullTextXML'
             rettemp+=li%nurn              rettemp+=li%nurn
             flag=1              flag=1
         if not ('<error>' in self.getImageView(noredirect='Yes')):          if not ('<error>' in self.getImageView(noredirect='Yes')):
             nurn="urn:"+re.sub('/',':',self.absolute_url()+'/getImageView')              nurn=self.absolute_url()+'/getImageView'
               rettemp+=li%nurn
               flag=1
   
   
           if not ('<error>' in self.showMetaDataXML()):
               nurn=self.absolute_url()+'/showMetaDataXML'
             rettemp+=li%nurn              rettemp+=li%nurn
             flag=1              flag=1
   
Line 563  class ECHO_resource(Folder,Persistent): Line 859  class ECHO_resource(Folder,Persistent):
             ret+=rettemp              ret+=rettemp
                           
         if not ('<error>' in self.getFullTextXML(noredirect='Yes')):          if not ('<error>' in self.getFullTextXML(noredirect='Yes')):
                     nurn="urn:"+re.sub('/',':',self.absolute_url()+'/getFullTextXML')                         nurn=self.absolute_url()+'/getFullTextXML'  
             ret+=getRDFDescription(self,self.absolute_url()+'/getFullTextXML',urn=nurn,nameDef="Fulltext")              ret+=getRDFDescription(self,self.absolute_url()+'/getFullTextXML',urn=nurn,nameDef="Fulltext",typeName="ECHO_fulltext")
   
         if not ('<error>' in self.getImageView(noredirect='Yes')):          if not ('<error>' in self.getImageView(noredirect='Yes')):
                     nurn="urn:"+re.sub('/',':',self.absolute_url()+'/getImageView')                       nurn=self.absolute_url()+'/getImageView'
             ret+=getRDFDescription(self,self.absolute_url()+'/getImageView',urn=nurn,nameDef="Image View")              ret+=getRDFDescription(self,self.absolute_url()+'/getImageView',urn=nurn,nameDef="Image View",typeName="ECHO_imageview")
               
           if not ('<error>' in self.showMetaDataXML()):
                       nurn=self.absolute_url()+'/showMetaDataXML'
               ret+=getRDFDescription(self,self.absolute_url()+'/showMetaDataXML',urn=nurn,nameDef="Metadata",typeName="ECHO_metaData")
   
         return ret          return ret
                   
Line 589  class ECHO_resource(Folder,Persistent): Line 889  class ECHO_resource(Folder,Persistent):
         else:          else:
             ret=""              ret=""
             for value in values:              for value in values:
                 print                  
                 if value==self.getAccessRightMD():                  if value==self.getAccessRightMD():
                     ret+="""<input type="radio" name="%s" value="%s" checked>%s"""%(self.getId(),value,value)                      ret+="""<input type="radio" name="%s" value="%s" checked>%s"""%(self.getId(),value,value)
                 else:                  else:
Line 604  class ECHO_resource(Folder,Persistent): Line 904  class ECHO_resource(Folder,Persistent):
   
         try:          try:
             geturl=""              geturl=""
             for line in urllib.urlopen(url).readlines():              for line in ECHO_helpers.urlopen(url).readlines():
                 geturl=geturl+line                  geturl=geturl+line
   
   
Line 634  class ECHO_resource(Folder,Persistent): Line 934  class ECHO_resource(Folder,Persistent):
         params="accessright=%s"%accessright          params="accessright=%s"%accessright
   
   
         #print urllib.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()          #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()
   
                   
         urllib.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/setAccessRightXML'+urllib.quote('?'+params))).read()          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()+'/setAccessRightXML'+urllib.quote('?'+params))).read()
   
               
         if RESPONSE is not None:          if RESPONSE is not None:
Line 650  class ECHO_resource(Folder,Persistent): Line 950  class ECHO_resource(Folder,Persistent):
   
         try:          try:
             geturl=""              geturl=""
             for line in urllib.urlopen(url).readlines():              for line in ECHO_helpers.urlopen(url).readlines():
                 geturl=geturl+line                   geturl=geturl+line 
   
   
Line 726  class ECHO_resource(Folder,Persistent): Line 1026  class ECHO_resource(Folder,Persistent):
           
         params="startpage=%s"%startpage          params="startpage=%s"%startpage
                   
         urllib.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()          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=self.metalink
Line 737  class ECHO_resource(Folder,Persistent): Line 1037  class ECHO_resource(Folder,Persistent):
         path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server          path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
         path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server          path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
         path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server          path=re.sub('http://foxridge.rz-berlin.mpg.de: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://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
           path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server
           path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
         path=re.sub('/index.meta','',path)           path=re.sub('/index.meta','',path) 
   
   
         urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()          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:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 770  class ECHO_resource(Folder,Persistent): Line 1073  class ECHO_resource(Folder,Persistent):
             return default              return default
         
   
     def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,RESPONSE=None):      def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
         """changeit"""          """changeit"""
   
         paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate']          paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix']
   
                   
         #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate)          #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate)
   
         params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate)          params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
   
                   
         urllib.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()          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()
   
           #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params)
         # hack Pfad auf die Dokumente          # hack Pfad auf die Dokumente
         path=self.metalink          path=self.metalink
                   
Line 799  class ECHO_resource(Folder,Persistent): Line 1103  class ECHO_resource(Folder,Persistent):
   
         path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server          path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
         path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server          path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
           path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
           path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
   
           path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server
   
           return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
   
         return urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()  
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 834  class ECHO_resource(Folder,Persistent): Line 1143  class ECHO_resource(Folder,Persistent):
   
     def getFullTextXML(self,noredirect=None):      def getFullTextXML(self,noredirect=None):
         """getFullTextXML; gives the FullText as an XML Document, and <error></error> if somthing goes wrong."""          """getFullTextXML; gives the FullText as an XML Document, and <error></error> if somthing goes wrong."""
               zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink) 
         try:          try:
             fh=urllib.urlopen(self.metalink)              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)              dom=xml.dom.minidom.parse(fh)
             texttools=dom.getElementsByTagName('texttool')              texttools=dom.getElementsByTagName('texttool')
             text=texttools[0].getElementsByTagName('text')              text=texttools[0].getElementsByTagName('text')
             texturl=getText(text[0].childNodes)              texturl=getText(text[0].childNodes)
                           zLOG.LOG("ECHO Fulltext",zLOG.INFO,"found %s"%texturl)
                       fh.close()
               if not (texturl.split(":")[0] in ['http','ftp','file']): 
                       texturl=re.sub("//","/",texturl)    
               #return texturl+"::"+texturl.split(":")[0]
             if not noredirect:              if not noredirect:
                             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')                                self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')  
                 self.REQUEST.RESPONSE.redirect(texturl)                  self.REQUEST.RESPONSE.redirect(texturl)
Line 858  class ECHO_resource(Folder,Persistent): Line 1174  class ECHO_resource(Folder,Persistent):
     def getImageView(self,noredirect=None):      def getImageView(self,noredirect=None):
         """getImages; give Imageviewr  and <error></error> if somthing goes wrong."""          """getImages; give Imageviewr  and <error></error> if somthing goes wrong."""
         try:          try:
             fh=urllib.urlopen(self.metalink)              fh=ECHO_helpers.urlopen(self.metalink)
             dom=xml.dom.minidom.parse(fh)              dom=xml.dom.minidom.parse(fh)
             texttools=dom.getElementsByTagName('texttool')              texttools=dom.getElementsByTagName('texttool')
             text=texttools[0].getElementsByTagName('image')              text=texttools[0].getElementsByTagName('image')
Line 892  class ECHO_resource(Folder,Persistent): Line 1208  class ECHO_resource(Folder,Persistent):
             return "ERROR"              return "ERROR"
         ret=[]          ret=[]
                   
         for copyright in obj.getCopyrights():          for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID
                           
             link="copyrightTypes/"+copyright[2]+'/copyright.html'  
                           
             try:              try:
                   if hasattr(self.copyrightTypes,copyright[2]):
                 copyrightTypeObj=getattr(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                  label=copyrightTypeObj.label
                 url=copyrightTypeObj.url                  url=getattr(copyrightTypeObj, 'url', '')
                                   
                 if url!='':                  if url!='':
                      ret.append((url,copyright[0],copyright[1],copyright[2],label))                       ret.append((url,copyright[0],copyright[1],copyright[2],label))
Line 913  class ECHO_resource(Folder,Persistent): Line 1234  class ECHO_resource(Folder,Persistent):
                           
         return ret          return ret
           
       def getInstitutionsHTML(self):
           """gibt Liste der fšrdernden Institutionen aus"""
           
           if hasattr(self,'support'):
               obj=self.support
               ret=obj.getSupporter()
               return ret
           else:
               return ''
               
       
     def getCredits(self):      def getCredits(self):
         """Ausgabe der credits"""          """Ausgabe der credits"""
         if self.credits:          if self.credits:
Line 947  class ECHO_resource(Folder,Persistent): Line 1279  class ECHO_resource(Folder,Persistent):
   
   
     def getCoords(self):      def getCoords(self):
         """gibt coordinaten als String zurück und löscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version"""          """gibt coordinaten als String zurĂźck und lĂśscht zugleich einträge die keine Koordinaten sind, letzteres zur korrektur der Eingabe der alten version"""
         retList=[]          retList=[]
         if hasattr(self,'coords'):          if hasattr(self,'coords'):
             for x in self.coords:              for x in self.coords:
Line 1025  class ECHO_resource(Folder,Persistent): Line 1357  class ECHO_resource(Folder,Persistent):
           
   
     def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):      def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
         """Änderung der Properties"""          """Änderung der Properties"""
     self.resourceID=resourceID      self.resourceID=resourceID
     self.title=title      self.title=title
     self.label=label      self.label=label
Line 1043  class ECHO_resource(Folder,Persistent): Line 1375  class ECHO_resource(Folder,Persistent):
   
   
     def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None):      def changeECHO_resource_coords(self,coords,viewClassification,RESPONSE=None):
         """Änderung der Properties - coords"""          """Änderung der Properties - coords"""
   
     if type(coords)==StringType:      if type(coords)==StringType:
             coords=[coords]              coords=[coords]
Line 1060  class ECHO_resource(Folder,Persistent): Line 1392  class ECHO_resource(Folder,Persistent):
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
     def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):      def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):
         """Änderung der Properties"""          """Änderung der Properties"""
     self.credits=credits      self.credits=credits
     self.responsible=responsible      self.responsible=responsible
     self.copyrightType=copyrightType      self.copyrightType=copyrightType
Line 1091  class ECHO_resource(Folder,Persistent): Line 1423  class ECHO_resource(Folder,Persistent):
             except:              except:
                 """nothing"""                  """nothing"""
   
         urllib.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()          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:          if RESPONSE is not None:
Line 1101  class ECHO_resource(Folder,Persistent): Line 1433  class ECHO_resource(Folder,Persistent):
     def getMDValue(self,fieldName):      def getMDValue(self,fieldName):
         return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)          return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
                                             
     def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):      def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None):
         """new index.meta"""          """new index.meta"""
         self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')          self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
   
Line 1109  class ECHO_resource(Folder,Persistent): Line 1441  class ECHO_resource(Folder,Persistent):
                   
             self.copyIndex_meta2echo_resource()              self.copyIndex_meta2echo_resource()
         try:          try:
             return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate)              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):
           """schreibe md"""
           
           try:
               
               return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes")
         except:          except:
             return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate)              return "<error> no metadata stored</error>"
   
     def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):      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"""          """prints out metadata as stored in the echo environment, format is the index.meta format"""
Line 1119  class ECHO_resource(Folder,Persistent): Line 1460  class ECHO_resource(Folder,Persistent):
         return writeMetadata(self.metalink,self.metaDataHash)          return writeMetadata(self.metalink,self.metaDataHash)
   
     def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):      def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
         """Änderung der Properties"""          """Änderung der Properties"""
                   
     try:              try:        
             coordsnew=[ string.split(x,",") for x in coords]              coordsnew=[ string.split(x,",") for x in coords]
Line 1142  class ECHO_resource(Folder,Persistent): Line 1483  class ECHO_resource(Folder,Persistent):
     {'label':'Change Coords','action':'ECHO_resource_config_coords'},      {'label':'Change Coords','action':'ECHO_resource_config_coords'},
     {'label':'Add coords','action':'ECHO_graphicEntry'},      {'label':'Add coords','action':'ECHO_graphicEntry'},
         {'label':'Sync Metadata','action':'ECHO_getResourceMD'},          {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
     {'label':'Change TemplateSets','action':'changeViewerTemplateSetForm'},      {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'},
     {'label':'set/change startpage','action':'setStartPageForm'},      {'label':'set/change startpage','action':'setStartPageForm'},
     {'label':'Copy MD for indexing and search','action':'copySearchFields'},      {'label':'Copy MD for indexing and search','action':'copySearchFields'},
     )      )
Line 1322  class ECHO_resource(Folder,Persistent): Line 1663  class ECHO_resource(Folder,Persistent):
         self.metaDataHash={}          self.metaDataHash={}
         if not error=="": #Fehler beim Auslesen des Metafiles          if not error=="": #Fehler beim Auslesen des Metafiles
                           
             return "ERROR:",error              return "ERROR:",error,self.absolute_url()
                   
         self.contentType=metadict['bib_type'][0:]          self.contentType=metadict['bib_type'][0:]
         fields=self.findTagsFromMapping(self.contentType)          fields=self.findTagsFromMapping(self.contentType)
Line 1391  class ECHO_resource(Folder,Persistent): Line 1732  class ECHO_resource(Folder,Persistent):
         if sp:          if sp:
             return sp[1]()              return sp[1]()
   
             #prüfen ob irgendwo ein template              #prĂźfen ob irgendwo ein template
         if hasattr(self,'startpage_index_template'):           if hasattr(self,'startpage_index_template'): 
             return self.startpage_index_template()              return self.startpage_index_template()
   
Line 1505  class ECHO_externalLink(Folder): Line 1846  class ECHO_externalLink(Folder):
   
     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):
   
         """Änderung der Properties"""          """Änderung der Properties"""
     try:      try:
         coordsnew=[ string.split(x,",") for x in coords]          coordsnew=[ string.split(x,",") for x in coords]
     except:      except:
Line 1576  def manage_addECHO_link(self,id,title,la Line 1917  def manage_addECHO_link(self,id,title,la
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')
           
   
 class ECHO_collection(Folder, Persistent, Implicit):  class ECHO_collection(Folder, Persistent, Implicit, Cacheable):
     """ECHO Collection"""      """ECHO Collection"""
   
     security=ClassSecurityInfo()      security=ClassSecurityInfo()
Line 1586  class ECHO_collection(Folder, Persistent Line 1927  class ECHO_collection(Folder, Persistent
   
     path="/mpiwg/online/permanent/shipbuilding"      path="/mpiwg/online/permanent/shipbuilding"
   
     def showRDF(self):  
         """showrdf"""  
             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')  
         ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n"""  
         ret+=self.getRDF(urn="echo:collectionroot")+"\n"  
   
         ret+="""</RDF:RDF>"""  
             return ret   
   
     def getRDF(self,urn=None):      def getRDF(self,urn=None):
         """rdf of the collection"""          """rdf of the collection"""
   
Line 1603  class ECHO_collection(Folder, Persistent Line 1935  class ECHO_collection(Folder, Persistent
         ret=getRDFDescription(self,self.absolute_url(),urn=urn)          ret=getRDFDescription(self,self.absolute_url(),urn=urn)
   
         if not urn:          if not urn:
             urn="urn:"+re.sub('/',':',self.absolute_url())              urn=self.absolute_url()
                 
         li="""<RDF:li 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 about="%s">\n"""%urn          ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
         for content in contents:          for content in contents:
             nurn="urn:"+re.sub('/',':',content[1].absolute_url())              nurn=content[1].absolute_url()
             ret+=li%nurn              ret+=li%nurn
         return ret+"</RDF:Seq>"          return ret+"</RDF:Seq>"
                   
                   
       def showRDF(self):
           """showrdf"""
               self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
           ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n"""
           ret+=self.getRDF(urn="echo:collectionroot")+"\n"
   
           ret+="""</RDF:RDF>"""
           
               return ret 
   
   
       
     def changeLabels(self):      def changeLabels(self):
         """change form"""          """change form"""
         pt=PageTemplateFile('Products/ECHO_content/zpt/changeLabelsForm').__of__(self)          pt=PageTemplateFile('Products/ECHO_content/zpt/changeLabelsForm').__of__(self)
Line 1630  class ECHO_collection(Folder, Persistent Line 1974  class ECHO_collection(Folder, Persistent
         pt.content_type="text/html"          pt.content_type="text/html"
         return pt()          return pt()
   
       def changeWeights(self):
           """change form"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self)
           pt.content_type="text/html"
           return pt()
   
       def changeMetaDataLinks(self):
           """change form"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeMetaDataLinkForm').__of__(self)
           pt.content_type="text/html"
           return pt()
     def changeAccessRightsCollection(self):      def changeAccessRightsCollection(self):
         """change"""          """change"""
         ret=""          ret=""
Line 1645  class ECHO_collection(Folder, Persistent Line 2000  class ECHO_collection(Folder, Persistent
                 """not"""                  """not"""
         return ret          return ret
   
     def changeLabelsInCollection(self):      def changeMetaDataLinkInCollection(self):
           """change all lables of a collection"""
           ret=""
           argv=self.REQUEST.form
           
           resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
           for resource in resources:
              
               try:
                   ret+=resource[1].getId()+"   "+argv[resource[1].getId()]+"</br>"
                               resource[1].metalink=argv[resource[1].getId()][0:]
               except:
                   """not"""
           return ret
   
       def changeMetaDataLinkInCollection(self):
         """change all lables of a collection"""          """change all lables of a collection"""
         ret=""          ret=""
         argv=self.REQUEST.form          argv=self.REQUEST.form
Line 1655  class ECHO_collection(Folder, Persistent Line 2025  class ECHO_collection(Folder, Persistent
                         
             try:              try:
                 ret+=resource[1].getId()+"   "+argv[resource[1].getId()]+"</br>"                  ret+=resource[1].getId()+"   "+argv[resource[1].getId()]+"</br>"
                             resource[1].label=argv[resource[1].getId()][0:]                              resource[1].metalink=argv[resource[1].getId()][0:]
               except:
                   """not"""
           return ret
   
       def changeWeightsInCollection(self):
           """change all lables of a collection"""
           ret=""
           argv=self.REQUEST.form
           
           resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
           for resource in resources:
              
               try:
                   ret+=resource[1].getId()+"   "+argv[resource[1].getId()]+"</br>"
                               resource[1].weight=argv[resource[1].getId()][0:]
             except:              except:
                 """not"""                  """not"""
         return ret          return ret
Line 1725  class ECHO_collection(Folder, Persistent Line 2110  class ECHO_collection(Folder, Persistent
         pt=PageTemplateFile('Products/ECHO_content/zpt/changeViewerTemplateSet').__of__(self)          pt=PageTemplateFile('Products/ECHO_content/zpt/changeViewerTemplateSet').__of__(self)
             return pt()              return pt()
   
     def getViewerTemplateSets(self,obj_ids=None):      def getViewerTemplateSets(self,obj_ids=None,RESPONSE=None):
         """Get the ViewerTemplateSet title for configuration"""          """Get the ViewerTemplateSet title for configuration"""
         ret=[]          ret=[]
                   
Line 1747  class ECHO_collection(Folder, Persistent Line 2132  class ECHO_collection(Folder, Persistent
   
                           
     def isSelectedViewerTemplateSet(self,obj,id):      def isSelectedViewerTemplateSet(self,obj,id):
         """is ausgewählt"""          """is ausgewählt"""
                   
         if self.REQUEST['viewerTemplateSet']==id:          if self.REQUEST['viewerTemplateSet']==id:
             return 1              return 1
         else:          else:
             return None              return None
   
     def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,RESPONSE=None):      def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
         """change the templates"""          """change the templates"""
   
         resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])          resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
   
           for resource in resources:
   
               resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
   
       def setStartpageFolderForm(self):
           """Form for changing the startpage"""
   
           
           pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPageFolder.zpt').__of__(self)
               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:          for resource in resources:
   
             resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate)              resource[1].setStartPage(startpage)
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
   
   
     def copySearchFields(self,RESPONSE=None):      def copySearchFields(self,RESPONSE=None):
         """copys import metadatafields to the object"""          """copys import metadatafields to the object"""
         resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])          resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
Line 1778  class ECHO_collection(Folder, Persistent Line 2185  class ECHO_collection(Folder, Persistent
         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=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self)
               pt.content_type="text/html"
               return pt()
   
     def reloadMetaDataFromStorage(self,RESPONSE=None):      def reloadMetaDataFromStorage(self,RESPONSE=None):
         """copy metadata from the storage to ECHO"""          """copy metadata from the storage to ECHO"""
         ret=""  
         resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])  
   
         for resource in resources:          return reloadMetaDataFromStorage(self,RESPONSE=None)
   
             ret+=str(resource[1].copyIndex_meta2echo_resource())+"<br>"  
   
   
         if RESPONSE is not None:  
             #           RESPONSE.redirect('manage_main')  
             return ret  
                   
     def getPartnerCopyright(self,name,sonst="generic"):      def getPartnerCopyright(self,name,sonst="generic"):
         """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung"""          """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung"""
Line 1894  class ECHO_collection(Folder, Persistent Line 2299  class ECHO_collection(Folder, Persistent
     def getCollectionTreeXML(self):      def getCollectionTreeXML(self):
         """Tree as XML"""          """Tree as XML"""
   
       def addPassWd(str):
           """adds a user/passwd to an url"""
           txt2=re.sub(r"(http://)(.*?)","\g<1>www:3333@\g<2>",str)
           return txt2
   
         def getCollection(object,depth=0):          def getCollection(object,depth=0):
             depth+=1              depth+=1
             collections=""              collections=""
Line 1901  class ECHO_collection(Folder, Persistent Line 2311  class ECHO_collection(Folder, Persistent
                 element=getattr(object,entry)                  element=getattr(object,entry)
                 try:                  try:
                     if element.meta_type in ["ECHO_collection","ECHO_group"]:                      if element.meta_type in ["ECHO_collection","ECHO_group"]:
                         collections+="<element name=\""+quote(element.title)+"\" url=\""+element.absolute_url()+"\">"                          collections+="<element name=\""+quote(element.title)+"\" url=\""+addPassWd(element.absolute_url())+"\">"
                         collections+=getCollection(element,depth)+"</element>\n"                          collections+=getCollection(element,depth)+"</element>\n"
                 except:                  except:
                     """nothing"""                      """nothing"""
Line 2039  class ECHO_collection(Folder, Persistent Line 2449  class ECHO_collection(Folder, Persistent
           
     security.declarePublic('ECHO_rerenderLinksMD')      security.declarePublic('ECHO_rerenderLinksMD')
   
     def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):  
         """Rerender all Links"""  
     ret=""  
       
         if not obj:  
             obj = self  
                           
         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])      def ECHO_rerenderLinksMDWarning(self):
           """change form"""
         for entry in entries:          pt=PageTemplateFile('Products/ECHO_content/zpt/rerenderLinksWarning').__of__(self)
         if entry[1].meta_type == 'ECHO_resource':          pt.content_type="text/html"
             try:          return pt()
                 entry[1].ECHO_getResourceMD(template="no")  
                                 if "title" in types:  
                                     entry[1].generate_title()  
                                 if "label" in types:  
                                     entry[1].generate_label()  
                 ret+="OK:"+entry[0]+"-- "+entry[1].getTitle().decode('utf-8')+"-- "+entry[1].getTitle().decode('utf-8')+"<br>"  
             except:  
                 ret+="Error:"+entry[0]+"<br>"  
   
         else:  
            self.ECHO_rerenderLinksMD(entry[1])  
   
                                   
       def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
           """Rerender all Links"""
       return ECHO_rerenderLinksMD(self,obj,types)
                                   
         return ret+"Rerenderd all links to resources in: "+self.title  
   
     security.declarePublic('ECHO_newViewerLink')      security.declarePublic('ECHO_newViewerLink')
           
Line 2101  class ECHO_collection(Folder, Persistent Line 2497  class ECHO_collection(Folder, Persistent
     self.bgcolour=bgcolour      self.bgcolour=bgcolour
                   
   
     manage_options = Folder.manage_options+(      manage_options = Folder.manage_options+ Cacheable.manage_options+(
         {'label':'Main Config','action':'ECHO_collection_config'},          {'label':'Main Config','action':'ECHO_collection_config'},
         {'label':'Change Labels','action':'changeLabels'},          {'label':'Change Labels','action':'changeLabels'},
         {'label':'Change Titles','action':'changeTitles'},          {'label':'Change Titles','action':'changeTitles'},
         {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMD'},      {'label':'Change Weights','action':'changeWeights'},
           {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'},
         {'label':'Graphics','action':'ECHO_graphicEntry'},          {'label':'Graphics','action':'ECHO_graphicEntry'},
     {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},      {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
         {'label':'Change Viewer Templates','action':'changeViewerTemplateSetsForm'},      {'label':'Set Startpage','action':'setStartpageFolderForm'},
     {'label':'Reload Metadata','action':'reloadMetaDataFromStorage'},          {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},
       {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
     {'label':'ImportCollection','action':'updateCollection'},      {'label':'ImportCollection','action':'updateCollection'},
     {'label':'Copy MD for indexing and search','action':'copySearchFields'},      {'label':'Copy MD for indexing and search','action':'copySearchFields'},
         )          )
Line 2170  class ECHO_collection(Folder, Persistent Line 2568  class ECHO_collection(Folder, Persistent
         else:          else:
             return "#dddddd"              return "#dddddd"
                   
     def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None,location=None):      def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",viewClassification=None,location=None,isAlwaysClickable=None):
         """Aenderung der Properties"""          """Aenderung der Properties"""
   
         self.secondaryLink=secondaryLink          self.secondaryLink=secondaryLink
Line 2179  class ECHO_collection(Folder, Persistent Line 2577  class ECHO_collection(Folder, Persistent
     self.bgcolour=bgcolour      self.bgcolour=bgcolour
         self.viewClassification=viewClassification          self.viewClassification=viewClassification
         self.location=location          self.location=location
       self.isAlwaysClickable=isAlwaysClickable
           
         if coords:          if coords:
             coordsnew=[ string.split(x,",") for x in coords]              coordsnew=[ string.split(x,",") for x in coords]
Line 2198  class ECHO_collection(Folder, Persistent Line 2597  class ECHO_collection(Folder, Persistent
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
                           
       def setAlwaysClickable(self,flag="yes"):
           """set clickable"""
           if flag=="yes":
               self.isAlwaysClickable="yes"
           else:
               self.isAlwaysClickable=None
   
           return flag
   
     def showOverview(self):      def showOverview(self):
         """overview"""          """overview"""
Line 2210  class ECHO_collection(Folder, Persistent Line 2617  class ECHO_collection(Folder, Persistent
           
     def index_html(self):      def index_html(self):
         """standard page"""          """standard page"""
           if self.ZCacheable_isCachingEnabled():
               
               result = self.ZCacheable_get()
               if result is not None:
                   # Got a cached value.
                   return result
                   
         if 'index.html' in self.__dict__.keys():          if 'index.html' in self.__dict__.keys():
             return getattr(self,'index.html')()              ret=getattr(self,'index.html')()
                   
         elif 'overview' in self.__dict__.keys():          elif 'overview' in self.__dict__.keys():
             return self.showOverview()              ret=self.showOverview()
         elif hasattr(self,'collection_index_template'):          elif hasattr(self,'collection_index_template'):
             return self.collection_index_template()                  ret=self.collection_index_template()    
         elif hasattr(self,'main_index_template'):          elif hasattr(self,'main_index_template'):
             return self.main_index_template()                  ret=self.main_index_template()    
                   else:
         pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)          pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_main_index_template_standard.zpt').__of__(self)
         pt.content_type="text/html"          pt.content_type="text/html"
         return pt()          ret=pt.render()
   
       self.ZCacheable_set(ret)
           return ret
   
     def content_html(self):      def content_html(self):
         """template fuer content"""          """template fuer content"""
Line 2315  class ECHO_group(ECHO_collection): Line 2731  class ECHO_group(ECHO_collection):
   
     manage_options = Folder.manage_options+(      manage_options = Folder.manage_options+(
         {'label':'Main Config','action':'ECHO_group_config'},          {'label':'Main Config','action':'ECHO_group_config'},
         {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},          {'label':'Rerender Links','action':'ECHO_rerenderLinksMDWarning'},
         {'label':'Graphics','action':'ECHO_graphicEntry'},          {'label':'Graphics','action':'ECHO_graphicEntry'},
         )          )
           
     security.declareProtected('View','index_html')      security.declareProtected('View','index_html')
   
       def showRDF(self):
           """showrdf"""
               self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
           ret="""<?xml version="1.0" encoding="utf-8"?>\n<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  xmlns:ECHONAVIGATION="http://www.echo.eu/rdf#">\n"""
           ret+=self.getRDF(urn="echo:collectionroot")+"\n"
   
           ret+="""</RDF:RDF>"""
           
               return ret 
   
     def getRDF(self,urn=None):      def getRDF(self,urn=None):
         """rdf of the collection"""          """rdf of the collection"""
         contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])          contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
   
         ret=getRDFDescription(self,self.absolute_url(),urn)          ret=getRDFDescription(self,self.absolute_url(),urn=urn)
   
                   
   
         urn="urn:"+re.sub('/',':',self.absolute_url())          if not urn:
         li="""<RDF:li resource="%s" />\n"""              urn=self.absolute_url()
           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 about="%s">\n"""%urn          ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
         for content in contents:          for content in contents:
             nurn="urn:"+re.sub('/',':',content[1].absolute_url())              nurn=content[1].absolute_url()
             ret+=li%nurn              ret+=li%nurn
         return ret+"</RDF:Seq>"          return ret+"</RDF:Seq>"
                   
Line 2380  class ECHO_group(ECHO_collection): Line 2806  class ECHO_group(ECHO_collection):
         return pt()          return pt()
   
     def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):      def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
         """Änderung der Properties"""          """Änderung der Properties"""
   
         self.secondaryLink=secondaryLink          self.secondaryLink=secondaryLink
         self.secondaryLinkTitle=secondaryLinkTitle          self.secondaryLinkTitle=secondaryLinkTitle
Line 2551  def manage_addECHO_userFolderForm(self): Line 2977  def manage_addECHO_userFolderForm(self):
     """add a user folder form"""      """add a user folder form"""
     return manage_addECHO_userFolder(self)      return manage_addECHO_userFolder(self)
   
   
   
   def createNode(self,descrs,node):
       name=descrs[node]['name']
       type=descrs[node]['type']
       urn=node
       #print "    will create",node.encode('utf-8')
       id=re.sub('[^a-zA-Z0-9]','',name).encode('ascii','ignore')
       #print "id",id
       #print type
       #self.REQUEST.RESPONSE.write("<p>%s<p>\n"%id)
       if type=="CDLI_group":
           
           try:
               manage_addECHO_collection(self,id,name,name,"","","","","")
           
           except:
               self.REQUEST.RESPONSE.write("<p>Error%s</p>\n"%id)
               
           self.REQUEST.RESPONSE.write("<p>Creates:%s</p>\n"%getattr(self,id).absolute_url())
           
           return type,getattr(self,id),urn
   
       if type=="CDLI_item":
           try:
               manage_addECHO_resource(self,id,name,name,"","",urn,"","")
           except:
               self.REQUEST.RESPONSE.write("<p>Error%s</p>\n"%id)
           self.REQUEST.RESPONSE.write("<p>Creates:%s</p>\n"%getattr(self,id).absolute_url())
           
           
       return "XX"
   
   
 class ECHO_root(Folder,Persistent,Implicit):  class ECHO_root(Folder,Persistent,Implicit):
     """ECHO Root Folder"""      """ECHO Root Folder"""
   
Line 2558  class ECHO_root(Folder,Persistent,Implic Line 3018  class ECHO_root(Folder,Persistent,Implic
           
     meta_type="ECHO_root"      meta_type="ECHO_root"
           
       ###CDLI adds -> have to be removed
       def getTablet(self,item):
           #print "getTablet"
       try:
           read=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read()
                   read=re.sub("\[search\]","search",read)
           return read[read.find("<body>")+6:read.rfind("</body>")]
       except:
           return "<h1>Sorry no connection to the data server enlil.museum.upenn.edu</h1>"
       #return "http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"
       ###END CDLI add
   
       def sendForm(self,fromaddr,content,server='mail.mpiwg-berlin.mpg.de'):
           """sendform"""
           toaddrs=["dwinter@mpiwg-berlin.mpg.de"]
           
           msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n"
              % (fromaddr, ", ".join(toaddrs),"testsub"))
           server = smtplib.SMTP(server)
           #server.set_debuglevel(1)
           msg=msg+content
           server.sendmail(fromaddr, toaddrs, msg)
           server.quit()
            
       def generateFromRDFForm(self):
           """change form"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/generateFromRDFForm').__of__(self)
           pt.content_type="text/html"
           return pt()
   
       def generateFromRDF(self,file,startNode="/Cuneiform Corpus"):
   
           """generate from RDF"""
   
           global seqs
           seqs={}
           global descrs
           descrs={}
           global key
           key=""
           global value
           value=""
   
           def getEdges(seqs,urn):
               """edges"""
               ret=[]
               return seqs[urn]
   
           def createSubs(self,seqs,descrs,urn,level=0):
               """create subs"""
               for edge in getEdges(seqs,urn):
                   cn=createNode(self,descrs,edge)
                   if cn[0]=="CDLI_group":
                       createSubs(cn[1],seqs,descrs,cn[2],level+1)
               return
   
           def start_element(name,attrs):
   
               global seqs
               global descrs
               global key
               global value
               seq=""
               if name=="RDF:Seq":
                   key=attrs.get('RDF:about')
                   try: # teste ob liste
                       x=seqs[key][0]
                   except:
   
                       seqs[key]=[]
   
               
               elif name=="RDF:Description":
                   key=attrs.get('RDF:about')
                   
   
               elif name=="RDF:li":
                   name=attrs.get('RDF:resource')
                   seqs[key].append(name)
   
               elif name=="ECHONAVIGATION:type":
                   value="type"
   
               elif name=="ECHONAVIGATION:name":
                   value="name"
               elif name=="ECHONAVIGATION:linkClickable":
                   value="linkClickable"
                   
           def end_element(name):
                   """nothing"""
                   key=""
                   value=""
   
           def char_data(data):
               """nothing"""
   
               data=re.sub("\n","",data)
               try:
                   if descrs[key].has_key(value):
                       descrs[key][value]+=data
                   else:
                       descrs[key][value]=data
               except:
   
                   descrs[key]={}
                   descrs[key][value]=data
                   
           p = xml.parsers.expat.ParserCreate()
           
           p.StartElementHandler = start_element
           p.EndElementHandler = end_element
           p.CharacterDataHandler = char_data
           
           
           p.ParseFile(file)
           self.REQUEST.RESPONSE.write("<html><body><h1>Start</h1>")
           createSubs(self,seqs,descrs,startNode)
           self.REQUEST.RESPONSE.write("<h1>done</h1></body></html>")
           #print "done"
   
           
           return "done"
       
           
   
           
       def changeWeightsInCollection(self):
           """change all lables of a collection"""
           ret=""
           argv=self.REQUEST.form
           
           resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
           for resource in resources:
              
               try:
                   ret+=resource[1].getId()+"   "+argv[resource[1].getId()]+"</br>"
                               resource[1].weight=argv[resource[1].getId()][0:]
               except:
                   """not"""
           return ret
   
       def changeWeights(self):
           """change form"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeWeightForm').__of__(self)
           pt.content_type="text/html"
           return pt()
       getSubCols = ECHO_helpers.getSubCols
   
       manage_options=Folder.manage_options+(
           {'label':'Main Config','action':'ECHO_copyright_configForm'},
           {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
           {'label':'Change Weights','action':'changeWeights'},
           {'label':'Generate from RDF','action':'generateFromRDFForm'},
   
   )
   
       
     def showRDF(self):      def showRDF(self):
         """showrdf"""          """showrdf"""
             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')              self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
Line 2567  class ECHO_root(Folder,Persistent,Implic Line 3184  class ECHO_root(Folder,Persistent,Implic
         ret+="""</RDF:RDF>"""          ret+="""</RDF:RDF>"""
             return ret              return ret
   
   
       def reloadMetaDataFromStorageWarning(self,RESPONSE=None):
           """warning"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/reloadMetaDataFromStorageWarning.zpt').__of__(self)
               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 2574  class ECHO_root(Folder,Persistent,Implic Line 3203  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 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 about="%s">\n"""%urn          ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
         for content in contents:          for content in contents:
             nurn="urn:"+re.sub('/',':',content[1].absolute_url())              nurn=content[1].absolute_url()
             ret+=li%nurn              ret+=li%nurn
         return ret+"</RDF:Seq>"          return ret+"</RDF:Seq>"
                   
Line 2590  class ECHO_root(Folder,Persistent,Implic Line 3219  class ECHO_root(Folder,Persistent,Implic
     def showContent(self,path):      def showContent(self,path):
         """return content/html"""          """return content/html"""
                   
         return urllib.urlopen(path+"/content_html").read()          return ECHO_helpers.urlopen(path+"/content_html").read()
           
     def getImageViewers(self):      def getImageViewers(self):
         """images"""          """images"""
Line 2599  class ECHO_root(Folder,Persistent,Implic Line 3228  class ECHO_root(Folder,Persistent,Implic
           
   
     def getBibTag(self,tag,content):      def getBibTag(self,tag,content):
         """get field tag für index-meta-generation"""          """get field tag fĂźr index-meta-generation"""
         if not content or content=="":          if not content or content=="":
             return ""              return ""
         ret="<%s>"%tag          ret="<%s>"%tag
Line 2687  class ECHO_root(Folder,Persistent,Implic Line 3316  class ECHO_root(Folder,Persistent,Implic
      return retStr       return retStr
   
   
     def copyrightTypeSelector_HTML(self,selected=None,first=None):      def copyrightTypeSelector_HTML(self, object=None, selected=None,first=None):
          """give type selector"""           """give type selector"""
   
      if not first:       if not first:
Line 2708  class ECHO_root(Folder,Persistent,Implic Line 3337  class ECHO_root(Folder,Persistent,Implic
                  retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])                   retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
              else:                               else:                
                  retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])                   retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
            
            for copyrightTypeSelf in self.ZopeFind(object,obj_metatypes=["ECHO_copyrightType"],search_sub=1):
                if selected and (copyrightTypeSelf[0]==selected):
                    retStr+="""<option selected value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
                else:                
                    retStr+="""<option value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
                    
      except:       except:
          """nothing"""           """nothing"""
            
      return retStr       return retStr
   
     def partnerSelector_HTML(self,selected=None):      def partnerSelector_HTML(self,selected=None):
Line 2729  class ECHO_root(Folder,Persistent,Implic Line 3366  class ECHO_root(Folder,Persistent,Implic
          """nothing"""           """nothing"""
      return retStr       return retStr
     
     mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version über echoroot??      mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version Ăźber echoroot??
   
     def mediaTypeSelector_HTML(self,selected=None):      def mediaTypeSelector_HTML(self,selected=None):
          """give type selector"""           """give type selector"""
Line 2801  class ECHO_root(Folder,Persistent,Implic Line 3438  class ECHO_root(Folder,Persistent,Implic
                                   
         return "changed all contenttypes in: "+self.title          return "changed all contenttypes in: "+self.title
   
       def deleteCache(self,obj=None,RESPONSE=None):
           """setze alle collections auf cache = CacheManager"""
   
       
           if not obj:
               obj = self
               
           entries=obj.ZopeFind(obj,search_sub=1)
   
           for entry in entries:
           if hasattr(entry[1],'_v_hash'):
               entry[1]._v_hash=None
               
   
   
           
           return "changed all CM in: "+self.title
   
   
       
     def ECHO_newViewerLink(self,obj=None):      def ECHO_newViewerLink(self,obj=None):
         """change links (:86 faellt weg)"""          """change links (:86 faellt weg)"""
   
Line 2867  class ECHO_root(Folder,Persistent,Implic Line 3524  class ECHO_root(Folder,Persistent,Implic
             for link in links:              for link in links:
                 link.tagName="a"                  link.tagName="a"
                 ref=link.getAttribute("ref")                  ref=link.getAttribute("ref")
           pn=link.getAttribute("page")
               
                 if self.checkRef(ref):                  if self.checkRef(ref):
               if pn:
                   link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref+"&p="+pn)
               else:
                     link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)                      link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
   
   
             newxml=dom.toxml('utf-8')              newxml=dom.toxml('utf-8')
         match=re.sub(r'<\?xml version=\"1.0\" encoding=\"utf-8\"\?>\n<txt>','',newxml)  
         match=re.sub(r'</txt>','',match)  
                   
         return match          retStr=regexpTXT.search(newxml)
   
           return retStr.group(1)
   
                                 
         return ""          return ""
   
     def xml2html(self,str):      def xml2html(self,str,quote="yes"):
         """link2html fuer VLP muss hier noch raus"""          """link2html fuer VLP muss hier noch raus"""
         if str:  
   
           if str:
               if quote=="yes2":
             str=re.sub("\&","&amp;",str)              str=re.sub("\&","&amp;",str)
             dom=xml.dom.minidom.parseString(str)              #dom=xml.dom.minidom.parseString(str)
             links=dom.getElementsByTagName("link")          dom = NonvalidatingReader.parseString(str,"http://www.mpiwg-berlin.mpg.de/")
               #links=dom.getElementsByTagName("link")
               links=Ft.Xml.XPath.Evaluate(".//link", contextNode=dom)
               for link in links:
                   #link.tagName="a"
                           
                   ref=link.getAttributeNS(EMPTY_NAMESPACE,"ref")
           pn=link.getAttributeNS(EMPTY_NAMESPACE,"page")
   
             for link in links:          cns=link.childNodes[0:]
                 link.tagName="a"          
                 ref=link.getAttribute("ref")          newLink=dom.createElementNS(EMPTY_NAMESPACE,"a")
           for x in cns:
               newLink.appendChild(x)
           
               
           
           link.parentNode.replaceChild(newLink,link)
                 if self.checkRef(ref):                  if self.checkRef(ref):
                     link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)              if pn:
                   newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref+"&p="+pn)
               else:
                   newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)
   
             return dom.toxml('utf-8')              #str= dom.toxml('utf-8')
           buf = cStringIO.StringIO()
           PrettyPrint(dom, stream=buf, encoding='UTF-8')
           str = buf.getvalue()
           buf.close()
           #str=PrettyPrint(dom.documentElement,encoding='UTF-8')
           #print link.toxml('utf-8')
           #print type(str)
           retStr=regexpPage.search(str)
           try: # hack warum fehtl manchmal page??
               return retStr.group(1)
           except:
               return str
         return ""          return ""
   
     def checkRef(self,ref):      def checkRef(self,ref):
         dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':''}          if ref[0:3]=='lit':
               if len(self.library_data({ 'id':ref}))>0:
                   return 1
           try:
               if ref[0:7]=="tec_cat":
                   return 1
           except:
               """nothing"""
               
           dbs={'vl_technology':'','vl_people':'','vl_sites':''}
         res=None          res=None
         for db in dbs.keys():          for db in dbs.keys():
   
             res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))              res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
         return res          return res
                                                                           
Line 2917  class ECHO_root(Folder,Persistent,Implic Line 3617  class ECHO_root(Folder,Persistent,Implic
         return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]          return [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
                                   
                                   
       def getInstitutions(self):
           """Get list of Partners. Presently only from a subfolder partners"""
                                         
           return [ item[1] for item in self.institutions.ZopeFind(self.institutions,obj_metatypes=['ECHO_institution'])]
   
           
     def getPartnersXML(self):      def getPartnersXML(self):
Line 2927  class ECHO_root(Folder,Persistent,Implic Line 3630  class ECHO_root(Folder,Persistent,Implic
     <partners>"""      <partners>"""
                   
     for partner in partners:      for partner in partners:
             ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),unicode(partner.title,'utf-8','replace'))              ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),partner.title)
   
         return ret+"\n</partners>"          return ret+"\n</partners>"
           
Line 3034  class ECHO_root(Folder,Persistent,Implic Line 3737  class ECHO_root(Folder,Persistent,Implic
   
     def getMetaDatasXML(self,viewerType=None,filter=None):      def getMetaDatasXML(self,viewerType=None,filter=None):
         """gebe all ressourcen aus"""          """gebe all ressourcen aus"""
           # check if the request's host part was OK
           http_host = self.REQUEST['HTTP_HOST']
           host_port = self.REQUEST['SERVER_PORT']
           fix_host = None
           if http_host and http_host.rfind(host_port) == -1:
               print "HTTP_HOST needs fixing!"
               fix_host = http_host + ":" + host_port
   
         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'],search_sub=1):
   
             echo_url=resource[1].absolute_url()              echo_url=resource[1].absolute_url()
               if fix_host:
                   #print "replacing ", http_host, " by ", fix_host
                   echo_url = string.replace(echo_url, http_host, fix_host, 1)
                           
             if hasattr(resource[1],'link'):              if hasattr(resource[1],'link'):
                 meta_url=echo_url+"/getMetaDataXML"                  meta_url=echo_url+"/getMetaDataXML"
Line 3048  class ECHO_root(Folder,Persistent,Implic Line 3762  class ECHO_root(Folder,Persistent,Implic
             if filter and not re.search(filter,viewer_url):              if filter and not re.search(filter,viewer_url):
                 continue                  continue
   
             ret+="""\n<resource resourceLink="%s" metaLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(meta_url,safe='/:?'))              #modificationDate=time.strptime(str(resource[1].bobobase_modification_time()),"%Y/%m/%d %H:%M:%S %Z")
                                   
         ret +="""\n</index>"""              modificationDate=resource[1].bobobase_modification_time().strftime("%Y/%m/%d %H:%M:%S")
                   
               ret+="""\n<resource resourceLink="%s" metaLink="%s" modificationDate="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(meta_url,safe='/:?'),modificationDate)
               
                   
           ret +="""\n</index>"""
                   
         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)
Line 3073  class ECHO_root(Folder,Persistent,Implic Line 3791  class ECHO_root(Folder,Persistent,Implic
         par=self.ZopeFind(self.partners, obj_ids=[id])          par=self.ZopeFind(self.partners, obj_ids=[id])
         return par          return par
   
       def getInstitutionFromID(self,id):
           """ find institution from id """
           inst=self.ZopeFind(self.institutions, obj_ids=[id])
           return inst
   
                   
 def manage_addECHO_root(self,id,title,RESPONSE=None):  def manage_addECHO_root(self,id,title,RESPONSE=None):
Line 3220  def manage_addECHO_partner(self, id, url Line 3942  def manage_addECHO_partner(self, id, url
         REQUEST.RESPONSE.redirect('%s/manage_main' % url)          REQUEST.RESPONSE.redirect('%s/manage_main' % url)
     return id      return id
   
   class ECHO_linkList(ZopePageTemplate):
       """LinkList Objekt"""
       meta_type="ECHO_linkList"
   
       _default_content_fn = os.path.join(package_home(globals()), 'html/ECHO_pageTemplateDefault.html')
   
       manage_options = ZopePageTemplate.manage_options+(
           {'label':'Main Config','action':'changeECHO_linkListWeightForm'},
           )
   
       def content_html(self):
       """content_html"""
       return content_html(self,'pageTemplate')
   
       def changeECHO_linkListWeightForm(self):
           """change"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_linkListTemplate.zpt').__of__(self)
           return pt()
   
       def changeECHO_linkListWeight(self,contentType,label,RESPONSE=None):
           """change"""
           self.contentType=contentType
           self.label=label
           
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
       def getLabel(self):
           if hasattr(self,'label'):
               return self.label.encode('utf-8')
           else:
               return 0
           
       def getcontentType(self):
           """get contentType"""
           if hasattr(self,'contentType'):
               return self.contentType
           else:
               return 0
   
       def __init__(self, id, label, title=None, text=None, contentType=None):
            self.id = str(id)
            self.title=title
            self.label=label
            self.ZBindings_edit(self._default_bindings)
            if text is None:
                text = ''
            self.pt_edit(text, contentType)
   
   
   
   
   def manage_addECHO_linkListForm(self):
       """Form for adding"""
       pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_linkListTemplate.zpt').__of__(self)
       return pt()
   
   from urllib import quote
   
   
   def manage_addECHO_linkList(self, id, label,contentType=0,title=None, text=None,
                              REQUEST=None, submit=None):
       """Add a LinkList with optional file content."""
       
       id = str(id)
       if REQUEST is None:
           self._setObject(id, ECHO_linkList(id, label, text))
           ob = getattr(self, id)
           setattr(ob,'contentType',contentType)
           if title:
               ob.pt_setTitle(title)
           return ob
       else:
           file = REQUEST.form.get('file')
           headers = getattr(file, 'headers', None) 
           if (headers is None) or (not file.filename):
               zpt = ECHO_linkList(id, file)
           else:
               zpt = ECHO_linkList(id, label,'', file, headers.get('contentType'))
   
           self._setObject(id, zpt)
           ob = getattr(self, id)
           if title:
               ob.pt_setTitle(title)
           
           try:
               u = self.DestinationURL()
           except AttributeError:
               u = REQUEST['URL1']
   
           if submit == " Add and Edit ":
               u = "%s/%s" % (u, quote(id))
           REQUEST.RESPONSE.redirect(u+'/manage_main')
       return ''
       
   
   class ECHO_support(Folder):
       """gefšrdert durch"""
       meta_type="ECHO_support"
       
       
       
       def __init__(self,id,institutions=None):
           """init"""
           self.id=id
           self.title=''
           self.institutions=toList(institutions)
   
       def getSupporter(self):
           """return institutions"""
           if self.institutions:
               return self.institutions
           else:
               return []
               
       manage_options = Folder.manage_options+(
           {'label':'Main Config','action':'ECHO_support_configForm'},
           )
   
       def ECHO_support_configForm(self):
           """change form"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_support').__of__(self)
           pt.content_type="text/html"
           return pt()
   
       def ECHO_support_config(self,institutions=None,RESPONSE=None):
           """change"""
           self.institutions=toList(institutions)
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
           
   def manage_addECHO_supportForm(self):
       """Form for adding"""
       pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_support.zpt').__of__(self)
       return pt()
   
   def manage_addECHO_support(self, id,institutions=None,RESPONSE=None):
       """add the copyright"""
   
       meta_type="ECHO_support"
       
       
       self._setObject(id, ECHO_support(id,institutions))
   
       if RESPONSE is not None:
           RESPONSE.redirect('manage_main')
           
   
   class ECHO_institution(Image,Persistent):
       """ECHO Institution"""
   
       meta_type="ECHO_institution"
   
       def __init__(self, id, title,url, file, person, email, country, content_type='', precondition=''):
           self.__name__=id
           self.title=title
           self.url=url
           self.person=person
           self.email=email
           self.country=country
           self.precondition=precondition
           data, size = self._read_data(file)
           content_type=self._get_content_type(file, data, id, content_type)
           self.update_data(data, content_type, size)
   
       manage_options = Image.manage_options+(
           {'label':'Institution Information','action':'ECHO_institution_config'},
           )
   
       
       def changeECHO_institution(self,url,person, email, country,RESPONSE=None):
           """Change main information"""
           self.url=url
           self.person=person
           self.email=email
           self.country=country
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
               
               
   
       def ECHO_institution_config(self):
           """Main configuration"""
           if not hasattr(self,'url'):
               self.url=""
           pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_institution.zpt').__of__(self)
           return pt()
   
           
   manage_addECHO_institutionForm=DTMLFile('dtml/ECHO_institutionAdd',globals(),
                                Kind='ECHO_institution',kind='ECHO_institution')
   
   
   
   def manage_addECHO_institution(self, id, url, person, email, country, file=None, title='', precondition='', content_type='',
                       REQUEST=None):
       """
       Add a new ECHO_institution object.
   
       Creates a new ECHO_institution object 'id' with the contents of 'file'.
       Based on Image.manage_addImage
       """
   
       id=str(id)
       title=str(title)
       content_type=str(content_type)
       precondition=str(precondition)
   
       id, title = OFS.Image.cookId(id, title, file)
   
       self=self.this()
   
       # First, we create the image without data:
       self._setObject(id, ECHO_institution(id,title,url,'', person, email, country, content_type, precondition))
   
       # Now we "upload" the data.  By doing this in two steps, we
       # can use a database trick to make the upload more efficient.
       if file:
           self._getOb(id).manage_upload(file)
       if content_type:
           self._getOb(id).content_type=content_type
   
       if REQUEST is not None:
           try:    url=self.DestinationURL()
           except: url=REQUEST['URL1']
           REQUEST.RESPONSE.redirect('%s/manage_main' % url)
       return id

Removed from v.1.147  
changed lines
  Added in v.1.179


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