コード例 #1
0
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)
        try:
            name, item_url = get_view_url(context)
        except AttributeError:
            print context
            raise

        if container is None:
            return ({'absolute_url': item_url,
                     'Title': utils.pretty_title_or_id(context, context),
                    },)

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation root
        if not utils.isDefaultPage(context, request) and not rootPath.startswith(itemPath):
            base += ({'absolute_url': _checkPermission('View', context) and item_url or None,
                      'Title': utils.pretty_title_or_id(context, context),
                     },)

        return base
コード例 #2
0
    def breadcrumbs(self):
        context = self.context
        request = self.request
        parent = aq_parent(context)

        name, item_url = get_view_url(context)

        if parent is None:
            return ({'absolute_url': item_url,
                     'Title': utils.pretty_title_or_id(context, context), },)

        view = getMultiAdapter((parent, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)
        else:
            item_url = '%s/%s' % (parent.absolute_url(), name)

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # Don't show default pages in breadcrumbs or pages above the navigation root
        if not utils.isDefaultPage(context, request) and not rootPath.startswith(itemPath):
            base += ({'absolute_url': item_url,
                      'Title': utils.pretty_title_or_id(context, context), },)

        return base
コード例 #3
0
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)

        name, item_url = get_view_url(context)

        if container is None:
            return ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            },)

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation
        # root
        if not utils.isDefaultPage(context, request) \
           and not rootPath.startswith(itemPath):
            base += ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            },)
        return base
コード例 #4
0
ファイル: navigation.py プロジェクト: UPCnet/vilaix.theme
    def breadcrumbs(self):
        real_context = aq_inner(self.context)
        request_path = self.request.get('PATH_INFO', '')

        if 'VirtualHostBase' in request_path:
            path = ('',) + re.search(r'VirtualHostBase/\w+/.*?/(.*?)/VirtualHostRoot/(.*)', request_path).groups()

            request_path = '/'.join(path)
        context_path = '/'.join(real_context.getPhysicalPath())

        if request_path == context_path:
            context = real_context
        else:
            self.context.plone_log(request_path)
            parent_path = request_path[:request_path.rfind('/')]
            self.context.plone_log(parent_path)
            context = self.context.restrictedTraverse(parent_path)
        request = self.request
        container = utils.parent(context)

        name, item_url = get_view_url(context)

        if container is None:
            return (
                {'absolute_url': item_url,
                 'Title': utils.pretty_title_or_id(context, context), },
            )

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation
        # root
        if not utils.isDefaultPage(context, request) \
                and not rootPath.startswith(itemPath):
            base += ({'absolute_url': item_url,
                      'Title': utils.pretty_title_or_id(context, context), },
                     )

        if request_path != context_path:
            name, item_url = get_view_url(real_context)
            base += ({'absolute_url': item_url,
                      'Title': utils.pretty_title_or_id(real_context, real_context), },
                     )

        return base
        return True
コード例 #5
0
    def handle_send(self, action):
        data, errors = self.extractData()
        if errors:
            IStatusMessage(self.request).addStatusMessage(
                self.formErrorsMessage, type='error')
            return

        send_from_address = data.get('send_from_address')
        send_to_address = data.get('send_to_address')
        subject = pretty_title_or_id(self, self.context)
        title = pretty_title_or_id(self, self.context)
        description = self.context.Description()
        comment = data.get('comment', None)
        registry = getUtility(IRegistry)
        mail_settings = registry.forInterface(IMailSchema, prefix='plone')
        envelope_from = mail_settings.email_from_address
        email_from_name = mail_settings.email_from_name

        try:
            # Sends a link of a page to someone.
            host = getUtility(IMailHost)
            registry = getUtility(IRegistry)
            encoding = registry.get('plone.email_charset', 'utf-8')

            if not envelope_from:
                envelope_from = send_from_address

            # Cook from template
            message = self.mail_template(self,
                                         send_to_address=send_to_address,
                                         send_from_address=send_from_address,
                                         comment=comment,
                                         subject=subject,
                                         title=title,
                                         description=description,
                                         email_from_name=email_from_name)

            message = message.encode(encoding)

            host.send(message,
                      mto=send_to_address,
                      mfrom=envelope_from,
                      subject=subject,
                      charset='utf-8')

        except ConflictError:
            raise
        except Exception as e:
            # TODO To many things could possibly go wrong. So we catch all.
            logger.info("Unable to send mail: " + str(e))
            IStatusMessage(self.request).addStatusMessage(
                _('Unable to send mail.'), type='error')
            return

        IStatusMessage(self.request).addStatusMessage(_('Mail sent.'),
                                                      type='info')
コード例 #6
0
ファイル: menu.py プロジェクト: edition1/edition1.menu
    def get_menu_items(self, actions=None, category='portal_tabs'):
        context = aq_inner(self.context)

        mtool = getToolByName(context, 'portal_membership')
        member = mtool.getAuthenticatedMember().id

        portal_properties = getToolByName(context, 'portal_properties')
        self.navtree_properties = getattr(portal_properties,
                                          'navtree_properties')
        self.site_properties = getattr(portal_properties,
                                       'site_properties')
        self.portal_catalog = getToolByName(context, 'portal_catalog')

        if actions is None:
            context_state = getMultiAdapter((context, self.request),
                                            name=u'plone_context_state')
            actions = context_state.actions(category)

        # Build result dict
        result = []
        # first the actions
        if actions is not None:
            for actionInfo in actions:
                data = actionInfo.copy()
                data['children'] = []
                result.append(data)

        # check whether we only want actions
        if self.site_properties.getProperty('disable_folder_sections', False):
            return result

        query = self._getNavQuery()

        rawresult = self.portal_catalog.searchResults(query)

        # now add the content to results
        idsNotToList = self.navtree_properties.getProperty('idsNotToList', ())
        current_path = '/'.join(self.context.getPhysicalPath())
        for item in rawresult:
            if not (item.getId in idsNotToList or item.exclude_from_nav):
                obj = item.getObject()
                children = self.get_children(obj, member, 2)
                id, item_url = (self._get_link_url(item, member) or
                                get_view_url(item))
                obj_path = '/'.join(obj.getPhysicalPath())
                is_current = is_parent = False
                if obj_path == current_path:
                    is_current = True
                elif (current_path.startswith(obj_path + '/') and
                      len(current_path) > len(obj_path)):
                    is_parent = True
                data = {'title': utils.pretty_title_or_id(context, item),
                        'id': item.getId,
                        'url': item_url,
                        'description': item.Description,
                        'children': children,
                        'is_current': is_current,
                        'is_parent': is_parent}
                result.append(data)
        return result
コード例 #7
0
ファイル: views.py プロジェクト: UPCnet/genweb.theme
    def topLevelTabs(self, actions=None, category='portal_tabs'):
        context = aq_inner(self.context)

        mtool = getToolByName(context, 'portal_membership')
        member = mtool.getAuthenticatedMember().id

        portal_properties = getToolByName(context, 'portal_properties')
        self.navtree_properties = getattr(portal_properties,
                                          'navtree_properties')
        self.site_properties = getattr(portal_properties,
                                       'site_properties')
        self.portal_catalog = getToolByName(context, 'portal_catalog')

        if actions is None:
            context_state = getMultiAdapter((context, self.request),
                                            name=u'plone_context_state')
            actions = context_state.actions(category)

        # Build result dict
        result = []
        # first the actions
        if actions is not None:
            for actionInfo in actions:
                data = actionInfo.copy()
                data['name'] = data['title']
                result.append(data)

        # check whether we only want actions
        if self.site_properties.getProperty('disable_folder_sections', False):
            return result

        query = self._getNavQuery()

        rawresult = self.portal_catalog.searchResults(query)

        def get_link_url(item):
            linkremote = item.getRemoteUrl and not member == item.Creator
            if linkremote:
                return (get_id(item), item.getRemoteUrl)
            else:
                return False

        # now add the content to results
        idsNotToList = self.navtree_properties.getProperty('idsNotToList', ())
        for item in rawresult:
            if not (item.getId in idsNotToList or item.exclude_from_nav):
                id, item_url = get_link_url(item) or get_view_url(item)
                if item.Type == 'Link':
                    item_oinw = item.open_link_in_new_window
                else:
                    item_oinw = False
                data = {'name': utils.pretty_title_or_id(context, item),
                        'id': item.getId,
                        'url': item_url,
                        'description': item.Description,
                        'review_state': item.review_state,
                        'oinw': item_oinw}
                result.append(data)

        return result
