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'] checkFields = ['xdata_01'] #ersetzt logging def logger(txt,method,txt2): """logging""" logging.info(txt+ txt2) def getTextFromNode(nodename): nodelist=nodename.childNodes rc = "" for node in nodelist: if node.nodeType == node.TEXT_NODE: 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=unicodify(xo[1]) y=unicodify(yo[1]) strx=x.split(" ") stry=y.split(" ") for tmp in strx: if tmp.lower() in self._v_stopWords: del strx[strx.index(tmp)] for tmp in stry: if tmp.lower() in self._v_stopWords: del stry[stry.index(tmp)] return cmp(" ".join(strx)," ".join(stry)) def sortStopWords(self): return lambda x,y : sortStopWordsF(self,x,y) def sortF(x,y): try: return cmp(x[1],y[1]) except: try: return cmp(str(x[1]),str(y[1])) except: return 0 def sortI(x,y): xsplit=x[1].split(".") ysplit=y[1].split(".") xret="" yret="" try: for i in range(5): try: yret=yret+"%04i"%int(xsplit[i]) except: yret=yret+"%04i"%0 try: xret=xret+"%04i"%int(ysplit[i]) except: xret=xret+"%04i"%0 return cmp(int(yret),int(xret)) except: return cmp(x[1],y[1]) def unicodify(s): """decode str (utf-8 or latin-1 representation) into unicode object""" if not s: return u"" if isinstance(s, str): try: return s.decode('utf-8') except: return s.decode('latin-1') else: return s 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 isinstance(s, str): return s else: 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