File:  [Repository] / ECHO_content / Attic / #ECHO_Nav.py#
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Tue Feb 3 16:58:31 2004 UTC (20 years, 5 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
ngetemplate

    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>