Diff for /ECHO_content/ECHO_collection.py between versions 1.114 and 1.159

version 1.114, 2004/06/17 09:45:48 version 1.159, 2004/08/05 13:32:59
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 29  from Products.PageTemplates.ZopePageTemp Line 30  from Products.PageTemplates.ZopePageTemp
 from Globals import Persistent, package_home  from Globals import Persistent, package_home
 from Acquisition import Implicit  from Acquisition import Implicit
 from ECHO_helpers import displayTypes  from ECHO_helpers import displayTypes
   import urllib
   import time
   
 try:  try:
     from psycopg import libpq      from psycopg import libpq
Line 46  import xml.dom.minidom Line 48  import xml.dom.minidom
 from ECHO_graphicalOverview import javaHandler,javaScriptMain  from ECHO_graphicalOverview import javaHandler,javaScriptMain
 import ECHO_helpers  import ECHO_helpers
   
   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"""
           
           ret=""
           about="""<RDF:Description RDF:about="%s">"""
           name="""<ECHONAVIGATION:name>%s</ECHONAVIGATION:name>"""
           link="""<ECHONAVIGATION:link xlink:href="%s">%s</ECHONAVIGATION:link>"""
           clickable="""<ECHONAVIGATION:linkClickable>%s</ECHONAVIGATION:linkClickable>"""
           #link="""<ECHONAVIGATION:link RDF:about="%s"/>"""
           type="""<ECHONAVIGATION:type>%s</ECHONAVIGATION:type>"""
               #xlink="""<ECHONAVIGATION:xlink xlink:href="%s"/>"""    
           if not urn:
               #urn="urn:"+re.sub('/',':',self.absolute_url())
               urn=self.absolute_url()
           about2=about%urn
           if not nameDef:
               if hasattr(self,'label') and not (self.label==""):
                   name2=name%self.label
               elif not self.title=="":
                   name2=name%self.title
               else:
                   name2=name%self.getId()
   
               name2=re.sub('&','&amp;',name2)
           else:
               name2=name%nameDef
   
           linkURL=re.sub('http:','',linkURL)
           linkURL2=re.sub('&','&amp;',linkURL)
           link2=link%(("http:"+linkURL2),("http:"+urllib.quote(linkURL)))
           clickable2=clickable%"true"
   
           if not typeName:
               type2=type%self.meta_type
           else:
               type2=type%typeName
           
           #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
       
 def getCopyrightsFromForm(self,argv):  def getCopyrightsFromForm(self,argv):
     medias={}      medias={}
     partners={}      partners={}
Line 184  class BrowserCheck: Line 270  class BrowserCheck:
     self.isIEMac = self.isIE and self.isMac      self.isIEMac = self.isIE and self.isMac
   
   
 def writeMetadata(url,metadict):  
           
   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"""
       print "url",url
       def updateTextToolNode(tag,value):
           #print dom,tag,value
           metanode=dom.getElementsByTagName('texttool')[0]
           try:
               nodeOld=metanode.getElementsByTagName(tag)
           except:
               nodeOld=None
   
           if nodeOld:
               metanode.removeChild(nodeOld[0]).unlink()
   
           node=dom.createElement(tag)
           nodetext=dom.createTextNode(value)
           node.appendChild(nodetext)
           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 urllib.urlopen(url).readlines():
Line 201  def writeMetadata(url,metadict): Line 315  def writeMetadata(url,metadict):
     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 236  def writeMetadata(url,metadict): Line 352  def writeMetadata(url,metadict):
         metanode.appendChild(metanodeneu)          metanode.appendChild(metanodeneu)
   
           
       
       
       
       if project:
           updateTextToolNode('project',project)
   
       if startpage:
           updateTextToolNode('startpage',startpage)
   
       if topbar:
           updateTextToolNode('toptemplate',topbar)
   
       if thumbtemplate:
           updateTextToolNode('thumbtemplate',thumbtemplate)
   
       if xslt:
           updateTextToolNode('xslt',xslt)
   
       
       if digiliburlprefix:
           updateTextToolNode('digiliburlprefix',digiliburlprefix)
       
     return dom.toxml().encode('utf-8')      return dom.toxml().encode('utf-8')
   
           
