Diff for /ECHO_content/ECHO_helpers.py between versions 1.60 and 1.82

version 1.60, 2005/09/12 22:23:44 version 1.82, 2007/05/03 14:23:46
Line 14  from AccessControl import ClassSecurityI Line 14  from AccessControl import ClassSecurityI
 import os.path  import os.path
 from OFS.Folder import Folder  from OFS.Folder import Folder
 import ECHO_collection  import ECHO_collection
   import base64
   import bz2
   import xmlrpclib
   
   import logging
   
   #erstzt logging
   def logger(txt,method,txt2):
       """logging"""
       logging.info(txt+ txt2)
   
 displayTypes = ['ZSQLExtendFolder','ZSQLBibliography','ECHO_group','ECHO_collection','ECHO_resource','ECHO_link','ECHO_sqlElement','ECHO_pageTemplate','ECHO_externalLink','ImageCollectionIFrame','VLP_resource','VLP_essay','ECHO_ZCatalogElement','ImageCollection','versionedFileFolder','ECHO_movie']  displayTypes = ['ZSQLExtendFolder','ZSQLBibliography','ECHO_group','ECHO_collection','ECHO_resource','ECHO_link','ECHO_sqlElement','ECHO_pageTemplate','ECHO_externalLink','ImageCollectionIFrame','VLP_resource','VLP_essay','ECHO_ZCatalogElement','ImageCollection','versionedFileFolder','ECHO_movie']
   
   
   #decode and compress for xmlrpc communication with OSAS_server
   
   def encodeRPC(string):
       return base64.encodestring(bz2.compress(string))
   def decodeRPC(string):
       return bz2.decompress(base64.decodestring(string))
   
 def content_html(self,type):  def content_html(self,type):
         """template fuer content"""          """template fuer content"""
         #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])          #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
Line 25  def content_html(self,type): Line 43  def content_html(self,type):
         #    return templates[0][1]()          #    return templates[0][1]()
   
         if hasattr(self,type+"_template"):          if hasattr(self,type+"_template"):
               logging.info("type: %s"%type)
             obj=getattr(self,type+"_template")              obj=getattr(self,type+"_template")
             return obj()              return obj()
         else:          else:
Line 39  class ECHO_basis: Line 58  class ECHO_basis:
     security=ClassSecurityInfo()      security=ClassSecurityInfo()
     security.declarePublic('getImageTag')      security.declarePublic('getImageTag')
   
       management_page_charset="utf-8"
       isVisible = True
       
     def manage_addECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None):      def manage_addECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None):
         return ECHO_collection.manage_addECHO_locale(self,lang,title,label)          return ECHO_collection.manage_addECHO_locale(self,lang,title,label)
                   
Line 115  class ECHO_basis: Line 137  class ECHO_basis:
   
         return ret          return ret
                   
       def content_html_XMLRpc(self):
           """xml_rpc_version"""
           return encodeRPC(self.content_html())
       
     def content_html(self,type="collection"):      def content_html(self,type="collection"):
         """template fuer content bei einbau und ECHO_Umgebung"""          """template fuer content bei einbau und ECHO_Umgebung"""
                   
         return content_html(self,type)          return content_html(self,type)
                   
       def getIsVisible(self):
       """return if object and all parents are visible"""
       
       # if object is not visible return False
       if hasattr(self,'isVisible'):
           if not self.isVisible : return False
           
       # else if parent of object is not ECHO_root, ECHO_basis or None
       if not self.aq_parent.meta_type in ['ECHO_root','ECHO_basis',None] :
           return self.aq_parent.getIsVisible()
   
       # else return True
       return True
   
       def setIsVisible(self, isVisible):
       """ set object attribute isVisible"""
       self.isVisible = isVisible
   
       def getAttributeIsVisible(self):
       """ return object attribute isVisible"""
       if hasattr(self,'isVisible'):
           return self.isVisible
       return True
       
     def getTitle(self):      def getTitle(self):
     """title"""      """title"""
           if hasattr(self,'getLanguage'):
     lang=self.getLanguage()      lang=self.getLanguage()
           else:
               lang=None
   
     locale=None      locale=None
     if lang and not (lang =="de"):      if lang and not (lang =="de"):
         locale=self.ZopeFind(self,obj_ids=["locale_"+lang])          locale=self.ZopeFind(self,obj_ids=["locale_"+lang])
