Esempio n. 1
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)
    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)
        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 self.weighted_message('Weighting saved')
    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 ''
Esempio n. 4
0
    def spm_left_portlet(self, portlethash, viewname):
        portal_state = getMultiAdapter((self.context, self.context.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)
Esempio n. 5
0
    def refreshPortlet(self, portlethash, **kw):
        # put parameters on the request, by saving the original context
        self.request.form, orig_form = kw, self.request.form

        # Prepare the portlet and render the data
        info = unhashPortletInfo(portlethash)
        manager = getUtility(IPortletManager, info['manager'])

        assignment = assignment_from_key(context = self.context,
                                         manager_name = info['manager'],
                                         category = info['category'],
                                         key = info['key'],
                                         name = info['name'])
        renderer = getMultiAdapter(
                (self.context, self.request, self.view, manager, assignment.data),
                IPortletRenderer
            )
        renderer = renderer.__of__(self.context)

        renderer.update()
        if IDeferredPortletRenderer.providedBy(renderer):
            # if this is a deferred load, prepare now the data
            renderer.deferred_update()
        result = renderer.render()

        # Revert the original request
        self.request.form = orig_form

        # Command the replacement
        wrapper_id = 'portletwrapper-%s' % portlethash
        ksscore = self.getCommandSet('core')
        ksscore.replaceInnerHTML(ksscore.getHtmlIdSelector(wrapper_id), result)
Esempio n. 6
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)
Esempio n. 7
0
 def spm_move_portlet_delta(self):
     portlethash = self.request.get('portlethash')
     portlethash = self.request.get('viewname')
     portlethash = self.request.get('delta')
     portal_state = getMultiAdapter((self.context, self.request),
                                    name=u'plone_portal_state')
     portal = portal_state.portal()
     info = unhashPortletInfo(portlethash)
     manager = getUtility(IPortletManager,
                          name=info['manager'],
                          context=portal)
     listhashes = manager.listAllManagedPortlets
     retriever = getMultiAdapter((self.context, manager),
                                 ISolgemaPortletManagerRetriever)
     managedPortletsHashes = [
         a['hash'] for a in retriever.getManagedPortlets()
     ]
     if portlethash in listhashes:
         hashBefore = managedPortletsHashes[
             managedPortletsHashes.index(portlethash) + delta]
         listhashes.remove(portlethash)
         listhashes.insert(listhashes.index(hashBefore), portlethash)
         manager.listAllManagedPortlets = listhashes
     else:
         manager.listAllManagedPortlets = listhashes.insert(
             delta, portlethash)
     self._render_column(info, viewname)
     return 'done'
Esempio n. 8
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)
    def __call__(self):
        """Return the rendered contents of the portlet specified."""
        # portletHash is built into plone.portlets.utils.hashPortletInfo
        # like this:
        # concat_txt = '%(manager)s\n%(category)s\n%(key)s\n%(name)s' % info

        portlethash = self.data.get('portlet_hash')

        # Prepare the portlet and render the data
        info = unhashPortletInfo(portlethash)
        manager = getUtility(IPortletManager, info['manager'])

        assignment = assignment_from_key(context=self.context,
                                         manager_name=info['manager'],
                                         category=info['category'],
                                         key=info['key'],
                                         name=info['name'])
        renderer = getMultiAdapter(
            (self.context, self.request, self, manager, assignment.data),
            IPortletRenderer)
        renderer = renderer.__of__(self.context)

        # This is required by some portlets and not set by
        # the 'portlet-renderer' helper view:
        renderer.__portlet_metadata__ = info

        renderer.update()
        if IDeferredPortletRenderer.providedBy(renderer):
            # if this is a deferred load, prepare now the data
            renderer.deferred_update()

        return u"<html><body>%s</body></html>" % renderer.render()
