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:
193: try:
194: u = self.DestinationURL()
195: except AttributeError:
196: u = REQUEST['URL1']
197:
198: if submit == " Add and Edit ":
199: u = "%s/%s" % (u, quote(id))
200: REQUEST.RESPONSE.redirect(u+'/manage_main')
201: return ''
202:
203:
204: class ECHO_navigation(Folder):
205: """Navigations Element"""
206: meta_type="ECHO_Navigation"
207:
208: displayedMetaTypes=['ImageCollectionIFrame','ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ECHO_sqlElement','ECHO_resource','ECHO_externalLink']
209:
210: def __init__(self,id,title,pathToHierarchy):
211: """init"""
212: self.id=id
213: self.title=title
214: self.pathToHierarchy=pathToHierarchy
215:
216: manage_options = Folder.manage_options+(
217: {'label':'Main Config','action':'ECHO_navigationConfigForm'},
218: )
219:
220: def ECHO_navigationConfigForm(self):
221: """configForm"""
222: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_navigation.zpt').__of__(self)
223: return pt()
224:
225: def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):
226: """config"""
227: self.title=title
228: self.pathToHierarchy=pathToHierarchy
229:
230: if RESPONSE is not None:
231: RESPONSE.redirect('manage_main')
232:
233:
234: def getColls(self,obj,depth):
235: nav={}
236: #print "HERE",obj.
237: for keys in obj.__dict__.keys():
238: x=getattr(obj,keys)
239: if hasattr(x,"meta_type"):
240: if x.meta_type in self.displayedMetaTypes:
241: if depth>1:
242: nav[x.getId()]=(self.getColls(x,depth-1),x)
243: else:
244: nav[x.getId()]=(None,x)
245: return nav
246:
247: def createNavHash(self,depth):
248: """Auslesen des Hierarchiebuames"""
249: temp=self.pathToHierarchy[0:]
250: temp=re.sub("/",".",temp)
251: temp="self.aq_parent"+temp
252:
253: objtemp=eval(temp)
254: nav={}
255: obj=objtemp
256:
257: #exec(obj)
258:
259: #objtemp = compile(temp,'<string>','single')
260: #obj=eval(objtemp)
261: #print obj
262:
263: #print obj.__dict__.keys()
264:
265: for keys in obj.__dict__.keys():
266: x=getattr(obj,keys)
267: if hasattr(x,"meta_type"):
268: #print x.meta_type
269: if x.meta_type in self.displayedMetaTypes:
270:
271: if depth>1:
272: nav[x.getId()]=(self.getColls(x,int(depth)-1),x)
273: else:
274: nav[x.getId()]=(None,x)
275:
276:
277: #print nav
278: return nav
279:
280: def barFromHash(self,hash,start=None,sortField=None):
281: """Erzeuge Navigations Element"""
282: #print "hash",hash
283: listNav=[]
284: if not start:
285: temp=hash
286: sortField="weight"
287: else: # list mit pfad zum hash
288: temp=hash
289: #print "HI",sortField
290: if not sortField:
291: tempObj=self.pathToHierarchy[0:]
292: tempObj=re.sub("/",".",tempObj)
293: tempObj="self.aq_parent"+tempObj
294:
295: objtemp=eval(tempObj)
296:
297: obj=objtemp
298:
299: for x in start:
300: #print "OBJ",start,obj,obj.getId(),x
301:
302: obj=getattr(obj,x)
303:
304: if hasattr(obj,'sortfield'):
305: sortField=obj.sortfield
306: else:
307: sortField='weight'
308: #print "START",start
309: for x in start:
310: #print "N2",x,temp[x]
311: try:
312: temp=temp[x][0]
313: except:
314: """nothing"""
315: return []
316: #print "TEMP",temp,self.tempSorted(temp, field=sortField)
317: print "HELL",sortField
318: for x in self.tempSorted(temp, field=sortField):
319: if not temp[x][1].title == "":
320: if temp[x][1].meta_type=="ECHO_sqlElement":
321: for z in temp[x][1].getNavList():
322: listNav.append((z[0],z[1]))
323: else:
324: # add label fals existiert und nicht leer
325: if hasattr(temp[x][1],'label'):
326: if not temp[x][1].label=='':
327: label=temp[x][1].label
328: print "HAS LABEL",label
329: else:
330: label=temp[x][1].title
331: else:
332: label=temp[x][1].title
333:
334: listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url())))
335:
336: #print self.getId(),start
337: #print listNav
338:
339: #html=""
340: #for k in listNav:
341: # print k
342: # html=html+"<a href='%s'>%s</a> "% (self.absolute_url()+createPath(k[1][1].absolute_url()),k[0])
343:
344: return listNav
345:
346: def tempSorted(self,hash,field="weight"):
347: ls=[]
348: print "SORT",field
349: for x in hash.keys():
350: #print hash[x][1]
351: if hasattr(hash[x][1],field):
352: weight=getattr(hash[x][1],field)
353: #print weight
354: else:
355: weight=0
356:
357: ls.append((x,weight))
358:
359: ls.sort(sortWeight)
360:
361: return [x[0] for x in ls]
362:
363:
364:
365:
366: def isSelectedPath(self,item):
367: """test is path is already selected"""
368: found=re.search("\?(.*)",item[1])
369: if found:
370: temp=re.sub(" ","%20",found.group(0))
371: #print temp+"::"+self.REQUEST['QUERY_STRING']
372: if ("?"+self.REQUEST['QUERY_STRING'])==temp:
373: return 1
374:
375: if re.search(item[1],self.REQUEST['URL']):
376: return 1
377: else:
378: return 0
379:
380:
381: def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
382:
383: """Generate Buttons"""
384: if orientation=="horizontal":
385: html="<table><tr>"
386: startTag="<td>"
387: endTag="</td>"
388: endHtml="</tr></table>"
389:
390: else:
391: html="<table>"
392: startTag="<tr><td>"
393: endTag="</td></tr>"
394: endHtml="</table>"
395:
396: if not start:
397: temp=hash
398: else:
399: temp=hash
400: for x in start:
401: temp=temp[x][0]
402: #print temp
403:
404: for key in self.tempSorted(temp):
405:
406: description=temp[x][1].title
407:
408: url=createPath(self.absolute_url(),temp[key][1].absolute_url())
409:
410: if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
411: html=html+startTag+"[%s]" % description+endTag
412: else:
413: html=html+startTag+"[<a href='%s'>%s</a>]" % (url,description)+endTag
414:
415:
416: html=html+endHtml
417:
418: return html
419:
420: def mainNavBar(self):
421: """print main navigation bar"""
422: keys=""
423: print "NAVBAR",self.getId()
424: try:
425: keys=self.buttonsFromHash(self.createNavHash(0))
426: except:
427: keys=""
428:
429: return keys
430:
431: def mainNavElements(self):
432: """print main navigation bar"""
433: keys=""
434: print "NAVELEMENT",self.getId()
435: #try:
436:
437: keys=self.barFromHash(self.createNavHash(0))
438:
439: #except:
440: # keys=""
441:
442: return keys
443:
444: def secondNavElements(self):
445: """Zweite Ordnung"""
446:
447: hash=self.createNavHash(2)
448: actual_url=self.REQUEST['URL']
449:
450: ult_temp=re.sub(self.absolute_url(),"",actual_url)
451: #print ult_temp
452:
453: splitted=ult_temp.split("/")
454:
455:
456: ## if splitted[len(splitted)-1]=="index_html":
457: ## start=[splitted[len(splitted)-2]]
458: ## else:
459: ## start=[splitted[len(splitted)-1]]
460:
461: start=[splitted[2]]
462: #print start
463:
464: keys=self.barFromHash(hash,start=start)
465:
466:
467: return keys
468:
469: def navElements(self,order):
470: """n-te Ordnung"""
471:
472: hash=self.createNavHash(order)
473: actual_url=self.REQUEST['URL']
474:
475: ult_temp=re.sub(self.absolute_url(),"",actual_url)
476: #print ult_temp
477:
478: splitted=ult_temp.split("/")
479:
480:
481: ## if splitted[len(splitted)-1]=="index_html":
482: ## start=[splitted[len(splitted)-2]]
483: ## else:
484: ## start=[splitted[len(splitted)-1]]
485:
486: start=splitted[2:order+1]
487: #print start
488:
489: keys=self.barFromHash(hash,start=start)
490:
491:
492: return keys
493:
494:
495: def secondNavBar(self):
496: """Zweite Ordnung"""
497:
498: hash=self.createNavHash(2)
499: actual_url=self.REQUEST['URL']
500:
501: ult_temp=re.sub(self.absolute_url(),"",actual_url)
502: #print ult_temp
503:
504: splitted=ult_temp.split("/")
505:
506:
507: ## if splitted[len(splitted)-1]=="index_html":
508: ## start=[splitted[len(splitted)-2]]
509: ## else:
510: ## start=[splitted[len(splitted)-1]]
511:
512: start=[splitted[2]]
513: #print start
514:
515: keys=self.buttonsFromHash(hash,start=start,orientation="vertical")
516:
517:
518: return keys
519:
520: def manage_addECHO_navigationForm(self):
521: """Form for adding"""
522: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_navigation.zpt').__of__(self)
523: return pt()
524:
525: def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
526: """Add an ECHO_root"""
527: self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
528:
529: if RESPONSE is not None:
530: RESPONSE.redirect('manage_main')
531:
532:
533: #helpers
534:
535:
536:
537: def createPath(url1,url2):
538: temp1=url1.split("/")
539: temp2=url2.split("/")
540: for test in temp1:
541: if temp2[0]==test:
542: del temp2[0]
543:
544: return url1+"/"+string.join(temp2,"/")
545:
546: def sortWeight(x,y):
547: #print x[1],y[1]
548: return cmp(x[1],y[1])
549:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>