Diff for /ECHO_content/ECHO_Nav.py between versions 1.24 and 1.44

version 1.24, 2004/05/10 13:51:03 version 1.44, 2004/09/01 17:48:31
Line 15  import urllib Line 15  import urllib
 from ECHO_helpers import displayTypes,checkOnlyOneInGroup  from ECHO_helpers import displayTypes,checkOnlyOneInGroup
 from ECHO_collection import content_html  from ECHO_collection import content_html
   
   
   
   from Globals import DTMLFile
   from OFS.Image import Image,cookId
   from OFS.Folder import Folder
   from OFS.SimpleItem import SimpleItem
   from Products.PageTemplates.PageTemplateFile import PageTemplateFile
   from Products.PageTemplates.PageTemplate import PageTemplate
   import re
   import string
   from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
   import os.path
   from Globals import package_home
   import urllib
   from ECHO_helpers import displayTypes,checkOnlyOneInGroup
   from ECHO_collection import content_html
   
   
   
   
   class ECHO_ZCatalogElement(SimpleItem):
       """Erzeuge navigation aus ZCatalog-abfrage"""
       meta_type="ECHO_ZCatalogElement"
       baseUrl=""
   
       def __init__(self,id,title,field,catalogId,baseUrl,weight,contentType):
           """init"""
           self.id=id
           self.title=title
           self.catalogId=catalogId
           self.field=field
   
           self.baseUrl=baseUrl
           self.weight=weight
           self.content=contentType
   
       manage_options= SimpleItem.manage_options+(
           {'label':'Main Config','action':'changeECHO_ZCatalogElementForm'},
           )
   
           
       def getWeight(self):
           """get weight"""
           if hasattr(self,'weight'):
               return self.weight
           else:
               return 0
           
       def getcontentType(self):
           """get weight"""
           
           if hasattr(self,'contentType'):
               return self.contentType
           else:
               return 0
           
   
       def changeECHO_ZCatalogElementForm(self):
           """change"""
           
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_ZCatalogElement.zpt').__of__(self)
           return pt()
   
       def changeECHO_ZCatalogElement(self,title,field,catalogId,baseUrl,weight,contentType,RESPONSE=None):
           """change"""
           self.title=title
           self.catalogId=catalogId
           self.field=field
           self.baseUrl=baseUrl
           self.weight=weight
           self.contentType=contentType
           
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
       def getKeywordList(self):
           return getattr(self,self.catalogId).uniqueValuesFor(self.field)
       
       def getNavList(self):
           """ausgabe der treffer list für navigation"""
           
           records=self.getKeywordList()
           
           
           if not records:
               return []
           else:
               ret=[]
               for record in records:
                   #print "RC",record
                   #if record:
                   #    ret.append((record,self.baseUrl+urllib.quote(record)))
                   try:
                       ret.append((record,self.baseUrl+urllib.quote(record)))
                   except:
                       """nothing"""
                       
               return ret
       
   
   def manage_addECHO_ZCatalogElementForm(self):
       """Form for adding"""
       pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_ZCatalogElement.zpt').__of__(self)
       return pt()
   
   def manage_addECHO_ZCatalogElement(self,id,title,field,baseUrl,weight,contentType,RESPONSE=None):
       """Add an ECHO_ZCatalogelement"""
       self._setObject(id,ECHO_ZCatalogElement(id,title,field,baseUrl,weight,contentType))
       
       if RESPONSE is not None:
           RESPONSE.redirect('manage_main')
   
   
   
 class ECHO_contentType(Image):  class ECHO_contentType(Image):
     """ContentType Object"""      """ContentType Object"""
   
Line 80  class ECHO_sqlElement(SimpleItem): Line 193  class ECHO_sqlElement(SimpleItem):
     meta_type="ECHO_sqlElement"      meta_type="ECHO_sqlElement"
     baseUrl=""      baseUrl=""
           
   
       
     def __init__(self,id,title,query,field,searchField,baseUrl,weight,contentType):      def __init__(self,id,title,query,field,searchField,baseUrl,weight,contentType):
         """init"""          """init"""
         self.id=id          self.id=id
