def test_single_valued_empty(self): from Products.Archetypes.Widget import RelatedItemsWidget self.field.getName.return_value = 'fieldname' self.field.getAccessor.return_value = lambda: None self.field.multiValued = False with mock.patch('plone.app.widgets.utils.getUtility') as mock_method: widget = RelatedItemsWidget() self.assertEqual( { 'name': 'fieldname', 'value': '', 'pattern': 'relateditems', 'pattern_options': { 'folderTypes': ['Folder'], 'homeText': u'Home', 'separator': ';', 'orderable': True, 'searchAllText': u'Entire site', 'searchText': u'Search', 'maximumSelectionSize': 1, 'vocabularyUrl': '/@@getVocabulary?name=' 'plone.app.vocabularies.Catalog' '&field=fieldname', }, }, widget._base_args(self.context, self.field, self.request), )
def test_multi_valued(self): from zope.event import notify from zope.interface import implements from zope.lifecycleevent import ObjectCreatedEvent from plone.uuid.interfaces import IUUID from plone.uuid.interfaces import IAttributeUUID from Products.Archetypes.Widget import RelatedItemsWidget class ExampleContent(object): implements(IAttributeUUID) with mock.patch('plone.app.widgets.utils.getUtility') as mock_method: registry = Mock() registry.get.return_value = ['SomeType'] mock_method.return_value = registry obj1 = ExampleContent() obj2 = ExampleContent() notify(ObjectCreatedEvent(obj1)) notify(ObjectCreatedEvent(obj2)) self.field.getName.return_value = 'fieldname' self.field.getAccessor.return_value = lambda: [obj1, obj2] self.field.multiValued = True self.context.portal_registry.get.return_value = ['SomeType'] widget = RelatedItemsWidget() self.assertEqual( { 'name': 'fieldname', 'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)), 'pattern': 'relateditems', 'pattern_options': { 'folderTypes': ['SomeType'], 'homeText': u'Home', 'searchAllText': u'Entire site', 'searchText': u'Search', 'separator': ';', 'orderable': True, 'maximumSelectionSize': -1, 'vocabularyUrl': '/@@getVocabulary?name=' 'plone.app.vocabularies.Catalog' '&field=fieldname', }, }, widget._base_args(self.context, self.field, self.request), )
def test_multi_valued(self): from zope.event import notify from zope.interface import implementer from zope.lifecycleevent import ObjectCreatedEvent from plone.uuid.interfaces import IUUID from plone.uuid.interfaces import IAttributeUUID from Products.Archetypes.Widget import RelatedItemsWidget @implementer(IAttributeUUID) class ExampleContent(object): pass obj1 = ExampleContent() obj2 = ExampleContent() notify(ObjectCreatedEvent(obj1)) notify(ObjectCreatedEvent(obj2)) self.field.getName.return_value = 'fieldname' self.field.getAccessor.return_value = lambda: [obj1, obj2] self.field.multiValued = True widget = RelatedItemsWidget() base_args = widget._base_args(self.context, self.field, self.request) self.assertDictContainsSubset( { 'name': 'fieldname', 'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)), 'pattern': 'relateditems', }, base_args) self.assertDictContainsSubset( { 'separator': ';', 'orderable': True, 'maximumSelectionSize': -1, 'vocabularyUrl': '/@@getVocabulary?name=' 'plone.app.vocabularies.Catalog' '&field=fieldname', 'basePath': '/Plone/doc', 'contextPath': '/Plone/doc', 'rootPath': '/', 'rootUrl': '' }, base_args.get('pattern_options', {}))
def test_single_value(self): from zope.event import notify from zope.interface import implements from zope.lifecycleevent import ObjectCreatedEvent from plone.uuid.interfaces import IUUID from plone.uuid.interfaces import IAttributeUUID from Products.Archetypes.Widget import RelatedItemsWidget class ExampleContent(object): implements(IAttributeUUID) obj1 = ExampleContent() notify(ObjectCreatedEvent(obj1)) self.field.getName.return_value = 'fieldname' self.field.getAccessor.return_value = lambda: obj1 self.field.multiValued = False self.context.portal_properties.site_properties\ .getProperty.return_value = ['SomeType'] widget = RelatedItemsWidget() self.assertEqual( { 'name': 'fieldname', 'value': '{}'.format(IUUID(obj1)), 'pattern': 'relateditems', 'pattern_options': { 'folderTypes': ['SomeType'], 'homeText': u'Home', 'separator': ';', 'orderable': True, 'searchAllText': u'Entire site', 'searchText': u'Search', 'maximumSelectionSize': 1, 'vocabularyUrl': '/@@getVocabulary?name=' 'plone.app.vocabularies.Catalog' '&field=fieldname', }, }, widget._base_args(self.context, self.field, self.request), )
def test_single_valued_empty(self): from Products.Archetypes.Widget import RelatedItemsWidget self.field.getName.return_value = 'fieldname' self.field.getAccessor.return_value = lambda: None self.field.multiValued = False widget = RelatedItemsWidget() base_args = widget._base_args(self.context, self.field, self.request) self.assertDictContainsSubset( { 'name': 'fieldname', 'value': '', 'pattern': 'relateditems', }, base_args) self.assertDictContainsSubset( { 'separator': ';', 'orderable': True, 'maximumSelectionSize': 1, 'vocabularyUrl': '/@@getVocabulary?name=' 'plone.app.vocabularies.Catalog' '&field=fieldname', 'basePath': '/Plone/doc', 'contextPath': '/Plone/doc', 'rootPath': '/', 'rootUrl': '', }, base_args.get('pattern_options', {}))
def test_multiple_widgets(self): from zope.event import notify from Products.Archetypes.Widget import RelatedItemsWidget from zope.interface import implementer from zope.lifecycleevent import ObjectCreatedEvent from plone.uuid.interfaces import IUUID from plone.uuid.interfaces import IAttributeUUID @implementer(IAttributeUUID) class ExampleContent(object): pass obj1 = ExampleContent() obj2 = ExampleContent() notify(ObjectCreatedEvent(obj1)) notify(ObjectCreatedEvent(obj2)) self.context.fieldvalue = lambda: obj1 field1 = ReferenceField( 'fieldname1', relationship="A", multiValued=False, widget=RelatedItemsWidget(), ) field1.accessor = "fieldvalue" base_args1 = field1.widget._base_args(self.context, field1, self.request) # noqa self.assertDictContainsSubset( { 'name': 'fieldname1', 'value': '{}'.format(IUUID(obj1)), 'pattern': 'relateditems', }, base_args1) self.assertDictContainsSubset( { 'separator': ';', 'orderable': True, 'maximumSelectionSize': 1, 'vocabularyUrl': '/@@getVocabulary?name=' 'plone.app.vocabularies.Catalog' '&field=fieldname1', 'basePath': '/Plone/doc', 'contextPath': '/Plone/doc', 'rootPath': '/', 'rootUrl': '', }, base_args1.get('pattern_options', {})) field2 = ReferenceField( 'fieldname2', relationship="A", multiValued=True, widget=RelatedItemsWidget(), ) field2.accessor = "fieldvalue" self.context.fieldvalue = lambda: [obj1, obj2] base_args2 = field2.widget._base_args(self.context, field2, self.request) # noqa self.assertDictContainsSubset( { 'name': 'fieldname2', 'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)), 'pattern': 'relateditems', }, base_args2) self.assertDictContainsSubset( { 'separator': ';', 'orderable': True, 'maximumSelectionSize': -1, 'vocabularyUrl': '/@@getVocabulary?name=' 'plone.app.vocabularies.Catalog' '&field=fieldname2', 'basePath': '/Plone/doc', 'contextPath': '/Plone/doc', 'rootPath': '/', 'rootUrl': '', }, base_args2.get('pattern_options', {}))
ATPathCriterionSchema = ATBaseCriterionSchema + Schema(( ReferenceField('value', required=1, mode="rw", write_permission=ChangeTopics, accessor="Value", mutator="setValue", allowed_types_method="getNavTypes", multiValued=True, keepReferencesOnCopy=True, relationship="paths", widget=RelatedItemsWidget( allow_search=1, label=_(u'label_path_criteria_value', default=u'Folders'), description=_(u'help_path_criteria_value', default=u'Folders to search in.'), base_query={'is_folderish': True}, restrict_browse=True, startup_directory='../')), BooleanField( 'recurse', mode="rw", write_permission=ChangeTopics, accessor="Recurse", default=False, widget=BooleanWidget( label=_(u'label_path_criteria_recurse', default=u'Search Sub-Folders'), description='', ),
ATContentTypeBaseSchema = ATContentTypeSchema relatedItemsField = ReferenceField('relatedItems', relationship='relatesTo', multiValued=True, isMetadata=True, languageIndependent=False, index='KeywordIndex', referencesSortable=True, keepReferencesOnCopy=True, write_permission=ModifyPortalContent, widget=RelatedItemsWidget(label=_( u'label_related_items', default=u'Related Items'), description='', visible={ 'edit': 'visible', 'view': 'invisible' })) ATContentTypeSchema.addField(relatedItemsField.copy()) #Enabling next / previous navigation NextPreviousAwareSchema = MetadataSchema( ( BooleanField( 'nextPreviousEnabled', #required=False, languageIndependent=True, schemata='metadata',
def test_multiple_widgets(self): from zope.event import notify from Products.Archetypes.Widget import RelatedItemsWidget from zope.interface import implements from zope.lifecycleevent import ObjectCreatedEvent from plone.uuid.interfaces import IUUID from plone.uuid.interfaces import IAttributeUUID class ExampleContent(object): implements(IAttributeUUID) obj1 = ExampleContent() obj2 = ExampleContent() notify(ObjectCreatedEvent(obj1)) notify(ObjectCreatedEvent(obj2)) with mock.patch('plone.app.widgets.utils.getUtility') as mock_method: self.context.fieldvalue = lambda: obj1 field1 = ReferenceField( 'fieldname1', relationship="A", multiValued=False, widget=RelatedItemsWidget(), ) field1.accessor = "fieldvalue" self.assertEqual( { 'name': 'fieldname1', 'value': '{}'.format(IUUID(obj1)), 'pattern': 'relateditems', 'pattern_options': { 'folderTypes': ['Folder'], 'homeText': u'Home', 'separator': ';', 'orderable': True, 'searchAllText': u'Entire site', 'searchText': u'Search', 'maximumSelectionSize': 1, 'vocabularyUrl': '/@@getVocabulary?name=' 'plone.app.vocabularies.Catalog' '&field=fieldname1', }, }, field1.widget._base_args(self.context, field1, self.request), ) field2 = ReferenceField( 'fieldname2', relationship="A", multiValued=True, widget=RelatedItemsWidget(), ) field2.accessor = "fieldvalue" self.context.fieldvalue = lambda: [obj1, obj2] self.assertEqual( { 'name': 'fieldname2', 'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)), 'pattern': 'relateditems', 'pattern_options': { 'folderTypes': ['Folder'], 'homeText': u'Home', 'separator': ';', 'orderable': True, 'searchAllText': u'Entire site', 'searchText': u'Search', 'maximumSelectionSize': -1, 'vocabularyUrl': '/@@getVocabulary?name=' 'plone.app.vocabularies.Catalog' '&field=fieldname2', }, }, field2.widget._base_args(self.context, field2, self.request), )
widget=SelectionWidget( label=_('created_type_label', default=u'Content type'), description=_('created_type_help', default=(u'Select the type of new content ' u'to be created.')))), (HAS_RELATED_ITEMS_WIDGET and atapi.StringField( 'targetFolder', required=True, write_permission=ModifyPortalContent, read_permission=ModifyPortalContent, storage=atapi.AnnotationStorage(), searchable=False, widget=RelatedItemsWidget( label=_('target_folder_label', default=u'Target folder'), description=_('target_folder_help', default=(u'Select the target folder, where ' u'created new content should be ' u'placed. Please, make sure that the ' u'folder allows adding ' u'content of the selected type.'))), relationship='targetFolder', multiValued=False) or atapi.ReferenceField( 'targetFolder', required=True, write_permission=ModifyPortalContent, read_permission=ModifyPortalContent, storage=atapi.AnnotationStorage(), searchable=False, widget=ReferenceBrowserWidget( label=_('target_folder_label', default=u'Target folder'), description=_( 'target_folder_help',