Line 439  def manage_addECHO_layoutTemplate(self, Line 577  def manage_addECHO_layoutTemplate(self,
     REQUEST.RESPONSE.redirect(u+'/manage_main')      REQUEST.RESPONSE.redirect(u+'/manage_main')
     return ''      return ''
   
   
   
 class ECHO_resource(Folder,Persistent):  class ECHO_resource(Folder,Persistent):
     """ECHO Ressource"""      """ECHO Ressource"""
       security=ClassSecurityInfo()
     meta_type='ECHO_resource'      meta_type='ECHO_resource'
   
     viewClassificationList=viewClassificationListMaster      viewClassificationList=viewClassificationListMaster
   
     getSubCols = ECHO_helpers.getSubCols      getSubCols = ECHO_helpers.getSubCols
   
       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):
           """rdf"""
           ret=getRDFDescription(self,self.link,urn=urn)
           return ret+self.createSubElementRDF(urn=urn) 
   
   
       def createSubElementRDF(self,urn=None):
           """rdf list"""
           if not urn:
               urn=self.absolute_url()
           ret=""
   
           rettemp="""<RDF:Seq RDF:about="%s">\n"""%urn
           flag=0
           
           li="""<RDF:li RDF:resource="%s" />\n"""
           if not ('<error>' in self.getFullTextXML(noredirect='Yes')):
               nurn=self.absolute_url()+'/getFullTextXML'
               rettemp+=li%nurn
               flag=1
           if not ('<error>' in self.getImageView(noredirect='Yes')):
               nurn=self.absolute_url()+'/getImageView'
               rettemp+=li%nurn
               flag=1
   
   
           if not ('<error>' in self.showMetaDataXML()):
               nurn=self.absolute_url()+'/showMetaDataXML'
               rettemp+=li%nurn
               flag=1
               
           rettemp+="</RDF:Seq>"
   
           if flag==1:
               ret+=rettemp
               
           if not ('<error>' in self.getFullTextXML(noredirect='Yes')):
                       nurn=self.absolute_url()+'/getFullTextXML'  
               ret+=getRDFDescription(self,self.absolute_url()+'/getFullTextXML',urn=nurn,nameDef="Fulltext",typeName="ECHO_fulltext")
   
           if not ('<error>' in self.getImageView(noredirect='Yes')):
                       nurn=self.absolute_url()+'/getImageView'
               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
           
       def getAccessRightSelectorHTML(self,outlook="select"):
           """htmlselector"""
           values=['free','mpiwg']
           
           if outlook=="select":
               ret="""<select name="%s">"""%self.getId()
   
               for value in values:
                   if value==self.getAccessRightMD():
                       ret+="<option selected>%s</option>"%value
                   else:
                       ret+="<option>%s</option>"%value
               return ret+"</select>"
   
           else:
               ret=""
               for value in values:
                   
                   if value==self.getAccessRightMD():
                       ret+="""<input type="radio" name="%s" value="%s" checked>%s"""%(self.getId(),value,value)
                   else:
                       ret+="""<input type="radio" name="%s" value="%s">%s"""%(self.getId(),value,value)
               return ret
   
   
       
       def getAccessRightMD(self):
           """set accessright"""
           url=self.metalink
   
           try:
               geturl=""
               for line in urllib.urlopen(url).readlines():
                   geturl=geturl+line
   
   
           except:
               return (None,"Cannot open: "+url)
   
           try:
               dom=xml.dom.minidom.parseString(geturl)
               root=dom.getElementsByTagName('resource')[0]
           except:
               return (None,"Cannot parse: "+url+"<br>"+geturl)
   
           internal=dom.getElementsByTagName('internal')
           if internal:
               institution=dom.getElementsByTagName('institution')
               return getText(institution[0].childNodes)
           
           free=dom.getElementsByTagName('free')
           if free:
               return "free"
   
           return "free" #default free
   
       def changeAccessRightMD(self,accessright,RESPONSE=None):
           """change the rights"""
           
           params="accessright=%s"%accessright
   
   
           #print urllib.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()
   
         
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
           
       def setAccessRightXML(self,accessright):
           """set accessright"""
           url=self.metalink
   
           try:
               geturl=""
               for line in urllib.urlopen(url).readlines():
                   geturl=geturl+line 
   
   
           except:
               return (None,"Cannot open: "+url)
   
           try:
               dom=xml.dom.minidom.parseString(geturl)
               root=dom.getElementsByTagName('resource')[0]
           except:
               return (None,"Cannot parse: "+url+"<br>"+geturl)
   
           metanodes=dom.getElementsByTagName('access-conditions')
   
           if not metanodes:
               nodenew=dom.createElement('access-conditions')
               root.appendChild(nodenew)
               metanode=nodenew
           else:
               metanode=metanodes[0]
   
           accesses=metanode.getElementsByTagName('access')
   
           if not accesses:
               nodenew2=dom.createElement('access')
               metanode.appendChild(nodenew2)
               metanode2=nodenew2
           else:
               metanode2=accesses[0]
   
           internal=metanode.getElementsByTagName('internal')
   
           if internal:
               metanode2.removeChild(internal[0]).unlink()
   
           free=metanode.getElementsByTagName('free')
           
           if free:
               metanode2.removeChild(internal[0]).unlink()
   
   
           if accessright=='free':
               nodenew3=dom.createElement('free')
               metanode2.appendChild(nodenew3)
           elif accessright=='mpiwg':
               nodenew3=dom.createElement('internal')
               nodenew4=dom.createElement('institution')
               metanodetext=dom.createTextNode('mpiwg')
               nodenew4.appendChild(metanodetext)
               nodenew3.appendChild(nodenew4)
               metanode2.appendChild(nodenew3)
   
           return dom.toxml().encode('utf-8')
   
       def setStartPageForm(self):
           """Form for changing the startpage"""
   
           
           pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resourceStartPage.zpt').__of__(self)
               pt.content_type="text/html"
               return pt()
       
       
       def setStartPage(self,startpage=None,RESPONSE=None):
           """set start page, if no startpage defined use the generic one of the resource"""
   
           if (not (type(startpage)==StringType)) and ("__generic" in startpage): # checke ob generic in der liste
               startpage=self.absolute_url()+"/startpage_html"
               
           if (not startpage) or (startpage=="__generic"):
                startpage=self.absolute_url()+"/startpage_html"
           
       
           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()
       
           
           path=self.metalink
           
           path=re.sub(self.REQUEST['SERVER_URL'],'',path)
           path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
   
           path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
           path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
           path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
               path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
           path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
           path=re.sub('/index.meta','',path) 
   
   
           urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
       def changeViewerTemplateSetForm(self):
           """change the viewer template set"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeResourceViewerTemplateSet').__of__(self)
               return pt()
   
   
       def getTextToolsField(self,name,default=''):
           """Lese Textoolsfelder aus index.meta im path aus"""
           
           try:
               dom=xml.dom.minidom.parse(self.metalink)
               node=dom.getElementsByTagName('texttool')[0] #getNode
               subnode=node.getElementsByTagName(name)[0]
   
               # bei text wird nur der Folder gebraucht
               if name=="text":
                   splitted=getText(subnode.childNodes).split("/")
                   return splitted[len(splitted)-2]
               else:
                   return getText(subnode.childNodes)
           except:
               return default
      
   
       def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
           """changeit"""
   
           paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix']
   
           
           #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate)
   
           params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
   
           
           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()
   
           #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params)
           # hack Pfad auf die Dokumente
           path=self.metalink
           
           
   
           path=re.sub('/index.meta','',path) 
   
           path=re.sub(self.REQUEST['SERVER_URL'],'',path)
           path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
   
           path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
           path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
           path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
   
           path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
           path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
           path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
           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:
               RESPONSE.redirect('manage_main')
   
           
     def getTitle(self):      def getTitle(self):
     """title"""      """title"""
     return self.title.encode('utf-8')       try:
           return self.title.encode('utf-8','ignore') 
       except:
           self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error
           return self.title.encode('utf-8','ignore') 
   
     def getLabel(self):      def getLabel(self):
     """title"""      """title"""
     return self.label.encode('utf-8')       try:
           return self.label.encode('utf-8','ignore') 
       except:
           self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error
           return self.label.encode('utf-8','ignore') 
   
     def content_html(self):      def content_html(self):
         """template fuer content"""          """template fuer content"""
Line 474  class ECHO_resource(Folder,Persistent): Line 919  class ECHO_resource(Folder,Persistent):
             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)
             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')              
             if not noredirect:              if not noredirect:
                               self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')  
                 self.REQUEST.RESPONSE.redirect(texturl)                  self.REQUEST.RESPONSE.redirect(texturl)
             else:              else:
                 return texturl                  return texturl
Line 487  class ECHO_resource(Folder,Persistent): Line 933  class ECHO_resource(Folder,Persistent):
             else:              else:
                 return "<error>no fulltext available</error>"                  return "<error>no fulltext available</error>"
   
   
       def getImageView(self,noredirect=None):
           """getImages; give Imageviewr  and <error></error> if somthing goes wrong."""
           try:
               fh=urllib.urlopen(self.metalink)
               dom=xml.dom.minidom.parse(fh)
               texttools=dom.getElementsByTagName('texttool')
               text=texttools[0].getElementsByTagName('image')
               imagetemp=getText(text[0].childNodes)
               
               text=dom.getElementsByTagName('archive-path')
               archivepath=getText(text[0].childNodes)
               archivepath=re.sub('/mpiwg/online/','',archivepath) 
               imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp
               if not noredirect:
                               self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')  
                   self.REQUEST.RESPONSE.redirect(imageurl)
               else:
                   return imageurl
           except:
   
               if not noredirect:
                   self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
                   self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
               else:
                   return "<error>no images available</error>"
   
       
     def getCopyrightsHTML(self):      def getCopyrightsHTML(self):
         """gib link auf copyright notiz aus"""          """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus"""
                   
         if hasattr(self,'copyrightModell'):          if hasattr(self,'copyrightModel'):
             obj=self.copyrightModell              obj=self.copyrightModel
                           
         else:          else:
             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:
                 label=getattr(self.copyrightTypes,copyright[2]).label                  if hasattr(self.copyrightTypes,copyright[2]):
                 ret.append(("""<a target="_blank" href="%s?partner=%s">%s</a>"""%(link,copyright[1],label),copyright[0],copyright[0],copyright[1],copyright[2]))                       copyrightTypeObj=getattr(self.copyrightTypes,copyright[2])
                        link="copyrightTypes/"+copyright[2]+'/copyright.html'
                   else:
                        copyrightTypeObj=getattr(obj,copyright[2])
                        link="copyrightModel/"+copyright[2]+'/copyright.html'
                        
                   label=copyrightTypeObj.label
                   url=getattr(copyrightTypeObj, 'url', '')
                   
                   if url!='':
                        ret.append((url,copyright[0],copyright[1],copyright[2],label))
                   else:
                       if hasattr(copyrightTypeObj, 'copyright.html'):
                            ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label))
                       else:
                            ret.append(('empty',copyright[0],copyright[1],copyright[2],label))
             except:              except:
                 """nothing"""                  """nothing"""
                           
         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 610  class ECHO_resource(Folder,Persistent): Line 1109  class ECHO_resource(Folder,Persistent):
         self.contentType=self.bib_type          self.contentType=self.bib_type
         for data in self.metadata:          for data in self.metadata:
             data_neu=re.sub('-','_',data)              data_neu=re.sub('-','_',data)
             self.metaDataHash[data_neu]=getattr(self,data)              self.meta
                           DataHash[data_neu]=getattr(self,data)[0:]
   
           
         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self)          pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource_metadata.zpt').__of__(self)
Line 668  class ECHO_resource(Folder,Persistent): Line 1168  class ECHO_resource(Folder,Persistent):
         """change metadata"""          """change metadata"""
         tags=self.findTagsFromMapping(self.contentType)          tags=self.findTagsFromMapping(self.contentType)
         for field in tags[1]:          for field in tags[1]:
             self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]              self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:]
                           
   
                                   
Line 686  class ECHO_resource(Folder,Persistent): Line 1186  class ECHO_resource(Folder,Persistent):
             except:              except:
                 """nothing"""                  """nothing"""
   
         return 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()          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()
   
                   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 695  class ECHO_resource(Folder,Persistent): Line 1196  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):      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')
         return writeMetadata(self.metalink,self.OSAS_meta)  
   
           if not hasattr(self,'metaDataHash'):
           
               self.copyIndex_meta2echo_resource()
           try:
               return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
           except:
               return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
   
       def showMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
           """schreibe md"""
           
           try:
               
               return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes")
           except:
               return "<error> no metadata stored</error>"
   
     def getMetaDataXML(self):      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"""
         self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')          self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
         return writeMetadata(self.metalink,self.metaDataHash)          return writeMetadata(self.metalink,self.metaDataHash)
Line 730  class ECHO_resource(Folder,Persistent): Line 1246  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 and Image Viewer','action':'changeViewerTemplateSetForm'},
       {'label':'set/change startpage','action':'setStartPageForm'},
       {'label':'Copy MD for indexing and search','action':'copySearchFields'},
     )      )
   
     def getOverview(self):      def getOverview(self):
