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>