Diff for /ECHO_content/ECHO_Nav.py between versions 1.58 and 1.83

version 1.58, 2005/10/13 16:58:26 version 1.83, 2008/12/04 21:27:00
Line 1 Line 1
 # Objekte zur Erzeugung von Navigationselementen  # Objekte zur Erzeugung von Navigationselement
   
 from AccessControl import ClassSecurityInfo  from AccessControl import ClassSecurityInfo
 from Globals import DTMLFile  from Globals import DTMLFile
 from OFS.Image import Image,cookId  from OFS.Image import Image,cookId
Line 30  from Products.PageTemplates.ZopePageTemp Line 29  from Products.PageTemplates.ZopePageTemp
 import os.path  import os.path
   
 import urllib  import urllib
 from ECHO_helpers import displayTypes,checkOnlyOneInGroup  from ECHO_helpers import displayTypes,checkOnlyOneInGroup,unicodify
 from ECHO_collection import content_html  from ECHO_collection import content_html
 import zLOG  import logging
   
   #def ersetzt logging
   def logger(txt,method,txt2):
       """logging"""
       logging.info(txt+ txt2)
   
   STORAGEMANAGER_URL_DEFAULT = "http://storage-web.mpiwg-berlin.mpg.de/storage/storeOnline?path="
 try:      try:    
     from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder      from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
 except:  except:
     zLOG.LOG('ECHO_Nav',zLOG.INFO,'ZSQLSimpleSearch not supported')      logger('ECHO_Nav',logging.INFO,'ZSQLSimpleSearch not supported')
   
   
   
Line 97  class ECHO_ZCatalogElement(SimpleItem): Line 102  class ECHO_ZCatalogElement(SimpleItem):
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
     def getKeywordList(self):      def getKeywordList(self):
           try:
         return getattr(self,self.catalogId).uniqueValuesFor(self.field)          return getattr(self,self.catalogId).uniqueValuesFor(self.field)
           except:
               #return getattr(self,self.catalogId).query(self.field)
   
               list= [x for x in getattr(getattr(self,self.catalogId),self.field).words()]
               list.sort()
               return list
           
     def getNavList(self):      def getNavList(self):
         """ausgabe der treffer list für navigation"""          """ausgabe der treffer list fuer navigation"""
                   
         records=self.getKeywordList()          records=self.getKeywordList()
                   
                   records=[x.encode('utf-8') for x in records]
           records.sort()
         if not records:          if not records:
             return []              return []
         else:          else:
             ret=[]              ret=[]
             for record in records:              for record in records:
                
                 #print "RC",record                  #print "RC",record
                 #if record:                  #if record:
                 #    ret.append((record,self.baseUrl+urllib.quote(record)))                  #    ret.append((record,self.baseUrl+urllib.quote(record)))
Line 126  def manage_addECHO_ZCatalogElementForm(s Line 140  def manage_addECHO_ZCatalogElementForm(s
     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_ZCatalogElement.zpt')).__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_ZCatalogElement.zpt')).__of__(self)
     return pt()      return pt()
   
 def manage_addECHO_ZCatalogElement(self,id,title,field,baseUrl,weight,contentType,RESPONSE=None):  def manage_addECHO_ZCatalogElement(self,id,title,field,catalogId,baseUrl,weight,contentType,RESPONSE=None):
     """Add an ECHO_ZCatalogelement"""      """Add an ECHO_ZCatalogelement"""
     self._setObject(id,ECHO_ZCatalogElement(id,title,field,baseUrl,weight,contentType))  
       self._setObject(id,ECHO_ZCatalogElement(id,title,field,catalogId,baseUrl,weight,contentType))
           
     if RESPONSE is not None:      if RESPONSE is not None:
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')
Line 264  class ECHO_sqlElement(SimpleItem): Line 279  class ECHO_sqlElement(SimpleItem):
     try:          try:    
         searchQuery=ZSQLExtendFolder.ZSQLSimpleSearch          searchQuery=ZSQLExtendFolder.ZSQLSimpleSearch
     except:      except:
         zLOG.LOG('ECHO_Nav',zLOG.INFO,'ZSQLSimpleSearch not supported')          logger('ECHO_Nav',logging.INFO,'ZSQLSimpleSearch not supported')
                           
     def getNavList(self):       def getNavList(self): 
         """ausgabe der treffer list für navigation"""          """ausgabe der treffer list fuer navigation"""
           
           #naechste schritte sind trial and error, warum geht mal das eine mal das andere 2.3 / 2.4 ??
                   
         records=self.searchQuery()          try:
               try:
                   records=self.ZSQLSimpleSearch(query=self.query)
               except:
                   records=self.searchQuery(self.aq_parent,query=self.query) #python 2.4 version (??)
           except:
               records=self.searchQuery(query=self.query)#python 2.3 version(??)
               
                   
         if not records:          if not records:
