Annotation of ECHO_content/ECHO_Nav.py, revision 1.3
1.1 dwinter 1: # Objekte zur Erzeugung von Navigationselementen
2:
3:
4: from OFS.Folder import Folder
5: from OFS.SimpleItem import SimpleItem
6: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
7: from Products.PageTemplates.PageTemplate import PageTemplate
8: import re
9: import string
10: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
11: import os.path
12: from Globals import package_home
13: import urllib
14:
15: class ECHO_sqlElement(SimpleItem):
16: """Erzeuge navigation aus sql-abfrage"""
17: meta_type="ECHO_sqlElement"
18: baseUrl=""
19:
1.3 ! dwinter 20: def __init__(self,id,title,query,field,baseUrl,weight):
1.1 dwinter 21: """init"""
22: self.id=id
23: self.title=title
24: self.query=query
25: self.field=field
26: self.baseUrl=baseUrl
1.3 ! dwinter 27: self.weight=weight
1.1 dwinter 28:
29: manage_options= SimpleItem.manage_options+(
30: {'label':'Main Config','action':'changeECHO_sqlElementForm'},
31: )
32:
1.3 ! dwinter 33: def getWeight(self):
! 34: if has_attr('weight'):
! 35: return weight
! 36:
! 37: else:
! 38: return 0
! 39:
! 40:
! 41:
1.1 dwinter 42: def changeECHO_sqlElementForm(self):
43: """change"""
44: pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_sqlElement.zpt').__of__(self)
45: return pt()
46:
1.3 ! dwinter 47: def changeECHO_sqlElement(self,title,query,field,baseUrl,weight,RESPONSE=None):
1.1 dwinter 48: """change"""
49: self.title=title
50: self.query=query
51: self.field=field
52: self.baseUrl=baseUrl
1.3 ! dwinter 53: self.weight=weight
1.1 dwinter 54:
55: if RESPONSE is not None:
56: RESPONSE.redirect('manage_main')
57:
58: def searchQuery(self):
59: return self.search(var=self.query)
60:
61: def getNavList(self):
62: """ausgabe der treffer list für navigation"""
63: records=self.searchQuery()
64: if not records:
65: return []
66: else:
67: ret=[]
68: for record in records:
69: ret.append((getattr(record,self.field),self.baseUrl+str(getattr(record,self.field))))
70: return ret
71:
72:
73: def manage_AddECHO_sqlElementForm(self):
74: """Form for adding"""
75: pt=PageTemplateFile('Products/ECHO_content/AddECHO_sqlElement.zpt').__of__(self)
76: return pt()
77:
78: def manage_AddECHO_sqlElement(self,id,title,query,field,baseUrl,RESPONSE=None):
79: """Add an ECHO_sqlelement"""
80: self._setObject(id,ECHO_sqlElement(id,title,query,field,baseUrl))
81:
82: if RESPONSE is not None:
83: RESPONSE.redirect('manage_main')
84:
85:
86: class ECHO_pageTemplate(ZopePageTemplate):
87: """pageTemplate Objekt"""
88: meta_type="ECHO_pageTemplate"
89:
90: _default_content_fn = os.path.join(package_home(globals()),
91: 'ECHO_pageTemplateDefault.html')
92:
1.3 ! dwinter 93: manage_options=ZopePageTemplate.manage_options+(
! 94: {'label':'Weight','action':'changeECHO_pageTemplateWeightForm'},
! 95: )
! 96:
! 97: def changeECHO_pageTemplateWeightForm(self):
! 98: """change"""
! 99: pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_pageTemplateWeight.zpt').__of__(self)
! 100: return pt()
! 101:
! 102:
! 103:
1.1 dwinter 104:
105: ## def __init__(self, id, text=None, content_type=None):
106: ## self.id = str(id)
107: ## self.ZBindings_edit(self._default_bindings)
108: ## if text is None:
109: ## text = open(self._default_cont).read()
110: ## self.pt_edit(text, content_type)
111:
112: def manage_AddECHO_pageTemplateForm(self):
113: """Form for adding"""
114: pt=PageTemplateFile('Products/ECHO_content/AddECHO_pageTemplate.zpt').__of__(self)
115: return pt()
116:
117: from urllib import quote
118:
119:
1.3 ! dwinter 120: def manage_AddECHO_pageTemplate(self, id, weight= 0,title=None, text=None,
1.1 dwinter 121: REQUEST=None, submit=None):
122: "Add a Page Template with optional file content."
123:
124:
125: id = str(id)
126: if REQUEST is None:
127: self._setObject(id, ECHO_pageTemplate(id, text))
128: ob = getattr(self, id)
1.3 ! dwinter 129: setattr(ob,'weight',weight)
1.1 dwinter 130: if title:
131: ob.pt_setTitle(title)
132: return ob
133: else:
134: file = REQUEST.form.get('file')
135: headers = getattr(file, 'headers', None)
136: if headers is None or not file.filename:
137: zpt = ECHO_pageTemplate(id)
138: else:
139: zpt = ECHO_pageTemplate(id, file, headers.get('content_type'))
140:
141: self._setObject(id, zpt)
1.3 ! dwinter 142: ob = getattr(self, id)
! 143: setattr(ob,'weight',weight)
1.1 dwinter 144:
145: try:
146: u = self.DestinationURL()
147: except AttributeError:
148: u = REQUEST['URL1']
149:
150: if submit == " Add and Edit ":
151: u = "%s/%s" % (u, quote(id))
152: REQUEST.RESPONSE.redirect(u+'/manage_main')
153: return ''
154:
155:
156: class ECHO_navigation(Folder):
157: """Navigations Element"""
158: meta_type="ECHO_Navigation"
159:
160: displayedMetaTypes=['ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ECHO_sqlElement']
161:
162: def __init__(self,id,title,pathToHierarchy):
163: """init"""
164: self.id=id
165: self.title=title
166: self.pathToHierarchy=pathToHierarchy
167:
168: manage_options = Folder.manage_options+(
169: {'label':'Main Config','action':'ECHO_navigationConfigForm'},
170: )
171:
172: def ECHO_navigationConfigForm(self):
173: """configForm"""
174: pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_navigation.zpt').__of__(self)
175: return pt()
176:
177: def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):
178: """config"""
179: self.title=title
180: self.pathToHierarchy=pathToHierarchy
181:
182: if RESPONSE is not None:
183: RESPONSE.redirect('manage_main')
184:
185:
186: def getColls(self,obj,depth):
187: nav={}
188: #print "HERE",obj.
189: for keys in obj.__dict__.keys():
190: x=getattr(obj,keys)
191: if hasattr(x,"meta_type"):
192: if x.meta_type in self.displayedMetaTypes:
193: if depth>1:
194: nav[x.getId()]=(self.getColls(x,depth-1),x)
195: else:
196: nav[x.getId()]=(None,x)
197: return nav
198:
199: def createNavHash(self,depth):
200: """Auslesen des Hierarchiebuames"""
201: temp=self.pathToHierarchy[0:]
202: temp=re.sub("/",".",temp)
203: temp="self.aq_parent"+temp
204:
205: objtemp=eval(temp)
206: nav={}
207: obj=objtemp
208:
209: #exec(obj)
210:
211: #objtemp = compile(temp,'<string>','single')
212: #obj=eval(objtemp)
213: print obj
214:
215: #print obj.__dict__.keys()
216:
217: for keys in obj.__dict__.keys():
218: x=getattr(obj,keys)
219: if hasattr(x,"meta_type"):
220: #print x.meta_type
221: if x.meta_type in self.displayedMetaTypes:
222: if depth>1:
223: nav[x.getId()]=(self.getColls(x,int(depth)-1),x)
224: else:
225: nav[x.getId()]=(None,x)
226:
227:
228: #print nav
229: return nav
230:
231: def barFromHash(self,hash,start=None):
232: """Erzeuge Navigations Element"""
233: #print "hash",hash
234: listNav=[]
235: if not start:
236: temp=hash
237: else: # list mit pfad zum hash
238: temp=hash
239: for x in start:
240: temp=temp[x][0]
241:
242: for x in temp.keys():
243: if temp[x][1].meta_type=="ECHO_sqlElement":
244: for z in temp[x][1].getNavList():
245: listNav.append((z[0],z[1]))
246: else:
1.3 ! dwinter 247: listNav.append((temp[x][1].title,createPath(self.absolute_url(),temp[x][1].absolute_url())))
! 248: print self.absolute_url(),"::",temp[x][1].absolute_url()
1.1 dwinter 249:
250: #print listNav
251:
252: #html=""
253: #for k in listNav:
254: # print k
255: # html=html+"<a href='%s'>%s</a> "% (self.absolute_url()+createPath(k[1][1].absolute_url()),k[0])
256:
257: return listNav
258:
259: def isSelectedPath(self,item):
260: """test is path is already selected"""
261: found=re.search("\?(.*)",item[1])
262: if found:
263: temp=re.sub(" ","%20",found.group(0))
264: #print temp+"::"+self.REQUEST['QUERY_STRING']
265: if ("?"+self.REQUEST['QUERY_STRING'])==temp:
266: return 1
267:
268: if re.search(item[1],self.REQUEST['URL']):
269: return 1
270: else:
271: return 0
272:
273:
274: def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
275:
276: """Generate Buttons"""
277: if orientation=="horizontal":
278: html="<table><tr>"
279: startTag="<td>"
280: endTag="</td>"
281: endHtml="</tr></table>"
282:
283: else:
284: html="<table>"
285: startTag="<tr><td>"
286: endTag="</td></tr>"
287: endHtml="</table>"
288:
289: if not start:
290: temp=hash
291: else:
292: temp=hash
293: for x in start:
294: temp=temp[x][0]
295: #print temp
296:
297: for key in temp.keys():
298:
299: description=temp[x][1].title
1.2 dwinter 300:
1.3 ! dwinter 301: url=createPath(self.absolute_url(),temp[key][1].absolute_url())
1.2 dwinter 302:
1.1 dwinter 303: if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
304: html=html+startTag+"[%s]" % description+endTag
305: else:
306: html=html+startTag+"[<a href='%s'>%s</a>]" % (url,description)+endTag
307:
308:
309: html=html+endHtml
310:
311: return html
312:
313: def mainNavBar(self):
314: """print main navigation bar"""
315: keys=""
316: try:
317: keys=self.buttonsFromHash(self.createNavHash(0))
318: except:
319: keys=""
320:
321: return keys
322:
323: def mainNavElements(self):
324: """print main navigation bar"""
325: keys=""
326:
327: try:
328: keys=self.barFromHash(self.createNavHash(0))
329: except:
330: keys=""
331:
332: return keys
333:
334: def secondNavElements(self):
335: """Zweite Ordnung"""
336:
337: hash=self.createNavHash(2)
338: actual_url=self.REQUEST['URL']
339:
340: ult_temp=re.sub(self.absolute_url(),"",actual_url)
341: #print ult_temp
342:
343: splitted=ult_temp.split("/")
344:
345:
346: ## if splitted[len(splitted)-1]=="index_html":
347: ## start=[splitted[len(splitted)-2]]
348: ## else:
349: ## start=[splitted[len(splitted)-1]]
350:
351: start=[splitted[2]]
352: #print start
353:
354: keys=self.barFromHash(hash,start=start)
355:
356:
357: return keys
358:
359:
360: def secondNavBar(self):
361: """Zweite Ordnung"""
362:
363: hash=self.createNavHash(2)
364: actual_url=self.REQUEST['URL']
365:
366: ult_temp=re.sub(self.absolute_url(),"",actual_url)
367: #print ult_temp
368:
369: splitted=ult_temp.split("/")
370:
371:
372: ## if splitted[len(splitted)-1]=="index_html":
373: ## start=[splitted[len(splitted)-2]]
374: ## else:
375: ## start=[splitted[len(splitted)-1]]
376:
377: start=[splitted[2]]
378: #print start
379:
380: keys=self.buttonsFromHash(hash,start=start,orientation="vertical")
381:
382:
383: return keys
384:
385: def manage_AddECHO_navigationForm(self):
386: """Form for adding"""
387: pt=PageTemplateFile('Products/ECHO_content/AddECHO_navigation.zpt').__of__(self)
388: return pt()
389:
390: def manage_AddECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
391: """Add an ECHO_root"""
392: self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
393:
394: if RESPONSE is not None:
395: RESPONSE.redirect('manage_main')
396:
397:
398: #helpers
399:
1.3 ! dwinter 400:
! 401:
! 402: def createPath(url1,url2):
! 403: temp1=url1.split("/")
! 404: temp2=url2.split("/")
! 405: for test in temp1:
! 406: if temp2[0]==test:
! 407: del temp2[0]
! 408:
! 409: return url1+"/"+string.join(temp2,"/")
! 410:
1.1 dwinter 411:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>