Example #1
0
 def get_actions(self):
     parent = aq_parent(self)
     request = getRequest()
     question_menu_items = getMenu('plone_contentmenu_workflow', self,
                                   request)
     observation_menu_items = getMenu('plone_contentmenu_workflow', parent,
                                      request)
     menu_items = question_menu_items + observation_menu_items
     return [mitem for mitem in menu_items if not hidden(mitem)]
Example #2
0
 def get_actions(self):
     parent = aq_parent(self)
     request = getRequest()
     question_menu_items = getMenu(
         'plone_contentmenu_workflow',
         self,
         request
         )
     observation_menu_items = getMenu(
         'plone_contentmenu_workflow',
         parent,
         request
         )
     menu_items = question_menu_items + observation_menu_items
     return [mitem for mitem in menu_items if not hidden(mitem)]
Example #3
0
    def addingInfo(self):
        """Return menu data.

        This is sorted by title.
        """
        container = self.context
        result = []
        for menu_id in (self.menu_id, "zope.app.container.add"):
            if not menu_id:
                continue
            for item in getMenu(menu_id, self, self.request):
                extra = item.get("extra")
                if extra:
                    factory = extra.get("factory")
                    if factory:
                        factory = getUtility(IFactory, factory)
                        if not checkFactory(container, None, factory):
                            continue
                        elif item["extra"]["factory"] != item["action"]:
                            item["has_custom_add_view"] = True
                # translate here to have a localized sorting
                item["title"] = zope.i18n.translate(item["title"], context=self.request)
                result.append(item)

        # sort the adding info with a collator instead of a basic unicode sort
        collator = queryAdapter(self.request.locale, ICollator)
        if collator is None:
            collator = FallbackCollator(self.request.locale)
        result.sort(key=lambda x: collator.key(x["title"]))
        return result
Example #4
0
    def addingInfo(self):
        """Return menu data.

        This is sorted by title.
        """
        container = self.context
        result = []
        for menu_id in (self.menu_id, 'zope.app.container.add'):
            if not menu_id:
                continue
            for item in getMenu(menu_id, self, self.request):
                extra = item.get('extra')
                if extra:
                    factory = extra.get('factory')
                    if factory:
                        factory = getUtility(IFactory, factory)
                        if not checkFactory(container, None, factory):
                            continue
                        elif item['extra']['factory'] != item['action']:
                            item['has_custom_add_view']=True
                # translate here to have a localized sorting
                item['title'] = zope.i18n.translate(item['title'],
                                                    context=self.request)
                result.append(item)

        # sort the adding info with a collator instead of a basic unicode sort
        collator = queryAdapter(self.request.locale, ICollator)
        if collator is None:
            collator = FallbackCollator(self.request.locale)
        result.sort(key = lambda x: collator.key(x['title']))
        return result
Example #5
0
    def addingInfo(self):
        """Return menu data.

        This is sorted by title.
        """
        container = self.context
        result = []
        for menu_id in (self.menu_id, 'zope.app.container.add'):
            if not menu_id:
                continue
            for item in getMenu(menu_id, self, self.request):
                extra = item.get('extra')
                if extra:
                    factory = extra.get('factory')
                    if factory:
                        factory = getUtility(IFactory, factory)
                        if not checkFactory(container, None, factory):
                            continue
                        elif item['extra']['factory'] != item['action']:
                            item['has_custom_add_view'] = True
                result.append(item)

        result.sort(key=operator.itemgetter('title'))
        return result
Example #6
0
    def build(self):
        menu = getMenu('plone_contentmenu', self.context, self.request)
        menu = self.separateMenu(menu)
        results = self._parse(menu)

        context_state = getMultiAdapter((self.context, self.request), name=u'plone_context_state')
        actions = context_state.actions
        action_list = []
        if context_state.is_structural_folder():
            action_list = actions('folder')
        action_list.extend(self.filterActionlist(actions('object')))

        contentaction = OrderedDict()

        for action in action_list:
            di = OrderedDict(label=translate(_p(action.get('title')), context=self.request),
                       action=self._action(action.get('url')),
                       icon=action.get('id'),
                      )
            contentaction[action.get('id')] = di

        results['contentaction'] = OrderedDict(label=translate(_('Content actions'), context=self.request), submenu=contentaction)

        return results
