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