--- MPIWGWeb/Attic/MPIWGHelper.py 2008/06/25 06:41:25 1.1.2.2 +++ MPIWGWeb/Attic/MPIWGHelper.py 2010/07/23 17:30:38 1.1.2.11 @@ -1,4 +1,6 @@ -from types import * +from Products.PageTemplates.PageTemplateFile import PageTemplateFile + +import logging definedFields=['WEB_title','xdata_01','xdata_02','xdata_03','xdata_04','xdata_05','xdata_06','xdata_07','xdata_08','xdata_09','xdata_10','xdata_11','xdata_12','xdata_13','WEB_project_header','WEB_project_description','WEB_related_pub'] @@ -18,13 +20,22 @@ def getTextFromNode(nodename): rc = rc + node.data return rc +def getTemplate(self, tpName): + """get a template file either form the instance or from the product""" + #ext=self.ZopeFind(self.aq_parent,obj_ids=[tpName]) + if hasattr(self,tpName): + pt = getattr(self,tpName) + else: + pt=PageTemplateFile('zpt/'+tpName, globals()).__of__(self) + assert(pt) + return pt def sortStopWordsF(self,xo,yo): if not hasattr(self,'_v_stopWords'): self._v_stopWords=self.stopwords_en.data.split("\n") - x=str(xo[1]) - y=str(yo[1]) + x=unicodify(xo[1]) + y=unicodify(yo[1]) strx=x.split(" ") stry=y.split(" ") @@ -75,24 +86,81 @@ def sortI(x,y): return cmp(x[1],y[1]) -def unicodify(str): +def unicodify(s): """decode str (utf-8 or latin-1 representation) into unicode object""" - if not str: - return "" - if type(str) is StringType: + if not s: + return u"" + if isinstance(s, str): try: - return str.decode('utf-8') + return s.decode('utf-8') except: - return str.decode('latin-1') + return s.decode('latin-1') else: - return str + return s -def utf8ify(str): - """encode unicode object or string into byte string in utf-8 representation""" - if not str: +def utf8ify(s): + """encode unicode object or string into byte string in utf-8 representation. + assumes string objects to be utf-8""" + if not s: return "" - if type(str) is StringType: - return str + if isinstance(s, str): + return s else: - return str.encode('utf-8') + return s.encode('utf-8') + + +def shortenString(s, l, ellipsis='...'): + """returns a string of length l (or l-1) by omitting characters in the middle of s, replacing with ellipsis.""" + l1 = int((l - len(ellipsis)) / 2) + return "%s%s%s"%(s[:l1],ellipsis,s[-l1:]) + + +# +# navigation methods (should better be a mixin class) +# +def getBreadcrumbs(self): + """return list of breadcrumbs from here to the root""" + crumbs = [(self.title, self.absolute_url(), self)] + parent = self.aq_parent + if hasattr(parent, 'getBreadcrumbs'): + if self.title: + return parent.getBreadcrumbs() + crumbs + else: + # if there's no title, skip this level + return parent.getBreadcrumbs() + + return crumbs + + +def getSection(self, crumbs=None): + """returns the current section name""" + # use breadcrumbs if available + if crumbs is not None and len(crumbs) > 0: + return crumbs[0][2].getId() + + p = self + sec = None + # descend parents to the root (and remember the last id) + while p is not None and p.meta_type != 'MPIWGRoot': + sec = p.getId() + p = p.aq_parent + + return sec + +def getSubSection(self, crumbs=None): + """returns the current subsection name""" + # use breadcrumbs if available + if crumbs is not None and len(crumbs) > 1: + return crumbs[1][2].getId() + + p = self + sec = None + subsec = None + # descend parents to the root (and remember the last id) + while p is not None and p.meta_type != 'MPIWGRoot': + subsec = sec + sec = p.getId() + p = p.aq_parent + + return subsec