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

version 1.63, 2005/10/28 12:21:43 version 1.83, 2008/12/04 21:27:00
Line 29  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 96  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 125  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 263  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 fuer navigation"""          """ausgabe der treffer list fuer navigation"""
Line 276  class ECHO_sqlElement(SimpleItem): Line 292  class ECHO_sqlElement(SimpleItem):
         except:          except:
                 records=self.searchQuery(self.aq_parent,query=self.query) #python 2.4 version (??)                  records=self.searchQuery(self.aq_parent,query=self.query) #python 2.4 version (??)
         except:          except:
             records=self.searchQuery()#python 2.3 version(??)              records=self.searchQuery(query=self.query)#python 2.3 version(??)
               
                   
         if not records:          if not records:
Line 287  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 426  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):      def getNavInfo(self):
         """root informationen"""          """root informationen"""
Line 450  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 535  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 583  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 605  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 654  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.encode('utf-8')  
                         else:                          else:
                             label=temp[x][1].title.encode('utf-8')  
                     else:  
                         label=temp[x][1].title.encode('utf-8')                              
                       
                     try:                      try:
                         label=label.encode('utf-8')                                  label=temp[x][1].getTitle()
                     except:                      except:
                         label=label.decode('latin-1')                                  logger("ECHO_Nav",logging.ERROR,"%s has neither getLabel nor getTile implemented"%temp[x][1].getId())
                                   label=""
                       else:
                           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 707  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 778  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 829  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 924  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.63  
changed lines
  Added in v.1.83


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