Line 280  class ECHO_sqlElement(SimpleItem): Line 303  class ECHO_sqlElement(SimpleItem):
                 try:                  try:
                     ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField())))))                      ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField())))))
                 except:                  except:
                       logger('ECHO_Nav',logging.INFO,"error, search")
                     """notrhing"""                      """notrhing"""
                                           
             return ret              return ret
Line 314  class ECHO_pageTemplate(ZopePageTemplate Line 338  class ECHO_pageTemplate(ZopePageTemplate
   
     security.declarePublic('content_html')      security.declarePublic('content_html')
   
       def addChanges(self):
           """do nothing leere methode, notwendig, da bei veerbung 
           von dieser klasse nur ueberschrieben werden kann, 
           falls methode per url aufgerufen werden soll"""
           
           return True
           
     def content_html(self):      def content_html(self):
         """content_html"""          """content_html"""
Line 413  def manage_addECHO_pageTemplate(self, id Line 443  def manage_addECHO_pageTemplate(self, id
 class ECHO_navigation(Folder):  class ECHO_navigation(Folder):
     """Navigations Element"""      """Navigations Element"""
     meta_type="ECHO_Navigation"      meta_type="ECHO_Navigation"
       management_page_charset="utf-8"
       
       def getUsername(self):
           """get name of user"""
           username=str(self.REQUEST['AUTHENTICATED_USER'])
           if username=='Anonymous User':
               return None
           else:
               return username
           
       def searchExternalCollection(self,url,simpleSearch):
           """search external collection via xmlrpc"""
           server=xmlrpclib.Server(url)
           
           results=server.getSubcolsXMLRpc(simpleSearch)
           
           return results
       
       def getXMLRpcConnection(self,url):
           """getxmlrpc"""
           if not hasattr(self,"_v_server"):
               self._v_server=[]
           
           server=xmlrpclib.Server(url)
           self._v_server.append(server)
           
           return len(self._v_server)-1
       
       def getXMLRpcMethod(self,nr,method,compressed=None):
           """getmethod"""
           
           ret= eval('self._v_server[%i].%s'%(nr,method))
           if compressed:
               ret=decodeRPC(ret)
           return ret
       
       def getNavInfo(self):
           """root informationen"""
           if hasattr(self,'logo_image'):
               if hasattr(self.logo_image,'tag'):
                   imageTag=self.logo_image.tag()
           else:
               imageTag=''
           return (self.title,imageTag)
   
     def linkBar(self,parent):      def linkBar(self,parent):
         """linkbarer balken"""          """linkbarer balken"""
Line 428  class ECHO_navigation(Folder): Line 502  class ECHO_navigation(Folder):
           
     def decode(self,str):      def decode(self,str):
         """decoder"""          """decoder"""
         if not str:          return unicodify(str)
             return ""  
         if type(str)==StringType:  
                           
             return str  
         else:  
             try:  
                 return str.encode('utf-8')  
             except:  
                 return str.encode('latin-1')  
     def ECHOFormatListStr(self,list,search="\n",replace="<br>"):      def ECHOFormatListStr(self,list,search="\n",replace="<br>"):
         """formatiert liste im str"""          """formatiert liste im str"""
         if list:          if list:
Line 513  class ECHO_navigation(Folder): Line 579  class ECHO_navigation(Folder):
         )          )
     displayedMetaTypes=displayTypes      displayedMetaTypes=displayTypes
           
       def getStorageManagerURL(self):
           """returns the URL to the storagemanager"""
           return getattr(self,"storageManagerURL",STORAGEMANAGER_URL_DEFAULT)
     def ECHO_navigationConfigForm(self):      def ECHO_navigationConfigForm(self):
         """configForm"""          """configForm"""
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_navigation.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_navigation.zpt')).__of__(self)
         return pt()          return pt()
           
     def ECHO_navigationConfig(self,title,pathToHierarchy,displayedMetaTypes=displayTypes,RESPONSE=None):      def ECHO_navigationConfig(self,title,pathToHierarchy,storageManagerURL="",displayedMetaTypes=displayTypes,RESPONSE=None):
         """config"""          """config"""
         self.title=title          self.title=title
         self.pathToHierarchy=pathToHierarchy          self.pathToHierarchy=pathToHierarchy
         self.displayedMetaTypes=toList(displayedMetaTypes)[0:]          self.displayedMetaTypes=toList(displayedMetaTypes)[0:]
           self.storageManagerURL=storageManagerURL
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 561  class ECHO_navigation(Folder): Line 630  class ECHO_navigation(Folder):
         obj=objtemp                obj=objtemp      
   
         for keys in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):          for keys in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):
   
             x=keys[1]              x=keys[1]
             if depth>1:              if depth>1:
                 nav[x.getId()]=(self.getColls(x,int(depth)-1,checkOnly),x)                  nav[x.getId()]=(self.getColls(x,int(depth)-1,checkOnly),x)