Line 818  class ECHO_resource(Folder,Persistent): Line 1337  class ECHO_resource(Folder,Persistent):
     self.metaDataHash[field]=value[0:]      self.metaDataHash[field]=value[0:]
           
   
       def copySearchFields(self):
           """copys metadatafields to the object"""
           fields=['author','title','year']
           for field in fields:
               setattr(self,'MD_'+field,self.getFieldValue(field))
       
   
     def findLabelsFromMapping(self,referenceType):      def findLabelsFromMapping(self,referenceType):
         """gib hash mit label -> generic zurueck"""          """gib hash mit label -> generic zurueck"""
Line 872  class ECHO_resource(Folder,Persistent): Line 1397  class ECHO_resource(Folder,Persistent):
         bibdata={}          bibdata={}
         retdata={}          retdata={}
         fieldlist=self.standardMD.fieldList          fieldlist=self.standardMD.fieldList
                   fields=[]
     for referenceTypeF in temp:      for referenceTypeF in temp:
           #print referenceType
           
         if referenceTypeF[1].title.lower() == referenceType.lower():           if referenceTypeF[1].title.lower() == referenceType.lower(): 
             try:              try:
Line 889  class ECHO_resource(Folder,Persistent): Line 1415  class ECHO_resource(Folder,Persistent):
         return retdata,fieldlist,temp,fields          return retdata,fieldlist,temp,fields
   
           
       security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination
     def copyIndex_meta2echo_resource(self,RESPONSE=None):      def copyIndex_meta2echo_resource(self,RESPONSE=None):
         """copy MD von Index_meta to the echo_resource"""          """copy MD von Index_meta to the echo_resource"""
                   
         (metadict, error)=readMetadata(self.metalink)          (metadict, error)=readMetadata(self.metalink)
                   
   
           
         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:]
         fields=self.findTagsFromMapping(self.contentType)          fields=self.findTagsFromMapping(self.contentType)
                   
         #fields=self.findLabelsFromMapping(self.contentType)          #fields=self.findLabelsFromMapping(self.contentType)
