Diff for /ECHO_content/ECHO_collection.py between versions 1.165 and 1.188

version 1.165, 2004/08/27 22:57:57 version 1.188, 2004/11/10 16:32:11
Line 29  from Products.PageTemplates.PageTemplate Line 29  from Products.PageTemplates.PageTemplate
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate  from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 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 *
 import urllib  import urllib
   import smtplib
 import time  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 255  def content_html(self,type): Line 263  def content_html(self,type):
             pt.content_type="text/html"              pt.content_type="text/html"
             return pt()              return pt()
           
 def toList(field):  
     """Einzelfeld in Liste umwandeln"""  
     if type(field)==StringType:  
         return [field]  
     else:  
         return field  
           
 def getText(nodelist):  
   
     rc = ""  
     for node in nodelist:  
         if node.nodeType == node.TEXT_NODE:  
            rc = rc + node.data  
     return rc  
   
 def getTextFromNode(nodename):  def getTextFromNode(nodename):
     nodelist=nodename.childNodes      nodelist=nodename.childNodes
Line 303  class BrowserCheck: Line 299  class BrowserCheck:
     """check the browsers request to find out the browser type"""      """check the browsers request to find out the browser type"""
           
     def __init__(self, zope):      def __init__(self, zope):
           """initialisiere"""
     self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT")      self.ua = zope.REQUEST.get_header("HTTP_USER_AGENT")
     self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0)      self.isN4 = (string.find(self.ua, 'Mozilla/4.') > -1) and (string.find(self.ua, 'MSIE') < 0)
     self.isIE = string.find(self.ua, 'MSIE') > -1      self.isIE = string.find(self.ua, 'MSIE') > -1
Line 315  class BrowserCheck: Line 312  class BrowserCheck:
     self.isIEWin = self.isIE and self.isWin      self.isIEWin = self.isIE and self.isWin
     self.isIEMac = self.isIE and self.isMac      self.isIEMac = self.isIE and self.isMac
   
   class Hello(Folder):
       """helloo"""
       def __init__(self):
           self.test=test
   
       meta_type="ECHO_copyright"
       
       
       
       def __init__(self,id,title,copyrights):
           """init"""
           self.title=title
           self.id=id
           self.copyrights=copyrights[0:]
   
       def getCopyrights(self):
           """return coyprights"""
           return self.copyrights
               
       manage_options = Folder.manage_options+(
           {'label':'Main Config','action':'ECHO_copyright_configForm'},
           )
   
   
       def ECHO_copyright_configForm(self):
           """change form"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_copyright').__of__(self)
           pt.content_type="text/html"
           return pt()
   
       def ECHO_copyright_config(self,title,RESPONSE=None):
           """change"""
           self.title=title
           self.copyrights=[]
           self.copyrights=getCopyrightsFromForm(self,self.REQUEST.form)[0:]
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
   
                   
Line 390  def writeMetadata(url,metadict,project=N Line 425  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 420  def writeMetadata(url,metadict,project=N Line 456  def writeMetadata(url,metadict,project=N
     if digiliburlprefix:      if digiliburlprefix:
         updateTextToolNode('digiliburlprefix',digiliburlprefix)          updateTextToolNode('digiliburlprefix',digiliburlprefix)
           
           try:    
     return dom.toxml().encode('utf-8')      return dom.toxml().encode('utf-8')
       except:
        return dom.toxml('utf-8')
   
           
           
Line 520  class ECHO_copyright(Folder): Line 559  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 578  class ECHO_layoutTemplate(ZopePageTempla Line 618  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 1001  class ECHO_resource(Folder,Persistent): Line 1041  class ECHO_resource(Folder,Persistent):
             return pt()              return pt()
           
           
       def createImageUrl(self,pn=1):
           """create ImageUrl"""
   
           
           resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
           
           digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix')
           images=readFieldFromXML(self.metalink,'texttool','image')
   
   
           if (not resourcepath) or (not digiliburlprefix) or (not images):
               zLOG.LOG("ECHO (createImageUrl)",zLOG.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url())
               return None
           resourcepath=resourcepath.replace('/mpiwg/online','')
           if not digiliburlprefix: digiliburlprefix="http://echo.mpiwg-berlin.mpg.de/zogilib?"
   
           if (not images) or (not resourcepath): return None
   
           return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn)
       
       def copyTitleToInfoXML(self,RESPONSE=None):
           """copy title from the resource"""
           presentationXML=readFieldFromXML(self.metalink,'texttool','presentation')
           resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
           if (not presentationXML) or (not resourcepath): 
           if RESPONSE:
               RESPONSE.write("Error: %s\n"%self.getId())
           else:
               return None,self.absolute_url()
   
           try:
               fh=file(os.path.join(resourcepath,presentationXML),'w')
               fh.write("""<info>
               <author></author>
               <title>%s</title>
               <date></date>
               <display>yes</display>
               </info>"""%self.title)
               fh.close()
               return 1,self.getId()
           except:
               if RESPONSE:
                   RESPONSE.write("Error: %s\n"%self.getId())
               else:
                   return None,self.absolute_url()
   
           
     def setStartPage(self,startpage=None,RESPONSE=None):      def setStartPage(self,startpage=None,RESPONSE=None):
         """set start page, if no startpage defined use the generic one of the resource"""          """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          if (not (type(startpage)==StringType)):
               if ("__generic" in startpage): # checke ob generic in der liste
             startpage=self.absolute_url()+"/startpage_html"              startpage=self.absolute_url()+"/startpage_html"
               elif ("__firstPage" in startpage): # checke ob generic in der liste
                   startpage=self.createImageUrl()
                           
         if (not startpage) or (startpage=="__generic"):          if (not startpage):
              startpage=self.absolute_url()+"/startpage_html"               startpage=self.absolute_url()+"/startpage_html"
                   elif (startpage=="__generic"):
               startpage=self.absolute_url()+"/startpage_html"
           elif (startpage=="__firstPage"):
                   startpage=self.createImageUrl()
           
         params="startpage=%s"%startpage          params="startpage=%s"%startpage
           print 'http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))
                   
         ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read()          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()
           
