예제 #1
0
 def _showConstrainOptions(self):
     addContext = self._addContext()
     constrain = ISelectableConstrainTypes(addContext, None)
     if constrain is None:
         return False
     elif constrain.canSetConstrainTypes() and constrain.getDefaultAddableTypes():
         return True
     elif len(constrain.getLocallyAllowedTypes()) < len(constrain.getImmediatelyAddableTypes()):
         return True
예제 #2
0
    def get_addable_types(self):
        """Return menu item entries in a TAL-friendly form."""
        data = {
            'types': [],
            'templates': []
        }
        idnormalizer = queryUtility(IIDNormalizer)

        constraints = ISelectableConstrainTypes(self.folder, None)
        data['canConstrainTypes'] = False
        if constraints is not None:
            if constraints.canSetConstrainTypes() and \
                    constraints.getDefaultAddableTypes():
                data.update({
                    'canConstrainTypes': True,
                    'constrainUrl': '%s/folder_constraintypes_form' % (
                        self.folder.absolute_url(),)
                })

        site_path = '/'.join(self.site.getPhysicalPath())
        context = self.real_context
        if not IDexterityContainer.providedBy(context):
            context = aq_parent(context)
        folder_path = '/'.join(context.getPhysicalPath())[len(site_path):]
        if not folder_path:
            folder_path = '/'

        for t in self.folder.allowedContentTypes():
            typeId = t.getId()
            data['types'].append({
                'id': typeId,
                'safeId': idnormalizer.normalize(typeId),
                'title': t.Title(),
                'description': t.Description(),
                'folderPath': folder_path
            })

        try:
            site_templates = self.folder.template_list

            for t in site_templates:
                typeId = t.getId()
                data['templates'].append({
                    'id': typeId,
                    'safeId': idnormalizer.normalize(typeId),
                    'title': t.Title(),
                    'description': t.Description(),
                    'folderPath': folder_path
                })
        except AttributeError:
            pass

        return data
예제 #3
0
    def _getMenuItemsForContext(self, context, request):
        """Return menu item entries for the context only."""
        results = []

        if context is not None:
            allowed = []
            constraints = []
            haveMore = False
            include = None

            allowed = context.allowedContentTypes()
            constraints = IConstrainTypes(context, None)

            if constraints is not None:
                include = constraints.getImmediatelyAddableTypes()
                if len(include) < len(allowed):
                    haveMore = True

            results = self._addable_types(context, request, allowed, include)

            if haveMore:
                url = '%s/folder_factories' % (context.absolute_url(),)
                results.append({ 'title'       : _(u'folder_add_more', default=u'More\u2026'),
                                 'description' : _(u'Show all available content types'),
                                 'action'      : url,
                                 'selected'    : False,
                                 'icon'        : None,
                                 'extra'       : {'id': 'more', 'separator': None, 'class': ''},
                                 'submenu'     : None,
                                 })

            selectableConstraints = ISelectableConstrainTypes(context, None)
            if selectableConstraints is not None:
                if selectableConstraints.canSetConstrainTypes() and \
                   selectableConstraints.getDefaultAddableTypes():
                    url = '%s/folder_constraintypes_form' % (context.absolute_url(),)
                    results.append({'title'       : _(u'folder_add_settings', default=u'Restrictions\u2026'),
                                    'description' : _(u'title_configure_addable_content_types', default=u'Configure which content types can be added here'),
                                    'action'      : url,
                                    'selected'    : False,
                                    'icon'        : None,
                                    'extra'       : {'id': 'settings', 'separator': None, 'class': ''},
                                    'submenu'     : None,
                                    })

        return results
 def test_defaultAddableTypesDefault(self):
     behavior = ISelectableConstrainTypes(self.folder)
     self.assertEqual(self.default_types, behavior.getDefaultAddableTypes())
 def test_defaultAddableTypesDefault(self):
     behavior = ISelectableConstrainTypes(self.folder)
     self.assertEqual(self.default_types, behavior.getDefaultAddableTypes())