コード例 #8
0
    def breadcrumbs(self):
        """Shows publications and their volumes and issues as plain text
        (without a link) if the user has no permission to view them."""
        context = aq_inner(self.context)
        pm = getToolByName(self.context, 'portal_membership')
        user = pm.getAuthenticatedMember()

        if IVolume.providedBy(context) or IIssue.providedBy(context):
            pub = IParentGetter(context).get_parent_object_of_type(
                "Publication")
            if user.has_permission('View', pub):
                return super(RecensioNavigationBreadcrumbs, self).breadcrumbs()
        elif user.has_permission('View', context):
            return super(RecensioNavigationBreadcrumbs, self).breadcrumbs()

        request = self.request
        container = utils.parent(context)
        view = getMultiAdapter(
            (container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())
        base += ({'absolute_url': '',
                  'Title': utils.pretty_title_or_id(context, context),
                  },
                 )
        return base
コード例 #9
0
ファイル: author.py プロジェクト: zopyx/Products.CMFPlone
    def author_content(self):
        results = []

        plone_view = self.context.restrictedTraverse(
            '@@plone'
        )

        brains = self.portal_catalog.searchResults(
            Creator=self.username,
            sort_on='created',
            sort_order='reverse'
        )

        for brain in brains[:10]:
            results.append({
                'title': pretty_title_or_id(
                    self, brain
                ),
                'date': plone_view.toLocalizedTime(
                    brain.Date
                ),
                'url': brain.getURL()
            })

        return results
コード例 #10
0
 def error(self, obj, error):
     request = getattr(self.context, 'REQUEST', None)
     if request is not None:
         title = utils.pretty_title_or_id(obj, obj)
         message = _(u"Unable to remove ${name} as part of content rule 'delete' action: ${error}",  # noqa
                       mapping={'name': title, 'error': error})
         IStatusMessage(request).addStatusMessage(message, type="error")
コード例 #11
0
    def author_content(self):
        results = []

        plone_view = self.context.restrictedTraverse(
            '@@plone'
        )

        brains = self.portal_catalog.searchResults(
            Creator=self.username,
            sort_on='created',
            sort_order='reverse'
        )

        for brain in brains[:10]:
            results.append({
                'title': pretty_title_or_id(
                    self, brain
                ),
                'date': plone_view.toLocalizedTime(
                    brain.Date
                ),
                'url': brain.getURL()
            })

        return results
コード例 #12
0
ファイル: views.py プロジェクト: collective/collective.routes
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request

        if hasattr(context, 'route') and context.route.breadcrumbFactory:
            return context.route.breadcrumbFactory(context, request)

        # XXX this is the main part here:
        # to up 2 parents since the current context
        # is wrapped
        if IWrappedContext.providedBy(context):
            container = utils.parent(utils.parent(context))
        elif IFragmentContext.providedBy(context):
            container = getSite()
        name, item_url = get_view_url(context)

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        base += ({'absolute_url': item_url,
                  'Title': utils.pretty_title_or_id(context, context)},)
        return base
コード例 #13
0
ファイル: viewlets.py プロジェクト: cmrs/cmrs.theme
    def update(self):
        context = aq_inner(self.context)
        portal_tabs_view = getMultiAdapter((context, self.request),
                                           name='portal_tabs_view')
        portal_tabs = portal_tabs_view.topLevelTabs()
        self.portal_tabs = portal_tabs[:1]
        query = {}
        rootPath = getNavigationRoot(context)
        query['path'] = {'query' : rootPath, 'depth' : 1}
        query['portal_type'] = ['SectionFolder', 'AcademicFolder', 'TestimonialFolder']
        query['sort_on'] = 'getObjPositionInParent'
        query['review_state'] = 'published'
        portal_catalog = getToolByName(context, 'portal_catalog')
        results = portal_catalog.searchResults(query)
        for result in results:
            id, item_url = get_view_url(result)
            if id not in ['Members',]:
                data = {'name' : utils.pretty_title_or_id(context, result),
                        'id' : result.getId,
                        'url' : item_url,
                        'description': result.Description}
                self.portal_tabs.append(data)
        if len(portal_tabs) > 1:
            self.portal_tabs.append(portal_tabs[1])

        self.selected_tabs = self.selectedTabs(portal_tabs=self.portal_tabs)
        self.selected_portal_tab = self.selected_tabs['portal']
コード例 #14
0
    def topLevelTabs(self, actions=None, category='portal_tabs'):
        context = aq_inner(self.context)

        mtool = getToolByName(context, 'portal_membership')
        member = mtool.getAuthenticatedMember().id

        portal_properties = getToolByName(context, 'portal_properties')
        self.navtree_properties = getattr(portal_properties,
                                          'navtree_properties')
        self.site_properties = getattr(portal_properties,
                                       'site_properties')
        self.portal_catalog = getToolByName(context, 'portal_catalog')

        if actions is None:
            context_state = getMultiAdapter((context, self.request),
                                            name=u'plone_context_state')
            actions = context_state.actions(category)

        # Build result dict
        result = []
        # first the actions
        if actions is not None:
            for actionInfo in actions:
                data = actionInfo.copy()
                data['name'] = data['title']
                result.append(data)

        # check whether we only want actions
        registry = getUtility(IRegistry)
        navigation_settings = registry.forInterface(
            INavigationSchema,
            prefix="plone",
            check=False
        )
        if not navigation_settings.generate_tabs:
            return result

        query = self._getNavQuery()

        rawresult = self.portal_catalog.searchResults(query)

        def get_link_url(item):
            linkremote = item.getRemoteUrl and not member == item.Creator
            if linkremote:
                return (get_id(item), item.getRemoteUrl)
            else:
                return False

        # now add the content to results
        idsNotToList = self.navtree_properties.getProperty('idsNotToList', ())
        for item in rawresult:
            if not (item.getId in idsNotToList or item.exclude_from_nav):
                id, item_url = get_link_url(item) or get_view_url(item)
                data = {'name': utils.pretty_title_or_id(context, item),
                        'id': item.getId,
                        'url': item_url,
                        'description': item.Description}
                result.append(data)

        return result
コード例 #15
0
    def topLevelTabs(self, actions=None, category='portal_tabs'):
        context = aq_inner(self.context)
        registry = getUtility(IRegistry)
        navigation_settings = registry.forInterface(
            INavigationSchema,
            prefix="plone",
            check=False
        )
        mtool = getToolByName(context, 'portal_membership')
        member = mtool.getAuthenticatedMember().id
        catalog = getToolByName(context, 'portal_catalog')

        if actions is None:
            context_state = getMultiAdapter(
                (context, self.request),
                name=u'plone_context_state'
            )
            actions = context_state.actions(category)

        # Build result dict
        result = []
        # first the actions
        for actionInfo in actions:
            data = actionInfo.copy()
            data['name'] = data['title']
            self.customize_entry(data)
            result.append(data)

        # check whether we only want actions
        if not navigation_settings.generate_tabs:
            return result

        query = self._getNavQuery()

        rawresult = catalog.searchResults(query)

        def _get_url(item):
            if item.getRemoteUrl and not member == item.Creator:
                return (get_id(item), item.getRemoteUrl)
            return get_view_url(item)

        context_path = '/'.join(context.getPhysicalPath())

        # now add the content to results
        for item in rawresult:
            if item.exclude_from_nav and not context_path.startswith(item.getPath()):  # noqa: E501
                # skip excluded items if they're not in our context path
                continue
            cid, item_url = _get_url(item)
            data = {
                'name': utils.pretty_title_or_id(context, item),
                'id': item.getId,
                'url': item_url,
                'description': item.Description,
                'review_state': item.review_state
            }
            self.customize_entry(data, item)
            result.append(data)

        return result
コード例 #16
0
 def error(self, obj, error):
     request = getattr(self.context, 'REQUEST', None)
     if request is not None:
         title = utils.pretty_title_or_id(obj, obj)
         message = _(u"Unable to apply local roles on ${name}: ${error}",
                     mapping={'name': title, 'error': error})
         IStatusMessage(request).addStatusMessage(message, type="error")
コード例 #17
0
 def error(self, obj, error):
     request = getattr(self.context, 'REQUEST', None)
     if request is not None:
         title = utils.pretty_title_or_id(obj, obj)
         message = _(u"Unable to move ${name} as part of content rule 'move' action: ${error}",
                       mapping={'name': title, 'error': error})
         IStatusMessage(request).addStatusMessage(message, type="error")
コード例 #18
0
    def topLevelTabs(self, actions=None, category='portal_tabs'):
        context = aq_inner(self.context)

        mtool = getToolByName(context, 'portal_membership')
        member = mtool.getAuthenticatedMember().id

        portal_properties = getToolByName(context, 'portal_properties')
        self.navtree_properties = getattr(portal_properties,
                                          'navtree_properties')
        self.site_properties = getattr(portal_properties, 'site_properties')
        self.portal_catalog = getToolByName(context, 'portal_catalog')

        if actions is None:
            context_state = getMultiAdapter((context, self.request),
                                            name=u'plone_context_state')
            actions = context_state.actions(category)

        # Build result dict
        result = []
        # first the actions
        if actions is not None:
            for actionInfo in actions:
                data = actionInfo.copy()
                data['name'] = data['title']
                result.append(data)

        # check whether we only want actions
        registry = getUtility(IRegistry)
        navigation_settings = registry.forInterface(INavigationSchema,
                                                    prefix="plone",
                                                    check=False)
        if not navigation_settings.generate_tabs:
            return result

        query = self._getNavQuery()

        rawresult = self.portal_catalog.searchResults(query)

        def get_link_url(item):
            linkremote = item.getRemoteUrl and not member == item.Creator
            if linkremote:
                return (get_id(item), item.getRemoteUrl)
            else:
                return False

        # now add the content to results
        idsNotToList = self.navtree_properties.getProperty('idsNotToList', ())
        for item in rawresult:
            if not (item.getId in idsNotToList or item.exclude_from_nav):
                id, item_url = get_link_url(item) or get_view_url(item)
                data = {
                    'name': utils.pretty_title_or_id(context, item),
                    'id': item.getId,
                    'url': item_url,
                    'description': item.Description
                }
                result.append(data)

        return result
コード例 #19
0
ファイル: __init__.py プロジェクト: sauzher/plone.app.content
    def __call__(self):
        factories_menu = getUtility(IBrowserMenu,
                                    name='plone_contentmenu_factory',
                                    context=self.context).getMenuItems(
                                        self.context, self.request)
        factories = []
        for item in factories_menu:
            if item.get('title') == 'folder_add_settings':
                continue
            title = item.get('title', '')
            factories.append({
                'id':
                item.get('id'),
                'title':
                title and translate(title, context=self.request) or '',  # noqa
                'action':
                item.get('action')
            })

        context = aq_inner(self.context)
        crumbs = []
        top_site = get_top_site_from_url(self.context, self.request)
        while not context == top_site:
            crumbs.append({
                'id': context.getId(),
                'title': utils.pretty_title_or_id(context, context)
            })
            context = utils.parent(context)

        catalog = getToolByName(self.context, 'portal_catalog')
        try:
            brains = catalog(UID=IUUID(self.context))
        except TypeError:
            brains = []
        item = None
        if len(brains) > 0:
            obj = brains[0]
            # context here should be site root
            base_path = '/'.join(context.getPhysicalPath())
            item = {}
            for attr in self.attributes:
                key = attr
                if key == 'path':
                    attr = 'getPath'
                val = getattr(obj, attr, None)
                if callable(val):
                    val = val()
                if key == 'path':
                    val = val[len(base_path):]
                item[key] = val

        self.request.response.setHeader('Content-Type',
                                        'application/json; charset=utf-8')
        return json_dumps({
            'addButtons': factories,
            'defaultPage': self.context.getDefaultPage(),
            'breadcrumbs': [c for c in reversed(crumbs)],
            'object': item
        })
コード例 #20
0
ファイル: patches.py プロジェクト: UPCnet/genweb.organs
def breadcrumbs(self):
    context = aq_inner(self.context)
    request = self.request
    container = utils.parent(context)

    name, item_url = get_view_url(context)

    if container is None:
        return ({
            'absolute_url': item_url,
            'Title': utils.pretty_title_or_id(context, context),
        }, )

    view = getMultiAdapter((container, request), name='breadcrumbs_view')
    base = tuple(view.breadcrumbs())

    # Some things want to be hidden from the breadcrumbs
    if IHideFromBreadcrumbs.providedBy(context):
        return base

    if base:
        item_url = '%s/%s' % (base[-1]['absolute_url'], name)

    rootPath = getNavigationRoot(context)
    itemPath = '/'.join(context.getPhysicalPath())

    # don't show default pages in breadcrumbs or pages above the navigation
    # root

    installed = packages_installed()
    if 'genweb.organs' in installed:
        if (not utils.isDefaultPage(context, request) or context.portal_type == 'genweb.organs.organsfolder') \
                and not rootPath.startswith(itemPath):
            base += ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            }, )
    else:
        if not utils.isDefaultPage(
                context, request) and not rootPath.startswith(itemPath):
            base += ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            }, )

    return base
