Diff for /ECHO_content/ECHO_Nav.py between versions 1.10 and 1.36

version 1.10, 2004/04/04 14:56:05 version 1.36, 2004/07/05 18:15:16
Line 1 Line 1
 # Objekte zur Erzeugung von Navigationselementen  # Objekte zur Erzeugung von Navigationselementen
   
   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
   
   
   
   from Globals import DTMLFile
   from OFS.Image import Image,cookId
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
Line 11  from Products.PageTemplates.ZopePageTemp Line 29  from Products.PageTemplates.ZopePageTemp
 import os.path  import os.path
 from Globals import package_home  from Globals import package_home
 import urllib  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):
       """ContentType Object"""
   
       meta_type="ECHO_contentType"
   
       
       manage_options=Image.manage_options+(
           {'label':'Change Description','action':'changeECHO_contentTypeForm'},
          )
   
       def changeECHO_contentTypeForm(self):
           """Change the description text"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_contentType.zpt').__of__(self)
           return pt()
   
       def changeECHO_contentType(self,description,RESPONSE=None):
           """Change the Content"""
           self.description=description
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
   manage_addECHO_contentTypeForm=DTMLFile('dtml/ECHO_contentTypeAdd',globals(),
                                Kind='ECHO_contentType',kind='ECHO_contentType')
   
   def manage_addECHO_contentType(self, id, file=None, title='', precondition='', content_type='', description='',
                       REQUEST=None):
       """
       Add a new Image object.
   
       Creates a new Image object 'id' with the contents of 'file'.
       """
   
       id=str(id)
       title=str(title)
       content_type=str(content_type)
       precondition=str(precondition)
   
       id, title = cookId(id, title, file)
   
       self=self.this()
   
       # First, we create the image without data:
       self._setObject(id, ECHO_contentType(id,title,'',content_type, precondition))
   
       self._getOb(id).description=description
           
       # Now we "upload" the data.  By doing this in two steps, we
       # can use a database trick to make the upload more efficient.
       if file:
           self._getOb(id).manage_upload(file)
       if content_type:
           self._getOb(id).content_type=content_type
   
       if REQUEST is not None:
           try:    url=self.DestinationURL()
           except: url=REQUEST['URL1']
           REQUEST.RESPONSE.redirect('%s/manage_main' % url)
       return id
   
   
 class ECHO_sqlElement(SimpleItem):  class ECHO_sqlElement(SimpleItem):
     """Erzeuge navigation aus sql-abfrage"""      """Erzeuge navigation aus sql-abfrage"""
Line 116  class ECHO_pageTemplate(ZopePageTemplate Line 291  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_pageTemplateWeightForm'},
         )          )
   
       def content_html(self):
       """content_html"""
       return content_html(self,'pageTemplate')
   
     def changeECHO_pageTemplateWeightForm(self):      def changeECHO_pageTemplateWeightForm(self):
         """change"""          """change"""
         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)          pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)
         return pt()          return pt()
   
     def changeECHO_pageTemplateWeight(self,weight,contentType,RESPONSE=None):      def changeECHO_pageTemplateWeight(self,weight,contentType,label,RESPONSE=None):
         """change"""          """change"""
         self.weight=weight          self.weight=weight
         self.contentType=contentType          self.contentType=contentType
           self.label=label
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
                   
       def getLabel(self):
           if hasattr(self,'label'):
               return self.label.encode('utf-8')
           else:
               return 0
           
     def getWeight(self):      def getWeight(self):
         """get weight"""          """get weight"""
         if hasattr(self,'weight'):          if hasattr(self,'weight'):
Line 140  class ECHO_pageTemplate(ZopePageTemplate Line 326  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 164  def manage_addECHO_pageTemplateForm(self Line 350  def manage_addECHO_pageTemplateForm(self
 from urllib import quote  from urllib import quote
   
   
 def manage_addECHO_pageTemplate(self, id, weight= 0,contentType=0,title=None, text=None,  def manage_addECHO_pageTemplate(self, id, label, weight= 0,contentType=0,title=None, text=None,
                            REQUEST=None, submit=None):                             REQUEST=None, submit=None):
     "Add a Page Template with optional file content."      "Add a Page Template with optional file content."
   
Line 174  def manage_addECHO_pageTemplate(self, id Line 360  def manage_addECHO_pageTemplate(self, id
         self._setObject(id, ECHO_pageTemplate(id, text))          self._setObject(id, ECHO_pageTemplate(id, text))
         ob = getattr(self, id)          ob = getattr(self, id)
         setattr(ob,'weight',weight)          setattr(ob,'weight',weight)
           setattr(ob,'label',label)
         setattr(ob,'contentType',contentType)          setattr(ob,'contentType',contentType)
         if title:          if title:
             ob.pt_setTitle(title)              ob.pt_setTitle(title)
Line 189  def manage_addECHO_pageTemplate(self, id Line 376  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 207  class ECHO_navigation(Folder): Line 395  class ECHO_navigation(Folder):
     """Navigations Element"""      """Navigations Element"""
     meta_type="ECHO_Navigation"      meta_type="ECHO_Navigation"
   
     displayedMetaTypes=['ImageCollectionIFrame','ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ECHO_sqlElement','ECHO_resource','ECHO_externalLink']      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"""