Line 130  class ECHO_basis: Line 184  class ECHO_basis:
     if locale:      if locale:
         return self.decode(locale[0][1].title)          return self.decode(locale[0][1].title)
     else:      else:
         return self.decode(self.title)  
   
   
     try:      try:
         return self.title.encode('utf-8','ignore')                   return self.decode(self.title)
     except:      except:
         self.title=self.title.decode('iso-8859-1','ignore')[0:] #correnct conding error                  return self.title
         return self.title.encode('utf-8','ignore')   
           
     def getLabel(self):      def getLabel(self):
     """title"""      """title"""
           if hasattr(self,'getLanguage'):
     lang=self.getLanguage()      lang=self.getLanguage()
           else:
               lang=None
   
     locale=None      locale=None
                   
     if lang and not (lang=="de"):      if lang and not (lang=="de"):
         locale=self.ZopeFind(self,obj_ids=["locale_"+lang])          locale=self.ZopeFind(self,obj_ids=["locale_"+lang])
   
Line 160  class ECHO_basis: Line 215  class ECHO_basis:
         return ret          return ret
           
     return self.decode(self.label)      return self.decode(self.label)
     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 changeECHOEntriesForm(self):      def changeECHOEntriesForm(self):
         """change Entries for the ECHO Navigation environment"""          """change Entries for the ECHO Navigation environment"""
Line 307  class ECHO_basis: Line 356  class ECHO_basis:
         js+="""addArea('%s', 'overview', %s, '%s', '%s');\n"""%(ob.getFullId(),ob.getCoordString(),ob.getType(),perm)          js+="""addArea('%s', 'overview', %s, '%s', '%s');\n"""%(ob.getFullId(),ob.getCoordString(),ob.getType(),perm)
         return js          return js
   
     def createMapHead(self):      def createMapHead(self,mapColTypes=None):
         """create javascript include and script tags for head"""          """create javascript include and script tags for head"""
         pt=zptFile(self, 'zpt/ECHO_content_map_frag_js')          pt=zptFile(self, 'zpt/ECHO_content_map_frag_js')
         return pt()          return pt(mapColTypes=mapColTypes)
   
     def createMapImg(self):      def createMapImg(self):
     """generate img-tag for map"""      """generate img-tag for map"""
Line 408  class ECHO_basis: Line 457  class ECHO_basis:
                 if hasattr(getattr(self,link),'link'):                  if hasattr(getattr(self,link),'link'):
             cLink=getattr(self,link).link              cLink=getattr(self,link).link
             # if existing delete virtuell path               # if existing delete virtuell path 
                           if hasattr(self.REQUEST,'VirtualRootPhysicalPath'):
                 cLink=cLink.replace('/'.join(self.REQUEST['VirtualRootPhysicalPath']),'')                  cLink=cLink.replace('/'.join(self.REQUEST['VirtualRootPhysicalPath']),'')
   
         if backLink and hasattr(getattr(self,link),'link') and backLink==self.REQUEST['SERVER_URL']+cLink.lstrip():          if backLink and hasattr(getattr(self,link),'link') and backLink==self.REQUEST['SERVER_URL']+cLink.lstrip():
