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