예제 #1
0
    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),
            )
예제 #2
0
    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),
            )
예제 #3
0
    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_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()

        self.assertEqual(
            {
                'name': 'fieldname',
                'value': '{};{}'.format(IUUID(obj1), IUUID(obj2)),
                'pattern': 'relateditems',
                'pattern_options': {
                    'folderTypes': ['Folder'],
                    'homeText': u'Home',
                    'searchAllText': u'Entire site',
                    'searchText': u'Search',
                    'separator': ';',
                    'orderable': True,
                    'maximumSelectionSize': -1,
                    'vocabularyUrl': '/@@getVocabulary?name='
                                     'plone.app.vocabularies.Catalog'
                                     '&field=fieldname',
                    'basePath': '/Plone/doc',
                    'rootPath': '/',
                    'sort_on': 'sortable_title',
                    'sort_order': 'ascending',
                    'treeVocabularyUrl': '/@@getVocabulary?name='
                                         'plone.app.vocabularies.Catalog',
                },
            },
            widget._base_args(self.context, self.field, self.request),
        )
예제 #5
0
    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),
        )
예제 #6
0
    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', {}))
예제 #7
0
    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', {}))
예제 #8
0
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='',
        ),
예제 #9
0
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',
예제 #10
0
    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),
            )
예제 #11
0
    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',