コード例 #21
0
    def topLevelTabs(self, actions=None, category='portal_tabs'):
        """This method is copy/paste from CatalogNavigationTabs,
        Only link_target is added on last lines
        """
        context = aq_inner(self.context)

        mtool = api.portal.get_tool('portal_membership')
        member = mtool.getAuthenticatedMember().id  # noqa

        portal_properties = api.portal.get_tool('portal_properties')
        self.navtree_properties = getattr(portal_properties,
                                          'navtree_properties')
        self.site_properties = getattr(portal_properties,
                                       'site_properties')
        self.portal_catalog = api.portal.get_tool('portal_catalog')

        if actions is None:
            context_state = api.content.get_view(
                'plone_context_state', context, self.request)
            actions = context_state.actions(category)

        # Build result dict
        result = []
        # first the actions
        if actions is not None:
            for actionInfo in actions:
                data = actionInfo.copy()
                data['name'] = data['title']
                result.append(data)

        # check whether we only want actions
        if self.site_properties.getProperty('disable_folder_sections', False):
            return result

        query = self._getNavQuery()

        rawresult = self.portal_catalog.searchResults(query)  # noqa

        def get_link_url(item):
            linkremote = item.getRemoteUrl and not member == item.Creator
            if linkremote:
                return (get_id(item), item.getRemoteUrl)
            else:
                return False

        # now add the content to results
        idsNotToList = self.navtree_properties.getProperty('idsNotToList', ())
        for item in rawresult:
            if not (item.getId in idsNotToList or item.exclude_from_nav):
                id, item_url = get_link_url(item) or get_view_url(item)
                data = {'name': utils.pretty_title_or_id(context, item),
                        'id': item.getId,
                        'url': item_url,
                        'description': item.Description,
                        'link_target': getattr(item, 'link_target', False)}
                result.append(data)

        return result
