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