Esempio n. 10
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)
Esempio n. 11
0
    def delete_portlet(self, portlethash, viewname):
        info = unhashPortletInfo(portlethash)
        assignments = assignment_mapping_from_key(self.context,
                        info['manager'], info['category'], info['key'])

        IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))()

        del assignments[info['name']]
        return self._render_column(info, viewname)
 def __call__(self, *args, **kwargs):
     hash = self.request.get('hash')
     index = int(self.request.get('index'))
     # get postit portlet
     portlet_info = unhashPortletInfo(hash)
     column, portlet = get_column_and_portlet(self.context, portlet_info)
     # remove note
     notes = portlet.notes[:]
     notes = notes[0:index] + notes[index + 1:]
     portlet.notes = notes[:]
Esempio n. 13
0
    def _get_portlet(self):
        portlet_hash = self.request.get('hash')

        info = unhashPortletInfo(portlet_hash)

        return assignment_from_key(
            context=self.context,
            manager_name=info['manager'],
            category=info['category'],
            key=info['key'],
            name=info['name'])
Esempio n. 14
0
    def _get_portlet(self):
        portlet_hash = self.request.get('hash')

        info = unhashPortletInfo(portlet_hash)

        return assignment_from_key(
            context=self.context,
            manager_name=info['manager'],
            category=info['category'],
            key=info['key'],
            name=info['name'])
Esempio n. 15
0
    def toggle_visibility(self, portlethash, viewname):
        info = unhashPortletInfo(portlethash)
        assignments = assignment_mapping_from_key(self.context,
                        info['manager'], info['category'], info['key'])

        IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))()

        assignment = assignments[info['name']]
        settings = IPortletAssignmentSettings(assignment)
        visible = settings.get('visible', True)
        settings['visible'] = not visible
        return self._render_column(info, viewname)
Esempio n. 16
0
    def _get_portlet(self):
        portlet_hash = self.request.get("hash")

        info = unhashPortletInfo(portlet_hash)

        return assignment_from_key(
            context=self.context,
            manager_name=info["manager"],
            category=info["category"],
            key=info["key"],
            name=info["name"],
        )
    def __call__(self, *args, **kwargs):
        _hash = self.request.get('hash')
        portlet_info = unhashPortletInfo(_hash)
        column = self.get_column_and_portlet(portlet_info)[0]

        userid = portlet_info['key']
        mtool = getToolByName(self.context, 'portal_membership')
        member = mtool.getAuthenticatedMember()
        if userid != member.getId():
            raise Unauthorized

        if portlet_info['name'] in column.keys():
            del column[portlet_info['name']]
        return ''
Esempio n. 18
0
 def spm_delete_portlet(self, portlethash, 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.context.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 __call__(self, *args, **kwargs):
        _hash = self.request.get('hash')
        folded = self.request.get('folded')
        portlet_info = unhashPortletInfo(_hash)
        column, portlet = self.get_column_and_portlet(portlet_info)

        userid = portlet_info['key']
        mtool = getToolByName(self.context, 'portal_membership')
        member = mtool.getAuthenticatedMember()
        if userid != member.getId():
            raise Unauthorized

        if portlet_info['name'] in column.keys():
            setattr(portlet, "isFolded", bool(int(folded)))
        return ''
Esempio n. 20
0
    def move_portlet_down(self, portlethash, viewname):
        info = unhashPortletInfo(portlethash)
        assignments = assignment_mapping_from_key(self.context,
                        info['manager'], info['category'], info['key'])

        IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))()

        keys = list(assignments.keys())
        name = info['name']
        idx = keys.index(name)
        del keys[idx]
        keys.insert(idx+1, name)
        assignments.updateOrder(keys)

        return self._render_column(info, viewname)