コード例 #22
0
    def getsublevel(self, context, *path):
        query = {}
        result = []
        raw_path = []

        portal_properties = getToolByName(context, 'portal_properties')
        portal_catalog = getToolByName(context, 'portal_catalog')
        navtree_properties = getattr(portal_properties, 'navtree_properties')
        site_properties = getattr(portal_properties, 'site_properties')

        rootPath = getNavigationRoot(context)
        raw_path.append(rootPath)
        for obj in path:
            raw_path.append(obj)

        dpath = '/'.join(raw_path)
        query['path'] = {'query': dpath, 'depth': 1}

        query['portal_type'] = ['RichDocument', 'Folder', 'GeoLocation']

        sortAttribute = navtree_properties.getProperty('sortAttribute', None)
        if sortAttribute is not None:
            query['sort_on'] = sortAttribute

        sortOrder = navtree_properties.getProperty('sortOrder', None)
        if sortOrder is not None:
            query['sort_order'] = sortOrder

        if navtree_properties.getProperty('enable_wf_state_filtering', False):
            query['review_state'] = navtree_properties.getProperty(
                'wf_states_to_show', [])

        query['is_default_page'] = False

        if site_properties.getProperty('disable_nonfolderish_sections',
                                       False) and len(path) == 1:
            query['is_folderish'] = False

        # Get ids not to list and make a dict to make the search fast
        idsNotToList = navtree_properties.getProperty('idsNotToList', ())
        excludedIds = {}
        for id in idsNotToList:
            excludedIds[id] = 1

        rawresult = portal_catalog.searchResults(**query)

        # now add the content to results
        for item in rawresult:
            if not (excludedIds.has_key(item.getId) or item.exclude_from_nav):
                id, item_url = get_view_url(item)
                data = {
                    'name': utils.pretty_title_or_id(context, item),
                    'id': item.getId,
                    'url': item_url,
                    'description': item.Description
                }
                result.append(data)
        return result
コード例 #23
0
ファイル: navigation.py プロジェクト: emcupdate/emc.policy
    def decoratorFactory(self,node):
        """Inject any additional keys in the node that are needed and return
        the new node.
        """
        context = aq_inner(self.context)
        request = context.REQUEST

        newNode = node.copy()
        item = node['item']

        portalType = getattr(item, 'portal_type', None)
        itemUrl = item.getURL()
        if portalType is not None and portalType in self.viewActionTypes:
            itemUrl += '/@@ajax_listings'

        useRemoteUrl = False
        getRemoteUrl = getattr(item, 'getRemoteUrl', None)
        isCreator = self.memberId == getattr(item, 'Creator', None)
        if getRemoteUrl and not isCreator:
            useRemoteUrl = True

        isFolderish = getattr(item, 'is_folderish', None)
        showChildren = False
        if isFolderish and \
                (portalType is None or portalType not in self.parentTypesNQ):
            showChildren = True

        layout_view = getMultiAdapter((context, request), name=u'plone_layout')

        newNode['Title'] = utils.pretty_title_or_id(context, item)
        newNode['id'] = item.getId
        newNode['UID'] = item.UID
        newNode['absolute_url'] = itemUrl
        newNode['getURL'] = itemUrl
        newNode['path'] = item.getPath()
        newNode['Creator'] = getattr(item, 'Creator', None)
        newNode['creation_date'] = getattr(item, 'CreationDate', None)
        newNode['portal_type'] = portalType
        newNode['review_state'] = getattr(item, 'review_state', None)
        newNode['Description'] = getattr(item, 'Description', None)
        newNode['show_children'] = showChildren
        newNode['no_display'] = False  # We sort this out with the nodeFilter
        # BBB getRemoteUrl and link_remote are deprecated, remove in Plone 4
        newNode['getRemoteUrl'] = getattr(item, 'getRemoteUrl', None)
        newNode['useRemoteUrl'] = useRemoteUrl
        newNode['link_remote'] = (
            newNode['getRemoteUrl'] and newNode['Creator'] != self.memberId
        )

        idnormalizer = queryUtility(IIDNormalizer)
        newNode['normalized_portal_type'] = idnormalizer.normalize(portalType)
        newNode['normalized_review_state'] = idnormalizer.normalize(
            newNode['review_state']
        )
        newNode['normalized_id'] = idnormalizer.normalize(newNode['id'])

        return newNode                    
コード例 #24
0
 def error(self, obj, error):
     request = getattr(self.context, 'REQUEST', None)
     if request is not None:
         title = utils.safe_unicode(utils.pretty_title_or_id(obj, obj))
         error = utils.safe_unicode(error)
         message = _(
             u"Unable to change state of ${name} as part of content rule 'workflow' action: ${error}",  # noqa
             mapping={'name': title, 'error': error})
         IStatusMessage(request).addStatusMessage(message, type='error')
コード例 #25
0
ファイル: plonetabs.py プロジェクト: kroman0/products
    def getRootTabs(self):
        """See interface"""
        context = aq_inner(self.context)

        portal_catalog = getToolByName(context, 'portal_catalog')
        portal_properties = getToolByName(context, 'portal_properties')
        navtree_properties = getattr(portal_properties, 'navtree_properties')

        # Build result dict
        result = []

        # check whether tabs autogeneration is turned on
        if not self.isGeneratedTabs():
            return result

        query = {}
        rootPath = getNavigationRoot(context)
        query['path'] = {'query' : rootPath, 'depth' : 1}
        query['portal_type'] = utils.typesToList(context)

        sortAttribute = navtree_properties.getProperty('sortAttribute', None)
        if sortAttribute is not None:
            query['sort_on'] = sortAttribute

            sortOrder = navtree_properties.getProperty('sortOrder', None)
            if sortOrder is not None:
                query['sort_order'] = sortOrder

        if navtree_properties.getProperty('enable_wf_state_filtering', False):
            query['review_state'] = navtree_properties.getProperty(
                'wf_states_to_show', [])

        query['is_default_page'] = False

        if not self.isNotFoldersGenerated():
            query['is_folderish'] = True

        # Get ids not to list and make a dict to make the search fast
        idsNotToList = navtree_properties.getProperty('idsNotToList', ())
        excludedIds = {}
        for id in idsNotToList:
            excludedIds[id]=1

        rawresult = portal_catalog.searchResults(**query)

        # now add the content to results
        for item in rawresult:
            if not excludedIds.has_key(item.getId):
                id, item_url = get_view_url(item)
                data = {'name'       : utils.pretty_title_or_id(context, item),
                        'id'         : id,
                        'url'        : item_url,
                        'description': item.Description,
                        'exclude_from_nav' : item.exclude_from_nav}
                result.append(data)

        return result
コード例 #26
0
    def __call__(self):
        factories_menu = getUtility(
            IBrowserMenu, name='plone_contentmenu_factory',
            context=self.context).getMenuItems(self.context, self.request)
        factories = []
        for item in factories_menu:
            if item.get('title') == 'folder_add_settings':
                continue
            title = item.get('title', '')
            factories.append({
                'id': item.get('id'),
                'title': title and translate(title, context=self.request) or '',  # noqa
                'action': item.get('action')
                })

        context = aq_inner(self.context)
        crumbs = []
        top_site = get_top_site_from_url(self.context, self.request)
        while not context == top_site:
            crumbs.append({
                'id': context.getId(),
                'title': utils.pretty_title_or_id(context, context)
            })
            context = utils.parent(context)

        catalog = getToolByName(self.context, 'portal_catalog')
        try:
            brains = catalog(UID=IUUID(self.context))
        except TypeError:
            brains = []
        item = None
        if len(brains) > 0:
            obj = brains[0]
            # context here should be site root
            base_path = '/'.join(context.getPhysicalPath())
            item = {}
            for attr in self.attributes:
                key = attr
                if key == 'path':
                    attr = 'getPath'
                val = getattr(obj, attr, None)
                if callable(val):
                    val = val()
                if key == 'path':
                    val = val[len(base_path):]
                item[key] = val

        self.request.response.setHeader(
            'Content-Type', 'application/json; charset=utf-8'
        )
        return json_dumps({
            'addButtons': factories,
            'defaultPage': self.context.getDefaultPage(),
            'breadcrumbs': [c for c in reversed(crumbs)],
            'object': item
        })