Line 583  class ECHO_navigation(Folder): Line 653  class ECHO_navigation(Folder):
   
     def barFromHash(self,hash,start=None,sortField=None,location=None):      def barFromHash(self,hash,start=None,sortField=None,location=None):
         """Erzeuge Navigations Element"""          """Erzeuge Navigations Element"""
         #print "hash",hash                  
         listNav=[]          listNav=[]
         if not start:          if not start:
             temp=hash              temp=hash
Line 632  class ECHO_navigation(Folder): Line 702  class ECHO_navigation(Folder):
                     # add label falls existiert und nicht leer                      # add label falls existiert und nicht leer
                     if hasattr(temp[x][1],'label'):                      if hasattr(temp[x][1],'label'):
                                                   
                         if not temp[x][1].label=='':                          if not temp[x][1].getLabel()=='':
                             try:  
                                 label=temp[x][1].getLabel()                                  label=temp[x][1].getLabel()
                             except:  
                                 label=temp[x][1].label  
                         else:                          else:
                             label=temp[x][1].title.encode('utf-8')                              try:
                                   label=temp[x][1].getTitle()
                               except:
                                   logger("ECHO_Nav",logging.ERROR,"%s has neither getLabel nor getTile implemented"%temp[x][1].getId())
                                   label=""
                     else:                      else:
                         label=temp[x][1].title.encode('utf-8')                                                      label=temp[x][1].getTitle()
   
                                           
                     if location:                      if location:
   
                         loc=getattr(temp[x][1],'location','top')                          loc=getattr(temp[x][1],'location','top')
                         if (loc==location):                          if (loc==location):
                             listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url())+getattr(temp[x][1],'queryString',''),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))  
                               
                               listNav.append((label,createPath(self,self.absolute_url(),temp[x][1].absolute_url(relative=1))+getattr(temp[x][1],'queryString',''),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))
                     else:                      else:
                         listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url())+getattr(temp[x][1],'queryString',''),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))  
   
                           listNav.append((label,createPath(self,self.absolute_url(),temp[x][1].absolute_url(relative=1))+getattr(temp[x][1],'queryString',''),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))
           #print self.REQUEST
         return listNav          return listNav
   
     def tempSorted(self,hash,field="weight"):      def tempSorted(self,hash,field="weight"):