Line 506  def readFieldFromXML(meta_url,parent,fie Line 556  def readFieldFromXML(meta_url,parent,fie
                       
 def urlopen(url):  def urlopen(url):
     """urlopen mit timeout"""      """urlopen mit timeout"""
     socket.setdefaulttimeout(2)          socket.setdefaulttimeout(10)
     ret=urllib.urlopen(url)      ret=urllib.urlopen(url)
     socket.setdefaulttimeout(5)      socket.setdefaulttimeout(5)
     return ret      return ret
Line 530  def checkOnlyOneInGroup(object): Line 580  def checkOnlyOneInGroup(object):
         return displayedObjects[0][1]          return displayedObjects[0][1]
     else:       return object      else:       return object
   
 def getSubCols(self, sortfield=None, subColTypes=displayTypes, sortFieldMD=None,searchMD=None):  
           
   def getSubCols(self, sortfield=None, 
                  subColTypes=displayTypes, 
                  sortFieldMD=None,
                  searchMD=None,
                  searchMD_modus='search',
                  searchSimple=None,
                  generic="yes",search_sub=0,
                  isVisible=True):
           
     def sort(x,y):      def sort(x,y):
         return cmp(x[0],y[0])          return cmp(x[0],y[0])
           
     def sortfnc(sortfield,x,y):      def sortfnc(sortfield,x,y):
         try:          try:
             xa=x[1].getMDValue(sortfield)                          xa=x[1].getMDValue(sortfield,generic=generic)
         except:          except:
             xa=""              xa=""
         try:          try:
             ya=y[1].getMDValue(sortfield)                          ya=y[1].getMDValue(sortfield,generic=generic)
         except:          except:
             ya=""              ya=""
         return cmp(xa,ya)          return cmp(xa,ya)
           
     sortWithMD = lambda sortfield : (lambda x,y : sortfnc(sortfield,x,y))      sortWithMD = lambda sortfield : (lambda x,y : sortfnc(sortfield,x,y))
         ids=[]          ids=[]
     displayedObjects=self.ZopeFind(self,obj_metatypes=subColTypes)          displayedObjects=self.ZopeFind(self,obj_metatypes=subColTypes,search_sub=search_sub)
   
           
           if searchSimple and (not (searchSimple==""))and hasattr(self,'resourceCatalog'):         
               searchString=" AND ".join(searchSimple.split())         
               ids=[x.getObject() for x in self.resourceCatalog({'getMDValueSimpleSearchField':searchString,'getIsVisible':True})]         
           else:
     for entry in displayedObjects:      for entry in displayedObjects:
   
               
         object=entry[1]          object=entry[1]
         if searchMD and hasattr(object,'getMDValue'):                      if searchMD:
                            if hasattr(object,'getMDValue'):
             flag=0              flag=0
             for field in searchMD.keys():              for field in searchMD.keys():
                 if object.getMDValue(field)==searchMD[field]:                                      #if object.getMDValue(field,generic=generic)==searchMD[field]:
                                       #if re.match(searchMD[field],object.getMDValue(field,generic=generic)):
                                       if searchMD_modus=='match':
                                           searchResult=re.match(searchMD[field],object.getMDValue(field,generic=generic))
                                       else:
                                           searchResult=re.search(searchMD[field],object.getMDValue(field,generic=generic))
                                       if searchResult:
                     flag=1                      flag=1
                 else:                  else:
                     flag=0                      flag=0
Line 568  def getSubCols(self, sortfield=None, sub Line 633  def getSubCols(self, sortfield=None, sub
                 ids.append(object)                  ids.append(object)
         else:          else:
             ids.append(object)              ids.append(object)
   
     if not sortfield:      if not sortfield:
             sortfield=getattr(self,'sortfield','weight')              sortfield=getattr(self,'sortfield','weight')
   
               
         tmplist=[]          tmplist=[]
   
         for x in ids:          for x in ids:
           
         if hasattr(x,sortfield):          if hasattr(x,sortfield):
             try:              try:
                 tmp=int(getattr(x,sortfield))                  tmp=int(getattr(x,sortfield))
Line 593  def getSubCols(self, sortfield=None, sub Line 653  def getSubCols(self, sortfield=None, sub
     else:      else:
         tmplist.sort(sortWithMD(sortFieldMD))          tmplist.sort(sortWithMD(sortFieldMD))
           
         return [x for (key,x) in tmplist]          ret=[x for (key,x) in tmplist]
         
           return ret
   
 def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):  def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
         """Rerender all Links"""          """Rerender all Links"""
Line 607  def ECHO_rerenderLinksMD(self,obj=None,t Line 669  def ECHO_rerenderLinksMD(self,obj=None,t
         for entry in entries:          for entry in entries:
         if entry[1].meta_type == 'ECHO_resource':          if entry[1].meta_type == 'ECHO_resource':
             try:              try:
                 entry[1].ECHO_getResourceMD(template="no")                                  entry[1].ECHO_getResourceMD(template="no",overwrite="yes")
                                 if "title" in types:                                  if "title" in types:
                                     entry[1].generate_title()                                      entry[1].generate_title()
                                 if "label" in types:                                  if "label" in types:
Line 625  def reloadMetaDataFromStorage(self,RESPO Line 687  def reloadMetaDataFromStorage(self,RESPO
         """copy metadata from the storage to ECHO"""          """copy metadata from the storage to ECHO"""
         ret=""          ret=""
         resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)          resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
               if RESPONSE is not None:
                   RESPONSE.setHeader("Content-Type", type)
                   RESPONSE.write("<html><body>\n")
   
         for resource in resources:          for resource in resources:
             x=str(resource[1].copyIndex_meta2echo_resource())+"<br>"              x=str(resource[1].copyIndex_meta2echo_resource())+"<br>"
                       if RESPONSE is not None:
                           RESPONSE.write(x+"\n")
                       
             ret+=x              ret+=x
   
         if RESPONSE is not None:          if RESPONSE is not None:
             #RESPONSE.redirect('./manage_main')              #RESPONSE.redirect('./manage_main')
             return "<html><body>"+ret+"</html></body>"                      RESPONSE.write( "</html></body>")
   
         return ret          return ret
           
Line 736  def checkDiffs(self,metadict): Line 804  def checkDiffs(self,metadict):
           
         for field in tags[1]:          for field in tags[1]:
             try:              try:
                 if (NoneToEmpty(self.getFieldValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]):                              if (NoneToEmpty(self.getMDValue(self.getFieldTag(tags,field)))==metadict[self.getFieldTag(tags,field)]):
                     diffs[self.getFieldTag(tags,field)]=1                      diffs[self.getFieldTag(tags,field)]=1
                 else:                  else:
                                           
Line 753  def zptFile(self, path, orphaned=False): Line 821  def zptFile(self, path, orphaned=False):
     # unusual case      # unusual case
     pt=PageTemplateFile(os.path.join(package_home(globals()), path))      pt=PageTemplateFile(os.path.join(package_home(globals()), path))
     else:      else:
         
     pt=PageTemplateFile(os.path.join(package_home(globals()), path)).__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()), path)).__of__(self)
     return pt      return pt
   
Line 842  def writeMetadata(url,metadict,project=N Line 911  def writeMetadata(url,metadict,project=N
         node.appendChild(nodetext)          node.appendChild(nodetext)
         metanode.appendChild(node)          metanode.appendChild(node)
   
   
     if xmlfrag:      if xmlfrag:
         geturl="""<?xml version="1.0" ?>                  geturl="""<?xml version="1.0" encoding="UTF-8" ?>
                            <resource type="MPIWG">                             <resource type="MPIWG">
                <meta>                 <meta>
                 <bib type="Book">                  <bib type="Book">
Line 859  def writeMetadata(url,metadict,project=N Line 929  def writeMetadata(url,metadict,project=N
   
   
         except:          except:
                       logger("ECHO writeMetadata",logging.ERROR,"XCannot open: "+url)
             return (None,"XCannot open: "+url)              return (None,"XCannot open: "+url)
   
         try:          try:
             dom=xml.dom.minidom.parseString(geturl)              dom=xml.dom.minidom.parseString(geturl)
         except:          except:
                       logger("ECHO writeMetadata",logging.ERROR,"Cannot parse: "+url+"<br>"+geturl)
             return (None,"Cannot parse: "+url+"<br>"+geturl)              return (None,"Cannot parse: "+url+"<br>"+geturl)
   
           
Line 876  def writeMetadata(url,metadict,project=N Line 948  def writeMetadata(url,metadict,project=N
     metanode=metanodes[0]      metanode=metanodes[0]
   
     for metaData in metadict.keys():      for metaData in metadict.keys():
                           if metaData: 
         try:          try:
             nodeOld=metanode.getElementsByTagName(metaData)              nodeOld=metanode.getElementsByTagName(metaData)
         except:          except:
Line 894  def writeMetadata(url,metadict,project=N Line 966  def writeMetadata(url,metadict,project=N
             if nodeOld:              if nodeOld:
                 metanode.removeChild(nodeOld[0]).unlink()                  metanode.removeChild(nodeOld[0]).unlink()
   
   
         metanodeneu=dom.createElement(metaData)          metanodeneu=dom.createElement(metaData)
                       try:
                           metanodetext=dom.createTextNode(metadict[metaData].decode('utf-8'))
                       except:
                 metanodetext=dom.createTextNode(metadict[metaData])                  metanodetext=dom.createTextNode(metadict[metaData])
         #try:          #try:
   
             #metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))              #metanodetext=dom.createTextNode(unicode(metadict[metaData],"utf-8"))
         #except:          #except:
             #metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))              #metanodetext=dom.createTextNode(metadict[metaData].encode('utf-8'))
Line 927  def writeMetadata(url,metadict,project=N Line 1004  def writeMetadata(url,metadict,project=N
         updateTextToolNode('digiliburlprefix',digiliburlprefix)          updateTextToolNode('digiliburlprefix',digiliburlprefix)
           
         try:              try:    
      return dom.toxml().encode('utf-8')  
            return dom.toxml(encoding='utf-8').encode('utf-8')
     except:      except:
      return dom.toxml('utf-8')  
   
           
               return dom.toxml(encoding='utf-8')    
           
 def readMetadata(url):  def readMetadata(url):
     """Methode zum Auslesen der Metadateninformation zu einer Resource      """Methode zum Auslesen der Metadateninformation zu einer Resource
Line 977  def readMetadata(url): Line 1055  def readMetadata(url):
         except:          except:
             """nothing"""              """nothing"""
   
       return (metadict,"")
     return metadict,""  
           
   
 class MapArea(SimpleItem):  class MapArea(SimpleItem):
Line 1087  class MapArea(SimpleItem): Line 1164  class MapArea(SimpleItem):
         parent = self.aq_parent          parent = self.aq_parent
         text = parent.getMapText()          text = parent.getMapText()
         if text is not None:          if text is not None:
         return text.document_src()                  #return text.document_src()
                   return text()
     return ""      return ""
   
     def getLabel(self):      def getLabel(self):

Removed from v.1.60  
changed lines
  Added in v.1.82


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