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,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>