Esempio n. 21
0
 def spm_allow_portlet(self, portlethash, viewname, 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 getPortletRenderer(self):
     portlethash = self.request.get('portlethash', '')
     info = unhashPortletInfo(portlethash) 
     manager = getUtility(IPortletManager, info['manager'])
     
     assignment = assignment_from_key(context = self.context, 
                                      manager_name = info['manager'], 
                                      category = info['category'],
                                      key = info['key'],
                                      name = info['name'])
     renderer = getMultiAdapter(
             (self.context, self.request, self, manager, assignment.data),
             IPortletRenderer
         )
     return renderer.__of__(self.context)
    def __call__(self):
        portlet_hash = self.request['portlet_hash']
        info = unhashPortletInfo(portlet_hash)
        url = '{}/++contextportlets++plone.app.standardtiles.portletManager/{}/edit'.format(self.context.absolute_url(), info['name'])

        if not self.tileId:
            generator = getUtility(IUUIDGenerator)
            tileId = generator()
        else:
            tileId = self.tileId

        typeName = 'plone.app.standardtiles.portlet'
        tile_url = '{}/@@{}/{}?portlet_hash={}'.format(self.context.absolute_url(), typeName, tileId, portlet_hash)

        self.request.form['referer'] = tile_url
        self.request.response.redirect('{}?referer={}'.format(url, urllib.quote(tile_url)))
    def __call__(self, *args, **kwargs):
        value = str(self.request.get('note'))
        hash_ = self.request.get('hash')
        # get postit portlet
        portlet_info = unhashPortletInfo(hash_)
        userid = portlet_info['key']
        mtool = getToolByName(self.context, 'portal_membership')
        member = mtool.getAuthenticatedMember()
        if userid != member.getId():
            raise Unauthorized

        column, portlet = get_column_and_portlet(self.context, portlet_info)
        # store data
        notes = portlet.notes[:]
        notes.append(value)
        portlet.notes = notes[:]
Esempio n. 25
0
 def _data(self, portlethash):
     """Returns zimbra mail related settings based on portlet assignment
     object and currently logged in user.
     """
     context = aq_inner(self.context)
     info = unhashPortletInfo(portlethash)
     assignment = assignment_mapping_from_key(context, info['manager'],
         info['category'], info['key'])[info['name']]
     renderer = Renderer(context, self.request, self, None, assignment)
     username, password = renderer.getAuthCredentials()
     return {
         'url': assignment.url,
         'folder_id': assignment.folder_id,
         'emails_limit': assignment.count,
         'username': username,
         'password': password
     }
Esempio n. 26
0
 def spm_move_portlet_delta(self, portlethash, viewname, delta):
     portal_state = getMultiAdapter((self.context, self.context.REQUEST), name=u'plone_portal_state')
     portal = portal_state.portal()
     info = unhashPortletInfo(portlethash)
     manager = getUtility(IPortletManager, name=info['manager'], context=portal)
     listhashes = manager.listAllManagedPortlets
     retriever = getMultiAdapter((self.context, manager), ISolgemaPortletManagerRetriever)
     managedPortletsHashes = [a['hash'] for a in retriever.getManagedPortlets()]
     if portlethash in listhashes:
         hashBefore = managedPortletsHashes[managedPortletsHashes.index(portlethash)+delta]
         listhashes.remove(portlethash)
         listhashes.insert(listhashes.index(hashBefore), portlethash)
         manager.listAllManagedPortlets = listhashes
     else:
         manager.listAllManagedPortlets = listhashes.insert(delta,portlethash)
     self._render_column(info, viewname)
     return 'done'
Esempio n. 27
0
 def _render_column(self, info=None, viewname=None, portlethash=None):
     if portlethash:
         info = unhashPortletInfo(portlethash)
     ksscore = self.getCommandSet('core')
     selector = ksscore.getCssSelector('div#portletmanager-' + info['manager'].replace('.', '-'))
     context = aq_inner(self.context)
     request = aq_inner(self.request)
     view = getMultiAdapter((context, request), name=viewname)
     manager = getUtility(IPortletManager, name=info['manager'])
     
     request['key'] = info['key']
     
     request['viewname'] = viewname
     renderer = getMultiAdapter((context, request, view, manager,), IPortletManagerRenderer)
     renderer.update()
     ksscore.replaceInnerHTML(selector, renderer.__of__(context).render())
     return self.render()
Esempio n. 28
0
    def __call__(self):
        portlet_hash = self.request['portlet_hash']
        info = unhashPortletInfo(portlet_hash)
        url = ('{0}/++contextportlets++plone.app.standardtiles.portletManager/'
               '{1}/edit'.format(self.context.absolute_url(), info['name']))
        if not self.tileId:
            generator = getUtility(IUUIDGenerator)
            tileId = generator()
        else:
            tileId = self.tileId

        typeName = 'plone.app.standardtiles.portlet'
        tile_url = '{0}/@@{1}/{2}?portlet_hash={3}'.format(
            self.context.absolute_url(), typeName, tileId, portlet_hash)
        self.request.form['referer'] = tile_url
        self.request.response.redirect('{0}?referer={0}'.format(
            url, urllib.parse.quote(tile_url)))
    def __call__(self):

        _hash = self.request.get("hash")
        portlet_info = unhashPortletInfo(_hash)
        manager_name = portlet_info['manager']
        userid = portlet_info['key']
        name = portlet_info['name']
        referer = self.request.environ['HTTP_REFERER']

        baseUrl = '%s/++dashboard++%s+%s' % (
            self.context.portal_url(),
            manager_name, userid)

        url = '%s/%s/edit?referer=%s' % (baseUrl, name, referer)

        print(url)

        return self.request.RESPONSE.redirect(url)
    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"
Esempio n. 31
0
    def render_portlet(self, portlethash, **kw):
        # Prepare the portlet and render the data
        info = unhashPortletInfo(portlethash)
        manager = getUtility(IPortletManager, info["manager"])

        assignment = assignment_from_key(
            context=self.context,
            manager_name=info["manager"],
            category=info["category"],
            key=info["key"],
            name=info["name"],
        )
        renderer = getMultiAdapter((self.context, self.request, self, manager, assignment.data), IPortletRenderer)
        renderer = renderer.__of__(self.context)

        renderer.update()
        if IDeferredPortletRenderer.providedBy(renderer):
            # if this is a deferred load, prepare now the data
            renderer.deferred_update()
        return renderer.render()
Esempio n. 32
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)
Esempio n. 33
0
    def render_portlet(self, portlethash, **kw):
        # Prepare the portlet and render the data
        info = unhashPortletInfo(portlethash)
        manager = getUtility(IPortletManager, info['manager'])

        assignment = assignment_from_key(context=self.context,
                                         manager_name=info['manager'],
                                         category=info['category'],
                                         key=info['key'],
                                         name=info['name'])
        renderer = getMultiAdapter(
            (self.context, self.request, self, manager, assignment.data),
            IPortletRenderer)
        renderer = renderer.__of__(self.context)

        renderer.update()
        if IDeferredPortletRenderer.providedBy(renderer):
            # if this is a deferred load, prepare now the data
            renderer.deferred_update()
        return renderer.render()
    def delete_portlet(self, portlethash, viewname):
        info = unhashPortletInfo(portlethash)
        assignments = assignment_mapping_from_key(self.context,
                        info['manager'], info['category'], info['key'])

        IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))()


        # set fixing_up to True to let zope.container.contained
        # know that our object doesn't have __name__ and __parent__
        from zope.container  import contained
        fixing_up = contained.fixing_up
        contained.fixing_up = True

        del assignments[info['name']]

        # revert our fixing_up customization
        contained.fixing_up = fixing_up

        return self._render_column(info, viewname)
