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
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
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_canSetConstrainTypesMode(self): behavior = ISelectableConstrainTypes(self.folder) self.assertEqual(1, behavior.canSetConstrainTypes())
def test_canSetConstrainTypesMode(self): behavior = ISelectableConstrainTypes(self.folder) self.assertEqual(1, behavior.canSetConstrainTypes())
def can_constrain_types(self): aspect = ISelectableConstrainTypes(self.add_context(), None) return aspect.canSetConstrainTypes() if aspect else False
def can_constrain_types(self): aspect = ISelectableConstrainTypes(self.add_context(), None) return aspect.canSetConstrainTypes() if aspect else False