Annotation of ECHO_content/ECHO_Nav.py, revision 1.1
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
! 274: url=self.absolute_url()+createPath(temp[key][1].absolute_url())
! 275:
! 276: if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
! 277: html=html+startTag+"[%s]" % description+endTag
! 278: else:
! 279: html=html+startTag+"[<a href='%s'>%s</a>]" % (url,description)+endTag
! 280:
! 281:
! 282: html=html+endHtml
! 283:
! 284: return html
! 285:
! 286: def mainNavBar(self):
! 287: """print main navigation bar"""
! 288: keys=""
! 289: try:
! 290: keys=self.buttonsFromHash(self.createNavHash(0))
! 291: except:
! 292: keys=""
! 293:
! 294: return keys
! 295:
! 296: def mainNavElements(self):
! 297: """print main navigation bar"""
! 298: keys=""
! 299:
! 300: try:
! 301: keys=self.barFromHash(self.createNavHash(0))
! 302: except:
! 303: keys=""
! 304:
! 305: return keys
! 306:
! 307: def secondNavElements(self):
! 308: """Zweite Ordnung"""
! 309:
! 310: hash=self.createNavHash(2)
! 311: actual_url=self.REQUEST['URL']
! 312:
! 313: ult_temp=re.sub(self.absolute_url(),"",actual_url)
! 314: #print ult_temp
! 315:
! 316: splitted=ult_temp.split("/")
! 317:
! 318:
! 319: ## if splitted[len(splitted)-1]=="index_html":
! 320: ## start=[splitted[len(splitted)-2]]
! 321: ## else:
! 322: ## start=[splitted[len(splitted)-1]]
! 323:
! 324: start=[splitted[2]]
! 325: #print start
! 326:
! 327: keys=self.barFromHash(hash,start=start)
! 328:
! 329:
! 330: return keys
! 331:
! 332:
! 333: def secondNavBar(self):
! 334: """Zweite Ordnung"""
! 335:
! 336: hash=self.createNavHash(2)
! 337: actual_url=self.REQUEST['URL']
! 338:
! 339: ult_temp=re.sub(self.absolute_url(),"",actual_url)
! 340: #print ult_temp
! 341:
! 342: splitted=ult_temp.split("/")
! 343:
! 344:
! 345: ## if splitted[len(splitted)-1]=="index_html":
! 346: ## start=[splitted[len(splitted)-2]]
! 347: ## else:
! 348: ## start=[splitted[len(splitted)-1]]
! 349:
! 350: start=[splitted[2]]
! 351: #print start
! 352:
! 353: keys=self.buttonsFromHash(hash,start=start,orientation="vertical")
! 354:
! 355:
! 356: return keys
! 357:
! 358: def manage_AddECHO_navigationForm(self):
! 359: """Form for adding"""
! 360: pt=PageTemplateFile('Products/ECHO_content/AddECHO_navigation.zpt').__of__(self)
! 361: return pt()
! 362:
! 363: def manage_AddECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
! 364: """Add an ECHO_root"""
! 365: self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
! 366:
! 367: if RESPONSE is not None:
! 368: RESPONSE.redirect('manage_main')
! 369:
! 370:
! 371: #helpers
! 372:
! 373: def createPath(url):
! 374: temp=url.split("/")
! 375: del temp[0]
! 376: del temp[1]
! 377: return string.join(temp,"/")
! 378:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>