Esempio n. 35
0
    def change_portlet_weight(self, portlethash, viewname, weight):
        try:
            weight = int(weight)
        except ValueError:
            kss_plone = self.getCommandSet('plone')
            msg = 'You must enter an integer for the portlet weight.'
            kss_plone.issuePortalMessage(msg, msgtype='error')
            return self.render()

        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 self._render_column(info, viewname)
Esempio n. 36
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)
Esempio n. 37
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)
    def reorder_portlet(self, new_column_name, new_index, _hash):
        portlet_info = unhashPortletInfo(_hash)
        name = portlet_info['name']
        column = self.get_column_and_portlet(portlet_info)[0]

        userid = portlet_info['key']
        mtool = getToolByName(self.context, 'portal_membership')
        member = mtool.getAuthenticatedMember()
        if userid != member.getId():
            raise Unauthorized

        keys = list(column.keys())
        if name in keys:
            keys.remove(name)
            keys.insert(new_index, name)
            column.updateOrder(keys)

        if column.__manager__ != new_column_name:
            new_column = self.get_column_by_name(new_column_name)
            newhash = self.move_portlet_to_column(portlet_info, new_column)
            return [(_hash, newhash)]
        else:
            return []
Esempio n. 39
0
    def _render_column(self, info=None, viewname=None, portlethash=None):
        if portlethash:
            info = unhashPortletInfo(portlethash)
        ksscore = self.getCommandSet('core')
        selector = ksscore.getCssSelector('div#portletmanager-' +
                                          info['manager'].replace('.', '-'))
        context = aq_inner(self.context)
        request = aq_inner(self.request)
        view = getMultiAdapter((context, request), name=viewname)
        manager = getUtility(IPortletManager, name=info['manager'])

        request['key'] = info['key']

        request['viewname'] = viewname
        renderer = getMultiAdapter((
            context,
            request,
            view,
            manager,
        ), IPortletManagerRenderer)
        renderer.update()
        ksscore.replaceInnerHTML(selector, renderer.__of__(context).render())
        return self.render()
    def __call__(self, portlethash, uid):
        """Expand the navtree at a given UID for a given portlet.
        """

        rt=getToolByName(self.context, "reference_catalog")
        root=rt.lookupObject(uid)

        info=unhashPortletInfo(portlethash)
        assignment=assignment_from_key(self.context,
                info["manager"], info["category"], info["key"], info["name"])

        queryBuilder = getMultiAdapter((root, assignment),
                                       INavigationQueryBuilder)
        strategy = getMultiAdapter((aq_inner(self.context), assignment),
                                   INavtreeStrategy)
        strategy = DecorateStrategy(root, strategy)

        query=queryBuilder()

        data=buildFolderTree(root, query=query, strategy=strategy)
        html=self.recurse(children=data.get('children', []),
                level=1, bottomLevel=assignment.bottomLevel)

        return html.encode('utf8')