Example #7
0
    def addingInfo(self):
        """Return menu data.

        This is sorted by title.
        """
        container = self.context
        result = []
        for menu_id in (self.menu_id, 'zope.app.container.add'):
            if not menu_id:
                continue
            for item in getMenu(menu_id, self, self.request):
                extra = item.get('extra')
                if extra:
                    factory = extra.get('factory')
                    if factory:
                        factory = getUtility(IFactory, factory)
                        if not checkFactory(container, None, factory):
                            continue
                        elif item['extra']['factory'] != item['action']:
                            item['has_custom_add_view'] = True
                result.append(item)

        result.sort(key=operator.itemgetter('title'))
        return result
Example #8
0
 def getMenu(self):
     return getMenu(self.menu, self.context, self.request)
Example #9
0
 def getMenuItems(self, obj, request):
     obj = removeSecurityProxy(obj)
     menu = tuple(zope.component.getAdapters(
         (obj, request), self.getMenuItemType()))
     # filter out all items which you do not have the permissions for
     result = [ item for name, item in menu if
         check_availability(item) ]
     # Now order the result. This is not as easy as it seems.
     # (1) Look at the interfaces and put the more specific menu entries
     #     to the front. 
     # (2) Sort unambigious entries by order and then by title.
     ifaces = list(providedBy(removeSecurityProxy(obj)).__iro__)
     max_key = len(ifaces)
     def iface_index(item):
         iface = item._for
         if not iface:
             iface = Interface
         if zope.interface.interfaces.IInterface.providedBy(iface):
             return ifaces.index(iface)
         if isinstance(removeSecurityProxy(obj), item._for):
             # directly specified for class, this goes first.
             return -1
         # no idea. This goes last.
         return max_key
     result = [(item.order, iface_index(item), item.title, item)
               for item in result]
     result.sort()
     # !+ replace above with super getMenuItems()
     local_url = url.absoluteURL(obj, request)
     site_url = url.absoluteURL(getSite(), request)
     request_url = request.getURL()
     
     items = []
     selected_index = None
     current_pos = -1
     
     for index, (order, iface_index, title, item) in enumerate(result):
         # !+ for some reason, for the generic container listing views, the 
         # context_actions menu comes out with a single item pointing to 
         # "@@index" i.e. itself... we ignore it:
         if item.action=="@@index":
             continue
         
         extra = item.extra or {}
         # if no id has been explictly set, get one in some way or another...
         # !+ID-GENERATION(ah, 17-05-2011) - added call to action_to_id 
         # around item.action as other-wise it returns an invalid @id 
         # attribute (see comment above)
         extra.setdefault("id",
             # try "id", BrowserMenu, bungeni.ui.menu.BrowserSubMenuItem
             # (that picks an id value off item.submenuId) otherwise use
             # the "action" value, zope.browsermenu.BrowserMenuItem
             getattr(item, "id", None) or action_to_id(item.action)
         )
         # !+CSS_ID(mr, may-2011) the CSS menu styling should NOT be based 
         # on element id, it is unnecessarily brittle and limited e.g. what
         # happens if you wish to render a menu twice, on top and bottom of
         # a page? Styling selectors should be connected only via classes
         # (not even element tag names). The use of an element id should be 
         # limited to only known-to-be-unique contrainers in the page e.g.
         # "content", "top-menu-bar", "footer", etc. 
         
         if IBrowserSubMenuItem.providedBy(item):
             submenu = getMenu(item.submenuId, obj, request)
         else:
             submenu = None
             extra["hideChildren"] = True
         
         _url = make_absolute(item.action, local_url, site_url)
         
         if submenu:
             for menu in submenu:
                 menu["url"] = make_absolute(
                     menu["action"], local_url, site_url)
         
         pos = pos_action_in_url(item.action, request_url)
         if pos and pos > current_pos:
             # !+ should really only reset this only once, 
             # and pos *should* always be len(base_url)
             current_pos = pos
             selected_index = index
         
         items.append({
             "title": title,
             "description": item.description,
             "action": item.action,
             "url": _url,
             "selected": u"",
             # !+MENU_ICON(mr, aug-2010) remove, icon always managed via CSS
             "icon": item.icon,
             "extra": extra,
             "submenu": submenu})
     
     if selected_index is not None:
         items[selected_index]["selected"] = u"selected"
     return items
