Diff for /ECHO_content/ECHO_Nav.py between versions 1.2 and 1.15

version 1.2, 2004/02/03 15:39:12 version 1.15, 2004/04/18 09:54:14
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.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 12  import os.path Line 13  import os.path
 from Globals import package_home  from Globals import package_home
 import urllib  import urllib
   
   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"""
     meta_type="ECHO_sqlElement"      meta_type="ECHO_sqlElement"
     baseUrl=""      baseUrl=""
           
     def __init__(self,id,title,query,field,baseUrl):      def __init__(self,id,title,query,field,searchField,baseUrl,weight,contentType):
         """init"""          """init"""
         self.id=id          self.id=id
         self.title=title          self.title=title
         self.query=query          self.query=query
         self.field=field          self.field=field
           if searchField=="":
               self.searchField=field
           else:
               self.searchField=searchField
         self.baseUrl=baseUrl          self.baseUrl=baseUrl
           self.weight=weight
           self.content=contentType
   
     manage_options= SimpleItem.manage_options+(      manage_options= SimpleItem.manage_options+(
         {'label':'Main Config','action':'changeECHO_sqlElementForm'},          {'label':'Main Config','action':'changeECHO_sqlElementForm'},
         )          )
   
       def getSearchField(self):
           try:
               return self.searchField
           except:
               return self.field
           
       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_sqlElementForm(self):      def changeECHO_sqlElementForm(self):
         """change"""          """change"""
         pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_sqlElement.zpt').__of__(self)          
           pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_sqlElement.zpt').__of__(self)
         return pt()          return pt()
   
     def changeECHO_sqlElement(self,title,query,field,baseUrl,RESPONSE=None):      def changeECHO_sqlElement(self,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
         """change"""          """change"""
         self.title=title          self.title=title
         self.query=query          self.query=query
         self.field=field          self.field=field
           self.searchField=searchField
         self.baseUrl=baseUrl          self.baseUrl=baseUrl
           self.weight=weight
           self.contentType=contentType
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 55  class ECHO_sqlElement(SimpleItem): Line 148  class ECHO_sqlElement(SimpleItem):
         else:          else:
             ret=[]              ret=[]
             for record in records:              for record in records:
                 ret.append((getattr(record,self.field),self.baseUrl+str(getattr(record,self.field))))                  try:
                       ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField())))))
                   except:
                       """notrhing"""
                       
             return ret              return ret
           
   
 def manage_AddECHO_sqlElementForm(self):  def manage_addECHO_sqlElementForm(self):
     """Form for adding"""      """Form for adding"""
     pt=PageTemplateFile('Products/ECHO_content/AddECHO_sqlElement.zpt').__of__(self)      pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_sqlElement.zpt').__of__(self)
     return pt()      return pt()
   
 def manage_AddECHO_sqlElement(self,id,title,query,field,baseUrl,RESPONSE=None):  def manage_addECHO_sqlElement(self,id,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
     """Add an ECHO_sqlelement"""      """Add an ECHO_sqlelement"""
     self._setObject(id,ECHO_sqlElement(id,title,query,field,baseUrl))      self._setObject(id,ECHO_sqlElement(id,title,query,field,searchField,baseUrl,weight,contentType))
           
     if RESPONSE is not None:      if RESPONSE is not None:
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')
Line 77  class ECHO_pageTemplate(ZopePageTemplate Line 174  class ECHO_pageTemplate(ZopePageTemplate
     meta_type="ECHO_pageTemplate"      meta_type="ECHO_pageTemplate"
   
     _default_content_fn = os.path.join(package_home(globals()),      _default_content_fn = os.path.join(package_home(globals()),
                                        'ECHO_pageTemplateDefault.html')                                         'html/ECHO_pageTemplateDefault.html')
   
       manage_options=ZopePageTemplate.manage_options+(
           {'label':'Weight and Type','action':'changeECHO_pageTemplateWeightForm'},
           )
   
       def changeECHO_pageTemplateWeightForm(self):
           """change"""
           pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)
           return pt()
   
       def changeECHO_pageTemplateWeight(self,weight,contentType,label,RESPONSE=None):
           """change"""
           self.weight=weight
           self.contentType=contentType
           self.label=label
           
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
       def getLabel(self):
           if hasattr(self,'label'):
               return self.label
           else:
               return 0
           
       def getWeight(self):
           """get weight"""
           if hasattr(self,'weight'):
               return self.weight
           else:
               return 0
           
       def getcontentType(self):
           """get weight"""
           if hasattr(self,'weight'):
               return self.weight
           else:
               return 0
   
   
   
     ## def __init__(self, id, text=None, content_type=None):  
       ## def __init__(self, id, text=None, contentType=None):
 ##         self.id = str(id)  ##         self.id = str(id)
 ##         self.ZBindings_edit(self._default_bindings)  ##         self.ZBindings_edit(self._default_bindings)
 ##         if text is None:  ##         if text is None:
 ##             text = open(self._default_cont).read()  ##             text = open(self._default_cont).read()
 ##         self.pt_edit(text, content_type)  ##         self.pt_edit(text, contentType)
   
 def manage_AddECHO_pageTemplateForm(self):  def manage_addECHO_pageTemplateForm(self):
     """Form for adding"""      """Form for adding"""
     pt=PageTemplateFile('Products/ECHO_content/AddECHO_pageTemplate.zpt').__of__(self)      pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_pageTemplate.zpt').__of__(self)
     return pt()      return pt()
   
 from urllib import quote  from urllib import quote
   
   
 def manage_AddECHO_pageTemplate(self, id, 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 104  def manage_AddECHO_pageTemplate(self, id Line 241  def manage_AddECHO_pageTemplate(self, id
     if REQUEST is None:      if REQUEST is None:
         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,'label',label)
           setattr(ob,'contentType',contentType)
         if title:          if title:
             ob.pt_setTitle(title)              ob.pt_setTitle(title)
         return ob          return ob
Line 113  def manage_AddECHO_pageTemplate(self, id Line 253  def manage_AddECHO_pageTemplate(self, id
         if headers is None or not file.filename:          if headers is None or not file.filename:
             zpt = ECHO_pageTemplate(id)              zpt = ECHO_pageTemplate(id)
         else:          else:
             zpt = ECHO_pageTemplate(id, file, headers.get('content_type'))              zpt = ECHO_pageTemplate(id, file, headers.get('contentType'))
   
         self._setObject(id, zpt)          self._setObject(id, zpt)
           ob = getattr(self, id)
           setattr(ob,'weight',weight)
           if title:
               ob.pt_setTitle(title)
   
         try:          try:
             u = self.DestinationURL()              u = self.DestinationURL()
Line 132  class ECHO_navigation(Folder): Line 276  class ECHO_navigation(Folder):
     """Navigations Element"""      """Navigations Element"""
     meta_type="ECHO_Navigation"      meta_type="ECHO_Navigation"
   
     displayedMetaTypes=['ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ECHO_sqlElement']      displayedMetaTypes=['ECHO_group','ImageCollectionIFrame','ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ZSQLBibliography','ECHO_sqlElement','ECHO_resource','ECHO_externalLink']
           
     def __init__(self,id,title,pathToHierarchy):      def __init__(self,id,title,pathToHierarchy):
         """init"""          """init"""
Line 146  class ECHO_navigation(Folder): Line 290  class ECHO_navigation(Folder):
   
     def ECHO_navigationConfigForm(self):      def ECHO_navigationConfigForm(self):
         """configForm"""          """configForm"""
         pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_navigation.zpt').__of__(self)          pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_navigation.zpt').__of__(self)
         return pt()          return pt()
           
     def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):      def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):
Line 185  class ECHO_navigation(Folder): Line 329  class ECHO_navigation(Folder):
   
         #objtemp = compile(temp,'<string>','single')          #objtemp = compile(temp,'<string>','single')
         #obj=eval(objtemp)          #obj=eval(objtemp)
         print obj           #print obj 
                   
         #print obj.__dict__.keys()          #print obj.__dict__.keys()
                   
Line 194  class ECHO_navigation(Folder): Line 338  class ECHO_navigation(Folder):
             if hasattr(x,"meta_type"):              if hasattr(x,"meta_type"):
                 #print 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),x)
                     else:                      else:
Line 203  class ECHO_navigation(Folder): Line 348  class ECHO_navigation(Folder):
         #print nav          #print nav
         return nav          return nav
   
     def barFromHash(self,hash,start=None):      def barFromHash(self,hash,start=None,sortField=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"
         else: # list mit pfad zum hash          else: # list mit pfad zum hash
             temp=hash              temp=hash
               #print "HI",sortField
               if not sortField:
                   tempObj=self.pathToHierarchy[0:]
                   tempObj=re.sub("/",".",tempObj)
                   tempObj="self.aq_parent"+tempObj
   
                   objtemp=eval(tempObj)
   
                   obj=objtemp
   
                   for x in start:
                       #print "OBJ",start,obj,obj.getId(),x
   
                       obj=getattr(obj,x)
   
                   if hasattr(obj,'sortfield'):
                       sortField=obj.sortfield
                   else:
                       sortField='weight'
               #print "START",start
             for x in start:              for x in start:
                   #print "N2",x,temp[x]
                   try:
                 temp=temp[x][0]                  temp=temp[x][0]
                   except:
                       """nothing"""
                       return []
               #print "TEMP",temp,self.tempSorted(temp, field=sortField)
   
         for x in temp.keys():          for x in self.tempSorted(temp, field=sortField):
               if not temp[x][1].title == "":
             if temp[x][1].meta_type=="ECHO_sqlElement":              if temp[x][1].meta_type=="ECHO_sqlElement":
                 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]))
             else:              else:
                 listNav.append((temp[x][1].title,self.absolute_url()+createPath(temp[x][1].absolute_url())))                      # add label fals existiert und nicht leer
                       if hasattr(temp[x][1],'label'):
                           if not temp[x][1].label=='':
                               label=temp[x][1].label
                               
                           else:
                               label=temp[x][1].title
                       else:
                           label=temp[x][1].title                            
   
                       listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1]))
                       
           #print self.getId(),start
         #print listNav          #print listNav
   
         #html=""          #html=""
Line 230  class ECHO_navigation(Folder): Line 414  class ECHO_navigation(Folder):
   
         return listNav          return listNav
   
       def tempSorted(self,hash,field="weight"):
           ls=[]
   
           for x in hash.keys():
               #print hash[x][1]
               if hasattr(hash[x][1],field):
                   weight=getattr(hash[x][1],field)
                   #print weight
               else:
                   weight=0
   
               ls.append((x,weight))
   
           ls.sort(sortWeight)
           
           return [x[0] for x in ls]
   
       
           
               
     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])
Line 268  class ECHO_navigation(Folder): Line 472  class ECHO_navigation(Folder):
                 temp=temp[x][0]                  temp=temp[x][0]
                 #print temp                  #print temp
                   
         for key in temp.keys():          for key in self.tempSorted(temp):
                           
             description=temp[x][1].title              description=temp[x][1].title
                     
             url=self.absolute_url()+createPath(temp[key][1].absolute_url())              url=createPath(self.absolute_url(),temp[key][1].absolute_url())
   
             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 287  class ECHO_navigation(Folder): Line 491  class ECHO_navigation(Folder):
     def mainNavBar(self):      def mainNavBar(self):
         """print main navigation bar"""          """print main navigation bar"""
         keys=""          keys=""
   
         try:          try:
             keys=self.buttonsFromHash(self.createNavHash(0))              keys=self.buttonsFromHash(self.createNavHash(0))
         except:          except:
Line 297  class ECHO_navigation(Folder): Line 502  class ECHO_navigation(Folder):
     def mainNavElements(self):      def mainNavElements(self):
         """print main navigation bar"""          """print main navigation bar"""
         keys=""          keys=""
           #print "NAVELEMENT",self.getId()
           #try:
   
         try:  
             keys=self.barFromHash(self.createNavHash(0))              keys=self.barFromHash(self.createNavHash(0))
         except:          
             keys=""          #except:
           #    keys=""
                           
         return keys          return keys
           
       def numberOfMainNavElements(self):
       """number of main elements"""
   
       return len(self.barFromHash(self.createNavHash(0))) 
   
     def secondNavElements(self):      def secondNavElements(self):
         """Zweite Ordnung"""          """Zweite Ordnung"""
                   
Line 330  class ECHO_navigation(Folder): Line 542  class ECHO_navigation(Folder):
                   
         return keys          return keys
   
       def navElements(self,order):
           """n-te Ordnung"""
           
           hash=self.createNavHash(order)
           actual_url=self.REQUEST['URL']
           
           ult_temp=re.sub(self.absolute_url(),"",actual_url)
           #print ult_temp
   
           splitted=ult_temp.split("/")
           
   
           ## if splitted[len(splitted)-1]=="index_html":
   ##             start=[splitted[len(splitted)-2]]
   ##         else:
   ##             start=[splitted[len(splitted)-1]]
   
           start=splitted[2:order+1]
           #print start
          
           keys=self.barFromHash(hash,start=start)
           
           
           return keys
   
   
     def secondNavBar(self):      def secondNavBar(self):
         """Zweite Ordnung"""          """Zweite Ordnung"""
Line 356  class ECHO_navigation(Folder): Line 593  class ECHO_navigation(Folder):
                   
         return keys          return keys
   
 def manage_AddECHO_navigationForm(self):  def manage_addECHO_navigationForm(self):
     """Form for adding"""      """Form for adding"""
     pt=PageTemplateFile('Products/ECHO_content/AddECHO_navigation.zpt').__of__(self)      pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_navigation.zpt').__of__(self)
     return pt()      return pt()
   
 def manage_AddECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):  def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
     """Add an ECHO_root"""      """Add an ECHO_root"""
     self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))      self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
           
Line 371  def manage_AddECHO_navigation(self,id,ti Line 608  def manage_AddECHO_navigation(self,id,ti
   
 #helpers  #helpers
   
 def createPath(url):  
     temp=url.split("/")  
     del temp[0]  def createPath(url1,url2):
     del temp[1]      temp1=url1.split("/")
     return string.join(temp,"/")      temp2=url2.split("/")
       for test in temp1:
           if temp2[0]==test:
               del temp2[0]
   
       return url1+"/"+string.join(temp2,"/")
   
   def sortWeight(x,y):
       #print x[1],y[1]
       return cmp(x[1],y[1])
           

Removed from v.1.2  
changed lines
  Added in v.1.15


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