File:  [Repository] / ECHO_content / ECHO_Nav.py
Revision 1.7: download - view: text, annotated - select for diffs - revision graph
Tue Mar 16 10:20:58 2004 UTC (20 years, 3 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
new

    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,searchField,baseUrl,weight,content_type):
   21:         """init"""
   22:         self.id=id
   23:         self.title=title
   24:         self.query=query
   25:         self.field=field
   26:         if searchField=="":
   27:             self.searchField=field
   28:         else:
   29:             self.searchField=searchField
   30:         self.baseUrl=baseUrl
   31:         self.weight=weight
   32:         self.content=content_type
   33: 
   34:     manage_options= SimpleItem.manage_options+(
   35:         {'label':'Main Config','action':'changeECHO_sqlElementForm'},
   36:         )
   37: 
   38:     def getSearchField(self):
   39:         try:
   40:             return self.searchField
   41:         except:
   42:             return self.field
   43:         
   44:     def getWeight(self):
   45:         """get weight"""
   46:         if hasattr(self,'weight'):
   47:             return self.weight
   48:         else:
   49:             return 0
   50:         
   51:     def getContent_type(self):
   52:         """get weight"""
   53:         
   54:         if hasattr(self,'content_type'):
   55:             return self.content_type
   56:         else:
   57:             return 0
   58:         
   59: 
   60:     def changeECHO_sqlElementForm(self):
   61:         """change"""
   62:         
   63:         pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_sqlElement.zpt').__of__(self)
   64:         return pt()
   65: 
   66:     def changeECHO_sqlElement(self,title,query,field,searchField,baseUrl,weight,content_type,RESPONSE=None):
   67:         """change"""
   68:         self.title=title
   69:         self.query=query
   70:         self.field=field
   71:         self.searchField=searchField
   72:         self.baseUrl=baseUrl
   73:         self.weight=weight
   74:         self.content_type=content_type
   75:         
   76:         if RESPONSE is not None:
   77:             RESPONSE.redirect('manage_main')
   78: 
   79:     def searchQuery(self):
   80:         return self.search(var=self.query)
   81:     
   82:     def getNavList(self):
   83:         """ausgabe der treffer list für navigation"""
   84:         records=self.searchQuery()
   85:         if not records:
   86:             return []
   87:         else:
   88:             ret=[]
   89:             for record in records:
   90:                 try:
   91:                     ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField())))))
   92:                 except:
   93:                     """notrhing"""
   94:                     
   95:             return ret
   96:     
   97: 
   98: def manage_addECHO_sqlElementForm(self):
   99:     """Form for adding"""
  100:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_sqlElement.zpt').__of__(self)
  101:     return pt()
  102: 
  103: def manage_addECHO_sqlElement(self,id,title,query,field,searchField,baseUrl,weight,content_type,RESPONSE=None):
  104:     """Add an ECHO_sqlelement"""
  105:     self._setObject(id,ECHO_sqlElement(id,title,query,field,searchField,baseUrl,weight,content_type))
  106:     
  107:     if RESPONSE is not None:
  108:         RESPONSE.redirect('manage_main')
  109: 
  110: 
  111: class ECHO_pageTemplate(ZopePageTemplate):
  112:     """pageTemplate Objekt"""
  113:     meta_type="ECHO_pageTemplate"
  114: 
  115:     _default_content_fn = os.path.join(package_home(globals()),
  116:                                        'html/ECHO_pageTemplateDefault.html')
  117: 
  118:     manage_options=ZopePageTemplate.manage_options+(
  119:         {'label':'Weight and Type','action':'changeECHO_pageTemplateWeightForm'},
  120:         )
  121: 
  122:     def changeECHO_pageTemplateWeightForm(self):
  123:         """change"""
  124:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)
  125:         return pt()
  126: 
  127:     def changeECHO_pageTemplateWeight(self,weight,content_type,RESPONSE=None):
  128:         """change"""
  129:         self.weight=weight
  130:         self.content_type=content_type
  131: 
  132:         if RESPONSE is not None:
  133:             RESPONSE.redirect('manage_main')
  134:         
  135:     def getWeight(self):
  136:         """get weight"""
  137:         if hasattr(self,'weight'):
  138:             return self.weight
  139:         else:
  140:             return 0
  141:         
  142:     def getContent_Type(self):
  143:         """get weight"""
  144:         if hasattr(self,'weight'):
  145:             return self.weight
  146:         else:
  147:             return 0
  148: 
  149: 
  150: 
  151: 
  152:     ## def __init__(self, id, text=None, content_type=None):
  153: ##         self.id = str(id)
  154: ##         self.ZBindings_edit(self._default_bindings)
  155: ##         if text is None:
  156: ##             text = open(self._default_cont).read()
  157: ##         self.pt_edit(text, content_type)
  158: 
  159: def manage_addECHO_pageTemplateForm(self):
  160:     """Form for adding"""
  161:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_pageTemplate.zpt').__of__(self)
  162:     return pt()
  163: 
  164: from urllib import quote
  165: 
  166: 
  167: def manage_addECHO_pageTemplate(self, id, weight= 0,content_type=0,title=None, text=None,
  168:                            REQUEST=None, submit=None):
  169:     "Add a Page Template with optional file content."
  170: 
  171:     
  172:     id = str(id)
  173:     if REQUEST is None:
  174:         self._setObject(id, ECHO_pageTemplate(id, text))
  175:         ob = getattr(self, id)
  176:         setattr(ob,'weight',weight)
  177:         setattr(ob,'content_type',content_type)
  178:         if title:
  179:             ob.pt_setTitle(title)
  180:         return ob
  181:     else:
  182:         file = REQUEST.form.get('file')
  183:         headers = getattr(file, 'headers', None)
  184:         if headers is None or not file.filename:
  185:             zpt = ECHO_pageTemplate(id)
  186:         else:
  187:             zpt = ECHO_pageTemplate(id, file, headers.get('content_type'))
  188: 
  189:         self._setObject(id, zpt)
  190:         ob = getattr(self, id)
  191:         setattr(ob,'weight',weight)
  192: 
  193:         try:
  194:             u = self.DestinationURL()
  195:         except AttributeError:
  196:             u = REQUEST['URL1']
  197: 
  198:         if submit == " Add and Edit ":
  199:             u = "%s/%s" % (u, quote(id))
  200:         REQUEST.RESPONSE.redirect(u+'/manage_main')
  201:     return ''
  202: 
  203: 
  204: class ECHO_navigation(Folder):
  205:     """Navigations Element"""
  206:     meta_type="ECHO_Navigation"
  207: 
  208:     displayedMetaTypes=['ImageCollectionIFrame','ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ECHO_sqlElement','ECHO_resource','ECHO_externalLink']
  209:     
  210:     def __init__(self,id,title,pathToHierarchy):
  211:         """init"""
  212:         self.id=id
  213:         self.title=title
  214:         self.pathToHierarchy=pathToHierarchy
  215: 
  216:     manage_options = Folder.manage_options+(
  217:         {'label':'Main Config','action':'ECHO_navigationConfigForm'},
  218:         )
  219: 
  220:     def ECHO_navigationConfigForm(self):
  221:         """configForm"""
  222:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_navigation.zpt').__of__(self)
  223:         return pt()
  224:     
  225:     def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):
  226:         """config"""
  227:         self.title=title
  228:         self.pathToHierarchy=pathToHierarchy
  229: 
  230:         if RESPONSE is not None:
  231:             RESPONSE.redirect('manage_main')
  232: 
  233: 
  234:     def getColls(self,obj,depth):
  235:         nav={}
  236:         #print "HERE",obj.
  237:         for keys in obj.__dict__.keys():
  238:             x=getattr(obj,keys)
  239:             if hasattr(x,"meta_type"):
  240:                 if x.meta_type in self.displayedMetaTypes:
  241:                     if depth>1:
  242:                         nav[x.getId()]=(self.getColls(x,depth-1),x)
  243:                     else:
  244:                         nav[x.getId()]=(None,x)
  245:         return nav
  246:     
  247:     def createNavHash(self,depth):
  248:         """Auslesen des Hierarchiebuames"""
  249:         temp=self.pathToHierarchy[0:]
  250:         temp=re.sub("/",".",temp)
  251:         temp="self.aq_parent"+temp
  252:         
  253:         objtemp=eval(temp)
  254:         nav={}
  255:         obj=objtemp
  256:         
  257:         #exec(obj)
  258: 
  259:         #objtemp = compile(temp,'<string>','single')
  260:         #obj=eval(objtemp)
  261:         #print obj 
  262:         
  263:         #print obj.__dict__.keys()
  264:         
  265:         for keys in obj.__dict__.keys():
  266:             x=getattr(obj,keys)
  267:             if hasattr(x,"meta_type"):
  268:                 #print x.meta_type
  269:                 if x.meta_type in self.displayedMetaTypes:
  270:                    
  271:                     if depth>1:
  272:                         nav[x.getId()]=(self.getColls(x,int(depth)-1),x)
  273:                     else:
  274:                         nav[x.getId()]=(None,x)
  275:                     
  276: 
  277:         #print nav
  278:         return nav
  279: 
  280:     def barFromHash(self,hash,start=None,sortField=None):
  281:         """Erzeuge Navigations Element"""
  282:         #print "hash",hash
  283:         listNav=[]
  284:         if not start:
  285:             temp=hash
  286:             sortField="weight"
  287:         else: # list mit pfad zum hash
  288:             temp=hash
  289:             #print "HI",sortField
  290:             if not sortField:
  291:                 tempObj=self.pathToHierarchy[0:]
  292:                 tempObj=re.sub("/",".",tempObj)
  293:                 tempObj="self.aq_parent"+tempObj
  294: 
  295:                 objtemp=eval(tempObj)
  296: 
  297:                 obj=objtemp
  298: 
  299:                 for x in start:
  300:                     #print "OBJ",start,obj,obj.getId(),x
  301: 
  302:                     obj=getattr(obj,x)
  303: 
  304:                 if hasattr(obj,'sortfield'):
  305:                     sortField=obj.sortfield
  306:                 else:
  307:                     sortField='weight'
  308:             #print "START",start
  309:             for x in start:
  310:                 #print "N2",x,temp[x]
  311:                 try:
  312:                     temp=temp[x][0]
  313:                 except:
  314:                     """nothing"""
  315:                     return []
  316:             #print "TEMP",temp,self.tempSorted(temp, field=sortField)
  317:         print "HELL",sortField
  318:         for x in self.tempSorted(temp, field=sortField):
  319:             if not temp[x][1].title == "":
  320:                 if temp[x][1].meta_type=="ECHO_sqlElement":
  321:                     for z in temp[x][1].getNavList():
  322:                         listNav.append((z[0],z[1]))
  323:                 else:
  324:                     # add label fals existiert und nicht leer
  325:                     if hasattr(temp[x][1],'label'):
  326:                         if not temp[x][1].label=='':
  327:                             label=temp[x][1].label
  328:                             print "HAS LABEL",label
  329:                         else:
  330:                             label=temp[x][1].title
  331:                     else:
  332:                         label=temp[x][1].title                            
  333:                     
  334:                     listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url())))
  335:                     
  336:         #print self.getId(),start
  337:         #print listNav
  338: 
  339:         #html=""
  340:         #for k in listNav:
  341:         #    print k
  342:         #    html=html+"<a href='%s'>%s</a>   "% (self.absolute_url()+createPath(k[1][1].absolute_url()),k[0])
  343: 
  344:         return listNav
  345: 
  346:     def tempSorted(self,hash,field="weight"):
  347:         ls=[]
  348:         print "SORT",field
  349:         for x in hash.keys():
  350:             #print hash[x][1]
  351:             if hasattr(hash[x][1],field):
  352:                 weight=getattr(hash[x][1],field)
  353:                 #print weight
  354:             else:
  355:                 weight=0
  356: 
  357:             ls.append((x,weight))
  358: 
  359:         ls.sort(sortWeight)
  360:         
  361:         return [x[0] for x in ls]
  362: 
  363:     
  364:         
  365:             
  366:     def isSelectedPath(self,item):
  367:         """test is path is already selected"""
  368:         found=re.search("\?(.*)",item[1])
  369:         if found:
  370:             temp=re.sub(" ","%20",found.group(0))
  371:             #print temp+"::"+self.REQUEST['QUERY_STRING']
  372:             if ("?"+self.REQUEST['QUERY_STRING'])==temp:
  373:                 return 1
  374: 
  375:         if re.search(item[1],self.REQUEST['URL']):
  376:             return 1
  377:         else:
  378:             return 0
  379:         
  380:     
  381:     def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
  382:         
  383:         """Generate Buttons"""
  384:         if orientation=="horizontal":
  385:             html="<table><tr>"
  386:             startTag="<td>"
  387:             endTag="</td>"
  388:             endHtml="</tr></table>"
  389: 
  390:         else:
  391:             html="<table>"
  392:             startTag="<tr><td>"
  393:             endTag="</td></tr>"
  394:             endHtml="</table>"
  395:             
  396:         if not start:
  397:             temp=hash
  398:         else:
  399:             temp=hash
  400:             for x in start:
  401:                 temp=temp[x][0]
  402:                 #print temp
  403:         
  404:         for key in self.tempSorted(temp):
  405:             
  406:             description=temp[x][1].title
  407:          
  408:             url=createPath(self.absolute_url(),temp[key][1].absolute_url())
  409: 
  410:             if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
  411:                 html=html+startTag+"[%s]" % description+endTag
  412:             else:                
  413:                 html=html+startTag+"[<a href='%s'>%s</a>]" % (url,description)+endTag
  414:             
  415: 
  416:         html=html+endHtml
  417:         
  418:         return html
  419: 
  420:     def mainNavBar(self):
  421:         """print main navigation bar"""
  422:         keys=""
  423:         print "NAVBAR",self.getId()
  424:         try:
  425:             keys=self.buttonsFromHash(self.createNavHash(0))
  426:         except:
  427:             keys=""
  428:             
  429:         return keys
  430: 
  431:     def mainNavElements(self):
  432:         """print main navigation bar"""
  433:         keys=""
  434:         print "NAVELEMENT",self.getId()
  435:         #try:
  436:       
  437:         keys=self.barFromHash(self.createNavHash(0))
  438: 
  439:         #except:
  440:         #    keys=""
  441:             
  442:         return keys
  443:     
  444:     def secondNavElements(self):
  445:         """Zweite Ordnung"""
  446:         
  447:         hash=self.createNavHash(2)
  448:         actual_url=self.REQUEST['URL']
  449:         
  450:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  451:         #print ult_temp
  452: 
  453:         splitted=ult_temp.split("/")
  454:         
  455: 
  456:         ## if splitted[len(splitted)-1]=="index_html":
  457: ##             start=[splitted[len(splitted)-2]]
  458: ##         else:
  459: ##             start=[splitted[len(splitted)-1]]
  460: 
  461:         start=[splitted[2]]
  462:         #print start
  463:        
  464:         keys=self.barFromHash(hash,start=start)
  465:         
  466:         
  467:         return keys
  468: 
  469:     def navElements(self,order):
  470:         """n-te Ordnung"""
  471:         
  472:         hash=self.createNavHash(order)
  473:         actual_url=self.REQUEST['URL']
  474:         
  475:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  476:         #print ult_temp
  477: 
  478:         splitted=ult_temp.split("/")
  479:         
  480: 
  481:         ## if splitted[len(splitted)-1]=="index_html":
  482: ##             start=[splitted[len(splitted)-2]]
  483: ##         else:
  484: ##             start=[splitted[len(splitted)-1]]
  485: 
  486:         start=splitted[2:order+1]
  487:         #print start
  488:        
  489:         keys=self.barFromHash(hash,start=start)
  490:         
  491:         
  492:         return keys
  493: 
  494: 
  495:     def secondNavBar(self):
  496:         """Zweite Ordnung"""
  497: 
  498:         hash=self.createNavHash(2)
  499:         actual_url=self.REQUEST['URL']
  500:         
  501:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  502:         #print ult_temp
  503: 
  504:         splitted=ult_temp.split("/")
  505:         
  506: 
  507:         ## if splitted[len(splitted)-1]=="index_html":
  508: ##             start=[splitted[len(splitted)-2]]
  509: ##         else:
  510: ##             start=[splitted[len(splitted)-1]]
  511: 
  512:         start=[splitted[2]]
  513:         #print start
  514:         
  515:         keys=self.buttonsFromHash(hash,start=start,orientation="vertical")
  516:         
  517:         
  518:         return keys
  519: 
  520: def manage_addECHO_navigationForm(self):
  521:     """Form for adding"""
  522:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_navigation.zpt').__of__(self)
  523:     return pt()
  524: 
  525: def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
  526:     """Add an ECHO_root"""
  527:     self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
  528:     
  529:     if RESPONSE is not None:
  530:         RESPONSE.redirect('manage_main')
  531: 
  532: 
  533: #helpers
  534: 
  535: 
  536: 
  537: def createPath(url1,url2):
  538:     temp1=url1.split("/")
  539:     temp2=url2.split("/")
  540:     for test in temp1:
  541:         if temp2[0]==test:
  542:             del temp2[0]
  543: 
  544:     return url1+"/"+string.join(temp2,"/")
  545: 
  546: def sortWeight(x,y):
  547:     #print x[1],y[1]
  548:     return cmp(x[1],y[1])
  549:     

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>