Beispiel #1
0
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 = []
Beispiel #2
0
    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)
Beispiel #3
0
    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 ''
Beispiel #5
0
    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)
Beispiel #6
0
    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 ''
Beispiel #7
0
    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 ''
Beispiel #9
0
    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
Beispiel #10
0
    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()
Beispiel #12
0
 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"
Beispiel #15
0
    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()
Beispiel #16
0
    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")
Beispiel #17
0
    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)
Beispiel #18
0
    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)
Beispiel #19
0
    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)
Beispiel #20
0
 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'
Beispiel #21
0
    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__()
Beispiel #23
0
 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__()