Line 912  class ECHO_resource(Folder,Persistent): Line 1443  class ECHO_resource(Folder,Persistent):
         if RESPONSE:          if RESPONSE:
             return RESPONSE.redirect('manage_main')              return RESPONSE.redirect('manage_main')
                   
     def ECHO_getResourceMD(self,template="yes"):      def ECHO_getResourceMD(self,template="yes",back=None):
         """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""          """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
         (metadict, error)=readMetadata(self.metalink)          (metadict, error)=readMetadata(self.metalink)
   
               if back:
               self.REQUEST.SESSION['back']=back
   
         if not error=="": #Fehler beim Auslesen des Metafiles          if not error=="": #Fehler beim Auslesen des Metafiles
         return "ERROR:",error          return "ERROR:",error
Line 981  class ECHO_resource(Folder,Persistent): Line 1513  class ECHO_resource(Folder,Persistent):
             return sp[0][1]()              return sp[0][1]()
   
   
       security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination
                           
     def generate_label(self):      def generate_label(self):
         """Erzeugt_standard_Label aus Template"""          """Erzeugt_standard_Label aus Template"""
         pt=getattr(self,"label_template_"+self.bib_type)          pt=getattr(self,"label_template_"+self.contentType.lower())
   
       self.label=pt()[0:]
         return pt()          return pt()
   
       security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination
   
     def generate_title(self,RESPONSE=None):      def generate_title(self,RESPONSE=None):
         """Erzeugt_standard_Label aus Template"""          """Erzeugt_standard_Label aus Template"""
         pt=getattr(self,"label_template_"+self.contentType)          pt=getattr(self,"label_template_"+self.contentType.lower())
   
     self.title=pt()      self.title=pt()[0:]
           
         return pt()          return pt()
   
   Globals.InitializeClass(ECHO_resource)
   
 def manage_addECHO_resourceForm(self):  def manage_addECHO_resourceForm(self):
         """Form for adding a ressource"""          """Form for adding a ressource"""
         pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)          pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