Line 680  class ECHO_navigation(Folder): Line 755  class ECHO_navigation(Folder):
   
         testStr=re.sub("/index_html",'',self.REQUEST.get('URL',''))          testStr=re.sub("/index_html",'',self.REQUEST.get('URL',''))
   
       if len(item)<2:
           return 0
         #falls exakte Übereinstimmung dann immer 1          #falls exakte Übereinstimmung dann immer 1
         if (testStr==item[1]) and (self.REQUEST.get('QUERY_STRING','')==''):          if (testStr==item[1]) and (self.REQUEST.get('QUERY_STRING','')==''):
                           
Line 751  class ECHO_navigation(Folder): Line 828  class ECHO_navigation(Folder):
                           
             description=temp[x][1].title              description=temp[x][1].title
                     
             url=createPath(self.absolute_url(),temp[key][1].absolute_url())              
               url=createPath(self,self.absolute_url(),temp[key][1].absolute_url(relative=1))
   
             if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):              if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
                 html=html+startTag+"[%s]" % description+endTag                  html=html+startTag+"[%s]" % description+endTag
Line 802  class ECHO_navigation(Folder): Line 880  class ECHO_navigation(Folder):
             nr=0              nr=0
         return nr+1          return nr+1
           
       def subNavStatic(self,obj):
           """subnav" von self"""
           def sortWeight(x,y):
               x1=int(getattr(x[1],'weight','0'))
               y1=int(getattr(y[1],'weight','0'))
               return cmp(x1,y1)
           print "obj",obj
           subs=self.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes)
           subret=[]
           
           for x in subs:
               if not(x[1].title==""):
                   subret.append(x)
           subret.sort(sortWeight)
           return subret
       
     def secondNavElements(self):      def secondNavElements(self):
         """Zweite Ordnung Navigationselemente"""          """Zweite Ordnung Navigationselemente"""
                   
         hash=self.createNavHash(2,checkOnly="no")          hash=self.createNavHash(2,checkOnly="no")
   
         actual_url=self.REQUEST['URL']          actual_url=self.REQUEST['URL']
                   
         ult_temp=re.sub(self.absolute_url(),"",actual_url)          ult_temp=re.sub(self.absolute_url(),"",actual_url)
Line 897  def manage_addECHO_navigation(self,id,ti Line 992  def manage_addECHO_navigation(self,id,ti
   
   
   
 def createPath(url1,url2):  def createPath(self,url1,url2):
       #bugfix in absolute_url, ploetzlich erschein in absolute_url der physikalische pfad.
       
       if self.REQUEST.has_key('VirtualRootPhysicalPath'):
           vp="/".join(self.REQUEST['VirtualRootPhysicalPath'])
           if (len(vp)>0):
               if vp[0]=="/":
                   vp=vp[1:]
           
               url2=url2.replace(vp+"/",'')
       else:
     temp1=url1.split("/")      temp1=url1.split("/")
     temp2=url2.split("/")      temp2=url2.split("/")
     for test in temp1:      for test in temp1:
         if temp2[0]==test:          if temp2[0]==test:
             del temp2[0]              del temp2[0]
   
     #print "CP:"+url1+"::"+url2+"::"+url1+"/"+string.join(temp2,"/")          url2= string.join(temp2,"/")
     return url1+"/"+string.join(temp2,"/")          
       return url1+"/"+url2
   
 def sortWeight(x,y):  def sortWeight(x,y):
     #print x[1],y[1]      #print x[1],y[1]

Removed from v.1.58  
changed lines
  Added in v.1.83


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