--- ECHO_content/ECHO_Nav.py 2005/12/04 09:10:55 1.67 +++ ECHO_content/ECHO_Nav.py 2012/08/29 07:53:31 1.84.2.3 @@ -1,4 +1,6 @@ # Objekte zur Erzeugung von Navigationselement +# 29-8-2012 Referenzen zum Storagemanager entfernt + from AccessControl import ClassSecurityInfo from Globals import DTMLFile from OFS.Image import Image,cookId @@ -29,14 +31,21 @@ from Products.PageTemplates.ZopePageTemp import os.path import urllib -from ECHO_helpers import displayTypes,checkOnlyOneInGroup +import ECHO_helpers +from ECHO_helpers import displayTypes,checkOnlyOneInGroup,unicodify from ECHO_collection import content_html -import zLOG +import logging + +#def ersetzt logging +def logger(txt,method,txt2): + """logging""" + logging.info(txt+ txt2) + try: from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder except: - zLOG.LOG('ECHO_Nav',zLOG.INFO,'ZSQLSimpleSearch not supported') + logger('ECHO_Nav',logging.INFO,'ZSQLSimpleSearch not supported') @@ -96,7 +105,14 @@ class ECHO_ZCatalogElement(SimpleItem): if RESPONSE is not None: RESPONSE.redirect('manage_main') def getKeywordList(self): - return getattr(self,self.catalogId).uniqueValuesFor(self.field) + try: + return getattr(self,self.catalogId).uniqueValuesFor(self.field) + except: + #return getattr(self,self.catalogId).query(self.field) + + list= [x for x in getattr(getattr(self,self.catalogId),self.field).words()] + list.sort() + return list def getNavList(self): """ausgabe der treffer list fuer navigation""" @@ -266,22 +282,22 @@ class ECHO_sqlElement(SimpleItem): try: searchQuery=ZSQLExtendFolder.ZSQLSimpleSearch except: - zLOG.LOG('ECHO_Nav',zLOG.INFO,'ZSQLSimpleSearch not supported') + logger('ECHO_Nav',logging.INFO,'ZSQLSimpleSearch not supported') def getNavList(self): """ausgabe der treffer list fuer navigation""" #naechste schritte sind trial and error, warum geht mal das eine mal das andere 2.3 / 2.4 ?? - + try: - try: - records=self.ZSQLSimpleSearch(query=self.query) - except: - records=self.searchQuery(self.aq_parent,query=self.query) #python 2.4 version (??) + try: + records=self.ZSQLSimpleSearch(query=self.query) + except: + records=self.searchQuery(self.aq_parent,query=self.query) #python 2.4 version (??) except: - records=self.searchQuery()#python 2.3 version(??) + records=self.searchQuery(query=self.query)#python 2.3 version(??) - + if not records: return [] else: @@ -290,6 +306,7 @@ class ECHO_sqlElement(SimpleItem): try: ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField()))))) except: + logger('ECHO_Nav',logging.INFO,"error, search") """notrhing""" return ret @@ -367,7 +384,14 @@ class ECHO_pageTemplate(ZopePageTemplate else: return 0 - + def getCrumb(self): + """returns breadcrumb for this object""" + return ECHO_helpers.getCrumb(self) + + def getHierCrumbs(self): + """returns a list of hierarchical breadcrumbs from self to the ECHO_root""" + return ECHO_helpers.getHierCrumbs(self); + ## def __init__(self, id, text=None, contentType=None): @@ -429,7 +453,16 @@ def manage_addECHO_pageTemplate(self, id class ECHO_navigation(Folder): """Navigations Element""" meta_type="ECHO_Navigation" - + management_page_charset="utf-8" + + def getUsername(self): + """get name of user""" + username=str(self.REQUEST['AUTHENTICATED_USER']) + if username=='Anonymous User': + return None + else: + return username + def searchExternalCollection(self,url,simpleSearch): """search external collection via xmlrpc""" server=xmlrpclib.Server(url) @@ -479,16 +512,8 @@ class ECHO_navigation(Folder): def decode(self,str): """decoder""" - if not str: - return "" - if type(str)==StringType: - - return str - else: - try: - return str.encode('utf-8') - except: - return str.encode('latin-1') + return unicodify(str) + def ECHOFormatListStr(self,list,search="\n",replace="
"): """formatiert liste im str""" if list: @@ -541,11 +566,7 @@ class ECHO_navigation(Folder): displayableMetaTypes=displayTypes - def getImageViewers(self): - """images""" - viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject']) - return viewers - + def getR(self): """re""" return self.REQUEST @@ -564,6 +585,8 @@ class ECHO_navigation(Folder): ) displayedMetaTypes=displayTypes + + def ECHO_navigationConfigForm(self): """configForm""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_navigation.zpt')).__of__(self) @@ -574,7 +597,7 @@ class ECHO_navigation(Folder): self.title=title self.pathToHierarchy=pathToHierarchy self.displayedMetaTypes=toList(displayedMetaTypes)[0:] - + if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -610,8 +633,9 @@ class ECHO_navigation(Folder): # if not generate new hash obj=objtemp - + for keys in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes): + x=keys[1] if depth>1: nav[x.getId()]=(self.getColls(x,int(depth)-1,checkOnly),x) @@ -634,7 +658,7 @@ class ECHO_navigation(Folder): def barFromHash(self,hash,start=None,sortField=None,location=None): """Erzeuge Navigations Element""" - #print "hash",hash + listNav=[] if not start: temp=hash @@ -671,11 +695,11 @@ class ECHO_navigation(Folder): #print "TEMP",temp,self.tempSorted(temp, field=sortField) for x in self.tempSorted(temp, field=sortField): - + if not temp[x][1].title == "": if (temp[x][1].meta_type=="ECHO_sqlElement") or (temp[x][1].meta_type=="ECHO_ZCatalogElement"): - + for z in temp[x][1].getNavList(): listNav.append((z[0],z[1],None,'','')) @@ -683,20 +707,17 @@ class ECHO_navigation(Folder): # add label falls existiert und nicht leer if hasattr(temp[x][1],'label'): - if not temp[x][1].label=='': - try: + if not temp[x][1].getLabel()=='': label=temp[x][1].getLabel() - except: - label=temp[x][1].label.encode('utf-8') else: - label=temp[x][1].title.encode('utf-8') + try: + label=temp[x][1].getTitle() + except: + logger("ECHO_Nav",logging.ERROR,"%s has neither getLabel nor getTile implemented"%temp[x][1].getId()) + label="" else: - label=temp[x][1].title.encode('utf-8') - - try: - label=label.encode('utf-8') - except: - label=label.decode('latin-1') + label=temp[x][1].getTitle() + if location: @@ -738,9 +759,11 @@ class ECHO_navigation(Folder): """test is path is already selected""" testStr=re.sub("/index_html",'',self.REQUEST.get('URL','')) - - #falls exakte Übereinstimmung dann immer 1 - if (testStr==item[1]) and (self.REQUEST.get('QUERY_STRING','')==''): + + if len(item)<2: + return 0 + #falls exakte Uebereinstimmung dann immer 1 + if (testStr==item[1]) and (self.REQUEST.get('QUERY_STRING','')==''): return 1 @@ -781,8 +804,25 @@ class ECHO_navigation(Folder): return style + 'sel' else: return style - - + + + def getCrumb(self): + """returns breadcrumb for this object""" + # ignore this object if title is empty + if not self.title: + return None + + # we use title for the label TODO: add label to ECHO_root + crumb = {'obj': self, + 'url': self.absolute_url(), + 'label': self.title} + return crumb + + def getHierCrumbs(self): + """returns a list of hierarchical breadcrumbs from self to the ECHO_root""" + return ECHO_helpers.getHierCrumbs(self) + + def buttonsFromHash(self,hash,start=None,orientation="horizontal"): """Generate Buttons""" @@ -844,7 +884,7 @@ class ECHO_navigation(Folder): #except: # keys="" - + return keys def numberOfMainNavElements(self): @@ -862,10 +902,27 @@ class ECHO_navigation(Folder): nr=0 return nr+1 + def subNavStatic(self,obj): + """subnav" von self""" + def sortWeight(x,y): + x1=int(getattr(x[1],'weight','0')) + y1=int(getattr(y[1],'weight','0')) + return cmp(x1,y1) + print "obj",obj + subs=self.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes) + subret=[] + + for x in subs: + if not(x[1].title==""): + subret.append(x) + subret.sort(sortWeight) + return subret + def secondNavElements(self): """Zweite Ordnung Navigationselemente""" hash=self.createNavHash(2,checkOnly="no") + actual_url=self.REQUEST['URL'] ult_temp=re.sub(self.absolute_url(),"",actual_url) @@ -880,7 +937,7 @@ class ECHO_navigation(Folder): start=[splitted[startNr]] #print start - + keys=self.barFromHash(hash,start=start) @@ -962,12 +1019,20 @@ def createPath(self,url1,url2): if self.REQUEST.has_key('VirtualRootPhysicalPath'): vp="/".join(self.REQUEST['VirtualRootPhysicalPath']) - if vp[0]=="/": - vp=vp[1:] + if (len(vp)>0): + if vp[0]=="/": + vp=vp[1:] - url2=url2.replace(vp+"/",'') + url2=url2.replace(vp+"/",'') + else: + temp1=url1.split("/") + temp2=url2.split("/") + for test in temp1: + if temp2[0]==test: + del temp2[0] + + url2= string.join(temp2,"/") - return url1+"/"+url2 def sortWeight(x,y):