Line 233  class ECHO_navigation(Folder): Line 430  class ECHO_navigation(Folder):
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
   
     def getColls(self,obj,depth):      def getColls(self,obj,depth,checkOnly="no"):
         nav={}          nav={}
         #print "HERE",obj.          #print "HERE",obj.
         for keys in obj.__dict__.keys():          for x_objs in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):
             x=getattr(obj,keys)              x=x_objs[1]
             if hasattr(x,"meta_type"):              if checkOnly=="yes":
                 if x.meta_type in self.displayedMetaTypes:                  x = checkOnlyOneInGroup(x)
                     if depth>1:                      if depth>1:
                         nav[x.getId()]=(self.getColls(x,depth-1),x)                          nav[x.getId()]=(self.getColls(x,depth-1),x)
                     else:                      else:
                         nav[x.getId()]=(None,x)                          nav[x.getId()]=(None,x)
         return nav          return nav
           
     def createNavHash(self,depth):      def createNavHash(self,depth,checkOnly="no"):
         """Auslesen des Hierarchiebuames"""          """Auslesen des Hierarchiebuames"""
         temp=self.pathToHierarchy[0:]          temp=self.pathToHierarchy[0:]
         temp=re.sub("/",".",temp)          temp=re.sub("/",".",temp)
Line 256  class ECHO_navigation(Folder): Line 453  class ECHO_navigation(Folder):
         nav={}          nav={}
         obj=objtemp          obj=objtemp
                   
         #exec(obj)  
   
         #objtemp = compile(temp,'<string>','single')  
         #obj=eval(objtemp)  
         #print obj   
           
         #print obj.__dict__.keys()  
                   
         for keys in obj.__dict__.keys():          for keys in obj.__dict__.keys():
             x=getattr(obj,keys)              x=getattr(obj,keys)
             if hasattr(x,"meta_type"):              if hasattr(x,"meta_type"):
                 #print x.meta_type  
                 if x.meta_type in self.displayedMetaTypes:                  if x.meta_type in self.displayedMetaTypes:
                                         
                     if depth>1:                      if depth>1:
                         nav[x.getId()]=(self.getColls(x,int(depth)-1),x)                          nav[x.getId()]=(self.getColls(x,int(depth)-1,checkOnly),x)
                     else:                      else:
                         nav[x.getId()]=(None,x)                          nav[x.getId()]=(None,x)
                                           
Line 279  class ECHO_navigation(Folder): Line 469  class ECHO_navigation(Folder):
         #print nav          #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=[]
Line 293  class ECHO_navigation(Folder): Line 483  class ECHO_navigation(Folder):
                 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 316  class ECHO_navigation(Folder): Line 506  class ECHO_navigation(Folder):
                     """nothing"""                      """nothing"""
                     return []                      return []
             #print "TEMP",temp,self.tempSorted(temp, field=sortField)              #print "TEMP",temp,self.tempSorted(temp, field=sortField)
         print "HELL",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]))                          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                              label=temp[x][1].label.encode('utf-8','ignore')
                             print "HAS LABEL",label                              
                         else:                          else:
                             label=temp[x][1].title                              label=temp[x][1].title.encode('utf-8')
                     else:                      else:
                         label=temp[x][1].title                                                      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 self.getId(),start
         #print listNav          #print listNav
   
Line 347  class ECHO_navigation(Folder): Line 544  class ECHO_navigation(Folder):
   
     def tempSorted(self,hash,field="weight"):      def tempSorted(self,hash,field="weight"):
         ls=[]          ls=[]
         print "SORT",field  
         for x in hash.keys():          for x in hash.keys():
             #print hash[x][1]              #print hash[x][1]
             if hasattr(hash[x][1],field):              if hasattr(hash[x][1],field):
Line 367  class ECHO_navigation(Folder): Line 564  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:
                 return 1                  return 1
   
         if re.search(item[1],self.REQUEST['URL']):          if re.search(item[1]+"/",self.REQUEST['URL']):
             return 1              return 1
         else:          else:
             return 0              return 0
Line 422  class ECHO_navigation(Folder): Line 619  class ECHO_navigation(Folder):
     def mainNavBar(self):      def mainNavBar(self):
         """print main navigation bar"""          """print main navigation bar"""
         keys=""          keys=""
         print "NAVBAR",self.getId()  
         try:          try:
             keys=self.buttonsFromHash(self.createNavHash(0))              keys=self.buttonsFromHash(self.createNavHash(0))
         except:          except:
Line 430  class ECHO_navigation(Folder): Line 627  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=""
                           
         return keys          return keys
           
       def numberOfMainNavElements(self):
       """number of main elements"""
   
       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"""
                   
         hash=self.createNavHash(2)          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 454  class ECHO_navigation(Folder): Line 666  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)
   
         ## if splitted[len(splitted)-1]=="index_html":      start=[splitted[startNr]]
 ##             start=[splitted[len(splitted)-2]]  
 ##         else:  
 ##             start=[splitted[len(splitted)-1]]  
   
         start=[splitted[2]]  
         #print start          #print start
                 
         keys=self.barFromHash(hash,start=start)          keys=self.barFromHash(hash,start=start)
Line 485  class ECHO_navigation(Folder): Line 696  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 543  def createPath(url1,url2): Line 757  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.10  
changed lines
  Added in v.1.36


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