Esempio n. 41
0
 def inspectElement(self,
                   insideInspectableArea=False,
                   talcontent=None,
                   talattributes=None,
                   talcondition=None,
                   metaldefmacro=None,
                   metalusemacro=None,
                   fieldname=None,
                   portlethash=None,
                   viewlethash=None,
                   sourceAnnotation=None):
     """ Get details about a particular html element. """
     # Make sure we're not clicking inside the inspector div since KSS doesn't seem to provide a
     # way to block processing of other rules.
     if insideInspectableArea:
         logger.debug("in inspectElement")
         
         parsedTalAttributes = []
         if talattributes:
             # logger.debug("talattributes: %s" % talattributes)
             # If there's only one item in the list being returned by the KSS method,
             # it's passing it as a string instead of a list/array. Not sure why.
             # Sniff the type and make it a list if needed.
             if isinstance(talattributes, basestring):
                 talattributes = (talattributes,)
             for attr in talattributes:
                 # logger.debug("attr: %s" % attr)
                 attribute = {}
                 attribute['name'], attribute['expression'], attribute['result'] = attr.split(',')
                 parsedTalAttributes.append(attribute)
         
         unhashedPortletInfo = {}
         if portlethash:
             unhashedPortletInfo = unhashPortletInfo(portlethash)
         
         unhashedViewletInfo = {}
         if viewlethash:
             unhashedViewletInfo = unhashViewletInfo(viewlethash)
         
         if sourceAnnotation:
             sourceAnnotation = sourceAnnotation.strip(' =\n')
         
         template = ViewPageTemplateFile('panel_inspect_element.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(metalUseMacro = metalusemacro,
                        metalDefMacro = metaldefmacro,
                        fieldName = fieldname,
                        talContent = talcontent,
                        talAttributes = parsedTalAttributes,
                        talCondition = talcondition,
                        portletInfo = unhashedPortletInfo,
                        viewletInfo = unhashedViewletInfo,
                        sourceAnnotation = sourceAnnotation
                        )
         
         # Dump the output to the inspector panel
         self.updatePanelBodyContent(out)
         
         # Highlight this element
         ksscore = self.getCommandSet('core')
         self.highlightElement(ksscore.getSameNodeSelector())
         
         # And in the nav tree (Should this be here or in the nav tree viewlet code?)
         if viewlethash:
             self.highlightInNavTree(ksscore.getCssSelector('#glowormPanelNavTree .kssattr-forviewlet-%s' % viewlethash))
     
     return self.render()