コード例 #27
0
    def getsublevel(self, context, *path):
        query = {}
        result = []
        raw_path = []

        portal_properties = getToolByName(context, "portal_properties")
        portal_catalog = getToolByName(context, "portal_catalog")
        navtree_properties = getattr(portal_properties, "navtree_properties")
        site_properties = getattr(portal_properties, "site_properties")

        rootPath = getNavigationRoot(context)
        raw_path.append(rootPath)
        for obj in path:
            raw_path.append(obj)

        dpath = "/".join(raw_path)
        query["path"] = {"query": dpath, "depth": 1}

        query["portal_type"] = ["RichDocument", "Folder", "GeoLocation"]

        sortAttribute = navtree_properties.getProperty("sortAttribute", None)
        if sortAttribute is not None:
            query["sort_on"] = sortAttribute

        sortOrder = navtree_properties.getProperty("sortOrder", None)
        if sortOrder is not None:
            query["sort_order"] = sortOrder

        if navtree_properties.getProperty("enable_wf_state_filtering", False):
            query["review_state"] = navtree_properties.getProperty("wf_states_to_show", [])

        query["is_default_page"] = False

        if site_properties.getProperty("disable_nonfolderish_sections", False) and len(path) == 1:
            query["is_folderish"] = False

        # Get ids not to list and make a dict to make the search fast
        idsNotToList = navtree_properties.getProperty("idsNotToList", ())
        excludedIds = {}
        for id in idsNotToList:
            excludedIds[id] = 1

        rawresult = portal_catalog.searchResults(**query)

        # now add the content to results
        for item in rawresult:
            if not (excludedIds.has_key(item.getId) or item.exclude_from_nav):
                id, item_url = get_view_url(item)
                data = {
                    "name": utils.pretty_title_or_id(context, item),
                    "id": item.getId,
                    "url": item_url,
                    "description": item.Description,
                }
                result.append(data)
        return result
コード例 #28
0
 def error(self, obj, error):
     request = getattr(self.context, 'REQUEST', None)
     if request is not None:
         title = utils.pretty_title_or_id(obj, obj)
         message = _(u"Unable to apply local roles on ${name}: ${error}",
                     mapping={
                         'name': title,
                         'error': error
                     })
         IStatusMessage(request).addStatusMessage(message, type="error")
コード例 #29
0
ファイル: json.py プロジェクト: vnc-biz/vnccollab.zimbra
 def __call__(self, REQUEST, RESPONSE):
     '''Returns a JSON representation of the current object'''
     result = ''
     try:
         context = self.context
         default_filename = utils.pretty_title_or_id(context, context) + '.pdf'
         filename = REQUEST.get('filename', default_filename)
         self.context.setFilename(filename)
     except Exception, e:
         result = str(e)
コード例 #30
0
    def decoratorFactory(self, node):
        context = aq_inner(self.context)
        request = context.REQUEST

        newNode = node.copy()
        item = node['item']

        portalType = getattr(item, 'portal_type', None)
        itemUrl = item.getURL()
        if portalType is not None and portalType in self.viewActionTypes:
            itemUrl += '/view'

        useRemoteUrl = False
        getRemoteUrl = getattr(item, 'getRemoteUrl', None)
        isCreator = self.memberId == getattr(item, 'Creator', None)
        if getRemoteUrl and not isCreator:
            useRemoteUrl = True

        isFolderish = getattr(item, 'is_folderish', None)
        showChildren = False
        if isFolderish and \
                (portalType is None or portalType not in self.parentTypesNQ):
            showChildren = True

        layout_view = getMultiAdapter((context, request), name=u'plone_layout')

        newNode['Title'] = utils.pretty_title_or_id(context, item)
        newNode['id'] = item.getId
        newNode['UID'] = item.UID
        newNode['absolute_url'] = itemUrl
        newNode['getURL'] = itemUrl
        newNode['path'] = item.getPath()
        newNode['item_icon'] = layout_view.getIcon(item)
        newNode['Creator'] = getattr(item, 'Creator', None)
        newNode['creation_date'] = getattr(item, 'CreationDate', None)
        newNode['portal_type'] = portalType
        newNode['review_state'] = getattr(item, 'review_state', None)
        newNode['Description'] = getattr(item, 'Description', None)
        newNode['show_children'] = showChildren
        newNode['no_display'] = False  # We sort this out with the nodeFilter
        # BBB getRemoteUrl and link_remote are deprecated, remove in Plone 4
        newNode['getRemoteUrl'] = getattr(item, 'getRemoteUrl', None)
        newNode['useRemoteUrl'] = useRemoteUrl
        newNode['link_remote'] = (
            newNode['getRemoteUrl'] and newNode['Creator'] != self.memberId
        )

        idnormalizer = queryUtility(IIDNormalizer)
        newNode['normalized_portal_type'] = idnormalizer.normalize(portalType)
        newNode['normalized_review_state'] = idnormalizer.normalize(
            newNode['review_state']
        )
        newNode['normalized_id'] = idnormalizer.normalize(newNode['id'])

        return newNode
コード例 #31
0
    def topLevelTabs(self, actions=None, category='portal_tabs'):
        context = aq_inner(self.context)
        registry = getUtility(IRegistry)
        navigation_settings = registry.forInterface(
            INavigationSchema,
            prefix="plone",
            check=False
        )
        mtool = getToolByName(context, 'portal_membership')
        member = mtool.getAuthenticatedMember().id
        catalog = getToolByName(context, 'portal_catalog')

        if actions is None:
            context_state = getMultiAdapter(
                (context, self.request),
                name=u'plone_context_state'
            )
            actions = context_state.actions(category)

        # Build result dict
        result = []
        # first the actions
        for actionInfo in actions:
            data = actionInfo.copy()
            data['name'] = data['title']
            result.append(data)

        # check whether we only want actions
        if not navigation_settings.generate_tabs:
            return result

        query = self._getNavQuery()

        rawresult = catalog.searchResults(query)

        def _get_url(item):
            if item.getRemoteUrl and not member == item.Creator:
                return (get_id(item), item.getRemoteUrl)
            return get_view_url(item)

        # now add the content to results
        for item in rawresult:
            if item.exclude_from_nav:
                continue
            cid, item_url = _get_url(item)
            data = {
                'name': utils.pretty_title_or_id(context, item),
                'id': item.getId,
                'url': item_url,
                'description': item.Description,
                'review_state': item.review_state
            }
            result.append(data)

        return result
コード例 #32
0
 def error(self, obj, error):
     request = getattr(self.context, 'REQUEST', None)
     if request is not None:
         title = utils.pretty_title_or_id(obj, obj)
         message = _(
             u"Unable to update Apple News article metadata for ${name} as part of content rule: ${error}",  # noqa
             mapping={
                 'name': title,
                 'error': error
             })
         IStatusMessage(request).addStatusMessage(message, type='error')
コード例 #33
0
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)

        name, item_url = get_view_url(context)

        if container is None:
            return ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
                'ct_class': 'contenttype-{}'.format(context.portal_type)
            }, )

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation
        # root
        if not utils.isDefaultPage(context, request) \
                and not rootPath.startswith(itemPath):
            portal_type = context.portal_type
            if base_hasattr(context, '_link_portal_type'):
                portal_type = context._link_portal_type
            base += ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
                'ct_class': 'contenttype-{}'.format(portal_type)
            }, )

        return base
