from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Globals import package_home import string import re import os import logging from OFS.Folder import Folder from AccessControl import ClassSecurityInfo from MPIWGHelper import * 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): """returns the current section name""" 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): """returns the current subsection name""" 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 class MPIWGTemplate(ZopePageTemplate): """Create a layout Template for different purposes""" meta_type="MPIWGTemplate" manage_options=ZopePageTemplate.manage_options+( {'label':'Change Weight','action':'changeWeightForm'}, ) def changeWeightForm(self): """change weight form""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGTemplateChangeWeight.zpt')).__of__(self) return pt() def changeWeight(self,weight,RESPONSE=None): """change weight""" self.weight=weight if RESPONSE is not None: RESPONSE.redirect('manage') def __init__(self, id, text=None, content_type="text/html",MPIWGType=None): self.id = str(id) self.ZBindings_edit(self._default_bindings) if text is None: self._default_content_fn = os.path.join(package_home(globals()), 'zpt/MPIWG_%s_template_standard.zpt'%MPIWGType) text = open(self._default_content_fn).read() self.pt_edit(text, content_type) def isActiveItem(self): """teste ob ausgewaehlt""" if self.absolute_url()==self.REQUEST['URL']: return "aktiv" else: return "" getBreadcrumbs = getBreadcrumbs getSection = getSection getSubSection = getSubSection def harvest_page(self): """harvest main""" try: return self.pt_render() except: logging.error("cannot harvest: %s"%self.absolute_url()) def manage_addMPIWGTemplateForm(self): """Form for adding""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddMPIWGTemplate.zpt')).__of__(self) return pt() def manage_addMPIWGTemplate(self, MPIWGType,id, text="",title=None,weight=0,REQUEST=None): "Add a Page Template with optional file content." if type(MPIWGType)==StringType: MPIWGTypes=[MPIWGType] else: MPIWGTypes=MPIWGType for singleType in MPIWGTypes: if REQUEST is None: self._setObject(id, MPIWGTemplate(id, text,EchoType=singleType)) ob = getattr(self, id) if title: ob.pt_setTitle(title) return ob else: file = REQUEST.form.get('file') headers = getattr(file, 'headers', None) if headers is None or not file.filename: zpt = MPIWGTemplate(id,MPIWGType=singleType) else: zpt = MPIWGTemplate(id, file, headers.get('content_type')) self._setObject(id, zpt) ob = getattr(self, id) if title: ob.pt_setTitle(title) try: u = self.DestinationURL() except AttributeError: u = REQUEST['URL1'] ob = getattr(self, id) ob.weight=weight REQUEST.RESPONSE.redirect(u+'/manage_main') return '' class MPIWGFolder(Folder): """special Folder object for MPIWG website """ meta_type="MPIWGFolder" manage_options=Folder.manage_options+( {'label':'Change Weight','action':'changeWeightForm'}, {'label':'Main Config','action':'changeForm'}, ) changeWeightForm = PageTemplateFile('zpt/MPIWGFolderChangeWeight', globals()) changeForm = PageTemplateFile('zpt/MPIWGFolderConfig', globals()) def __init__(self, id, title=None, weight=0, canonicalName=None): self.id = str(id) self.weight = weight if title is None: self.title = id else: self.title = title if canonicalName is None: self.canonicalName = self.id else: self.canonicalName = canonicalName def changeWeight(self,weight,RESPONSE=None): """change weight""" self.weight=weight if RESPONSE is not None: RESPONSE.redirect('manage_main') def changeMPIWGFolder(self, title=None, weight=None, canonicalName=None, RESPONSE=None): """change everything""" if title is not None: self.title = title if weight is not None: self.weight = weight if canonicalName is not None: self.canonicalName = canonicalName if RESPONSE is not None: RESPONSE.redirect('manage_main') getBreadcrumbs = getBreadcrumbs getSection = getSection getSubSection = getSubSection def manage_addMPIWGFolderForm(self): """Form for adding""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddMPIWGFolder.zpt')).__of__(self) return pt() def manage_addMPIWGFolder(self, id, title=None,weight=0,RESPONSE=None): "Add a MPIWG Folder." newObj=MPIWGFolder(id,title,weight) self.Destination()._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') class MPIWGFeature(Folder): """special object for feature texts on the MPIWG website """ meta_type="MPIWGFeature" manage_options=Folder.manage_options+( {'label':'Change Weight','action':'changeWeightForm'}, {'label':'Main Config','action':'changeForm'}, ) changeWeightForm = PageTemplateFile('zpt/MPIWGFeatureChangeWeight', globals()) changeForm = PageTemplateFile('zpt/MPIWGFeatureConfig', globals()) def __init__(self, id, title=None, weight=0): self.id = str(id) self.weight = weight if title is None: self.title = id else: self.title = title # add language folder and sample templates self.manage_addFolder('en') folder = getattr(self, 'en') introid = 'intro.pt' folder._setObject(introid, ZopePageTemplate(introid)) intro = getattr(folder,introid) intro.pt_edit(open(os.path.join(package_home(globals()),'zpt/MPIWGFeature_template_intro.zpt')).read(),'text/html') mainid = 'main.pt' folder._setObject(mainid, ZopePageTemplate(mainid)) main = getattr(folder,mainid) main.pt_edit(open(os.path.join(package_home(globals()),'zpt/MPIWGFeature_template_main.zpt')).read(),'text/html') def index_html(self): """default index page""" return self.getMain() def getFullTitle(self): """returns the full title (from main.pt)""" # get Language from MPIWGRoot lang = self.getLang() dir = getattr(self, lang, self.en) pt = getattr(dir, 'main.pt') t = pt.title if not t: t = self.title return t def getIntro(self, **args): """returns the intro as PageTemplate""" # get Language from MPIWGRoot lang = self.getLang() dir = getattr(self, lang, self.en) pt = getattr(dir, 'intro.pt') return pt(**args) def getMain(self, **args): """returns the main part as PageTemplate""" # get Language from MPIWGRoot lang = self.getLang() dir = getattr(self, lang, self.en) pt = getattr(dir, 'main.pt') return pt(**args) def getFrontpageImg(self): """returns the image object for the frontpage""" img = getattr(self, 'img-frontpage.jpg') return img def getFrontpageImgUrl(self): """returns the URL of the image object for the frontpage""" img = getattr(self, 'img-frontpage.jpg') return img.absolute_url() def getFrontpageThumb(self): """returns the image object for the frontpage thumbnail""" img = getattr(self, 'img-frontthumb.jpg') return img def getFrontpageThumbUrl(self): """returns the URL of the image object for the frontpage thumbnail""" img = getattr(self, 'img-frontthumb.jpg') return img.absolute_url() def getThumbImg(self): """returns the image object for the sidebar thumbnail""" img = getattr(self, 'img-thumb.jpg') return img def getThumbImgUrl(self): """returns the URL of the image object for the sidebar thumbnail""" img = getattr(self, 'img-thumb.jpg') return img.absolute_url() def changeWeight(self,weight,RESPONSE=None): """change weight""" self.weight=weight if RESPONSE is not None: RESPONSE.redirect('manage_main') def changeMPIWGFeature(self, title=None, weight=None, RESPONSE=None): """change everything""" if title is not None: self.title = title if weight is not None: self.weight = weight if RESPONSE is not None: RESPONSE.redirect('manage_main') def getBreadcrumbs(self): """return list of breadcrumbs from here to the root""" crumbs = [(self.getFullTitle(), 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 getSection = getSection getSubSection = getSubSection def manage_addMPIWGFeatureForm(self): """Form for adding""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/AddMPIWGFeature.zpt')).__of__(self) return pt() def manage_addMPIWGFeature(self, id, title=None,weight=0,RESPONSE=None): "Add a MPIWG Feature object" newObj=MPIWGFeature(id,title,weight) self.Destination()._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main')