Line 1021  class ECHO_externalLink(Folder): Line 1559  class ECHO_externalLink(Folder):
   
     def getTitle(self):      def getTitle(self):
     """title"""      """title"""
     return self.title.encode('utf-8')       try:
           return self.title.encode('utf-8','ignore') 
       except:
           self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error
           return self.title.encode('utf-8','ignore') 
   
     def getLabel(self):      def getLabel(self):
     """title"""      """title"""
     return self.label.encode('utf-8')       try:
           return self.label.encode('utf-8','ignore') 
       except:
           self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error
           return self.label.encode('utf-8','ignore') 
   
     def content_html(self):      def content_html(self):
         """template fuer content"""          """template fuer content"""
Line 1134  def manage_addECHO_link(self,id,title,la Line 1680  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 1142  class ECHO_collection(Folder, Persistent Line 1688  class ECHO_collection(Folder, Persistent
     viewClassificationList=viewClassificationListMaster      viewClassificationList=viewClassificationListMaster
     displayTypes=displayTypes      displayTypes=displayTypes
   
       path="/mpiwg/online/permanent/shipbuilding"
   
       def getRDF(self,urn=None):
           """rdf of the collection"""
           
           contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
   
           ret=getRDFDescription(self,self.absolute_url(),urn=urn)
           
           if not urn:
               urn=self.absolute_url()
               
           li="""<RDF:li RDF:resource="%s" />\n"""
   
           
           for content in contents:
               ret+=content[1].getRDF()+"\n"
               
           ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
           for content in contents:
               nurn=content[1].absolute_url()
               ret+=li%nurn
           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):
           """change form"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeLabelsForm').__of__(self)
           pt.content_type="text/html"
           return pt()
   
       def changeTitles(self):
           """change form"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeTitleForm').__of__(self)
           pt.content_type="text/html"
           return pt()
   
       def changeAccessRightsCollection(self):
           """change"""
           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].changeAccessRightMD(argv[resource[1].getId()])
               except:
                   """not"""
           return ret
   
       def changeLabelsInCollection(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].label=argv[resource[1].getId()][0:]
               except:
                   """not"""
           return ret
   
       def changeTitlesInCollection(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].title=argv[resource[1].getId()][0:]
               except:
                   """not"""
           return ret
           
       def updateCollection(self,RESPONSE=None):
           """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
           files=os.listdir(self.path)
       ret=""
           for fileName in files:
               
               if fileName:
           
           tempPath=re.sub("/mpiwg/online","",self.path)
           link="http://echo.mpiwg-berlin.mpg.de/zogilib_book?fn="+tempPath+"/"+fileName+"/pageimg"
           
           metalink=self.path+"/"+fileName+"/index.meta"
                   try:
   
               #link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb"
               
               newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'generated','book','','','','','','')
               self._setObject(fileName,newObj)
                   
               genObj=getattr(self,fileName)
                           #genObj.createIndexFile()
               ret+="OK:"+fileName+"<br/>"
           except:
               print "ERROR"
               ret+="ERROR:"+fileName+"<br/>"
   
       return ret
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
       def updateCollectionMD(self,RESPONSE=None):
           """updateMD"""
           files=os.listdir(self.path)
           for fileName in files:
               if fileName:
                   genObj=getattr(self,fileName)
                   genObj.copyIndex_meta2echo_resource()
                   genObj.generate_title()
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
   
   
       def changeViewerTemplateSetsForm(self):
           """change the viewer template set"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeViewerTemplateSet').__of__(self)
               return pt()
   
       def getViewerTemplateSets(self,obj_ids=None):
           """Get the ViewerTemplateSet title for configuration"""
           ret=[]
           
           try:
               viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
               
               for viewerTemplateSet in viewerTemplateSets:
                   ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
                   
               return ret
               
           except:
               return [('no ViewerTemplateSetfolders','')]
   
       def getTextToolsField(self,name,default=''):
           """Lese viewerTemplateSet der Collection not implemented yet!"""
           
           return default
   
               
       def isSelectedViewerTemplateSet(self,obj,id):
           """is ausgewählt"""
           
           if self.REQUEST['viewerTemplateSet']==id:
               return 1
           else:
               return None
   
       def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
           """change the templates"""
   
           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:
   
               resource[1].setStartPage(startpage)
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
   
   
       def copySearchFields(self,RESPONSE=None):
           """copys import metadatafields to the object"""
           resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
   
           for resource in resources:
   
               resource[1].copySearchFields()
   
           if RESPONSE is not None:
               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):
           """copy metadata from the storage to ECHO"""
   
           return reloadMetaDataFromStorage(self,RESPONSE=None)
   
       
     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"""
         #print "hi",name,sonst          #print "hi",name,sonst
Line 1178  class ECHO_collection(Folder, Persistent Line 1954  class ECHO_collection(Folder, Persistent
   
     def getTitle(self):      def getTitle(self):
     """title"""      """title"""
     return self.title.encode('utf-8')       try:
           return self.title.encode('utf-8','ignore') 
       except:
           self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error
           return self.title.encode('utf-8','ignore') 
   
     def getLabel(self):      def getLabel(self):
     """title"""      """title"""
     return self.label.encode('utf-8')       try:
           return self.label.encode('utf-8','ignore') 
           except:
           self.label=self.label.decode('iso-8859-1','ignore')[0:] #correnct conding error
           return self.label.encode('utf-8','ignore')
                   
     def createRessourcesFromXMLForm(self):      def createRessourcesFromXMLForm(self):
         """form"""          """form"""
Line 1205  class ECHO_collection(Folder, Persistent Line 1987  class ECHO_collection(Folder, Persistent
             ret+="<p>"+label+"</p>"              ret+="<p>"+label+"</p>"
             manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")              manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
         return ret          return ret
       
     def getImageTag(self):      def getImageTag(self):
         """GetTag"""          """GetTag"""
         try:          try:
Line 1215  class ECHO_collection(Folder, Persistent Line 1998  class ECHO_collection(Folder, Persistent
     def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):      def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
         """SSS"""          """SSS"""
         try:          try:
             manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)              manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
             return "done"              return "done"
         except:          except:
             return None              return None
Line 1382  class ECHO_collection(Folder, Persistent Line 2165  class ECHO_collection(Folder, Persistent
           
     security.declarePublic('ECHO_rerenderLinksMD')      security.declarePublic('ECHO_rerenderLinksMD')
   
     def ECHO_rerenderLinksMD(self,obj=None):  
         """Rerender all Links"""  
         if not obj:  
             obj = self  
               
         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])  
   
         for entry in entries:      def ECHO_rerenderLinksMDWarning(self):
         if entry[1].meta_type == 'ECHO_resource':          """change form"""
             entry[1].ECHO_getResourceMD(template="no")          pt=PageTemplateFile('Products/ECHO_content/zpt/rerenderLinksWarning').__of__(self)
             entry[1].generate_title()          pt.content_type="text/html"
           return pt()
   
         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 "Rerenderd all links to resources in: "+self.title  
   
     security.declarePublic('ECHO_newViewerLink')      security.declarePublic('ECHO_newViewerLink')
           
Line 1435  class ECHO_collection(Folder, Persistent Line 2213  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':'Rerender Links','action':'ECHO_rerenderLinksMD'},          {'label':'Change Labels','action':'changeLabels'},
           {'label':'Change Titles','action':'changeTitles'},
           {'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':'Set Startpage','action':'setStartpageFolderForm'},
           {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},
       {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
       {'label':'ImportCollection','action':'updateCollection'},
       {'label':'Copy MD for indexing and search','action':'copySearchFields'},
         )          )
   
     def getOverview(self):      def getOverview(self):
Line 1539  class ECHO_collection(Folder, Persistent Line 2323  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 1644  class ECHO_group(ECHO_collection): Line 2437  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):
           """rdf of the collection"""
           contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
   
           ret=getRDFDescription(self,self.absolute_url(),urn=urn)
   
           
           if not urn:
               urn=self.absolute_url()
           li="""<RDF:li RDF:resource="%s" />\n"""
           
           
           for content in contents:
               ret+=content[1].getRDF()+"\n"
               
           ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
           for content in contents:
               nurn=content[1].absolute_url()
               ret+=li%nurn
           return ret+"</RDF:Seq>"
           
     def index_html(self):      def index_html(self):
         """standard page"""          """standard page"""
         displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)          displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
Line 1866  class ECHO_root(Folder,Persistent,Implic Line 2691  class ECHO_root(Folder,Persistent,Implic
     meta_type="ECHO_root"      meta_type="ECHO_root"
   
   
       manage_options=Folder.manage_options+(
           {'label':'Main Config','action':'ECHO_copyright_configForm'},
           {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
           )
   
       
       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 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):
           """rdf of the collection"""
   
           contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
   
           ret=getRDFDescription(self,self.absolute_url(),urn=urn)
           
           li="""<RDF:li RDF:resource="%s" />\n"""
   
           
           for content in contents:
               ret+=content[1].getRDF()+"\n"
               
           ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
           for content in contents:
               nurn=content[1].absolute_url()
               ret+=li%nurn
           return ret+"</RDF:Seq>"
           
   
       def showContent(self,path):
           """return content/html"""
           
           return urllib.urlopen(path+"/content_html").read()
       
       def getImageViewers(self):
           """images"""
           viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
           return viewers
       
   
     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=="":
Line 1955  class ECHO_root(Folder,Persistent,Implic Line 2838  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 1976  class ECHO_root(Folder,Persistent,Implic Line 2859  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 2185  class ECHO_root(Folder,Persistent,Implic Line 3076  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 2307  class ECHO_root(Folder,Persistent,Implic Line 3201  class ECHO_root(Folder,Persistent,Implic
         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 resource[1].getFullTextXML(noredirect="yes"):              
                 if hasattr(resource[1],'link'):                  if hasattr(resource[1],'link'):
                     viewer_url=echo_url+"/getMetaDataXML"                  meta_url=echo_url+"/getMetaDataXML"
                 else:  
                     viewer_url="NO URL"  
                 if filter:  
                     if re.search(filter,viewer_url):  
                         ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))  
                 else:                  else:
                     ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))                  meta_url="NO_URL"
                   
               if filter and not re.search(filter,viewer_url):
                   continue
   
               #modificationDate=time.strptime(str(resource[1].bobobase_modification_time()),"%Y/%m/%d %H:%M:%S %Z")
               
               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>"""          ret +="""\n</index>"""
                   
                   
