def customizeTemplate(self): reg = self.getRegistrationFromRequest() viewzpt = registration.customizeTemplate(reg) self.registerTTWView(viewzpt, reg) path = aq_inner(viewzpt).getPhysicalPath() url = self.request.physicalPathToURL(path) + '/manage_workspace' self.request.response.redirect(url)
def customizeTemplate(self): reg = self.getRegistrationFromRequest() viewzpt = registration.customizeTemplate(reg) self.registerTTWView(viewzpt, reg) path = aq_inner(viewzpt).getPhysicalPath() url = self.request.physicalPathToURL(path) + "/manage_workspace" self.request.response.redirect(url)
def moveViewletToViewletManager(self, viewlethash, toManagerName): """ Register the viewlet as belonging to the specified viewlet manager """ # Unhash the viewlet info. Pull out what we need. unhashedInfo = unhashViewletInfo(viewlethash) fromManagerName = unhashedInfo['managerName'] viewletName = unhashedInfo['viewletName'] reg = findTemplateViewRegistrationFromHash(viewlethash) fromViewletManager = queryMultiAdapter((self.context, self.request, self), IViewletManager, fromManagerName) fromManagerInterface = list(providedBy(fromViewletManager).flattened())[0] toViewletManager = queryMultiAdapter((self.context, self.request, self), IViewletManager, toManagerName) toManagerInterface = list(providedBy(toViewletManager).flattened())[0] # Create a new tuple of the "required" interfaces. reqList = list(reg.required) pos = reqList.index(fromManagerInterface) reqList[pos] = toManagerInterface reqs = tuple(reqList) registration.createTTWViewTemplate(reg) attr, pt = findViewletTemplate(reg.factory) reg.factory.template = mangleAbsoluteFilename(pt.filename) # Register the new adapter gsm = getGlobalSiteManager() gsm.registerAdapter(name=viewletName, required=reqs, provided=reg.provided, factory=reg.factory) # "Customize" it to force persistence reqstr = ','.join([a.__identifier__ for a in reqs]) toreg = registration.findTemplateViewRegistration(reqstr, viewletName) viewzpt = registration.customizeTemplate(toreg) sm = getSiteManager(self.context) sm.registerAdapter(viewzpt, required=toreg.required, provided=toreg.provided, name=toreg.name) # Hide the original self.hideViewlet(viewlethash) # Rerender the new one # We can't do this with a refreshProvider call because then we lose the <tal:viewletmanager> block. toViewletManager.update() ksscore = self.getCommandSet('core') selector = ksscore.getCssSelector('.kssattr-viewletmanagername-' + toManagerName.replace('.', '-')) ksscore.replaceInnerHTML(selector, toViewletManager.render()) # Inspect the new viewlet return self.inspectViewlet(hashViewletInfo(viewletName, toManagerName, unhashedInfo['provided']))
def customizeViewlet(self, viewlethash): """ Display an edit form for modifiying a viewlet's template """ logger.debug("in customizeViewlet") # Unhash the viewlet info unhashedViewletInfo = unhashViewletInfo(viewlethash) # Get the viewlet's registration information from portal_view_customizations container = queryUtility(IViewTemplateContainer) reg = findTemplateViewRegistrationFromHash(viewlethash) regInfo = list(registration.templateViewRegistrationInfos([reg]))[0] # TODO We should be looking at regInfo['customized'] to determine whether or not a customization exists. # It never seems to have a value though... check on this. templateName = registration.generateIdFromRegistration(reg) # Check to see if the viewlet has already been customized. Get the template code accordingly. if templateName not in container.objectIds(): viewzpt = registration.customizeTemplate(reg) sm = getSiteManager(self.context) sm.registerAdapter(viewzpt, required= reg.required, provided = reg.provided, name=reg.name) else: viewzpt = container[templateName] templateCode = viewzpt.read() template = ViewPageTemplateFile('panel_customize_viewlet.pt') # Wrap it so that Zope knows in what context it's being called # Otherwise, we get an "AttributeError: 'str' object has no attribute 'other'" error template = BoundPageTemplate(template, self) out = template(templateURL = viewzpt.absolute_url(), viewletHash = viewlethash, templateCode = templateCode) # Dump the output to the output panel self.updatePanelBodyContent(out) # Force a resize update of the panel so that the form elements are sized to the dimensions of the panel. kssglo = self.getCommandSet('gloWorm') kssglo.forceGlowormPanelResize() return self.render()