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