File:  [Repository] / ECHO_content / ECHO_Nav.py
Revision 1.9: download - view: text, annotated - select for diffs - revision graph
Fri Apr 2 15:06:47 2004 UTC (20 years, 2 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
added image

    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:         if title:
  193:             ob.pt_setTitle(title)
  194:         
  195:         try:
  196:             u = self.DestinationURL()
  197:         except AttributeError:
  198:             u = REQUEST['URL1']
  199: 
  200:         if submit == " Add and Edit ":
  201:             u = "%s/%s" % (u, quote(id))
  202:         REQUEST.RESPONSE.redirect(u+'/manage_main')
  203:     return ''
  204: 
  205: 
  206: class ECHO_navigation(Folder):
  207:     """Navigations Element"""
  208:     meta_type="ECHO_Navigation"
  209: 
  210:     displayedMetaTypes=['ImageCollectionIFrame','ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ECHO_sqlElement','ECHO_resource','ECHO_externalLink']
  211:     
  212:     def __init__(self,id,title,pathToHierarchy):
  213:         """init"""
  214:         self.id=id
  215:         self.title=title
  216:         self.pathToHierarchy=pathToHierarchy
  217: 
  218:     manage_options = Folder.manage_options+(
  219:         {'label':'Main Config','action':'ECHO_navigationConfigForm'},
  220:         )
  221: 
  222:     def ECHO_navigationConfigForm(self):
  223:         """configForm"""
  224:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_navigation.zpt').__of__(self)
  225:         return pt()
  226:     
  227:     def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):
  228:         """config"""
  229:         self.title=title
  230:         self.pathToHierarchy=pathToHierarchy
  231: 
  232:         if RESPONSE is not None:
  233:             RESPONSE.redirect('manage_main')
  234: 
  235: 
  236:     def getColls(self,obj,depth):
  237:         nav={}
  238:         #print "HERE",obj.
  239:         for keys in obj.__dict__.keys():
  240:             x=getattr(obj,keys)
  241:             if hasattr(x,"meta_type"):
  242:                 if x.meta_type in self.displayedMetaTypes:
  243:                     if depth>1:
  244:                         nav[x.getId()]=(self.getColls(x,depth-1),x)
  245:                     else:
  246:                         nav[x.getId()]=(None,x)
  247:         return nav
  248:     
  249:     def createNavHash(self,depth):
  250:         """Auslesen des Hierarchiebuames"""
  251:         temp=self.pathToHierarchy[0:]
  252:         temp=re.sub("/",".",temp)
  253:         temp="self.aq_parent"+temp
  254:         
  255:         objtemp=eval(temp)
  256:         nav={}
  257:         obj=objtemp
  258:         
  259:         #exec(obj)
  260: 
  261:         #objtemp = compile(temp,'<string>','single')
  262:         #obj=eval(objtemp)
  263:         #print obj 
  264:         
  265:         #print obj.__dict__.keys()
  266:         
  267:         for keys in obj.__dict__.keys():
  268:             x=getattr(obj,keys)
  269:             if hasattr(x,"meta_type"):
  270:                 #print x.meta_type
  271:                 if x.meta_type in self.displayedMetaTypes:
  272:                    
  273:                     if depth>1:
  274:                         nav[x.getId()]=(self.getColls(x,int(depth)-1),x)
  275:                     else:
  276:                         nav[x.getId()]=(None,x)
  277:                     
  278: 
  279:         #print nav
  280:         return nav
  281: 
  282:     def barFromHash(self,hash,start=None,sortField=None):
  283:         """Erzeuge Navigations Element"""
  284:         #print "hash",hash
  285:         listNav=[]
  286:         if not start:
  287:             temp=hash
  288:             sortField="weight"
  289:         else: # list mit pfad zum hash
  290:             temp=hash
  291:             #print "HI",sortField
  292:             if not sortField:
  293:                 tempObj=self.pathToHierarchy[0:]
  294:                 tempObj=re.sub("/",".",tempObj)
  295:                 tempObj="self.aq_parent"+tempObj
  296: 
  297:                 objtemp=eval(tempObj)
  298: 
  299:                 obj=objtemp
  300: 
  301:                 for x in start:
  302:                     #print "OBJ",start,obj,obj.getId(),x
  303: 
  304:                     obj=getattr(obj,x)
  305: 
  306:                 if hasattr(obj,'sortfield'):
  307:                     sortField=obj.sortfield
  308:                 else:
  309:                     sortField='weight'
  310:             #print "START",start
  311:             for x in start:
  312:                 #print "N2",x,temp[x]
  313:                 try:
  314:                     temp=temp[x][0]
  315:                 except:
  316:                     """nothing"""
  317:                     return []
  318:             #print "TEMP",temp,self.tempSorted(temp, field=sortField)
  319:         print "HELL",sortField
  320:         for x in self.tempSorted(temp, field=sortField):
  321:             if not temp[x][1].title == "":
  322:                 if temp[x][1].meta_type=="ECHO_sqlElement":
  323:                     for z in temp[x][1].getNavList():
  324:                         listNav.append((z[0],z[1]))
  325:                 else:
  326:                     # add label fals existiert und nicht leer
  327:                     if hasattr(temp[x][1],'label'):
  328:                         if not temp[x][1].label=='':
  329:                             label=temp[x][1].label
  330:                             print "HAS LABEL",label
  331:                         else:
  332:                             label=temp[x][1].title
  333:                     else:
  334:                         label=temp[x][1].title                            
  335:                     
  336:                     listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1]))
  337:                     
  338:         #print self.getId(),start
  339:         #print listNav
  340: 
  341:         #html=""
  342:         #for k in listNav:
  343:         #    print k
  344:         #    html=html+"<a href='%s'>%s</a>   "% (self.absolute_url()+createPath(k[1][1].absolute_url()),k[0])
  345: 
  346:         return listNav
  347: 
  348:     def tempSorted(self,hash,field="weight"):
  349:         ls=[]
  350:         print "SORT",field
  351:         for x in hash.keys():
  352:             #print hash[x][1]
  353:             if hasattr(hash[x][1],field):
  354:                 weight=getattr(hash[x][1],field)
  355:                 #print weight
  356:             else:
  357:                 weight=0
  358: 
  359:             ls.append((x,weight))
  360: 
  361:         ls.sort(sortWeight)
  362:         
  363:         return [x[0] for x in ls]
  364: 
  365:     
  366:         
  367:             
  368:     def isSelectedPath(self,item):
  369:         """test is path is already selected"""
  370:         found=re.search("\?(.*)",item[1])
  371:         if found:
  372:             temp=re.sub(" ","%20",found.group(0))
  373:             #print temp+"::"+self.REQUEST['QUERY_STRING']
  374:             if ("?"+self.REQUEST['QUERY_STRING'])==temp:
  375:                 return 1
  376: 
  377:         if re.search(item[1],self.REQUEST['URL']):
  378:             return 1
  379:         else:
  380:             return 0
  381:         
  382:     
  383:     def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
  384:         
  385:         """Generate Buttons"""
  386:         if orientation=="horizontal":
  387:             html="<table><tr>"
  388:             startTag="<td>"
  389:             endTag="</td>"
  390:             endHtml="</tr></table>"
  391: 
  392:         else:
  393:             html="<table>"
  394:             startTag="<tr><td>"
  395:             endTag="</td></tr>"
  396:             endHtml="</table>"
  397:             
  398:         if not start:
  399:             temp=hash
  400:         else:
  401:             temp=hash
  402:             for x in start:
  403:                 temp=temp[x][0]
  404:                 #print temp
  405:         
  406:         for key in self.tempSorted(temp):
  407:             
  408:             description=temp[x][1].title
  409:          
  410:             url=createPath(self.absolute_url(),temp[key][1].absolute_url())
  411: 
  412:             if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
  413:                 html=html+startTag+"[%s]" % description+endTag
  414:             else:                
  415:                 html=html+startTag+"[<a href='%s'>%s</a>]" % (url,description)+endTag
  416:             
  417: 
  418:         html=html+endHtml
  419:         
  420:         return html
  421: 
  422:     def mainNavBar(self):
  423:         """print main navigation bar"""
  424:         keys=""
  425:         print "NAVBAR",self.getId()
  426:         try:
  427:             keys=self.buttonsFromHash(self.createNavHash(0))
  428:         except:
  429:             keys=""
  430:             
  431:         return keys
  432: 
  433:     def mainNavElements(self):
  434:         """print main navigation bar"""
  435:         keys=""
  436:         print "NAVELEMENT",self.getId()
  437:         #try:
  438:       
  439:         keys=self.barFromHash(self.createNavHash(0))
  440: 
  441:         #except:
  442:         #    keys=""
  443:             
  444:         return keys
  445:     
  446:     def secondNavElements(self):
  447:         """Zweite Ordnung"""
  448:         
  449:         hash=self.createNavHash(2)
  450:         actual_url=self.REQUEST['URL']
  451:         
  452:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  453:         #print ult_temp
  454: 
  455:         splitted=ult_temp.split("/")
  456:         
  457: 
  458:         ## if splitted[len(splitted)-1]=="index_html":
  459: ##             start=[splitted[len(splitted)-2]]
  460: ##         else:
  461: ##             start=[splitted[len(splitted)-1]]
  462: 
  463:         start=[splitted[2]]
  464:         #print start
  465:        
  466:         keys=self.barFromHash(hash,start=start)
  467:         
  468:         
  469:         return keys
  470: 
  471:     def navElements(self,order):
  472:         """n-te Ordnung"""
  473:         
  474:         hash=self.createNavHash(order)
  475:         actual_url=self.REQUEST['URL']
  476:         
  477:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  478:         #print ult_temp
  479: 
  480:         splitted=ult_temp.split("/")
  481:         
  482: 
  483:         ## if splitted[len(splitted)-1]=="index_html":
  484: ##             start=[splitted[len(splitted)-2]]
  485: ##         else:
  486: ##             start=[splitted[len(splitted)-1]]
  487: 
  488:         start=splitted[2:order+1]
  489:         #print start
  490:        
  491:         keys=self.barFromHash(hash,start=start)
  492:         
  493:         
  494:         return keys
  495: 
  496: 
  497:     def secondNavBar(self):
  498:         """Zweite Ordnung"""
  499: 
  500:         hash=self.createNavHash(2)
  501:         actual_url=self.REQUEST['URL']
  502:         
  503:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  504:         #print ult_temp
  505: 
  506:         splitted=ult_temp.split("/")
  507:         
  508: 
  509:         ## if splitted[len(splitted)-1]=="index_html":
  510: ##             start=[splitted[len(splitted)-2]]
  511: ##         else:
  512: ##             start=[splitted[len(splitted)-1]]
  513: 
  514:         start=[splitted[2]]
  515:         #print start
  516:         
  517:         keys=self.buttonsFromHash(hash,start=start,orientation="vertical")
  518:         
  519:         
  520:         return keys
  521: 
  522: def manage_addECHO_navigationForm(self):
  523:     """Form for adding"""
  524:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_navigation.zpt').__of__(self)
  525:     return pt()
  526: 
  527: def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
  528:     """Add an ECHO_root"""
  529:     self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
  530:     
  531:     if RESPONSE is not None:
  532:         RESPONSE.redirect('manage_main')
  533: 
  534: 
  535: #helpers
  536: 
  537: 
  538: 
  539: def createPath(url1,url2):
  540:     temp1=url1.split("/")
  541:     temp2=url2.split("/")
  542:     for test in temp1:
  543:         if temp2[0]==test:
  544:             del temp2[0]
  545: 
  546:     return url1+"/"+string.join(temp2,"/")
  547: 
  548: def sortWeight(x,y):
  549:     #print x[1],y[1]
  550:     return cmp(x[1],y[1])
  551:     

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