Line 1026  class ECHO_resource(Folder,Persistent): Line 1120  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://content.mpiwg-berlin.mpg.de','',path) # falls content 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://vision.mpiwg-berlin.mpg.de','',path) # falls vision als server
           path=re.sub('http://xserve02.mpiwg-berlin.mpg.de:18880','',path) # falls vision als server
           path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
         path=re.sub('/index.meta','',path)           path=re.sub('/index.meta','',path) 
   
   
Line 1041  class ECHO_resource(Folder,Persistent): Line 1137  class ECHO_resource(Folder,Persistent):
             return pt()              return pt()
   
   
      
     def getTextToolsField(self,name,default=''):      def getTextToolsField(self,name,default=''):
         """Lese Textoolsfelder aus index.meta im path aus"""          """Lese Textoolsfelder aus index.meta im path aus"""
                   
Line 1090  class ECHO_resource(Folder,Persistent): Line 1187  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://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          path=re.sub('http://vision.rz-berlin.mpg.de','',path) # falls vision als server
   
Line 1128  class ECHO_resource(Folder,Persistent): Line 1226  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."""
   
         try:          try:
               #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink)
             fh=ECHO_helpers.urlopen(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()
               #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh")
               #keine url
               if not (texturl.split(":")[0] in ['http','ftp','file']): 
               if not noredirect:
                   return file(texturl).read()
                           else:
                   return texturl
   
             if not noredirect:              if not noredirect:
                             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')                                self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')  
                       zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl)
                 self.REQUEST.RESPONSE.redirect(texturl)                  self.REQUEST.RESPONSE.redirect(texturl)
             else:              else:
                 return texturl                  return texturl
Line 1162  class ECHO_resource(Folder,Persistent): Line 1274  class ECHO_resource(Folder,Persistent):
             archivepath=getText(text[0].childNodes)              archivepath=getText(text[0].childNodes)
             archivepath=re.sub('/mpiwg/online/','',archivepath)               archivepath=re.sub('/mpiwg/online/','',archivepath) 
             imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp              imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp
               fh.close()
   
             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(imageurl)                  self.REQUEST.RESPONSE.redirect(imageurl)
Line 2088  class ECHO_collection(Folder, Persistent Line 2202  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 2150  class ECHO_collection(Folder, Persistent Line 2264  class ECHO_collection(Folder, Persistent
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
       def copyTitleToInfoXMLFolder(self,RESPONSE=None):
           """copy title into the title field of info.xml
           author and date werden leer!!!
           """
   
   
           resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
           
               
           for resource in resources:
               ret,txt=resource[1].copyTitleToInfoXML()
               if (not ret) and RESPONSE:
                   RESPONSE.write("error: %s\n"%txt)
               if ret and RESPONSE:
                   RESPONSE.write("ok: %s\n"%txt)
               
               #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt)   
           if RESPONSE is not None:
               RESPONSE.write("done!\n")
               RESPONSE.close()
               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"""