コード例 #34
0
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)

        name, item_url = get_view_url(context)
        if container is None:
            return (
                {'absolute_url': item_url,
                 'Title': utils.pretty_title_or_id(context, context), },
                )

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            if container.portal_type == "Scheda" and utils.isDefaultPage(container, request):
                # if the parent is a Scheda and is set as default page, it
                # doesn't appears in the breadcrums, so we need to use context
                # absolute_url instead simple concatenation
                item_url = context.absolute_url()
            else:
                item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation
        # root
        if not utils.isDefaultPage(context, request) \
                and not rootPath.startswith(itemPath):
            base += (
                {'absolute_url': item_url,
                 'Title': utils.pretty_title_or_id(context, context), },
                )

        return base
コード例 #35
0
 def error(self, obj, error):
     request = getattr(self.context, "REQUEST", None)
     if request is not None:
         title = utils.pretty_title_or_id(obj, obj)
         message = _(
             u"Unable to reindex ${name} as part of content rule 'reindex' action: ${error}",
             mapping={
                 "name": title,
                 "error": error
             },
         )
         IStatusMessage(request).addStatusMessage(message, type="error")
コード例 #36
0
ファイル: plonetabs.py プロジェクト: kroman0/products
 def getItem(self, item):
     """get item"""
     context = aq_inner(self.context)
     id_, item_url = get_view_url(item)
     data = {
         'name': utils.pretty_title_or_id(context, item),
         'id': id_,
         'url': item_url,
         'description': item.Description,
         'exclude_from_nav': item.exclude_from_nav,
     }
     return data
コード例 #37
0
 def getItem(self, item):
     """get item"""
     context = aq_inner(self.context)
     id_, item_url = get_view_url(item)
     data = {
         "name": utils.pretty_title_or_id(context, item),
         "id": id_,
         "url": item_url,
         "description": item.Description,
         "exclude_from_nav": item.exclude_from_nav,
     }
     return data
コード例 #38
0
 def error(self, obj_being_processed, error):
     title = pretty_title_or_id(
         obj_being_processed,
         obj_being_processed,
     )
     message = _(
         u"Unable to set values on %s: %s, %s" %
         (title, str(type(error)), error), )
     logger.error(message)
     if self.request is not None:
         IStatusMessage(self.request).addStatusMessage(
             message, type="error")  # noqa: E501
コード例 #39
0
 def getItem(self, item):
     """get item"""
     context = aq_inner(self.context)
     id_, item_url = get_view_url(item)
     data = {
         'name': utils.pretty_title_or_id(context, item),
         'id': id_,
         'url': item_url,
         'description': item.Description,
         'exclude_from_nav': item.exclude_from_nav,
     }
     return data
コード例 #40
0
    def getTitle(context):

        try:
            if hasattr(context, 'hasProperty'):
                if context.hasProperty('short_breadcrumb'):
                    alt_title = context.getProperty('short_breadcrumb')
                    if alt_title:
                        return alt_title
        except TypeError:
            pass

        return utils.pretty_title_or_id(context, context)        
コード例 #41
0
ファイル: workflow.py プロジェクト: vedantc98/Plone-test
 def error(self, obj, error):
     request = getattr(self.context, 'REQUEST', None)
     if request is not None:
         title = utils.safe_unicode(utils.pretty_title_or_id(obj, obj))
         error = utils.safe_unicode(error)
         message = _(
             u"Unable to change state of ${name} as part of content rule 'workflow' action: ${error}",  # noqa
             mapping={
                 'name': title,
                 'error': error
             })
         IStatusMessage(request).addStatusMessage(message, type='error')
コード例 #42
0
    def breadcrumbs(self):
        """ Breadcrumbs
        """
        if ISiteRoot.providedBy(self.context):
            return ()

        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)

        try:
            name, item_url = get_view_url(context)
        except AttributeError:
            print context
            raise

        if container is None:
            return ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            }, )

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        # don't show default pages in breadcrumbs
        if not utils.isDefaultPage(context, request):
            base += ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            }, )

        return base
コード例 #43
0
ファイル: folder.py プロジェクト: hgarus/plone.app.content
    def __call__(self):
        factories_menu = getUtility(IBrowserMenu, name="plone_contentmenu_factory", context=self.context).getMenuItems(
            self.context, self.request
        )
        factories = []
        for item in factories_menu:
            if item.get("title") == "folder_add_settings":
                continue
            title = item.get("title", "")
            factories.append(
                {
                    "id": item.get("id"),
                    "title": title and translate(title, context=self.request) or "",
                    "action": item.get("action"),
                }
            )

        context = aq_inner(self.context)
        crumbs = []
        while not IPloneSiteRoot.providedBy(context):
            crumbs.append({"id": context.getId(), "title": utils.pretty_title_or_id(context, context)})
            context = utils.parent(context)

        catalog = getToolByName(self.context, "portal_catalog")
        try:
            brains = catalog(UID=IUUID(self.context))
        except TypeError:
            brains = []
        item = None
        if len(brains) > 0:
            obj = brains[0]
            # context here should be site root
            base_path = "/".join(context.getPhysicalPath())
            item = {}
            for attr in self.attributes:
                key = attr
                if key == "path":
                    attr = "getPath"
                val = getattr(obj, attr, None)
                if callable(val):
                    val = val()
                if key == "path":
                    val = val[len(base_path) :]
                item[key] = val
        return json_dumps(
            {
                "addButtons": factories,
                "defaultPage": self.context.getDefaultPage(),
                "breadcrumbs": [c for c in reversed(crumbs)],
                "object": item,
            }
        )
コード例 #44
0
    def getsubtab(self, context, tab):
        query = {}
        result = []
        portal_properties = getToolByName(context, "portal_properties")
        portal_catalog = getToolByName(context, "portal_catalog")
        navtree_properties = getattr(portal_properties, "navtree_properties")
        site_properties = getattr(portal_properties, "site_properties")

        rootPath = getNavigationRoot(context)
        xpath = "/".join([rootPath, tab["id"]])
        if "path" in tab:
            xpath = tab["path"]
        query["path"] = {"query": xpath, "depth": 1}

        query["portal_type"] = utils.typesToList(context)

        sortAttribute = navtree_properties.getProperty("sortAttribute", None)
        if sortAttribute is not None:
            query["sort_on"] = sortAttribute

            sortOrder = navtree_properties.getProperty("sortOrder", None)
            if sortOrder is not None:
                query["sort_order"] = sortOrder

        if navtree_properties.getProperty("enable_wf_state_filtering", False):
            query["review_state"] = navtree_properties.getProperty("wf_states_to_show", [])

        # Get ids not to list
        idsNotToList = navtree_properties.getProperty("idsNotToList", ())
        excludedIds = {}
        for id in idsNotToList:
            excludedIds[id] = 1

        rawresult = portal_catalog.searchResults(**query)

        # now add the content to results
        for item in rawresult:
            if not (excludedIds.has_key(item.getId) or item.exclude_from_nav):
                id, item_url = get_view_url(item)
                data = {
                    "name": utils.pretty_title_or_id(context, item),
                    "id": item.getId,
                    "url": item_url,
                    "description": item.Description,
                    "current": "",
                    "path": item.getPath(),
                }
                if self.current_url.startswith(item_url):
                    data["current"] = "selected"
                data["subtabs"] = self.getsubtab(self.context, data)
                result.append(data)
        return result
