Annotation of ECHO_content/ECHO_Nav.py, revision 1.49
1.1 dwinter 1: # Objekte zur Erzeugung von Navigationselementen
2:
1.11 dwinter 3: from Globals import DTMLFile
4: from OFS.Image import Image,cookId
1.1 dwinter 5: from OFS.Folder import Folder
6: from OFS.SimpleItem import SimpleItem
7: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
8: from Products.PageTemplates.PageTemplate import PageTemplate
9: import re
10: import string
11: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
12: import os.path
13: from Globals import package_home
14: import urllib
1.48 dwinter 15: from ECHO_helpers import *
1.23 dwinter 16: from ECHO_collection import content_html
1.48 dwinter 17: from types import *
1.35 dwinter 18:
19:
20: from Globals import DTMLFile
21: from OFS.Image import Image,cookId
22: from OFS.Folder import Folder
23: from OFS.SimpleItem import SimpleItem
24: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
25: from Products.PageTemplates.PageTemplate import PageTemplate
26: import re
27: import string
28: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
29: import os.path
30: from Globals import package_home
31: import urllib
32: from ECHO_helpers import displayTypes,checkOnlyOneInGroup
33: from ECHO_collection import content_html
34:
1.49 ! dwinter 35: try:
! 36: from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
! 37: except:
! 38: zLOG.LOG('ECHO_Nav',zLOG.INFO,'ZSQLSimpleSearch not supported')
1.35 dwinter 39:
40:
41:
42: class ECHO_ZCatalogElement(SimpleItem):
43: """Erzeuge navigation aus ZCatalog-abfrage"""
44: meta_type="ECHO_ZCatalogElement"
45: baseUrl=""
46:
47: def __init__(self,id,title,field,catalogId,baseUrl,weight,contentType):
48: """init"""
49: self.id=id
50: self.title=title
51: self.catalogId=catalogId
52: self.field=field
53:
54: self.baseUrl=baseUrl
55: self.weight=weight
56: self.content=contentType
57:
1.48 dwinter 58:
1.35 dwinter 59: manage_options= SimpleItem.manage_options+(
60: {'label':'Main Config','action':'changeECHO_ZCatalogElementForm'},
61: )
62:
63:
64: def getWeight(self):
65: """get weight"""
66: if hasattr(self,'weight'):
67: return self.weight
68: else:
69: return 0
70:
71: def getcontentType(self):
72: """get weight"""
73:
74: if hasattr(self,'contentType'):
75: return self.contentType
76: else:
77: return 0
78:
79:
80: def changeECHO_ZCatalogElementForm(self):
81: """change"""
82:
1.48 dwinter 83: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_ZCatalogElement.zpt')).__of__(self)
1.35 dwinter 84: return pt()
85:
86: def changeECHO_ZCatalogElement(self,title,field,catalogId,baseUrl,weight,contentType,RESPONSE=None):
87: """change"""
88: self.title=title
89: self.catalogId=catalogId
90: self.field=field
91: self.baseUrl=baseUrl
92: self.weight=weight
93: self.contentType=contentType
94:
95: if RESPONSE is not None:
96: RESPONSE.redirect('manage_main')
97: def getKeywordList(self):
98: return getattr(self,self.catalogId).uniqueValuesFor(self.field)
99:
100: def getNavList(self):
101: """ausgabe der treffer list für navigation"""
1.37 dwinter 102:
1.35 dwinter 103: records=self.getKeywordList()
104:
1.37 dwinter 105:
1.35 dwinter 106: if not records:
107: return []
108: else:
109: ret=[]
110: for record in records:
111: #print "RC",record
112: #if record:
113: # ret.append((record,self.baseUrl+urllib.quote(record)))
114: try:
115: ret.append((record,self.baseUrl+urllib.quote(record)))
116: except:
117: """nothing"""
118:
119: return ret
120:
121:
122: def manage_addECHO_ZCatalogElementForm(self):
123: """Form for adding"""
1.49 ! dwinter 124: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_ZCatalogElement.zpt')).__of__(self)
1.35 dwinter 125: return pt()
126:
127: def manage_addECHO_ZCatalogElement(self,id,title,field,baseUrl,weight,contentType,RESPONSE=None):
128: """Add an ECHO_ZCatalogelement"""
129: self._setObject(id,ECHO_ZCatalogElement(id,title,field,baseUrl,weight,contentType))
130:
131: if RESPONSE is not None:
132: RESPONSE.redirect('manage_main')
133:
134:
135:
1.11 dwinter 136: class ECHO_contentType(Image):
137: """ContentType Object"""
138:
139: meta_type="ECHO_contentType"
140:
141:
142: manage_options=Image.manage_options+(
143: {'label':'Change Description','action':'changeECHO_contentTypeForm'},
144: )
145:
146: def changeECHO_contentTypeForm(self):
147: """Change the description text"""
1.48 dwinter 148: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_contentType.zpt')).__of__(self)
1.11 dwinter 149: return pt()
1.48 dwinter 150:
1.11 dwinter 151: def changeECHO_contentType(self,description,RESPONSE=None):
152: """Change the Content"""
153: self.description=description
154: if RESPONSE is not None:
155: RESPONSE.redirect('manage_main')
156:
157: manage_addECHO_contentTypeForm=DTMLFile('dtml/ECHO_contentTypeAdd',globals(),
158: Kind='ECHO_contentType',kind='ECHO_contentType')
159:
160: def manage_addECHO_contentType(self, id, file=None, title='', precondition='', content_type='', description='',
161: REQUEST=None):
162: """
163: Add a new Image object.
164:
165: Creates a new Image object 'id' with the contents of 'file'.
166: """
167:
168: id=str(id)
169: title=str(title)
170: content_type=str(content_type)
171: precondition=str(precondition)
172:
173: id, title = cookId(id, title, file)
174:
175: self=self.this()
176:
177: # First, we create the image without data:
178: self._setObject(id, ECHO_contentType(id,title,'',content_type, precondition))
179:
180: self._getOb(id).description=description
181:
182: # Now we "upload" the data. By doing this in two steps, we
183: # can use a database trick to make the upload more efficient.
184: if file:
185: self._getOb(id).manage_upload(file)
186: if content_type:
187: self._getOb(id).content_type=content_type
188:
189: if REQUEST is not None:
190: try: url=self.DestinationURL()
191: except: url=REQUEST['URL1']
192: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
193: return id
194:
1.1 dwinter 195:
196: class ECHO_sqlElement(SimpleItem):
197: """Erzeuge navigation aus sql-abfrage"""
198: meta_type="ECHO_sqlElement"
199: baseUrl=""
1.41 dwinter 200:
201:
1.1 dwinter 202:
1.10 dwinter 203: def __init__(self,id,title,query,field,searchField,baseUrl,weight,contentType):
1.1 dwinter 204: """init"""
205: self.id=id
206: self.title=title
207: self.query=query
208: self.field=field
1.7 dwinter 209: if searchField=="":
210: self.searchField=field
211: else:
212: self.searchField=searchField
1.1 dwinter 213: self.baseUrl=baseUrl
1.38 dwinter 214:
1.10 dwinter 215: self.content=contentType
1.1 dwinter 216:
217: manage_options= SimpleItem.manage_options+(
218: {'label':'Main Config','action':'changeECHO_sqlElementForm'},
219: )
220:
1.7 dwinter 221: def getSearchField(self):
222: try:
223: return self.searchField
224: except:
225: return self.field
226:
1.3 dwinter 227: def getWeight(self):
1.4 dwinter 228: """get weight"""
229: if hasattr(self,'weight'):
230: return self.weight
1.3 dwinter 231: else:
232: return 0
233:
1.10 dwinter 234: def getcontentType(self):
1.6 dwinter 235: """get weight"""
236:
1.10 dwinter 237: if hasattr(self,'contentType'):
238: return self.contentType
1.6 dwinter 239: else:
240: return 0
1.3 dwinter 241:
242:
1.1 dwinter 243: def changeECHO_sqlElementForm(self):
244: """change"""
1.6 dwinter 245:
1.48 dwinter 246: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_sqlElement.zpt')).__of__(self)
1.1 dwinter 247: return pt()
248:
1.10 dwinter 249: def changeECHO_sqlElement(self,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
1.1 dwinter 250: """change"""
251: self.title=title
252: self.query=query
253: self.field=field
1.7 dwinter 254: self.searchField=searchField
1.1 dwinter 255: self.baseUrl=baseUrl
1.3 dwinter 256: self.weight=weight
1.10 dwinter 257: self.contentType=contentType
1.6 dwinter 258:
1.1 dwinter 259: if RESPONSE is not None:
260: RESPONSE.redirect('manage_main')
261:
1.49 ! dwinter 262: try:
! 263: searchQuery=ZSQLExtendFolder.ZSQLSimpleSearch
! 264: except:
! 265: zLOG.LOG('ECHO_Nav',zLOG.INFO,'ZSQLSimpleSearch not supported')
! 266:
! 267: def getNavList(self):
1.1 dwinter 268: """ausgabe der treffer list für navigation"""
1.37 dwinter 269:
1.1 dwinter 270: records=self.searchQuery()
1.37 dwinter 271:
272:
1.1 dwinter 273: if not records:
274: return []
275: else:
276: ret=[]
277: for record in records:
1.7 dwinter 278: try:
279: ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField())))))
280: except:
281: """notrhing"""
282:
1.1 dwinter 283: return ret
284:
285:
1.6 dwinter 286: def manage_addECHO_sqlElementForm(self):
1.1 dwinter 287: """Form for adding"""
1.48 dwinter 288: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_sqlElement.zpt')).__of__(self)
1.1 dwinter 289: return pt()
290:
1.10 dwinter 291: def manage_addECHO_sqlElement(self,id,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
1.1 dwinter 292: """Add an ECHO_sqlelement"""
1.10 dwinter 293: self._setObject(id,ECHO_sqlElement(id,title,query,field,searchField,baseUrl,weight,contentType))
1.1 dwinter 294:
295: if RESPONSE is not None:
296: RESPONSE.redirect('manage_main')
297:
298:
299: class ECHO_pageTemplate(ZopePageTemplate):
300: """pageTemplate Objekt"""
301: meta_type="ECHO_pageTemplate"
302:
303: _default_content_fn = os.path.join(package_home(globals()),
1.6 dwinter 304: 'html/ECHO_pageTemplateDefault.html')
1.1 dwinter 305:
1.3 dwinter 306: manage_options=ZopePageTemplate.manage_options+(
1.39 dwinter 307: {'label':'Main Config','action':'changeECHO_pageTemplateMainForm'},
1.3 dwinter 308: )
1.23 dwinter 309:
310: def content_html(self):
311: """content_html"""
312: return content_html(self,'pageTemplate')
1.3 dwinter 313:
1.39 dwinter 314: def changeECHO_pageTemplateMainForm(self):
1.4 dwinter 315: """change"""
1.48 dwinter 316: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_pageTemplateMain.zpt')).__of__(self)
1.4 dwinter 317: return pt()
318:
1.47 dwinter 319: def changeECHO_pageTemplateMain(self,weight,contentType,label,description,RESPONSE=None,isAlwaysClickable=None,suffix=None,prefix=None):
1.4 dwinter 320: """change"""
321: self.weight=weight
1.10 dwinter 322: self.contentType=contentType
1.15 dwinter 323: self.label=label
1.39 dwinter 324: self.description=description
1.43 dwinter 325: self.isAlwaysClickable=isAlwaysClickable
1.47 dwinter 326: self.suffix=suffix
327: self.prefix=prefix
1.15 dwinter 328:
1.4 dwinter 329: if RESPONSE is not None:
330: RESPONSE.redirect('manage_main')
1.15 dwinter 331:
332: def getLabel(self):
333: if hasattr(self,'label'):
1.16 dwinter 334: return self.label.encode('utf-8')
1.47 dwinter 335:
1.15 dwinter 336: else:
337: return 0
1.4 dwinter 338:
339: def getWeight(self):
340: """get weight"""
341: if hasattr(self,'weight'):
342: return self.weight
343: else:
344: return 0
1.6 dwinter 345:
1.10 dwinter 346: def getcontentType(self):
1.33 jdamerow 347: """get contentType"""
348: if hasattr(self,'contentType'):
349: return self.contentType
1.6 dwinter 350: else:
351: return 0
352:
1.3 dwinter 353:
354:
1.1 dwinter 355:
1.10 dwinter 356: ## def __init__(self, id, text=None, contentType=None):
1.1 dwinter 357: ## self.id = str(id)
358: ## self.ZBindings_edit(self._default_bindings)
359: ## if text is None:
360: ## text = open(self._default_cont).read()
1.10 dwinter 361: ## self.pt_edit(text, contentType)
1.1 dwinter 362:
1.6 dwinter 363: def manage_addECHO_pageTemplateForm(self):
1.1 dwinter 364: """Form for adding"""
1.49 ! dwinter 365: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_pageTemplate.zpt')).__of__(self)
1.1 dwinter 366: return pt()
367:
368: from urllib import quote
369:
370:
1.15 dwinter 371: def manage_addECHO_pageTemplate(self, id, label, weight= 0,contentType=0,title=None, text=None,
1.1 dwinter 372: REQUEST=None, submit=None):
373: "Add a Page Template with optional file content."
374:
375:
376: id = str(id)
377: if REQUEST is None:
378: self._setObject(id, ECHO_pageTemplate(id, text))
379: ob = getattr(self, id)
1.3 dwinter 380: setattr(ob,'weight',weight)
1.15 dwinter 381: setattr(ob,'label',label)
1.10 dwinter 382: setattr(ob,'contentType',contentType)
1.1 dwinter 383: if title:
384: ob.pt_setTitle(title)
385: return ob
386: else:
387: file = REQUEST.form.get('file')
388: headers = getattr(file, 'headers', None)
389: if headers is None or not file.filename:
390: zpt = ECHO_pageTemplate(id)
391: else:
1.10 dwinter 392: zpt = ECHO_pageTemplate(id, file, headers.get('contentType'))
1.1 dwinter 393:
394: self._setObject(id, zpt)
1.3 dwinter 395: ob = getattr(self, id)
396: setattr(ob,'weight',weight)
1.34 dwinter 397: setattr(ob,'label',label)
1.8 dwinter 398: if title:
399: ob.pt_setTitle(title)
400:
1.1 dwinter 401: try:
402: u = self.DestinationURL()
403: except AttributeError:
404: u = REQUEST['URL1']
405:
406: if submit == " Add and Edit ":
407: u = "%s/%s" % (u, quote(id))
408: REQUEST.RESPONSE.redirect(u+'/manage_main')
409: return ''
410:
411:
412: class ECHO_navigation(Folder):
413: """Navigations Element"""
414: meta_type="ECHO_Navigation"
415:
1.41 dwinter 416: def ECHOFormatListStr(self,list,search="\n",replace="<br>"):
417: """formatiert liste im str"""
1.42 dwinter 418: if list:
419: return re.sub(search,replace,list)
420: else:
421: return
422:
1.41 dwinter 423: def ECHO_cacheManageForm(self):
424: """change form"""
1.48 dwinter 425: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_cacheManageForm')).__of__(self)
1.41 dwinter 426: pt.content_type="text/html"
427: return pt()
428:
429: def ECHO_cacheManage(self,cacheManagerName=None,deleteCache=None, activateCache=None,RESPONSE=None):
430: """cachemanager"""
431: if cacheManagerName=="": chacheManagerName=None
432:
433: self.cacheManagerName=cacheManagerName
434: self.setCache(managerName=cacheManagerName)
435:
436: if deleteCache:
1.46 dwinter 437: try:
1.41 dwinter 438: self.deleteCache()
1.46 dwinter 439: except:
440: for roots in self.ZopeFind(self,obj_metatypes=['ECHO_root'],search_sub=1):
441: roots[1].deleteCache()
442:
1.41 dwinter 443:
444: self.activateCache=activateCache
445:
446: if RESPONSE is not None:
447: RESPONSE.redirect('manage_main')
448:
449: def setCache(self,obj=None,RESPONSE=None,managerName='CacheManager'):
450: """setze alle collections auf cache = CacheManager"""
451:
452:
453: if not obj:
454: obj = self
455:
456: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_collection'],search_sub=1)
457:
458: for entry in entries:
459: #print entry[0]
460: entry[1].ZCacheable_setManagerId(managerName)
461:
462:
463: return "changed all CM in: "+self.title
464:
1.48 dwinter 465:
1.35 dwinter 466:
1.48 dwinter 467: displayableMetaTypes=displayTypes
468:
1.35 dwinter 469: def getImageViewers(self):
470: """images"""
471: viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
472: return viewers
1.1 dwinter 473:
1.28 dwinter 474: def getR(self):
475: """re"""
476: return self.REQUEST
477:
1.1 dwinter 478: def __init__(self,id,title,pathToHierarchy):
479: """init"""
480: self.id=id
481: self.title=title
482: self.pathToHierarchy=pathToHierarchy
1.48 dwinter 483: self.displayedMetaTypes=displayTypes
484:
1.1 dwinter 485: manage_options = Folder.manage_options+(
486: {'label':'Main Config','action':'ECHO_navigationConfigForm'},
1.41 dwinter 487: {'label':'Cache','action':'ECHO_cacheManageForm'},
488:
1.1 dwinter 489: )
1.48 dwinter 490: displayedMetaTypes=displayTypes
491:
1.1 dwinter 492: def ECHO_navigationConfigForm(self):
493: """configForm"""
1.48 dwinter 494: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_navigation.zpt')).__of__(self)
1.1 dwinter 495: return pt()
496:
1.48 dwinter 497: def ECHO_navigationConfig(self,title,pathToHierarchy,displayedMetaTypes=displayTypes,RESPONSE=None):
1.1 dwinter 498: """config"""
499: self.title=title
500: self.pathToHierarchy=pathToHierarchy
1.48 dwinter 501: self.displayedMetaTypes=toList(displayedMetaTypes)[0:]
502:
1.1 dwinter 503:
504: if RESPONSE is not None:
505: RESPONSE.redirect('manage_main')
506:
507:
1.19 dwinter 508: def getColls(self,obj,depth,checkOnly="no"):
1.1 dwinter 509: nav={}
510: #print "HERE",obj.
1.18 dwinter 511: for x_objs in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):
512: x=x_objs[1]
1.22 dwinter 513: if checkOnly=="yes":
1.19 dwinter 514: x = checkOnlyOneInGroup(x)
1.18 dwinter 515: if depth>1:
516: nav[x.getId()]=(self.getColls(x,depth-1),x)
517: else:
518: nav[x.getId()]=(None,x)
1.1 dwinter 519: return nav
520:
1.19 dwinter 521: def createNavHash(self,depth,checkOnly="no"):
1.1 dwinter 522: """Auslesen des Hierarchiebuames"""
523: temp=self.pathToHierarchy[0:]
524: temp=re.sub("/",".",temp)
525: temp="self.aq_parent"+temp
1.40 dwinter 526:
1.1 dwinter 527:
528: objtemp=eval(temp)
529: nav={}
1.40 dwinter 530:
1.41 dwinter 531: #check if cash is enabled and if already exists and if not empty
532: if getattr(self,'_v_hash',None) and getattr(self,'activateCache',None) and self._v_hash.get(str(depth),None):
533:
534: return self._v_hash[str(depth)]
1.1 dwinter 535:
1.41 dwinter 536: # if not generate new hash
537: obj=objtemp
1.37 dwinter 538:
539: for keys in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):
540: x=keys[1]
1.41 dwinter 541: if depth>1:
542: nav[x.getId()]=(self.getColls(x,int(depth)-1,checkOnly),x)
543: else:
544: nav[x.getId()]=(None,x)
1.37 dwinter 545:
1.41 dwinter 546: #store in cache if activated
547: if getattr(self,'activateCache',None):
548:
549: try:
550: self._v_hash[str(depth)]={}
551: except:
552: self._v_hash={}
553: self._v_hash[str(depth)]={}
1.1 dwinter 554:
1.41 dwinter 555: for x in nav.keys():
556: self._v_hash[str(depth)][x]=nav[x]
1.40 dwinter 557:
1.1 dwinter 558: return nav
559:
1.32 dwinter 560: def barFromHash(self,hash,start=None,sortField=None,location=None):
1.1 dwinter 561: """Erzeuge Navigations Element"""
562: #print "hash",hash
563: listNav=[]
564: if not start:
565: temp=hash
1.5 dwinter 566: sortField="weight"
1.41 dwinter 567: else: # liste mit pfad zum hash
1.1 dwinter 568: temp=hash
1.7 dwinter 569: #print "HI",sortField
1.5 dwinter 570: if not sortField:
571: tempObj=self.pathToHierarchy[0:]
572: tempObj=re.sub("/",".",tempObj)
573: tempObj="self.aq_parent"+tempObj
1.28 dwinter 574: #print tempObj
1.5 dwinter 575: objtemp=eval(tempObj)
576:
577: obj=objtemp
578:
579: for x in start:
1.7 dwinter 580: #print "OBJ",start,obj,obj.getId(),x
1.5 dwinter 581:
582: obj=getattr(obj,x)
583:
584: if hasattr(obj,'sortfield'):
585: sortField=obj.sortfield
586: else:
587: sortField='weight'
1.7 dwinter 588: #print "START",start
1.1 dwinter 589: for x in start:
1.7 dwinter 590: #print "N2",x,temp[x]
591: try:
1.5 dwinter 592: temp=temp[x][0]
1.7 dwinter 593: except:
594: """nothing"""
595: return []
596: #print "TEMP",temp,self.tempSorted(temp, field=sortField)
1.13 dwinter 597:
1.5 dwinter 598: for x in self.tempSorted(temp, field=sortField):
1.37 dwinter 599:
1.4 dwinter 600: if not temp[x][1].title == "":
1.35 dwinter 601:
602: if (temp[x][1].meta_type=="ECHO_sqlElement") or (temp[x][1].meta_type=="ECHO_ZCatalogElement"):
1.37 dwinter 603:
1.4 dwinter 604: for z in temp[x][1].getNavList():
1.47 dwinter 605: listNav.append((z[0],z[1],None,'',''))
1.37 dwinter 606:
1.4 dwinter 607: else:
1.27 dwinter 608: # add label falls existiert und nicht leer
1.7 dwinter 609: if hasattr(temp[x][1],'label'):
1.47 dwinter 610:
1.7 dwinter 611: if not temp[x][1].label=='':
1.38 dwinter 612: try:
1.47 dwinter 613: label=temp[x][1].getLabel()
1.38 dwinter 614: except:
615: label=temp[x][1].label
1.7 dwinter 616: else:
1.16 dwinter 617: label=temp[x][1].title.encode('utf-8')
1.7 dwinter 618: else:
1.16 dwinter 619: label=temp[x][1].title.encode('utf-8')
1.32 dwinter 620:
621: if location:
622: loc=getattr(temp[x][1],'location','top')
623: if (loc==location):
1.47 dwinter 624: listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))
1.32 dwinter 625: else:
1.47 dwinter 626: listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))
1.1 dwinter 627:
628: return listNav
629:
1.5 dwinter 630: def tempSorted(self,hash,field="weight"):
1.4 dwinter 631: ls=[]
1.13 dwinter 632:
1.4 dwinter 633: for x in hash.keys():
634: #print hash[x][1]
1.5 dwinter 635: if hasattr(hash[x][1],field):
636: weight=getattr(hash[x][1],field)
1.4 dwinter 637: #print weight
638: else:
639: weight=0
640:
641: ls.append((x,weight))
642:
643: ls.sort(sortWeight)
644:
645: return [x[0] for x in ls]
646:
647:
648:
649:
1.1 dwinter 650: def isSelectedPath(self,item):
651: """test is path is already selected"""
1.45 dwinter 652:
653: testStr=re.sub("/index_html",'',self.REQUEST.get('URL',''))
654:
655: #falls exakte Übereinstimmung dann immer 1
656: if (testStr==item[1]) and (self.REQUEST.get('QUERY_STRING','')==''):
657:
658: return 1
659:
660: found=re.search("\?(.*)",item[1])
1.43 dwinter 661:
1.1 dwinter 662: if found:
663: temp=re.sub(" ","%20",found.group(0))
1.45 dwinter 664:
1.1 dwinter 665: #print temp+"::"+self.REQUEST['QUERY_STRING']
666: if ("?"+self.REQUEST['QUERY_STRING'])==temp:
1.43 dwinter 667: if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
668:
669: return 2
670: else:
671: return 1
672:
1.44 dwinter 673: if (getattr(item[2],'meta_type','')=="ECHO_pageTemplate") and (re.search(item[1],self.REQUEST['URL'])):
1.43 dwinter 674: if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
675:
676: return 2
677: else:
1.1 dwinter 678: return 1
679:
1.26 dwinter 680: if re.search(item[1]+"/",self.REQUEST['URL']):
1.43 dwinter 681: if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
682:
683: return 2
684: else:
685: return 1
1.1 dwinter 686: else:
687: return 0
1.43 dwinter 688:
689:
1.1 dwinter 690:
691:
692: def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
693:
694: """Generate Buttons"""
695: if orientation=="horizontal":
696: html="<table><tr>"
697: startTag="<td>"
698: endTag="</td>"
699: endHtml="</tr></table>"
700:
701: else:
702: html="<table>"
703: startTag="<tr><td>"
704: endTag="</td></tr>"
705: endHtml="</table>"
706:
707: if not start:
708: temp=hash
709: else:
710: temp=hash
711: for x in start:
712: temp=temp[x][0]
713: #print temp
714:
1.5 dwinter 715: for key in self.tempSorted(temp):
1.1 dwinter 716:
717: description=temp[x][1].title
1.2 dwinter 718:
1.3 dwinter 719: url=createPath(self.absolute_url(),temp[key][1].absolute_url())
1.2 dwinter 720:
1.1 dwinter 721: if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
722: html=html+startTag+"[%s]" % description+endTag
723: else:
724: html=html+startTag+"[<a href='%s'>%s</a>]" % (url,description)+endTag
725:
726:
727: html=html+endHtml
728:
729: return html
730:
731: def mainNavBar(self):
732: """print main navigation bar"""
733: keys=""
1.13 dwinter 734:
1.1 dwinter 735: try:
736: keys=self.buttonsFromHash(self.createNavHash(0))
737: except:
738: keys=""
739:
740: return keys
741:
1.32 dwinter 742: def mainNavElements(self,location=None):
1.1 dwinter 743: """print main navigation bar"""
744: keys=""
1.12 dwinter 745: #print "NAVELEMENT",self.getId()
1.5 dwinter 746: #try:
1.32 dwinter 747:
748: keys=self.barFromHash(self.createNavHash(0),location=location)
1.12 dwinter 749:
1.5 dwinter 750: #except:
751: # keys=""
1.1 dwinter 752:
753: return keys
1.12 dwinter 754:
755: def numberOfMainNavElements(self):
756: """number of main elements"""
757:
758: return len(self.barFromHash(self.createNavHash(0)))
759:
1.29 dwinter 760: def startOfHierarchy(self,list):
761: splitted=self.pathToHierarchy.split("/")
762: last=splitted[len(splitted)-1]
763: #print last,list
764: try:
765: nr=list.index(last)
766: except:
767: nr=0
768: return nr+1
769:
1.1 dwinter 770: def secondNavElements(self):
771: """Zweite Ordnung"""
772:
1.22 dwinter 773: hash=self.createNavHash(2,checkOnly="no")
1.1 dwinter 774: actual_url=self.REQUEST['URL']
775:
776: ult_temp=re.sub(self.absolute_url(),"",actual_url)
777: #print ult_temp
778:
779: splitted=ult_temp.split("/")
780:
1.29 dwinter 781: #print "AU",self.absolute_url(),splitted
1.28 dwinter 782: #start=[splitted[2]] #orig
1.29 dwinter 783: startNr= self.startOfHierarchy(splitted)
784:
785: start=[splitted[startNr]]
1.28 dwinter 786:
1.29 dwinter 787: #print start
1.7 dwinter 788:
1.25 dwinter 789: keys=self.barFromHash(hash,start=start)
1.7 dwinter 790:
791:
792: return keys
793:
794: def navElements(self,order):
795: """n-te Ordnung"""
796:
797: hash=self.createNavHash(order)
798: actual_url=self.REQUEST['URL']
799:
800: ult_temp=re.sub(self.absolute_url(),"",actual_url)
801: #print ult_temp
802:
803: splitted=ult_temp.split("/")
804:
805:
806: ## if splitted[len(splitted)-1]=="index_html":
807: ## start=[splitted[len(splitted)-2]]
808: ## else:
809: ## start=[splitted[len(splitted)-1]]
810:
1.28 dwinter 811: #start=splitted[2:order+1] #orig
1.29 dwinter 812: startNr= self.startOfHierarchy(splitted)
1.30 dwinter 813: #print startNr
814: start=splitted[startNr:order+startNr-1]
1.1 dwinter 815: #print start
1.5 dwinter 816:
1.1 dwinter 817: keys=self.barFromHash(hash,start=start)
818:
819:
820: return keys
821:
822:
823: def secondNavBar(self):
824: """Zweite Ordnung"""
825:
826: hash=self.createNavHash(2)
827: actual_url=self.REQUEST['URL']
828:
829: ult_temp=re.sub(self.absolute_url(),"",actual_url)
830: #print ult_temp
831:
832: splitted=ult_temp.split("/")
833:
834:
835: ## if splitted[len(splitted)-1]=="index_html":
836: ## start=[splitted[len(splitted)-2]]
837: ## else:
838: ## start=[splitted[len(splitted)-1]]
839:
840: start=[splitted[2]]
841: #print start
842:
843: keys=self.buttonsFromHash(hash,start=start,orientation="vertical")
844:
845:
846: return keys
847:
1.6 dwinter 848: def manage_addECHO_navigationForm(self):
1.1 dwinter 849: """Form for adding"""
1.48 dwinter 850: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_navigation.zpt')).__of__(self)
1.1 dwinter 851: return pt()
852:
1.6 dwinter 853: def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
1.1 dwinter 854: """Add an ECHO_root"""
855: self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
856:
857: if RESPONSE is not None:
858: RESPONSE.redirect('manage_main')
859:
860:
861: #helpers
862:
1.3 dwinter 863:
864:
865: def createPath(url1,url2):
866: temp1=url1.split("/")
867: temp2=url2.split("/")
868: for test in temp1:
869: if temp2[0]==test:
870: del temp2[0]
871:
1.28 dwinter 872: #print "CP:"+url1+"::"+url2+"::"+url1+"/"+string.join(temp2,"/")
1.3 dwinter 873: return url1+"/"+string.join(temp2,"/")
1.4 dwinter 874:
875: def sortWeight(x,y):
876: #print x[1],y[1]
877: return cmp(x[1],y[1])
1.1 dwinter 878:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>