def convert_legacy_portlets(context): """Convert legacy portlets (left_slots, right_slots) in the given context to new-style portlets. """ portletsMapping = { 'portlet_login': login.Assignment(), 'portlet_news': news.Assignment(count=5), 'portlet_navigation': navigation.Assignment(), 'portlet_review': review.Assignment(), 'portlet_recent': recent.Assignment(count=5), 'portlet_related': DONT_MIGRATE, 'portlet_languages': DONT_MIGRATE, 'portlet_calendar': calendar.Assignment(), 'portlet_events': events.Assignment(count=5), } # Convert left_slots and right_slots to portlets left = getUtility(IPortletManager, name='plone.leftcolumn') right = getUtility(IPortletManager, name='plone.rightcolumn') leftAssignable = getMultiAdapter((context, left), IPortletAssignmentMapping).__of__(context) rightAssignable = getMultiAdapter( (context, right), IPortletAssignmentMapping).__of__(context) IPortletPermissionChecker(leftAssignable)() IPortletPermissionChecker(rightAssignable)() leftChooser = INameChooser(leftAssignable) rightChooser = INameChooser(rightAssignable) left_slots = getattr(aq_base(context), 'left_slots', []) right_slots = getattr(aq_base(context), 'right_slots', []) for item in left_slots: path = item.split('/') if len(path) == 4: newPortlet = portletsMapping.get(path[1], None) if newPortlet is None and path[0] in ( 'context', 'here') and path[2] == 'macros': newPortlet = classic.Assignment(path[1], path[3]) if newPortlet is not None and newPortlet is not DONT_MIGRATE: leftAssignable[leftChooser.chooseName(None, newPortlet)] = newPortlet for item in right_slots: path = item.split('/') if len(path) == 4: newPortlet = portletsMapping.get(path[1], None) if newPortlet is None and path[0] in ( 'context', 'here') and path[2] == 'macros': newPortlet = classic.Assignment(path[1], path[3]) if newPortlet is not None and newPortlet is not DONT_MIGRATE: rightAssignable[rightChooser.chooseName( None, newPortlet)] = newPortlet context.left_slots = [] context.right_slots = []
def spm_stop_portlet(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') portlethash = self.request.get('hereurl') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() assigned = ISolgemaPortletAssignment(assignments[info['name']]) if getattr(assigned, 'stopUrls', None) and len(getattr(assigned, 'stopUrls', [])) > 0: urls = assigned.stopUrls li = [] added = False for url in urls: if hereurl in url and not added: li.append(hereurl) added = True else: li.append(url) if not added: li.append(hereurl) assigned.stopUrls = li else: assigned.stopUrls = [hereurl] return self._render_column(info, viewname)
def spm_delete_portlet(self, name): assignments = aq_inner(self.context) IPortletPermissionChecker(assignments)() managerid = assignments.id.split('++')[-1] parent = aq_parent(aq_inner(self.context)) key = '/'.join(parent.getPhysicalPath()) portlethash = hashPortletInfo( dict( manager=managerid, category=CONTEXT_CATEGORY, key=key, name=name, )) portal_state = getMultiAdapter((self.context, self.context.REQUEST), name=u'plone_portal_state') portal = portal_state.portal() manager = getUtility(IPortletManager, name=managerid, context=portal) listhashes = manager.listAllManagedPortlets del assignments[name] listhashes.remove(portlethash) manager.listAllManagedPortlets = listhashes if not self.request.get('ajax'): self.request.response.redirect(self._nextUrl()) return 'OK'
def __call__(self): """ We look for the weight score and the portlet hash, if we have neither than we return an error message """ request = self.request weight = request.get('weight', None) portlethash = request.get('portlethash', None) try: weight = int(weight) except ValueError: err = 'Error: You must enter an integer for the portlet weight' return self.weighted_message(err) if not portlethash: return self.weighted_message('Error saving data.') info = unhashPortletInfo(portlethash) # key needs to be converted to str as unicode paths are not accepted # in restrictedTraverse called in assignment_mapping_from_key assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key'].encode('utf-8')) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() name = info['name'] if not hasattr(assignments[name], ATTR): setattr(assignments[name], ATTR, PersistentDict()) getattr(assignments[name], ATTR)['weight'] = weight return ''
def spm_move_portlet_down(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') portal = portal_state.portal() # manager = getUtility(IPortletManager, name=info['manager'], context=portal) manager = getUtility(IPortletManager, name=info['manager']) listhashes = manager.listAllManagedPortlets retriever = getMultiAdapter((self.context, manager), ISolgemaPortletManagerRetriever) managedPortletsHashes = [ a['hash'] for a in retriever.getManagedPortlets() ] if portlethash in listhashes: hashAfter = managedPortletsHashes[ managedPortletsHashes.index(portlethash) + 1] listhashes.remove(portlethash) listhashes.insert(listhashes.index(hashAfter) + 1, portlethash) manager.listAllManagedPortlets = listhashes else: manager.listAllManagedPortlets = listhashes.append(portlethash) return self._render_column(info, viewname)
def set_blacklist_status(self, manager, group_status, content_type_status, context_status): authenticator = getMultiAdapter((self.context, self.request), name=u"authenticator") if not authenticator.verify(): raise Unauthorized portletManager = getUtility(IPortletManager, name=manager) assignable = getMultiAdapter((self.context, portletManager), ILocalPortletAssignmentManager) assignments = getMultiAdapter((self.context, portletManager), IPortletAssignmentMapping) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() def int2status(status): if status == 0: return None elif status > 0: return True else: return False assignable.setBlacklistStatus(GROUP_CATEGORY, int2status(group_status)) assignable.setBlacklistStatus(CONTENT_TYPE_CATEGORY, int2status(content_type_status)) assignable.setBlacklistStatus(CONTEXT_CATEGORY, int2status(context_status)) baseUrl = str( getMultiAdapter((self.context, self.request), name='absolute_url')) self.request.response.redirect(baseUrl + '/@@manage-portlets') return ''
def __call__(self): context = aq_parent(aq_parent(aq_inner(self.context))) oshaview = getMultiAdapter((context, self.request), name=u'oshaview') sep = oshaview.getCurrentSingleEntryPoint() if sep is not None: AddForm.form_fields.get('subject').field.default = sep.Subject() IPortletPermissionChecker(aq_parent(aq_inner(self.context)))() return super(AddForm, self).__call__()
def __call__(self): IPortletPermissionChecker(aq_parent(aq_inner(self.context)))() ob = self.create() zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(ob)) self.context.add(ob) nextURL = self.nextURL() if nextURL: self.request.response.redirect(self.nextURL()) return ''
def add(self, content): """Add the rule to the context """ context = aq_inner(self.context) manager = aq_base(context) IPortletPermissionChecker(context)() chooser = INameChooser(manager) manager[chooser.chooseName(None, content)] = content
def testGroupDashboardNamespaceChecker(self): assignment = classic.Assignment() manager = getUtility(IPortletManager, name='plone.dashboard1') mapping = self.portal.restrictedTraverse('++groupdashboard++plone.dashboard1+Reviewers') checker = IPortletPermissionChecker(mapping) self.setRoles(('Manager', )) checker() # no exception self.setRoles(('Member', )) self.assertRaises(Unauthorized, checker)
def move_portlet_down(self, name): self.authorize() assignments = aq_inner(self.context) IPortletPermissionChecker(assignments)() keys = list(assignments.keys()) idx = keys.index(name) keys.remove(name) keys.insert(idx + 1, name) assignments.updateOrder(keys) return self.finish_portlet_change()
def spm_allow_portlet(self, name): hereurl = self.request.get('here_url', '') assignments = aq_inner(self.context) portlet = ISolgemaPortletAssignment(assignments[name]) IPortletPermissionChecker(assignments)() li = [] if len(getattr(portlet, 'stopUrls', [])) > 0: urls = portlet.stopUrls for url in urls: if url not in hereurl: li.append(url) portlet.stopUrls = li if not self.request.get('ajax'): self.request.response.redirect(self._nextUrl()) return 'OK'
def delete_portlet(self, name): self.authorize() assignments = aq_inner(self.context) IPortletPermissionChecker(assignments)() # set fixing_up to True to let zope.container.contained # know that our object doesn't have __name__ and __parent__ fixing_up = contained.fixing_up contained.fixing_up = True del assignments[name] # revert our fixing_up customization contained.fixing_up = fixing_up return self.finish_portlet_change()
def change_portlet_weight(self, portlethash, viewname, weight): try: weight = int(weight) except ValueError: return self._render_column() info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key( self.context, info['manager'], info['category'], info['key'] ) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() name = info['name'] if not hasattr(assignments[name], ATTR): setattr(assignments[name], ATTR, PersistentDict()) getattr(assignments[name], ATTR)['weight'] = weight return "done"
def duplicate_panel(self, name): self.authorize() assignments = aq_inner(self.context) IPortletPermissionChecker(assignments)() # set fixing_up to True to let zope.container.contained # know that our object doesn't have __name__ and __parent__ fixing_up = contained.fixing_up contained.fixing_up = True source_panel = assignments[name] assignments.addPanel(source_panel.layout, source_panel.css_class, source_panel.heading, *source_panel) # revert our fixing_up customization contained.fixing_up = fixing_up return self.finish_panel_change()
def add(self): """Add the panel to the panel manager """ context = aq_inner(self.context) manager = aq_base(context) # todo IPortletPermissionChecker(context)() layout = self.request.get('layout', '') if not layout: raise BadRequest("Missing layout.") css_class = self.request.get('css_class', '') heading = safe_unicode(self.request.get('heading', '')) manager.addPanel(layout, css_class, heading) IStatusMessage(self.request).addStatusMessage(_(u"Panel added."), type="info")
def spm_allow_portlet(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') portlethash = self.request.get('hereurl') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() li = [] assigned = ISolgemaPortletAssignment(assignments[info['name']]) if hasattr(assigned, 'stopUrls') and len(assigned.stopUrls) > 0: urls = assigned.stopUrls for url in urls: if url not in hereurl: li.append(url) assigned.stopUrls = li return self._render_column(info, viewname)
def spm_delete_portlet(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') portal = portal_state.portal() manager = getUtility(IPortletManager, name=info['manager'], context=portal) listhashes = manager.listAllManagedPortlets del assignments[info['name']] listhashes.remove(portlethash) manager.listAllManagedPortlets = listhashes return self._render_column(info, viewname)
def spm_left_portlet(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') portal = portal_state.portal() info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() if info['category'] == 'context': context = portal.restrictedTraverse(info['key']) leftColumn = getUtility(IPortletManager, name=u'plone.leftcolumn', context=context) left = getMultiAdapter(( context, leftColumn, ), IPortletAssignmentMapping, context=context) left[info['name']] = assignments[info['name']] else: rightcolumn = getUtility(IPortletManager, name=u'plone.rightcolumn') leftcolumn = getUtility(IPortletManager, name=u'plone.leftcolumn') oldcategory = rightcolumn[info['category']] oldstorage = oldcategory[info['key']] portlet = oldstorage[info['name']] newcategory = leftcolumn[info['category']] newstorage = newcategory[info['key']] newstorage[info['name']] = portlet del assignments[info['name']] return self._render_both_column(info, viewname)
def spm_stop_portlet(self, name): hereurl = self.request.get('here_url', '') assignments = aq_inner(self.context) portlet = ISolgemaPortletAssignment(assignments[name]) IPortletPermissionChecker(assignments)() if len(getattr(portlet, 'stopUrls', [])) > 0: urls = portlet.stopUrls li = [] added = False for url in urls: if hereurl in url and not added: li.append(hereurl) added = True else: li.append(url) if not added: li.append(hereurl) portlet.stopUrls = li else: portlet.stopUrls = [hereurl] if not self.request.get('ajax'): self.request.response.redirect(self._nextUrl()) return 'OK'
def spm_move_portlet_down(self, name): assignments = aq_inner(self.context) IPortletPermissionChecker(assignments)() managerid = assignments.id.split('++')[-1] parent = aq_parent(aq_inner(self.context)) key = '/'.join(parent.getPhysicalPath()) portlethash = hashPortletInfo( dict( manager=managerid, category=CONTEXT_CATEGORY, key=key, name=name, )) portal_state = getMultiAdapter((self.context, self.context.REQUEST), name=u'plone_portal_state') portal = portal_state.portal() manager = getUtility(IPortletManager, name=managerid, context=portal) listhashes = manager.listAllManagedPortlets retriever = getMultiAdapter((self.context, manager), ISolgemaPortletManagerRetriever) managedPortletsHashes = [ a['hash'] for a in retriever.getManagedPortlets() ] if portlethash in listhashes: hashAfter = managedPortletsHashes[ managedPortletsHashes.index(portlethash) + 1] listhashes.remove(portlethash) listhashes.insert(listhashes.index(hashAfter) + 1, portlethash) manager.listAllManagedPortlets = listhashes else: manager.listAllManagedPortlets = listhashes.append(portlethash) self.request.response.redirect(self._nextUrl()) return 'OK'
def __call__(self): IPortletPermissionChecker(aq_parent(aq_inner(self.context)))() return super(EditForm, self).__call__()
def __call__(self): self.request.set('disable_border', 1) self.request.set('disable_plone.leftcolumn', 1) self.request.set('disable_plone.rightcolumn', 1) IPortletPermissionChecker(aq_parent(aq_inner(self.context)))() return super(AddForm, self).__call__()