Example #10
0
 def get_available_menu_items(self):
     return getMenu('reportek_utilities', self.context, self.request)
Example #11
0
 def getMenu(self):
     return getMenu(self.menu, self.context, self.request)
Example #12
0
    def getMenuItems(self, obj, request):
        obj = removeSecurityProxy(obj)
        menu = tuple(
            zope.component.getAdapters((obj, request), self.getMenuItemType()))
        # filter out all items which you do not have the permissions for
        result = [item for name, item in menu if check_availability(item)]
        # Now order the result. This is not as easy as it seems.
        # (1) Look at the interfaces and put the more specific menu entries
        #     to the front.
        # (2) Sort unambigious entries by order and then by title.
        ifaces = list(providedBy(removeSecurityProxy(obj)).__iro__)
        max_key = len(ifaces)

        def iface_index(item):
            iface = item._for
            if not iface:
                iface = Interface
            if zope.interface.interfaces.IInterface.providedBy(iface):
                return ifaces.index(iface)
            if isinstance(removeSecurityProxy(obj), item._for):
                # directly specified for class, this goes first.
                return -1
            # no idea. This goes last.
            return max_key

        result = [(item.order, iface_index(item), item.title, item)
                  for item in result]
        result.sort()
        # !+ replace above with super getMenuItems()
        local_url = url.absoluteURL(obj, request)
        site_url = url.absoluteURL(getSite(), request)
        request_url = request.getURL()

        items = []
        selected_index = None
        current_pos = -1

        for index, (order, iface_index, title, item) in enumerate(result):
            # !+ for some reason, for the generic container listing views, the
            # context_actions menu comes out with a single item pointing to
            # "@@index" i.e. itself... we ignore it:
            if item.action == "@@index":
                continue

            extra = item.extra or {}
            # if no id has been explictly set, get one in some way or another...
            # !+ID-GENERATION(ah, 17-05-2011) - added call to action_to_id
            # around item.action as other-wise it returns an invalid @id
            # attribute (see comment above)
            extra.setdefault(
                "id",
                # try "id", BrowserMenu, bungeni.ui.menu.BrowserSubMenuItem
                # (that picks an id value off item.submenuId) otherwise use
                # the "action" value, zope.browsermenu.BrowserMenuItem
                getattr(item, "id", None) or action_to_id(item.action))
            # !+CSS_ID(mr, may-2011) the CSS menu styling should NOT be based
            # on element id, it is unnecessarily brittle and limited e.g. what
            # happens if you wish to render a menu twice, on top and bottom of
            # a page? Styling selectors should be connected only via classes
            # (not even element tag names). The use of an element id should be
            # limited to only known-to-be-unique contrainers in the page e.g.
            # "content", "top-menu-bar", "footer", etc.

            if IBrowserSubMenuItem.providedBy(item):
                submenu = getMenu(item.submenuId, obj, request)
            else:
                submenu = None
                extra["hideChildren"] = True

            _url = make_absolute(item.action, local_url, site_url)

            if submenu:
                for menu in submenu:
                    menu["url"] = make_absolute(menu["action"], local_url,
                                                site_url)

            pos = pos_action_in_url(item.action, request_url)
            if pos and pos > current_pos:
                # !+ should really only reset this only once,
                # and pos *should* always be len(base_url)
                current_pos = pos
                selected_index = index

            items.append({
                "title": title,
                "description": item.description,
                "action": item.action,
                "url": _url,
                "selected": u"",
                # !+MENU_ICON(mr, aug-2010) remove, icon always managed via CSS
                "icon": item.icon,
                "extra": extra,
                "submenu": submenu
            })

        if selected_index is not None:
            items[selected_index]["selected"] = u"selected"
        return items