Annotation of ECHO_content/ECHO_Nav.py, revision 1.7
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.7 ! dwinter 20: def __init__(self,id,title,query,field,searchField,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
1.7 ! dwinter 26: if searchField=="":
! 27: self.searchField=field
! 28: else:
! 29: self.searchField=searchField
1.1 dwinter 30: self.baseUrl=baseUrl
1.3 dwinter 31: self.weight=weight
1.6 dwinter 32: self.content=content_type
1.1 dwinter 33:
34: manage_options= SimpleItem.manage_options+(
35: {'label':'Main Config','action':'changeECHO_sqlElementForm'},
36: )
37:
1.7 ! dwinter 38: def getSearchField(self):
! 39: try:
! 40: return self.searchField
! 41: except:
! 42: return self.field
! 43:
1.3 dwinter 44: def getWeight(self):
1.4 dwinter 45: """get weight"""
46: if hasattr(self,'weight'):
47: return self.weight
1.3 dwinter 48: else:
49: return 0
50:
1.6 dwinter 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
1.3 dwinter 58:
59:
1.1 dwinter 60: def changeECHO_sqlElementForm(self):
61: """change"""
1.6 dwinter 62:
63: pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_sqlElement.zpt').__of__(self)
1.1 dwinter 64: return pt()
65:
1.7 ! dwinter 66: def changeECHO_sqlElement(self,title,query,field,searchField,baseUrl,weight,content_type,RESPONSE=None):
1.1 dwinter 67: """change"""
68: self.title=title
69: self.query=query
70: self.field=field
1.7 ! dwinter 71: self.searchField=searchField
1.1 dwinter 72: self.baseUrl=baseUrl
1.3 dwinter 73: self.weight=weight
1.6 dwinter 74: self.content_type=content_type
75:
1.1 dwinter 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:
1.7 ! dwinter 90: try:
! 91: ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField())))))
! 92: except:
! 93: """notrhing"""
! 94:
1.1 dwinter 95: return ret
96:
97:
1.6 dwinter 98: def manage_addECHO_sqlElementForm(self):
1.1 dwinter 99: """Form for adding"""
1.6 dwinter 100: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_sqlElement.zpt').__of__(self)
1.1 dwinter 101: return pt()
102:
1.7 ! dwinter 103: def manage_addECHO_sqlElement(self,id,title,query,field,searchField,baseUrl,weight,content_type,RESPONSE=None):
1.1 dwinter 104: """Add an ECHO_sqlelement"""
1.7 ! dwinter 105: self._setObject(id,ECHO_sqlElement(id,title,query,field,searchField,baseUrl,weight,content_type))
1.1 dwinter 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()),
1.6 dwinter 116: 'html/ECHO_pageTemplateDefault.html')
1.1 dwinter 117:
1.3 dwinter 118: manage_options=ZopePageTemplate.manage_options+(
1.6 dwinter 119: {'label':'Weight and Type','action':'changeECHO_pageTemplateWeightForm'},
1.3 dwinter 120: )
121:
122: def changeECHO_pageTemplateWeightForm(self):
1.4 dwinter 123: """change"""
1.6 dwinter 124: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)
1.4 dwinter 125: return pt()
126:
1.6 dwinter 127: def changeECHO_pageTemplateWeight(self,weight,content_type,RESPONSE=None):
1.4 dwinter 128: """change"""
129: self.weight=weight
1.6 dwinter 130: self.content_type=content_type
1.3 dwinter 131:
1.4 dwinter 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
1.6 dwinter 141:
142: def getContent_Type(self):
143: """get weight"""
144: if hasattr(self,'weight'):
145: return self.weight
146: else:
147: return 0
148:
1.3 dwinter 149:
150:
1.1 dwinter 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:
1.6 dwinter 159: def manage_addECHO_pageTemplateForm(self):
1.1 dwinter 160: """Form for adding"""
1.6 dwinter 161: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_pageTemplate.zpt').__of__(self)
1.1 dwinter 162: return pt()
163:
164: from urllib import quote
165:
166:
1.6 dwinter 167: def manage_addECHO_pageTemplate(self, id, weight= 0,content_type=0,title=None, text=None,
1.1 dwinter 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)
1.3 dwinter 176: setattr(ob,'weight',weight)
1.6 dwinter 177: setattr(ob,'content_type',content_type)
1.1 dwinter 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)
1.3 dwinter 190: ob = getattr(self, id)
191: setattr(ob,'weight',weight)
1.1 dwinter 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:
1.7 ! dwinter 208: displayedMetaTypes=['ImageCollectionIFrame','ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ECHO_sqlElement','ECHO_resource','ECHO_externalLink']
1.1 dwinter 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"""
1.6 dwinter 222: pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_navigation.zpt').__of__(self)
1.1 dwinter 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)
1.4 dwinter 261: #print obj
1.1 dwinter 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:
1.5 dwinter 270:
1.1 dwinter 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:
1.5 dwinter 280: def barFromHash(self,hash,start=None,sortField=None):
1.1 dwinter 281: """Erzeuge Navigations Element"""
282: #print "hash",hash
283: listNav=[]
284: if not start:
285: temp=hash
1.5 dwinter 286: sortField="weight"
1.1 dwinter 287: else: # list mit pfad zum hash
288: temp=hash
1.7 ! dwinter 289: #print "HI",sortField
1.5 dwinter 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:
1.7 ! dwinter 300: #print "OBJ",start,obj,obj.getId(),x
1.5 dwinter 301:
302: obj=getattr(obj,x)
303:
304: if hasattr(obj,'sortfield'):
305: sortField=obj.sortfield
306: else:
307: sortField='weight'
1.7 ! dwinter 308: #print "START",start
1.1 dwinter 309: for x in start:
1.7 ! dwinter 310: #print "N2",x,temp[x]
! 311: try:
1.5 dwinter 312: temp=temp[x][0]
1.7 ! dwinter 313: except:
! 314: """nothing"""
! 315: return []
! 316: #print "TEMP",temp,self.tempSorted(temp, field=sortField)
1.5 dwinter 317: print "HELL",sortField
318: for x in self.tempSorted(temp, field=sortField):
1.4 dwinter 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:
1.7 ! dwinter 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
1.4 dwinter 333:
1.7 ! dwinter 334: listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url())))
! 335:
! 336: #print self.getId(),start
! 337: #print listNav
1.1 dwinter 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:
1.5 dwinter 346: def tempSorted(self,hash,field="weight"):
1.4 dwinter 347: ls=[]
1.5 dwinter 348: print "SORT",field
1.4 dwinter 349: for x in hash.keys():
350: #print hash[x][1]
1.5 dwinter 351: if hasattr(hash[x][1],field):
352: weight=getattr(hash[x][1],field)
1.4 dwinter 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:
1.1 dwinter 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:
1.5 dwinter 404: for key in self.tempSorted(temp):
1.1 dwinter 405:
406: description=temp[x][1].title
1.2 dwinter 407:
1.3 dwinter 408: url=createPath(self.absolute_url(),temp[key][1].absolute_url())
1.2 dwinter 409:
1.1 dwinter 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=""
1.5 dwinter 423: print "NAVBAR",self.getId()
1.1 dwinter 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=""
1.5 dwinter 434: print "NAVELEMENT",self.getId()
435: #try:
436:
437: keys=self.barFromHash(self.createNavHash(0))
1.1 dwinter 438:
1.5 dwinter 439: #except:
440: # keys=""
1.1 dwinter 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]]
1.7 ! dwinter 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]
1.1 dwinter 487: #print start
1.5 dwinter 488:
1.1 dwinter 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:
1.6 dwinter 520: def manage_addECHO_navigationForm(self):
1.1 dwinter 521: """Form for adding"""
1.6 dwinter 522: pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_navigation.zpt').__of__(self)
1.1 dwinter 523: return pt()
524:
1.6 dwinter 525: def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
1.1 dwinter 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:
1.3 dwinter 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,"/")
1.4 dwinter 545:
546: def sortWeight(x,y):
547: #print x[1],y[1]
548: return cmp(x[1],y[1])
1.1 dwinter 549:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>