--- ECHO_content/ECHO_Nav.py 2004/07/21 16:36:18 1.37
+++ ECHO_content/ECHO_Nav.py 2005/08/04 17:42:07 1.57
@@ -1,5 +1,6 @@
# Objekte zur Erzeugung von Navigationselementen
+from AccessControl import ClassSecurityInfo
from Globals import DTMLFile
from OFS.Image import Image,cookId
from OFS.Folder import Folder
@@ -12,9 +13,9 @@ from Products.PageTemplates.ZopePageTemp
import os.path
from Globals import package_home
import urllib
-from ECHO_helpers import displayTypes,checkOnlyOneInGroup
+from ECHO_helpers import *
from ECHO_collection import content_html
-
+from types import *
from Globals import DTMLFile
@@ -27,11 +28,16 @@ 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
+import zLOG
+try:
+ from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
+except:
+ zLOG.LOG('ECHO_Nav',zLOG.INFO,'ZSQLSimpleSearch not supported')
@@ -51,6 +57,7 @@ class ECHO_ZCatalogElement(SimpleItem):
self.weight=weight
self.content=contentType
+
manage_options= SimpleItem.manage_options+(
{'label':'Main Config','action':'changeECHO_ZCatalogElementForm'},
)
@@ -75,7 +82,7 @@ class ECHO_ZCatalogElement(SimpleItem):
def changeECHO_ZCatalogElementForm(self):
"""change"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_ZCatalogElement.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_ZCatalogElement.zpt')).__of__(self)
return pt()
def changeECHO_ZCatalogElement(self,title,field,catalogId,baseUrl,weight,contentType,RESPONSE=None):
@@ -116,7 +123,7 @@ class ECHO_ZCatalogElement(SimpleItem):
def manage_addECHO_ZCatalogElementForm(self):
"""Form for adding"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_ZCatalogElement.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_ZCatalogElement.zpt')).__of__(self)
return pt()
def manage_addECHO_ZCatalogElement(self,id,title,field,baseUrl,weight,contentType,RESPONSE=None):
@@ -140,9 +147,9 @@ class ECHO_contentType(Image):
def changeECHO_contentTypeForm(self):
"""Change the description text"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_contentType.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_contentType.zpt')).__of__(self)
return pt()
-
+
def changeECHO_contentType(self,description,RESPONSE=None):
"""Change the Content"""
self.description=description
@@ -192,6 +199,8 @@ class ECHO_sqlElement(SimpleItem):
"""Erzeuge navigation aus sql-abfrage"""
meta_type="ECHO_sqlElement"
baseUrl=""
+
+
def __init__(self,id,title,query,field,searchField,baseUrl,weight,contentType):
"""init"""
@@ -204,7 +213,7 @@ class ECHO_sqlElement(SimpleItem):
else:
self.searchField=searchField
self.baseUrl=baseUrl
- self.weight=weight
+
self.content=contentType
manage_options= SimpleItem.manage_options+(
@@ -236,7 +245,7 @@ class ECHO_sqlElement(SimpleItem):
def changeECHO_sqlElementForm(self):
"""change"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_sqlElement.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_sqlElement.zpt')).__of__(self)
return pt()
def changeECHO_sqlElement(self,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
@@ -252,21 +261,12 @@ class ECHO_sqlElement(SimpleItem):
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
- 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.
- if not query:
- query=self.query
+ try:
+ searchQuery=ZSQLExtendFolder.ZSQLSimpleSearch
+ except:
+ zLOG.LOG('ECHO_Nav',zLOG.INFO,'ZSQLSimpleSearch not supported')
- if self.search.meta_type=="Z SQL Method":
- 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"""
records=self.searchQuery()
@@ -287,7 +287,7 @@ class ECHO_sqlElement(SimpleItem):
def manage_addECHO_sqlElementForm(self):
"""Form for adding"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_sqlElement.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_sqlElement.zpt')).__of__(self)
return pt()
def manage_addECHO_sqlElement(self,id,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
@@ -298,41 +298,45 @@ def manage_addECHO_sqlElement(self,id,ti
RESPONSE.redirect('manage_main')
-class ECHO_pageTemplate(ZopePageTemplate):
+class ECHO_pageTemplate(ZopePageTemplate,ECHO_basis):
"""pageTemplate Objekt"""
meta_type="ECHO_pageTemplate"
-
+ security=ClassSecurityInfo()
+
+
_default_content_fn = os.path.join(package_home(globals()),
'html/ECHO_pageTemplateDefault.html')
- manage_options=ZopePageTemplate.manage_options+(
- {'label':'Main Config','action':'changeECHO_pageTemplateWeightForm'},
+ manage_options=ZopePageTemplate.manage_options+ECHO_basis.manage_options+(
+ {'label':'Main Config','action':'changeECHO_pageTemplateMainForm'},
+ {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
)
+ security.declarePublic('content_html')
+
+
def content_html(self):
"""content_html"""
return content_html(self,'pageTemplate')
- def changeECHO_pageTemplateWeightForm(self):
+ def changeECHO_pageTemplateMainForm(self):
"""change"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_pageTemplateMain.zpt')).__of__(self)
return pt()
- def changeECHO_pageTemplateWeight(self,weight,contentType,label,RESPONSE=None):
+ def changeECHO_pageTemplateMain(self,weight,contentType,label,description,RESPONSE=None,isAlwaysClickable=None,suffix=None,prefix=None):
"""change"""
self.weight=weight
self.contentType=contentType
self.label=label
+ self.description=description
+ self.isAlwaysClickable=isAlwaysClickable
+ self.suffix=suffix
+ self.prefix=prefix
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
-
- def getLabel(self):
- if hasattr(self,'label'):
- return self.label.encode('utf-8')
- else:
- return 0
-
+
def getWeight(self):
"""get weight"""
if hasattr(self,'weight'):
@@ -359,7 +363,7 @@ class ECHO_pageTemplate(ZopePageTemplate
def manage_addECHO_pageTemplateForm(self):
"""Form for adding"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_pageTemplate.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_pageTemplate.zpt')).__of__(self)
return pt()
from urllib import quote
@@ -410,8 +414,83 @@ class ECHO_navigation(Folder):
"""Navigations Element"""
meta_type="ECHO_Navigation"
- displayedMetaTypes=displayTypes
+ def linkBar(self,parent):
+ """linkbarer balken"""
+ str=""
+
+
+ while not(parent.meta_type == "ECHO_root"):
+ fragment="""%s"""%(parent.absolute_url(),parent.label)
+ str=fragment+"/"+str
+ parent=parent.aq_parent
+
+ return str
+
+ def decode(self,str):
+ """decoder"""
+ if not 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="
"):
+ """formatiert liste im str"""
+ if list:
+ return re.sub(search,replace,list)
+ else:
+ return
+
+ def ECHO_cacheManageForm(self):
+ """change form"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'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:
+ try:
+ self.deleteCache()
+ except:
+ for roots in self.ZopeFind(self,obj_metatypes=['ECHO_root'],search_sub=1):
+ roots[1].deleteCache()
+
+
+ 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
+
+
+ displayableMetaTypes=displayTypes
+
def getImageViewers(self):
"""images"""
viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
@@ -426,20 +505,26 @@ class ECHO_navigation(Folder):
self.id=id
self.title=title
self.pathToHierarchy=pathToHierarchy
-
+ self.displayedMetaTypes=displayTypes
+
manage_options = Folder.manage_options+(
{'label':'Main Config','action':'ECHO_navigationConfigForm'},
- )
+ {'label':'Cache','action':'ECHO_cacheManageForm'},
+ )
+ displayedMetaTypes=displayTypes
+
def ECHO_navigationConfigForm(self):
"""configForm"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_navigation.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_navigation.zpt')).__of__(self)
return pt()
- def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):
+ def ECHO_navigationConfig(self,title,pathToHierarchy,displayedMetaTypes=displayTypes,RESPONSE=None):
"""config"""
self.title=title
self.pathToHierarchy=pathToHierarchy
+ self.displayedMetaTypes=toList(displayedMetaTypes)[0:]
+
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
@@ -463,27 +548,38 @@ class ECHO_navigation(Folder):
temp=self.pathToHierarchy[0:]
temp=re.sub("/",".",temp)
temp="self.aq_parent"+temp
+
objtemp=eval(temp)
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):
+
+ return self._v_hash[str(depth)]
+
+ # if not generate new hash
+ obj=objtemp
for keys in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):
x=keys[1]
+ if depth>1:
+ nav[x.getId()]=(self.getColls(x,int(depth)-1,checkOnly),x)
+ else:
+ nav[x.getId()]=(None,x)
+
+ #store in cache if activated
+ if getattr(self,'activateCache',None):
- if hasattr(x,"meta_type"):
+ try:
+ self._v_hash[str(depth)]={}
+ except:
+ self._v_hash={}
+ self._v_hash[str(depth)]={}
- if x.meta_type in self.displayedMetaTypes:
-
- if depth>1:
- nav[x.getId()]=(self.getColls(x,int(depth)-1,checkOnly),x)
- else:
- nav[x.getId()]=(None,x)
-
+ for x in nav.keys():
+ self._v_hash[str(depth)][x]=nav[x]
- #print nav
return nav
def barFromHash(self,hash,start=None,sortField=None,location=None):
@@ -493,7 +589,7 @@ class ECHO_navigation(Folder):
if not start:
temp=hash
sortField="weight"
- else: # list mit pfad zum hash
+ else: # liste mit pfad zum hash
temp=hash
#print "HI",sortField
if not sortField:
@@ -531,25 +627,29 @@ class ECHO_navigation(Folder):
if (temp[x][1].meta_type=="ECHO_sqlElement") or (temp[x][1].meta_type=="ECHO_ZCatalogElement"):
for z in temp[x][1].getNavList():
- listNav.append((z[0],z[1],None))
+ listNav.append((z[0],z[1],None,'',''))
else:
# add label falls existiert und nicht leer
if hasattr(temp[x][1],'label'):
+
if not temp[x][1].label=='':
- label=temp[x][1].label.encode('utf-8','ignore')
-
+ try:
+ label=temp[x][1].getLabel()
+ except:
+ label=temp[x][1].label
else:
label=temp[x][1].title.encode('utf-8')
else:
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]))
+ 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','')))
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())+getattr(temp[x][1],'queryString',''),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))
return listNav
@@ -559,7 +659,10 @@ class ECHO_navigation(Folder):
for x in hash.keys():
#print hash[x][1]
if hasattr(hash[x][1],field):
- weight=getattr(hash[x][1],field)
+ try:
+ weight=int(getattr(hash[x][1],field))
+ except:
+ weight=getattr(hash[x][1],field)
#print weight
else:
weight=0
@@ -575,17 +678,51 @@ class ECHO_navigation(Folder):
def isSelectedPath(self,item):
"""test is path is already selected"""
- found=re.search("\?(.*)/",item[1])
+
+ testStr=re.sub("/index_html",'',self.REQUEST.get('URL',''))
+
+ #falls exakte Übereinstimmung dann immer 1
+ if (testStr==item[1]) and (self.REQUEST.get('QUERY_STRING','')==''):
+
+ return 1
+
+ found=re.search("\?(.*)",item[1])
+
if found:
temp=re.sub(" ","%20",found.group(0))
+
#print temp+"::"+self.REQUEST['QUERY_STRING']
if ("?"+self.REQUEST['QUERY_STRING'])==temp:
+ if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
+
+ return 2
+ else:
+ return 1
+
+ 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']):
- return 1
+ if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
+
+ return 2
+ else:
+ return 1
else:
return 0
+
+
+ def getPathStyle(self, item, style=""):
+ """returns a string with the given style + 'sel' if the path is already selected."""
+
+ if self.isSelectedPath(item):
+ return style + 'sel'
+ else:
+ return style
def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
@@ -667,7 +804,7 @@ class ECHO_navigation(Folder):
return nr+1
def secondNavElements(self):
- """Zweite Ordnung"""
+ """Zweite Ordnung Navigationselemente"""
hash=self.createNavHash(2,checkOnly="no")
actual_url=self.REQUEST['URL']
@@ -746,7 +883,7 @@ class ECHO_navigation(Folder):
def manage_addECHO_navigationForm(self):
"""Form for adding"""
- pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_navigation.zpt').__of__(self)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_navigation.zpt')).__of__(self)
return pt()
def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):