コード例 #45
0
    def breadcrumbs(self):
        """ Breadcrumbs
        """
        if ISiteRoot.providedBy(self.context):
            return ()

        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)

        try:
            name, item_url = get_view_url(context)
        except AttributeError:
            print context
            raise

        if container is None:
            return ({'absolute_url': item_url,
                     'Title': utils.pretty_title_or_id(context, context),
                    },)

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        # don't show default pages in breadcrumbs
        if not utils.isDefaultPage(context, request):
            base += ({'absolute_url': item_url,
                      'Title': utils.pretty_title_or_id(context, context),
                     },)

        return base
コード例 #46
0
    def __call__(self):
        factories_menu = getUtility(IBrowserMenu,
                                    name='plone_contentmenu_factory',
                                    context=self.context).getMenuItems(
                                        self.context, self.request)
        factories_menu = [
            m for m in factories_menu
            if m.get('title') != 'folder_add_settings'
        ]

        context = aq_inner(self.context)
        crumbs = []
        while not IPloneSiteRoot.providedBy(context):
            crumbs.append({
                'id': context.getId(),
                'title': utils.pretty_title_or_id(context, context)
            })
            context = utils.parent(context)

        catalog = getToolByName(self.context, 'portal_catalog')
        try:
            brains = catalog(UID=IUUID(self.context))
        except TypeError:
            brains = []
        item = None
        if len(brains) > 0:
            obj = brains[0]
            # context here should be site root
            base_path = '/'.join(context.getPhysicalPath())
            item = {}
            for attr in self.attributes:
                key = attr
                if key == 'path':
                    attr = 'getPath'
                val = getattr(obj, attr, None)
                if callable(val):
                    if attr in _safe_callable_metadata:
                        val = val()
                    else:
                        continue
                if key == 'path':
                    val = val[len(base_path):]
                item[key] = val

        return json.dumps({
            'addButtons': factories_menu,
            'defaultPage': self.context.getDefaultPage(),
            'breadcrumbs': [c for c in reversed(crumbs)],
            'object': item
        })
コード例 #47
0
def decoratorFactory(self, node):
    """ Monkey patch Plone's navigation tree information to include content media
    """

    context = aq_inner(self.context)
    request = context.REQUEST    
    
    newNode = node.copy()
    item = node['item']

    portalType = getattr(item, 'portal_type', None)
    itemUrl = item.getURL()
    if portalType is not None and portalType in self.viewActionTypes:
        itemUrl += '/view'

    isFolderish = getattr(item, 'is_folderish', None)
    showChildren = False
    if isFolderish and (portalType is None or portalType not in self.parentTypesNQ):
        showChildren = True

    ploneview = getMultiAdapter((context, request), name=u'plone')

    newNode['Title'] = utils.pretty_title_or_id(context, item)
    newNode['id'] = item.getId
    newNode['absolute_url'] = itemUrl
    newNode['getURL'] = itemUrl
    newNode['path'] = item.getPath()
    newNode['icon'] = getattr(item, 'getIcon', None) # Deprecated, use item_icon
    newNode['item_icon'] = ploneview.getIcon(item)
    newNode['Creator'] = getattr(item, 'Creator', None)
    newNode['creation_date'] = getattr(item, 'CreationDate', None)
    newNode['portal_type'] = portalType
    newNode['review_state'] = getattr(item, 'review_state', None)
    newNode['Description'] = getattr(item, 'Description', None)
    newNode['getRemoteUrl'] = getattr(item, 'getRemoteUrl', None)
    newNode['show_children'] = showChildren
    newNode['no_display'] = False # We sort this out with the nodeFilter
    newNode['link_remote'] = newNode['getRemoteUrl'] and newNode['Creator'] != self.memberId

    idnormalizer = queryUtility(IIDNormalizer)
    newNode['normalized_portal_type'] = idnormalizer.normalize(portalType)
    newNode['normalized_review_state'] = idnormalizer.normalize(newNode['review_state'])
    newNode['normalized_id'] = idnormalizer.normalize(newNode['id'])

    newNode['getContentMedias'] = getattr(item, 'getContentMedias', None)
    newNode['Language'] = getattr(item, 'Language', "neutral language")
    
    return newNode
コード例 #48
0
    def getsubtabs(self,context,tab):
        query={}
        result=[]
        portal_properties = getToolByName(context, 'portal_properties')
        portal_catalog = getToolByName(context, 'portal_catalog')
        navtree_properties = getattr(portal_properties, 'navtree_properties')
        site_properties = getattr(portal_properties, 'site_properties')

        rootPath = getNavigationRoot(context)
        dpath='/'.join([rootPath,tab['id']])
        query['path'] = {'query' : dpath, 'depth' : 1}

        query['portal_type'] = utils.typesToList(context)

        sortAttribute = navtree_properties.getProperty('sortAttribute', None)
        if sortAttribute is not None:
            query['sort_on'] = sortAttribute

            sortOrder = navtree_properties.getProperty('sortOrder', None)
            if sortOrder is not None:
                query['sort_order'] = sortOrder

        if navtree_properties.getProperty('enable_wf_state_filtering', False):
            query['review_state'] = navtree_properties.getProperty('wf_states_to_show', [])

        query['is_default_page'] = False

        if site_properties.getProperty('disable_nonfolderish_sections', False):
            query['is_folderish'] = True

        # Get ids not to list and make a dict to make the search fast
        idsNotToList = navtree_properties.getProperty('idsNotToList', ())
        excludedIds = {}
        for id in idsNotToList:
            excludedIds[id]=1

        rawresult = portal_catalog.searchResults(**query)

        # now add the content to results
        for item in rawresult:
            if not (excludedIds.has_key(item.getId) or item.exclude_from_nav):
                id, item_url = get_view_url(item)
                data = {'name'      : utils.pretty_title_or_id(context, item),
                        'id'         : item.getId,
                        'url'        : item_url,
                        'description': item.Description}
                result.append(data)
        return result
コード例 #49
0
    def _formatData(self, item):
        mtool = getToolByName(self.context, 'portal_membership')
        member = mtool.getAuthenticatedMember().id

        def _get_url(item):
            if item.getRemoteUrl and not member == item.Creator:
                return (get_id(item), item.getRemoteUrl)
            return get_view_url(item)

        cid, item_url = _get_url(item)
        return {
            'name': utils.pretty_title_or_id(self.context, item),
            'id': item.getId,
            'url': item_url,
            'description': item.Description
        }
コード例 #50
0
ファイル: bulksharing.py プロジェクト: Vinsurya/Plone
    def items(self):
        context = aq_inner(self.context)
        plone_utils = getToolByName(context, 'plone_utils')

        items=[]
        for i, obj in enumerate(self.objects):
            title_or_id = pretty_title_or_id(plone_utils, obj)
            items.append(dict(path='/'.join(obj.getPhysicalPath()),
                              obj=obj,
                              id=obj.getId(),
                              title_or_id=safe_unicode(title_or_id),
                              view_url='%s/@@sharing' % obj.absolute_url(),
                              table_row_class= \
                                      (i + 1) % 2 == 0 and "even" or "odd"))

        return items
コード例 #51
0
    def __call__(self):
        factories_menu = getUtility(
            IBrowserMenu, name='plone_contentmenu_factory',
            context=self.context).getMenuItems(self.context, self.request)
        factories_menu = [m for m in factories_menu
                          if m.get('title') != 'folder_add_settings']

        context = aq_inner(self.context)
        crumbs = []
        while not IPloneSiteRoot.providedBy(context):
            crumbs.append({
                'id': context.getId(),
                'title': utils.pretty_title_or_id(context, context)
            })
            context = utils.parent(context)

        catalog = getToolByName(self.context, 'portal_catalog')
        try:
            brains = catalog(UID=IUUID(self.context))
        except TypeError:
            brains = []
        item = None
        if len(brains) > 0:
            obj = brains[0]
            # context here should be site root
            base_path = '/'.join(context.getPhysicalPath())
            item = {}
            for attr in self.attributes:
                key = attr
                if key == 'path':
                    attr = 'getPath'
                val = getattr(obj, attr, None)
                if callable(val):
                    if attr in _safe_callable_metadata:
                        val = val()
                    else:
                        continue
                if key == 'path':
                    val = val[len(base_path):]
                item[key] = val

        return json.dumps({
            'addButtons': factories_menu,
            'defaultPage': self.context.getDefaultPage(),
            'breadcrumbs': [c for c in reversed(crumbs)],
            'object': item
        })