Line 2277  class ECHO_collection(Folder, Persistent Line 2411  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 2284  class ECHO_collection(Folder, Persistent Line 2423  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 2541  class ECHO_collection(Folder, Persistent Line 2680  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 2550  class ECHO_collection(Folder, Persistent Line 2689  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 2569  class ECHO_collection(Folder, Persistent Line 2709  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 2941  def manage_addECHO_userFolderForm(self): Line 3089  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 getEdges(seqs,urn):  
     """edges"""  
     ret=[]  
     #print urn,seqs  
     for seqsList in seqs[urn]:  
           
         try:  
             for seq in seqsList:  
                 ret+=seq.getElementsByTagName("RDF:li")  
         except:  
                 ret+=seqsList.getElementsByTagName("RDF:li")  
     return ret  
   
 def createSubs(self,seqs,descrs,urn):  
     """create subs"""  
     for edge in getEdges(seqs,urn):  
         cn=createNode(self,descrs[edge.getAttribute('RDF:resource')])  
         if cn[0]=="CDLI_group":  
             #print "HHHHHH",cn[1],seqs,descrs,cn[2]  
             createSubs(cn[1],seqs,descrs,cn[2])  
 def getEdges2(seqs,urn):  
     """edges"""  
     ret=[]  
     #print urn,seqs  
   
     return seqs[urn]  
   
 def createSubs2(self,seqs,descrs,urn,level=0):  
     """create subs"""  
           
     for edge in getEdges2(seqs,urn):  
         print "urnXX",urn.encode('utf-8'),level  
         cn=createNode2(self,descrs,edge)  
         if cn[0]=="CDLI_group":  
   
             createSubs2(cn[1],seqs,descrs,cn[2],level+1)  def createNode(self,descrs,node):
             print "urnddonesubs",urn.encode('utf-8')  
         print "urndonenode",urn.encode('utf-8')  
     return  
   
 def createNode2(self,descrs,node):  
     name=descrs[node]['name']      name=descrs[node]['name']
     type=descrs[node]['type']      type=descrs[node]['type']
     urn=node      urn=node
     print "    will create",node.encode('utf-8')      #print "    will create",node.encode('utf-8')
     id=re.sub('[^a-zA-Z0-9]','',name).encode('ascii','ignore')      id=re.sub('[^a-zA-Z0-9]','',name).encode('ascii','ignore')
     #print "id",id      #print "id",id
     #print type      #print type
Line 3012  def createNode2(self,descrs,node): Line 3122  def createNode2(self,descrs,node):
                   
     return "XX"      return "XX"
   
 def createNode(self,nodes):  
     for node in nodes:  
         name=getTextFromNode(node.getElementsByTagName("ECHONAVIGATION:name")[0])  
         type=getTextFromNode(node.getElementsByTagName("ECHONAVIGATION:type")[0])  
         urn=node.getAttribute("RDF:about")  
           
         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":  
             print self.getId()  
           
             manage_addECHO_collection(self,id,name,name,"","","","","")  
             print "done::::",getattr(self,id)  
             return type,getattr(self,id),urn  
   
         if type=="CDLI_item":  
             manage_addECHO_resource(self,id,name,name,"","",urn,"","")  
         return "XX"  
           
           
   
 class ECHO_root(Folder,Persistent,Implicit):  class ECHO_root(Folder,Persistent,Implicit):
     """ECHO Root Folder"""      """ECHO Root Folder"""
Line 3042  class ECHO_root(Folder,Persistent,Implic Line 3130  class ECHO_root(Folder,Persistent,Implic
           
     meta_type="ECHO_root"      meta_type="ECHO_root"
   
       ###CDLI adds -> have to be removed
     def getTablet(self,item):      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=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read()
           
             read=re.sub("\[search\]","search",read)              read=re.sub("\[search\]","search",read)
           
         return read[read.find("<body>")+6:read.rfind("</body>")]          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 checkResource(self,id):
           """checks if a resource is in the tree, gives back none or list of resources"""
           if hasattr(self,"_v_checkResource") and self._v_checkResource.has_key(id): #existiert ein cache und id ist bereits drin?
                   return self._v_checkResource[id]
   
           else:
               resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],obj_ids=[id],search_sub=1)
   
               if not hasattr(self,"_v_checkResource"): self._v_checkResource={}#lege cache an falls nicht existent
               if resources:
                   self._v_checkResource[id]=resources[0:] # slicing to be sure that data is stabil
               else:
                   self._v_checkResource[id]=None
               
               return self._v_checkResource[id]
           
       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"""
   
     def generateFromRDF2(self):  
         """generate from RDF2"""  
         global seqs          global seqs
         seqs={}          seqs={}
         global descrs          global descrs
Line 3059  class ECHO_root(Folder,Persistent,Implic Line 3189  class ECHO_root(Folder,Persistent,Implic
         key=""          key=""
         global value          global value
         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):          def start_element(name,attrs):
   
             global seqs              global seqs
Line 3115  class ECHO_root(Folder,Persistent,Implic Line 3259  class ECHO_root(Folder,Persistent,Implic
         p.StartElementHandler = start_element          p.StartElementHandler = start_element
         p.EndElementHandler = end_element          p.EndElementHandler = end_element
         p.CharacterDataHandler = char_data          p.CharacterDataHandler = char_data
         fileName="/Users/dwinter/Documents/Projekte/CDLI/test11.rdf"  
                   
         p.ParseFile(file(fileName))          
           p.ParseFile(file)
         self.REQUEST.RESPONSE.write("<html><body><h1>Start</h1>")          self.REQUEST.RESPONSE.write("<html><body><h1>Start</h1>")
         createSubs2(self,seqs,descrs,"/Cuneiform Corpus")          createSubs(self,seqs,descrs,startNode)
         self.REQUEST.RESPONSE.write("<h1>done</h1></body></html>")          self.REQUEST.RESPONSE.write("<h1>done</h1></body></html>")
         print "done"          #print "done"
   
                   
         return "done"          return "done"
           
     def generateFromRDF(self):  
         """generate Structure from rdf"""  
         dom=xml.dom.minidom.parse("/Users/dwinter/Documents/Projekte/CDLI/test10.rdf")  
         seqs={}  
         descrs={}  
         for seq in dom.getElementsByTagName("RDF:Seq"):  
            key=seq.getAttribute('RDF:about')  
            try:  
                seqs[key].append(seq)  
            except:  
                seqs[key]=[seq]  
   
           
         for descr in dom.getElementsByTagName("RDF:Description"):  
            key=descr.getAttribute('RDF:about')  
            try:  
                descrs[key].append(descr)  
            except:  
                descrs[key]=[descr]  
         createSubs(self,seqs,descrs,"echo:collectionroot")  
                   
                   
                   
Line 3175  class ECHO_root(Folder,Persistent,Implic Line 3299  class ECHO_root(Folder,Persistent,Implic
         {'label':'Main Config','action':'ECHO_copyright_configForm'},          {'label':'Main Config','action':'ECHO_copyright_configForm'},
         {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},          {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
         {'label':'Change Weights','action':'changeWeights'},          {'label':'Change Weights','action':'changeWeights'},
           {'label':'Generate from RDF','action':'generateFromRDFForm'},
   
         )          )
   
           
Line 3441  class ECHO_root(Folder,Persistent,Implic Line 3567  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 3507  class ECHO_root(Folder,Persistent,Implic Line 3653  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):
                     link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)              if pn:
                   link.setAttribute("href",self.aq_parent.absolute_url()+"/references?id="+ref+"&p="+pn)
               else:
                   link.setAttribute("href",self.aq_parent.absolute_url()+"/references?id="+ref)
   
   
             newxml=dom.toxml('utf-8')              newxml=dom.toxml('utf-8')
               
Line 3521  class ECHO_root(Folder,Persistent,Implic Line 3673  class ECHO_root(Folder,Persistent,Implic
   
     def xml2html(self,str,quote="yes"):      def xml2html(self,str,quote="yes"):
         """link2html fuer VLP muss hier noch raus"""          """link2html fuer VLP muss hier noch raus"""
     print str  
         if str:          if str:
             if quote=="yes2":              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")  
                 if self.checkRef(ref):  
                     link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)  
   
             str= dom.toxml()          newLink=dom.createElementNS(EMPTY_NAMESPACE,"a")
           for x in cns:
               newLink.appendChild(x)
                   
               
           
           link.parentNode.replaceChild(newLink,link)
                   if self.checkRef(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)
   
               #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 link.toxml('utf-8')
           #print type(str)
         retStr=regexpPage.search(str)          retStr=regexpPage.search(str)
           try: # hack warum fehtl manchmal page??
         return retStr.group(1)          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 3577  class ECHO_root(Folder,Persistent,Implic Line 3759  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 3684  class ECHO_root(Folder,Persistent,Implic Line 3866  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 3707  class ECHO_root(Folder,Persistent,Implic Line 3900  class ECHO_root(Folder,Persistent,Implic
                                   
         ret +="""\n</index>"""          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 4108  def manage_addECHO_institution(self, id, Line 4300  def manage_addECHO_institution(self, id,
         except: url=REQUEST['URL1']          except: url=REQUEST['URL1']
         REQUEST.RESPONSE.redirect('%s/manage_main' % url)          REQUEST.RESPONSE.redirect('%s/manage_main' % url)
     return id      return id
   

Removed from v.1.165  
changed lines
  Added in v.1.188


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