Line 2331  class ECHO_root(Folder,Persistent,Implic Line 3231  class ECHO_root(Folder,Persistent,Implic
                   
     def getPartnerFromID(self):      def getPartnerFromID(self):
         """find partner form ID return object"""          """find partner form ID return object"""
         pa=self.REQUEST[partner]          pa=self.REQUEST['partner']
         par=self.ZopeFind(self.partners, obj_ids='pa')          par=self.ZopeFind(self.partners, obj_ids=[pa])
           return par
           
       def getPartnerFromIDParameter(self, id):
           """ find partners from 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):
     """Add an ECHO_root"""      """Add an ECHO_root"""
Line 2353  class ECHO_copyrightType(Folder): Line 3263  class ECHO_copyrightType(Folder):
   
     meta_type="ECHO_copyrightType"      meta_type="ECHO_copyrightType"
           
     def __init__(self,id,title,label):      def __init__(self,id,title,label,url):
         """init"""          """init"""
         self.id=id          self.id=id
         self.title=title          self.title=title
         self.label=label          self.label=label
           self.url=url
   
     manage_options = Folder.manage_options+(      manage_options = Folder.manage_options+(
         {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'},          {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'},
Line 2369  class ECHO_copyrightType(Folder): Line 3280  class ECHO_copyrightType(Folder):
         pt.content_type="text/html"          pt.content_type="text/html"
         return pt()          return pt()
   
     def ECHO_copyrightType_config_main(self,title,label,RESPONSE=None):      def ECHO_copyrightType_config_main(self,title,label,url,RESPONSE=None):
         """change"""          """change"""
         self.title=title          self.title=title
         self.label=label          self.label=label
           self.url=url
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 2383  def manage_addECHO_copyrightTypeForm(sel Line 3295  def manage_addECHO_copyrightTypeForm(sel
         return pt()          return pt()
   
   
 def manage_addECHO_copyrightType(self,id,title,label,RESPONSE=None):  def manage_addECHO_copyrightType(self,id,title,label,url,RESPONSE=None):
     """addaresource"""      """addaresource"""
   
     newObj=ECHO_copyrightType(id,title,label)      newObj=ECHO_copyrightType(id,title,label,url)
   
     self._setObject(id,newObj)      self._setObject(id,newObj)
   
Line 2400  class ECHO_partner(Image,Persistent): Line 3312  class ECHO_partner(Image,Persistent):
   
     meta_type="ECHO_partner"      meta_type="ECHO_partner"
   
     def __init__(self, id, title,url, file, copyrightType, person, email, country, content_type='', precondition=''):      def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''):
         self.__name__=id          self.__name__=id
         self.title=title          self.title=title
         self.url=url          self.url=url
         self.person=person          self.person=person
         self.email=email          self.email=email
         self.country=country          self.country=country
           self.color=color
         self.precondition=precondition          self.precondition=precondition
         self.copyrightType=copyrightType          self.copyrightType=copyrightType
         data, size = self._read_data(file)          data, size = self._read_data(file)
Line 2418  class ECHO_partner(Image,Persistent): Line 3331  class ECHO_partner(Image,Persistent):
         )          )
   
           
     def changeECHO_partner(self,url,copyrightType,person, email, country, RESPONSE=None):      def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None):
         """Change main information"""          """Change main information"""
         self.url=url          self.url=url
         self.person=person          self.person=person
         self.email=email          self.email=email
         self.country=country          self.country=country
           self.color=color
         self.copyrightType=copyrightType          self.copyrightType=copyrightType
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 2443  manage_addECHO_partnerForm=DTMLFile('dtm Line 3357  manage_addECHO_partnerForm=DTMLFile('dtm
   
   
   
 def manage_addECHO_partner(self, id,file,url, person, email, country, copyrightType='', title='', precondition='', content_type='',  def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='',
                     REQUEST=None):                      REQUEST=None):
     """      """
     Add a new ECHO_partner object.      Add a new ECHO_partner object.
Line 2462  def manage_addECHO_partner(self, id,file Line 3376  def manage_addECHO_partner(self, id,file
     self=self.this()      self=self.this()
   
     # First, we create the image without data:      # First, we create the image without data:
     self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, content_type, precondition))      self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition))
   
     # Now we "upload" the data.  By doing this in two steps, we      # Now we "upload" the data.  By doing this in two steps, we
     # can use a database trick to make the upload more efficient.      # can use a database trick to make the upload more efficient.
Line 2477  def manage_addECHO_partner(self, id,file Line 3391  def manage_addECHO_partner(self, id,file
         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.114  
changed lines
  Added in v.1.159


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