Line 91  class ECHO_sqlElement(SimpleItem): Line 206  class ECHO_sqlElement(SimpleItem):
         else:          else:
             self.searchField=searchField              self.searchField=searchField
         self.baseUrl=baseUrl          self.baseUrl=baseUrl
         self.weight=weight  
         self.content=contentType          self.content=contentType
   
     manage_options= SimpleItem.manage_options+(      manage_options= SimpleItem.manage_options+(
Line 139  class ECHO_sqlElement(SimpleItem): Line 254  class ECHO_sqlElement(SimpleItem):
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
     def searchQuery(self):      def searchQuery(self,query=None,obj=None):
           #presently a hack, tests if search is of the search method, if not look at the next level.
           #
           #return self.ZSQLsimpleSearch(var=self.query)
           if not query:
               query=self.query
              
           if self.search.meta_type=="Z SQL Method":
         return self.search(var=self.query)          return self.search(var=self.query)
           else:
               if self.aq_parent.aq_parent.search.meta_type=="Z SQL Method":
                   return self.aq_parent.aq_parent.search(var=self.query)
               else:
                   return []
           
           
           
           
     def getNavList(self):      def getNavList(self):
         """ausgabe der treffer list für navigation"""          """ausgabe der treffer list für navigation"""
           
         records=self.searchQuery()          records=self.searchQuery()
         
           
         if not records:          if not records:
             return []              return []
         else:          else:
Line 179  class ECHO_pageTemplate(ZopePageTemplate Line 312  class ECHO_pageTemplate(ZopePageTemplate
                                        'html/ECHO_pageTemplateDefault.html')                                         'html/ECHO_pageTemplateDefault.html')
   
     manage_options=ZopePageTemplate.manage_options+(      manage_options=ZopePageTemplate.manage_options+(
         {'label':'Weight and Type','action':'changeECHO_pageTemplateWeightForm'},          {'label':'Main Config','action':'changeECHO_pageTemplateMainForm'},
         )          )
   
     def content_html(self):      def content_html(self):
     """content_html"""      """content_html"""
     return content_html(self,'pageTemplate')      return content_html(self,'pageTemplate')
   
     def changeECHO_pageTemplateWeightForm(self):      def changeECHO_pageTemplateMainForm(self):
         """change"""          """change"""
         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)          pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateMain.zpt').__of__(self)
         return pt()          return pt()
   
     def changeECHO_pageTemplateWeight(self,weight,contentType,label,RESPONSE=None):      def changeECHO_pageTemplateMain(self,weight,contentType,label,description,RESPONSE=None,isAlwaysClickable=None):
         """change"""          """change"""
         self.weight=weight          self.weight=weight
         self.contentType=contentType          self.contentType=contentType
         self.label=label          self.label=label
           self.description=description
           self.isAlwaysClickable=isAlwaysClickable
                   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 214  class ECHO_pageTemplate(ZopePageTemplate Line 349  class ECHO_pageTemplate(ZopePageTemplate
             return 0              return 0
                   
     def getcontentType(self):      def getcontentType(self):
         """get weight"""          """get contentType"""
         if hasattr(self,'weight'):          if hasattr(self,'contentType'):
             return self.weight              return self.contentType
         else:          else:
             return 0              return 0
   
Line 264  def manage_addECHO_pageTemplate(self, id Line 399  def manage_addECHO_pageTemplate(self, id
         self._setObject(id, zpt)          self._setObject(id, zpt)
         ob = getattr(self, id)          ob = getattr(self, id)
         setattr(ob,'weight',weight)          setattr(ob,'weight',weight)
           setattr(ob,'label',label)
         if title:          if title:
             ob.pt_setTitle(title)              ob.pt_setTitle(title)
                   
Line 282  class ECHO_navigation(Folder): Line 418  class ECHO_navigation(Folder):
     """Navigations Element"""      """Navigations Element"""
     meta_type="ECHO_Navigation"      meta_type="ECHO_Navigation"
   
       def ECHOFormatListStr(self,list,search="\n",replace="<br>"):
           """formatiert liste im str"""
       if list:
               return re.sub(search,replace,list)
           else:
           return 
   
       def ECHO_cacheManageForm(self):
           """change form"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_cacheManageForm').__of__(self)
           pt.content_type="text/html"
           return pt()
   
       def ECHO_cacheManage(self,cacheManagerName=None,deleteCache=None, activateCache=None,RESPONSE=None):
           """cachemanager"""
           if cacheManagerName=="": chacheManagerName=None
           
           self.cacheManagerName=cacheManagerName
           self.setCache(managerName=cacheManagerName)
           
           if deleteCache:
               self.deleteCache()
   
           print activateCache
           self.activateCache=activateCache
   
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
       
       def setCache(self,obj=None,RESPONSE=None,managerName='CacheManager'):
           """setze alle collections auf cache = CacheManager"""
   
   
           if not obj:
               obj = self
               
           entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_collection'],search_sub=1)
   
           for entry in entries:
               #print entry[0]
               entry[1].ZCacheable_setManagerId(managerName)
   
           
           return "changed all CM in: "+self.title
   
     displayedMetaTypes=displayTypes      displayedMetaTypes=displayTypes
           
       def getImageViewers(self):
           """images"""
           viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
           return viewers
       
       def getR(self):
       """re"""
       return self.REQUEST
   
     def __init__(self,id,title,pathToHierarchy):      def __init__(self,id,title,pathToHierarchy):
         """init"""          """init"""
         self.id=id          self.id=id
Line 292  class ECHO_navigation(Folder): Line 482  class ECHO_navigation(Folder):
   
     manage_options = Folder.manage_options+(      manage_options = Folder.manage_options+(
         {'label':'Main Config','action':'ECHO_navigationConfigForm'},          {'label':'Main Config','action':'ECHO_navigationConfigForm'},
           {'label':'Cache','action':'ECHO_cacheManageForm'},
   
         )          )
   
     def ECHO_navigationConfigForm(self):      def ECHO_navigationConfigForm(self):
Line 327  class ECHO_navigation(Folder): Line 519  class ECHO_navigation(Folder):
         temp=re.sub("/",".",temp)          temp=re.sub("/",".",temp)
         temp="self.aq_parent"+temp          temp="self.aq_parent"+temp
                   
           
         objtemp=eval(temp)          objtemp=eval(temp)
         nav={}          nav={}
         obj=objtemp  
   
           #check if cash is enabled and if already exists and if not empty
           if getattr(self,'_v_hash',None) and getattr(self,'activateCache',None) and self._v_hash.get(str(depth),None):
                   
         for keys in obj.__dict__.keys():             return self._v_hash[str(depth)]
             x=getattr(obj,keys)  
             if hasattr(x,"meta_type"):  
   
                 if x.meta_type in self.displayedMetaTypes:          # if not generate new hash
           obj=objtemp      
                                         
           for keys in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):
               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)
                     else:                      else:
                         nav[x.getId()]=(None,x)                          nav[x.getId()]=(None,x)
                                           
           #store in cache if activated
           if getattr(self,'activateCache',None):
               
               try:
                   self._v_hash[str(depth)]={}
               except:
                   self._v_hash={}
                   self._v_hash[str(depth)]={}
   
               for x in nav.keys():
                   self._v_hash[str(depth)][x]=nav[x]
   
         #print nav  
         return nav          return nav
   
     def barFromHash(self,hash,start=None,sortField=None):      def barFromHash(self,hash,start=None,sortField=None,location=None):
         """Erzeuge Navigations Element"""          """Erzeuge Navigations Element"""
         #print "hash",hash          #print "hash",hash
         listNav=[]          listNav=[]
         if not start:          if not start:
             temp=hash              temp=hash
             sortField="weight"              sortField="weight"
         else: # list mit pfad zum hash          else: # liste mit pfad zum hash
             temp=hash              temp=hash
             #print "HI",sortField              #print "HI",sortField
             if not sortField:              if not sortField:
                 tempObj=self.pathToHierarchy[0:]                  tempObj=self.pathToHierarchy[0:]
                 tempObj=re.sub("/",".",tempObj)                  tempObj=re.sub("/",".",tempObj)
                 tempObj="self.aq_parent"+tempObj                  tempObj="self.aq_parent"+tempObj
           #print tempObj
                 objtemp=eval(tempObj)                  objtemp=eval(tempObj)
   
                 obj=objtemp                  obj=objtemp
Line 386  class ECHO_navigation(Folder): Line 591  class ECHO_navigation(Folder):
             #print "TEMP",temp,self.tempSorted(temp, field=sortField)              #print "TEMP",temp,self.tempSorted(temp, field=sortField)
   
         for x in self.tempSorted(temp, field=sortField):          for x in self.tempSorted(temp, field=sortField):
               
             if not temp[x][1].title == "":              if not temp[x][1].title == "":
                 if temp[x][1].meta_type=="ECHO_sqlElement":                  
                   if (temp[x][1].meta_type=="ECHO_sqlElement") or (temp[x][1].meta_type=="ECHO_ZCatalogElement"):
               
                     for z in temp[x][1].getNavList():                      for z in temp[x][1].getNavList():
                         listNav.append((z[0],z[1],None))                          listNav.append((z[0],z[1],None))
               
                 else:                  else:
                     # add label fals 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].label=='':
                             label=temp[x][1].label.encode('utf-8')                              try:
                                                               label=temp[x][1].label.encode('utf-8','ignore')
                               except:
                                   label=temp[x][1].label
                         else:                          else:
                             label=temp[x][1].title.encode('utf-8')                              label=temp[x][1].title.encode('utf-8')
                     else:                      else:
                         label=temp[x][1].title.encode('utf-8')                                                      label=temp[x][1].title.encode('utf-8')                            
                                           
                       if location:
                           loc=getattr(temp[x][1],'location','top')
                           if (loc==location):
                               listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1]))
                       else:
                     listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1]))                      listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1]))
                       
         #print self.getId(),start  
         #print listNav  
   
         #html=""  
         #for k in listNav:  
         #    print k  
         #    html=html+"<a href='%s'>%s</a>   "% (self.absolute_url()+createPath(k[1][1].absolute_url()),k[0])  
   
         return listNav          return listNav
   
Line 435  class ECHO_navigation(Folder): Line 643  class ECHO_navigation(Folder):
                           
     def isSelectedPath(self,item):      def isSelectedPath(self,item):
         """test is path is already selected"""          """test is path is already selected"""
         found=re.search("\?(.*)",item[1])          
           found=re.search("\?(.*)/",item[1])
         if found:          if found:
             temp=re.sub(" ","%20",found.group(0))              temp=re.sub(" ","%20",found.group(0))
             #print temp+"::"+self.REQUEST['QUERY_STRING']              #print temp+"::"+self.REQUEST['QUERY_STRING']
             if ("?"+self.REQUEST['QUERY_STRING'])==temp:              if ("?"+self.REQUEST['QUERY_STRING'])==temp:
                   if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
                   
                       return 2
                   else:
                 return 1                  return 1
   
         if re.search(item[1],self.REQUEST['URL']):          if (getattr(item[2],'meta_type','')=="ECHO_pageTemplate") and (re.search(item[1],self.REQUEST['URL'])):
               if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
                   
                   return 2
               else:
                   return 1
   
           if re.search(item[1]+"/",self.REQUEST['URL']):
               if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
                   
                   return 2
               else:
             return 1              return 1
         else:          else:
             return 0              return 0
                   
           
           
       
     def buttonsFromHash(self,hash,start=None,orientation="horizontal"):      def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
                   
         """Generate Buttons"""          """Generate Buttons"""
Line 498  class ECHO_navigation(Folder): Line 724  class ECHO_navigation(Folder):
                           
         return keys          return keys
   
     def mainNavElements(self):      def mainNavElements(self,location=None):
         """print main navigation bar"""          """print main navigation bar"""
         keys=""          keys=""
         #print "NAVELEMENT",self.getId()          #print "NAVELEMENT",self.getId()
         #try:          #try:
               
         keys=self.barFromHash(self.createNavHash(0))          keys=self.barFromHash(self.createNavHash(0),location=location)
                   
         #except:          #except:
         #    keys=""          #    keys=""
Line 516  class ECHO_navigation(Folder): Line 742  class ECHO_navigation(Folder):
   
     return len(self.barFromHash(self.createNavHash(0)))       return len(self.barFromHash(self.createNavHash(0))) 
   
       def startOfHierarchy(self,list):
           splitted=self.pathToHierarchy.split("/")
           last=splitted[len(splitted)-1]
           #print last,list
           try:
               nr=list.index(last)
           except:
               nr=0
           return nr+1
       
     def secondNavElements(self):      def secondNavElements(self):
         """Zweite Ordnung"""          """Zweite Ordnung"""
                   
Line 527  class ECHO_navigation(Folder): Line 763  class ECHO_navigation(Folder):
   
         splitted=ult_temp.split("/")          splitted=ult_temp.split("/")
                   
       #print "AU",self.absolute_url(),splitted
       #start=[splitted[2]] #orig
           startNr= self.startOfHierarchy(splitted)
           
       start=[splitted[startNr]]
   
         start=[splitted[2]]  
         #print start          #print start
                 
         keys=self.barFromHash(hash,start=start,showElements)          keys=self.barFromHash(hash,start=start)
                   
                   
         return keys          return keys
Line 553  class ECHO_navigation(Folder): Line 793  class ECHO_navigation(Folder):
 ##         else:  ##         else:
 ##             start=[splitted[len(splitted)-1]]  ##             start=[splitted[len(splitted)-1]]
   
         start=splitted[2:order+1]          #start=splitted[2:order+1] #orig
           startNr= self.startOfHierarchy(splitted)
           #print startNr
       start=splitted[startNr:order+startNr-1] 
         #print start          #print start
                 
         keys=self.barFromHash(hash,start=start)          keys=self.barFromHash(hash,start=start)
Line 611  def createPath(url1,url2): Line 854  def createPath(url1,url2):
         if temp2[0]==test:          if temp2[0]==test:
             del temp2[0]              del temp2[0]
   
       #print "CP:"+url1+"::"+url2+"::"+url1+"/"+string.join(temp2,"/")
     return url1+"/"+string.join(temp2,"/")      return url1+"/"+string.join(temp2,"/")
   
 def sortWeight(x,y):  def sortWeight(x,y):

Removed from v.1.24  
changed lines
  Added in v.1.44


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