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>