コード例 #52
0
 def update(self):
     self.portal_state = getMultiAdapter((self.context, self.request),
                                         name=u'plone_portal_state')
     catalog = getToolByName(self.context, 'portal_catalog')
     self.context_state = getMultiAdapter((self.context, self.request),
                                          name=u'plone_context_state')
     #portal_properties = getToolByName(self.context, 'portal_properties')
     #navtree_properties = getattr(portal_properties, 'navtree_properties')
     path = []
     path_raw = self.context.getPhysicalPath()
     self.path = []
     for obj in path_raw:
         path.append(obj)
         parent_path = '/'.join(path)
         raw_results = catalog.searchResults({
             'path': {
                 'query': parent_path,
                 'depth': 0
             },
             'is_default_page': False
         })
         for item in raw_results:
             id, item_url = get_view_url(item)
             data = {
                 'name': utils.pretty_title_or_id(self.context, item),
                 'url': item_url,
                 'is_last': False,
                 'is_suitable_view_mode': False
             }
             #try:
             #item.getProperty('default_page')
             #data['is_suitable_view_mode'] = True
             #except :
             #pass
             if item.getObject().getProperty('default_page') is not None:
                 data['is_suitable_view_mode'] = True
             self.path.append(data)
     if len(self.path):
         self.path[len(self.path) - 1]['is_last'] = True
     self.root = self.portal_state.navigation_root_url()
     self.portal_search_url = self.root + '/search'
     self.current_page_url = self.context_state.current_page_url()
     self.view_path = True
     if self.current_page_url.count(self.portal_search_url):
         self.view_path = False
コード例 #53
0
 def breadcrumbs(self):
     if not INoBarcelonetaLayer.providedBy(self.request):
         # We are in the CMS, so we want the default.
         view = getMultiAdapter((self.context, self.request),
                                name='orig_breadcrumbs_view')
         return tuple(view.breadcrumbs())
     context = aq_inner(self.context)
     context_path = '/'.join(context.getPhysicalPath())
     root_path = getNavigationRoot(context)
     if context_path == root_path:
         # We are the navigation root.
         return ()
     # We now iteratively look for a parent and check if this is
     # the navigation root.
     chain = aq_chain(context)
     for index, parent in enumerate(chain):
         try:
             parent_path = '/'.join(parent.getPhysicalPath())
         except AttributeError:
             # This is probably the root request object, so we
             # somehow did not find a suitable parent.
             return ()
         if parent_path == root_path:
             # We have found the root.
             break
         # The parent is not yet the navigation root, so set the
         # item and try the next parent in the chain.
         item = parent
     # Get the interesting part of the chain.
     chain = list(reversed(chain[:index]))
     # Some things want to be hidden from the breadcrumbs.
     chain = [
         elem for elem in chain if not IHideFromBreadcrumbs.providedBy(elem)
     ]
     # Restrict to the wanted maximum of levels
     chain = chain[:self.levels]
     crumbs = []
     for item in chain:
         crumbs.append({
             'absolute_url': item.absolute_url(),
             'Title': utils.pretty_title_or_id(item, item)
         })
     return tuple(crumbs)
コード例 #54
0
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        ct = getToolByName(context, 'portal_catalog')
        query = {}

        # Check to see if the current page is a folder default view, if so
        # get breadcrumbs from the parent folder
        if utils.isDefaultPage(context, request):
            currentPath = '/'.join(utils.parent(context).getPhysicalPath())
        else:
            currentPath = '/'.join(context.getPhysicalPath())
        query['path'] = {'query': currentPath, 'navtree': 1, 'depth': 0}

        rawresult = ct(**query)

        # Sort items on path length
        dec_result = [(len(r.getPath()), r) for r in rawresult]
        dec_result.sort()

        rootPath = getNavigationRoot(context)

        # Build result dict
        result = []
        for r_tuple in dec_result:
            item = r_tuple[1]

            # Don't include it if it would be above the navigation root
            itemPath = item.getPath()
            if rootPath.startswith(itemPath):
                continue

            id, item_url = get_view_url(item)
            data = {
                'Title': utils.pretty_title_or_id(context, item),
                'absolute_url': item_url
            }
            result.append(data)
        return result
コード例 #55
0
    def breadcrumbs(self):
        context = aq_inner(self.context)

        view_utils = Utils(self.context, self.request)

        crumbs = []
        while context is not None:
            if ISiteRoot.providedBy(context):
                break

            try:
                if utils.isDefaultPage(context, self.request):
                    context = utils.parent(context)
                    continue
            except AttributeError:
                break

            # Some things want to be hidden from the breadcrumbs
            if IHideFromBreadcrumbs.providedBy(context):
                context = utils.parent(context)
                continue

            item_url = view_utils.get_object_url(context)
            try:
                state = api.content.get_state(obj=context)
            except WorkflowException:
                state = None
            label = getattr(context, 'navigation_label', None)
            if not label:
                label = utils.pretty_title_or_id(context, context)
            crumbs.append({
                'absolute_url': item_url,
                'Title': label,
                'state': state
            })
            context = utils.parent(context)

        return list(reversed(crumbs))
コード例 #56
0
 def get_items(self):
     items = list()
     base_url = self.base_url
     idnormalizer = getUtility(IIDNormalizer)
     for item in self.contents:
         current = True
         in_path = True
         id = item.getId
         normalized_id = idnormalizer.normalize(id)
         portal_type = getattr(item, 'portal_type', None)
         review_state = getattr(item, 'review_state', None)
         normalized_review_state = idnormalizer.normalize(review_state)
         normalized_portal_type = idnormalizer.normalize(portal_type)
         context_path = '/'.join(self.context.getPhysicalPath())
         item_path = item.getPath()
         items.append({
             'url':
             '%s/%s' % (base_url, item.getId),
             'description':
             item.Description,
             'title':
             plone_utils.pretty_title_or_id(self.context, item),
             'current':
             current,
             'in_path':
             in_path,
             'normalized_id':
             normalized_id,
             'normalized_review_state':
             normalized_review_state,
             'normalized_portal_type':
             normalized_portal_type,
             'local_content':
             item_path.startswith(context_path),
         })
     return items
コード例 #57
0
    def __call__(self):
        factories_menu = getUtility(IBrowserMenu,
                                    name='plone_contentmenu_factory',
                                    context=self.context).getMenuItems(
                                        self.context, self.request)
        factories_menu = [
            m for m in factories_menu
            if m.get('title') != 'folder_add_settings'
        ]

        context = aq_inner(self.context)
        crumbs = []
        while not IPloneSiteRoot.providedBy(context):
            crumbs.append({
                'id': context.getId(),
                'title': utils.pretty_title_or_id(context, context)
            })
            context = utils.parent(context)

        return json.dumps({
            'addButtons': factories_menu,
            'defaultPage': self.context.getDefaultPage(),
            'breadcrumbs': [c for c in reversed(crumbs)]
        })
コード例 #58
0
 def objectTitle(self, obj):
     context = aq_inner(obj)
     title = utils.pretty_title_or_id(context, context)
     return utils.safe_unicode(title)
コード例 #59
0
 def pretty_title_or_id(self, obj, empty_value=_marker):
     # Return the best possible title or id of an item, regardless
     # of whether obj is a catalog brain or an object, but returning an
     # empty title marker if the id is not set (i.e. it's auto-generated).
     return utils.pretty_title_or_id(self, obj, empty_value=empty_value)