def setUp(self):
     self.portal = self.layer['portal']
     pp = self.portal.portal_properties
     self.sheet = getattr(pp, 'brasil_gov', None)
     # Como nao eh um teste funcional, este objeto
     # REQUEST precisa ser anotado com o browser layer
     alsoProvides(self.portal.REQUEST, IBarraInstalada)
def markTargetOnAdd(alias, event):
    """When the alias is added, mark the target with IHasAlias
    """
    
    target = aq_inner(alias._target)
    if target is not None and not IHasAlias.providedBy(target):
        alsoProvides(target, IHasAlias)
Exemplo n.º 3
0
    def listing(self, **kwargs):
        """listing page"""
        page = self.get_page(**kwargs)
        fs = self.get_grid()
        fs = fs.bind(instances=page, request=self.request)
        fs.readonly = True

        event = events.BeforeRenderEvent(self.request.model_class(), self.request, fs=fs, page=page)
        alsoProvides(event, events.IBeforeListingRenderEvent)
        zope.component.event.objectEventNotify(event)

        if self.request.format == 'json':
            values = []
            request = self.request
            for item in page:
                pk = _pk(item)
                fs._set_active(item)
                value = dict(id=pk,
                             absolute_url=request.fa_url(request.model_name, pk))
                if 'jqgrid' in request.GET:
                    fields = [_stringify(field.render_readonly()) for field in fs.render_fields.values()]
                    value['cell'] = [pk] + fields
                else:
                    value.update(fs.to_dict(with_prefix=bool(request.params.get('with_prefix'))))
                values.append(value)
            return self.render_json_format(rows=values,
                                           records=len(values),
                                           total=page.page_count,
                                           page=page.page)
        if 'pager' not in kwargs:
            pager = page.pager(**self.pager_args)
        else:
            pager = kwargs.pop('pager')
        return self.render_grid(fs=fs, id=None, pager=pager)
Exemplo n.º 4
0
def EnableCustomRisks(survey):
    """In order to allow the user to add custom risks, we create a new special
    module (marked with ICustomRisksModule) in which they may be created.
    """
    appconfig = component.getUtility(IAppConfig)
    if not asBool(appconfig["euphorie"].get("allow_user_defined_risks")):
        return 0
    if "custom-risks" in survey.keys():
        # We don't want to create the custom risks module twice.
        return 0
    args = dict(
        container=survey,
        type="euphorie.module",
        id="custom-risks",
        title=_(u"title_other_risks", default=u"Added risks (by you)"),
        safe_id=False,
        description=_(
            u"description_other_risks", default=u"In case you have identified "
            u"risks not included in the tool, you are able to add them now:"),
        optional=True,
        question=_(
            u"question_other_risks", default=u"<p>Would you now like to add "
            u"your own defined risks to this tool?</p><p><strong>Important:"
            u"</strong> In order to avoid duplicating risks, we strongly "
            u"recommend you to go first through all the previous modules, if "
            u"you have not done it yet.</p><p>If you don't need to add risks, "
            u"please select 'No.'</p>"),
    )
    try:
        module = api.content.create(**args)
    except api.exc.InvalidParameterError:
        args['id'] = "custom-risks-"+str(random.randint(0, 99999999))
        module = api.content.create(**args)
    alsoProvides(module, ICustomRisksModule)
    return args['id']
Exemplo n.º 5
0
 def __call__(self):
     alsoProvides(self.request, IDisableCSRFProtection)
     data = self.read_json()
     response_data = {
         'github_members': {},
         'github_stats': {},
         'stackoverflow': {},
         'pypi': {},
         'twitter': {},
         'community': {},
     }
     members = api.user.get_users()
     self.add_github_member_related_data(
         members,
         data,
         response_data['github_members']
     )
     self.add_stackoverflow_data(
         members,
         data,
         response_data['stackoverflow']
     )
     self.add_twitter_data(
         members,
         data,
         response_data['twitter']
     )
     self.add_github_overall_stats(data, response_data['github_stats'])
     # Disable pypi stats since they always return 0
     # self.add_pypi_stats(data, response_data['pypi'])
     self.add_community_stats(data, response_data['community'])
     return self.json_success(response_data)
    def update(self):
        # check that either the secret_key was passed in the request or the user has modify rights
        key = self.request.form.get('key', None)
        if not key or key != self.context.secret_key:
            sm = getSecurityManager()
            if not sm.checkPermission(ModifyPortalContent, self.context):
                raise Unauthorized

        self.receipt = IDonationReceipt(self.context)()

        # Create a wrapped form for inline rendering
        from collective.salesforce.fundraising.forms import CreateDonationDonorQuote
        # Only show the form if a donor quote can be created
        if self.context.can_create_donor_quote():
            self.donor_quote_form = CreateDonationDonorQuote(self.context, self.request)
            alsoProvides(self.donor_quote_form, IWrappedForm)
            self.donor_quote_form.update()
            self.donor_quote_form.widgets.get('name').value = u'%s %s' % (self.context.first_name, self.context.last_name)
            if self.context.contact_sf_id and self.donor_quote_form.widgets.get('contact_sf_id'):
                self.donor_quote_form.widgets.get('contact_sf_id').value = unicode(self.context.contact_sf_id)
            self.donor_quote_form.widgets.get('key').value = unicode(self.context.secret_key)
            self.donor_quote_form.widgets.get('amount').value = int(self.context.amount)
            self.donor_quote_form_html = self.donor_quote_form.render()

        # Determine any sections that should be collapsed
        self.hide = self.request.form.get('hide', [])
        if self.hide:
            self.hide = self.hide.split(',')
Exemplo n.º 7
0
def set_browserlayer(request):
    """Set the BrowserLayer for the request.

    We have to set the browserlayer manually, since importing the profile alone
    doesn't do it in tests.
    """
    alsoProvides(request, IPlonesocialNetworkLayer)
    def test_basic_tile_purge_cache(self):
        provideHandler(queuePurge)

        request = self.request
        alsoProvides(request, IAttributeAnnotatable)
        setRequest(request)

        registry = queryUtility(IRegistry)
        registry.registerInterface(ICachePurgingSettings)
        provideUtility(registry, IRegistry)

        settings = registry.forInterface(ICachePurgingSettings)
        settings.enabled = True
        settings.cachingProxies = ('http://*****:*****@@collective.cover.basic/test',
                '/c1/@@collective.cover.basic/test/@@images/image',
                '/c1/@@collective.cover.basic/test/@@images/icon',
                '/c1/@@collective.cover.basic/test/@@images/mini',
                '/c1/@@collective.cover.basic/test/@@images/large',
                '/c1/@@collective.cover.basic/test/@@images/listing',
                '/c1/@@collective.cover.basic/test/@@images/thumb',
                '/c1/@@collective.cover.basic/test/@@images/preview',
                '/c1/@@collective.cover.basic/test/@@images/tile']),
            IAnnotations(request)['plone.cachepurging.urls'])
    def _create_site_with_request(self):
        request = Dummy(getPreferredLanguages=lambda: [])
        alsoProvides(request, IUserPreferredLanguages)
        site = Dummy(REQUEST=request,
                     getSiteManager=getGlobalSiteManager)

        return site
 def test_viewlet(self):
     request = self.folder.REQUEST
     view = self.folder.restrictedTraverse('@@plone')
     alsoProvides(view, IViewView)
     self.assertTrue(IViewView.providedBy(view))
     viewlet_manager = queryMultiAdapter(
         (self.folder, request, view),
         IContentProvider,
         'plone.abovecontentbody')
     viewlet = queryMultiAdapter(
         (self.folder, request, view, viewlet_manager),
         IViewlet,
         'collective.calltoaction')
     self.assertTrue(viewlet is not None)
     viewlet.update()
     # We expect data from the portlet assignment in
     # profiles/testfixture/portlets.xml.
     self.assertEqual(len(viewlet.data), 1)
     portlet = viewlet.data[0]
     self.assertIn('assignment', portlet.keys())
     self.assertIn('html', portlet.keys())
     assignment = portlet['assignment']
     self.assertEqual(assignment.milli_seconds_until_overlay, 1000)
     portlet_html = portlet['html']
     self.assertIn('portletCallToAction', portlet_html)
     self.assertIn('portletCallToAction', portlet_html)
     viewlet_html = viewlet.render()
     self.assertIn(portlet_html, viewlet_html)
     self.assertIn('data-timeout="1000"', viewlet_html)
    def test_portlet_inheritance(self):
        portal = self.layer['portal']
        folder = portal.folder2
        request = folder.REQUEST
        view = folder.restrictedTraverse('@@plone')
        alsoProvides(view, IViewView)
        self.assertTrue(IViewView.providedBy(view))
        viewlet_manager = queryMultiAdapter(
            (folder, request, view),
            IContentProvider,
            'plone.abovecontentbody')
        viewlet = queryMultiAdapter(
            (folder, request, view, viewlet_manager),
            IViewlet,
            'collective.calltoaction')
        self.assertTrue(viewlet is not None)
        viewlet.update()
        # The portlet from the test fixture is blocked.
        self.assertEqual(len(viewlet.data), 0)

        # Show the action globally.  This ignores portlet inheritance.
        registry = getUtility(IRegistry)
        settings = registry.forInterface(
            ICollectiveCalltoactionSettings, check=False)
        self.assertFalse(settings.show_global)
        settings.show_global = True

        # Now we should see the portlet
        viewlet.update()
        self.assertEqual(len(viewlet.data), 1)
Exemplo n.º 12
0
 def __call__(self):
     """Sync a single user profile with external property providers"""
     alsoProvides(self.request, IDisableCSRFProtection)
     userprofile = self.context
     IUserProfileManager(userprofile).sync()
     api.portal.show_message(message=_("External property sync complete."), request=self.request)
     return self.request.response.redirect(userprofile.absolute_url())
Exemplo n.º 13
0
    def test_export_with_missing_schema_does_not_error(self):

        xml = """\
<registry>
  <record name="test.export.simple" interface="non.existant.ISchema" field="blah">
    <field type="plone.registry.field.TextLine">
      <default>N/A</default>
      <title>Simple record</title>
    </field>
    <value>Sample value</value>
  </record>
</registry>"""

        self.registry.records['test.export.simple'] = \
            Record(field.TextLine(title=u"Simple record", default=u"N/A"), value=u"Sample value")

        # Note: These are nominally read-only!
        self.registry.records['test.export.simple'].field.interfaceName = 'non.existant.ISchema'
        self.registry.records['test.export.simple'].field.fieldName = 'blah'

        alsoProvides(self.registry.records['test.export.simple'], IInterfaceAwareRecord)

        context = DummyExportContext(self.site)
        exportRegistry(context)

        self.assertEquals('registry.xml', context._wrote[0][0])
        self.assertXmlEquals(xml, context._wrote[0][1])
Exemplo n.º 14
0
def apply_request_layer_by_url(event):
    """Apply a request layer by URL.

    This subscriber applies a request-layer on the ``request`` object
    based on the request to allow layer-based component registration
    of user interface elements.
    
    NOTE: only one layer is applied -- the first one to match.
    """
    request = event.request
    #path = "/".join(reversed(request.getTraversalStack()))
    path = url.get_destination_url_path(request)
    path_info = request.get("PATH_INFO")
    log.debug(" [apply_request_layer_by_url] path=%s path_info=%s" % (
                                                            path, path_info))
    for condition, layer in mapping_on_path:
        if condition.match(path) is not None:
            log.debug("Adding %s layer to request for path <%s>" % (layer, path))
            interface.alsoProvides(request, layer)
            break # only apply first matching layer
    else: # there was no break, no mapping_on_path layer added
        # !+IResourceNonLayer(mr, nov-2010) almost never passes thru here
        for condition, layer in mapping_on_path_info:
            if condition.match(path_info) is not None:
                log.debug("Adding %s layer to request for path_info <%s>" % (
                                                            layer, path_info))
                interface.alsoProvides(request, layer)
                break
Exemplo n.º 15
0
    def test_multiple_selection(self):
        """The pattern_options key maximumSelectionSize shouldn't be
        set when the field allows multiple selections"""
        from plone.app.widgets.dx import RelatedItemsFieldWidget
        from zope.schema.interfaces import ISource
        from zope.schema.vocabulary import VocabularyRegistry

        context = Mock(absolute_url=lambda: 'fake_url')
        context.portal_properties.site_properties\
            .getProperty.return_value = ['SomeType']
        field = List(
            __name__='selectfield',
            value_type=Choice(vocabulary='foobar')
        )
        widget = RelatedItemsFieldWidget(field, self.request)
        widget.context = context

        vocab = Mock()
        alsoProvides(vocab, ISource)
        with mock.patch.object(VocabularyRegistry, 'get', return_value=vocab):
            widget.update()
            base_args = widget._base_args()
        patterns_options = base_args['pattern_options']
        self.assertFalse('maximumSelectionSize' in patterns_options)
        self.assertEqual(
            patterns_options['vocabularyUrl'],
            '/@@getVocabulary?name=foobar&field=selectfield',
            )
Exemplo n.º 16
0
 def update(self):
     super(TwitterSearchViewlet, self).update()
     z2.switch_on(self, request_layer=IFormLayer)
     self.form = SearchForm(aq_inner(self.context), self.request)
     # necessary to avoid maximum recursion error
     alsoProvides(self.form, IWrappedForm)
     self.form.update()
Exemplo n.º 17
0
def set_browserlayer(request):
    """Set the BrowserLayer for the request.

    We have to set the browserlayer manually, since importing the profile alone
    doesn't do it in tests.
    """
    alsoProvides(request, IProductShopExtensionLayer)
    def setUp(self):
        self.portal = self.layer['portal']
        self.request = self.layer['request']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.portal.invokeFactory('Folder', 'test-folder')
        self.folder = self.portal['test-folder']
        interface.alsoProvides(
            self.request,
            interfaces.IDiscussionLayer
        )

        self.workflowTool = getToolByName(self.portal, 'portal_workflow')
        self.workflowTool.setDefaultChain('one_state_workflow')

        typetool = self.portal.portal_types
        typetool.constructContent('Document', self.portal, 'doc1')
        self.portal_discussion = getToolByName(
            self.portal,
            'portal_discussion',
            None
        )
        self.membershipTool = getToolByName(self.folder, 'portal_membership')
        self.memberdata = self.portal.portal_memberdata
        context = getattr(self.portal, 'doc1')
        self.viewlet = CommentsViewlet(context, self.request, None, None)

        # Allow discussion
        registry = queryUtility(IRegistry)
        settings = registry.forInterface(IDiscussionSettings)
        settings.globally_enabled = True
    def setUp(self):
        self.portal = self.layer['portal']
        self.request = self.layer['request']
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.portal.invokeFactory('Folder', 'test-folder')
        self.folder = self.portal['test-folder']

        interface.alsoProvides(
            self.portal.REQUEST,
            interfaces.IDiscussionLayer,
        )

        typetool = self.portal.portal_types
        typetool.constructContent('Document', self.portal, 'doc1')
        wftool = getToolByName(self.portal, "portal_workflow")
        wftool.doActionFor(self.portal.doc1, action='publish')
        self.discussionTool = getToolByName(
            self.portal,
            'portal_discussion',
            None
        )
        self.discussionTool.overrideDiscussionFor(self.portal.doc1, False)
        self.membershipTool = getToolByName(self.folder, 'portal_membership')
        self.memberdata = self.portal.portal_memberdata
        self.context = getattr(self.portal, 'doc1')

        # Allow discussion
        registry = queryUtility(IRegistry)
        settings = registry.forInterface(IDiscussionSettings)
        settings.globally_enabled = True
 def setUp(self):
     self.portal = self.layer['portal']
     self.request = self.layer['request']
     alsoProvides(self.request, IBrowserLayer)
     with api.env.adopt_roles(['Manager']):
         self.journal = api.content.create(
             self.portal, 'Journal', 'journal')
    def __iter__(self):

        for item in self.previous:
            pathkey = self.pathkey(*item.keys())[0]
            fileskey = self.fileskey(*item.keys())[0]

            if not (pathkey and fileskey):
                yield item
                continue
            if 'interfaces' not in item[fileskey]:
                yield item
                continue

            path = item[pathkey]
            obj = self.context.unrestrictedTraverse(path, None)
            if obj is None:         # path doesn't exist
                yield item
                continue

            ifaces = self.extractIfaces(obj, item[fileskey]['interfaces']['data'])

            if ifaces == []:         # no interfaces
                yield item
                continue

            alsoProvides(obj, *ifaces)

            yield item

        self.catalog.reindexIndex('object_provides', None)
Exemplo n.º 22
0
 def update(self):
     """ Update form - see interfaces.IForm """
     self.formMaybeForceSSL()
     super(EasyFormForm, self).update()
     self.template = self.form_template
     if self.request.method == 'POST' and \
             not self.context.thanksPageOverride:
         data, errors = self.extractData()
         if errors:
             return
         data = self.updateServerSideData(data)
         self.thanksPage = True
         self.template = self.thank_you_template
         if self.context.showFields:
             self.fields = self.setThanksFields(self.base_fields)
             for group in self.groups:
                 group.fields = self.setThanksFields(
                     self.base_groups.get(group.label))
         self.mode = DISPLAY_MODE
         # we need to update the widgets in display mode again
         super(EasyFormForm, self).update()
         prologue = self.context.thanksPrologue
         epilogue = self.context.thanksEpilogue
         self.thanksPrologue = prologue and dollar_replacer(
             prologue.output, data)
         self.thanksEpilogue = epilogue and dollar_replacer(
             epilogue.output, data)
         alsoProvides(self.request, IEasyFormThanksPage)
    def testViewlet(self):
        viewlets = self._get_viewlets(self.portal, 'plone.htmlhead.links')
        self.assertFalse(VIEWLET_NAME in viewlets.keys())

        alsoProvides(self.portal, IOpengraphable)
        viewlets = self._get_viewlets(self.portal, 'plone.htmlhead.links')
        self.assertTrue(VIEWLET_NAME in viewlets.keys())
Exemplo n.º 24
0
    def __call__(self):
        alsoProvides(self, IViewView)
        manager = queryMultiAdapter(
            (self.context, self.request, self),
            IViewletManager, name='plone.belowcontent'
        )
        viewlet = queryMultiAdapter(
            (self.context, self.request, self, manager),
            IViewlet, name='plone.comments'
        )
        if viewlet is not None:
            viewlet.form = TileCommentForm
            viewlet.update()

            if isinstance(viewlet.form, TileCommentForm):
                viewlet.form.action = self.url

            # Fix submit redirect from tile to context
            if 'location' in self.request.response.headers:
                location = self.request.response.getHeader('location')
                self.request.response.redirect(''.join([
                    self.context.absolute_url(), '#', location.split('#')[-1]
                ]))
            return protect(u'<html><body>%s</body></html>' % viewlet.render())
        else:
            return u'<html><body></body></html>'
Exemplo n.º 25
0
 def __call__(self, *args, **kw):
     obj = self._callable(*args, **kw)
     if self.provides:
         alsoProvides(obj, self.provides)
     obj.title = kw.pop("title", self.title)
     obj.description = kw.pop("description", self.description)
     return obj
Exemplo n.º 26
0
def _fixup_zope_interface():
    # Make sure the provided and implementedBy objects
    # can be iterated.
    # Note that we DO NOT use the _iteratorChecker, but instead
    # we use NoProxy to be sure that the results (of iteration or not) are not
    # proxied. On Python 2, these objects are builtin and don't go through the
    # checking process at all, much like BTrees, so NoProxy is necessary for
    # compatibility. On Python 3, prior to this, iteration was simply not allowed.
    from zope.interface import providedBy
    from zope.interface import alsoProvides

    class I1(Interface):
        pass

    class I2(Interface):
        pass

    @implementer(I1)
    class O(object):
        pass

    o = O()


    # This will be athe zope.interface.implementedBy from the class
    # a zope.interface.declarations.Implements
    _default_checkers[type(providedBy(o))] = NoProxy

    alsoProvides(o, I2)
    # This will be the zope.interface.Provides from the instance
    _default_checkers[type(providedBy(o))] = NoProxy
Exemplo n.º 27
0
    def test_deny_dublincore_view(self):
        """Tests the denial of dublincore view permissions to anonymous.

        Users who can view a folder contents page but cannot view dublin core
        should still be able to see the folder items' names, but not their
        title, modified, and created info.
        """
        # add an item that can be viewed from the root folder
        obj = OrderedContainer()
        alsoProvides(obj, IAttributeAnnotatable)

        self.getRootFolder()['obj'] = obj
        IZopeDublinCore(obj).title = u'My object'

        # deny zope.app.dublincore.view to zope.Anonymous
        prm = IRolePermissionManager(self.getRootFolder())
        prm.denyPermissionToRole('zope.dublincore.view', 'zope.Anonymous')
        # Try both spellings just in case we are used with an older zope.dc
        prm.denyPermissionToRole('zope.app.dublincore.view', 'zope.Anonymous')
        transaction.commit()

        response = self.publish('/')
        self.assertEquals(response.getStatus(), 200)
        body = response.getBody()

        # confirm we can see the file name
        self.assert_(body.find('<a href="obj">obj</a>') != -1)

        # confirm we *cannot* see the metadata title
        self.assert_(body.find('My object') == -1)
Exemplo n.º 28
0
    def test_converter_RelationList(self):
        from plone.app.z3cform.converters import RelatedItemsDataConverter
        from z3c.relationfield.interfaces import IRelationList
        field = List()
        alsoProvides(field, IRelationList)
        brain1 = Mock(getObject=Mock(return_value='obj1'), UID='id1')
        brain2 = Mock(getObject=Mock(return_value='obj2'), UID='id2')
        portal_catalog = Mock(return_value=[brain1, brain2])
        widget = Mock(separator=';')
        converter = RelatedItemsDataConverter(field, widget)

        self.assertEqual(converter.toWidgetValue(None), None)
        with mock.patch(
            'plone.app.z3cform.converters.IUUID',
            side_effect=['id1', 'id2']
        ):
            self.assertEqual(
                converter.toWidgetValue(['obj1', 'obj2']), 'id1;id2')

        self.assertEqual(converter.toFieldValue(None), None)
        with mock.patch(
                'plone.app.z3cform.converters.getToolByName',
                return_value=portal_catalog):
            self.assertEqual(
                converter.toFieldValue('id1;id2'), ['obj1', 'obj2'])
 def process(self):        
     alsoProvides(self.request, IDisableCSRFProtection)
     """ do main work here """
     context = api.content.get(path='/library/ws/resources')
     
     computer_id = self.request.form.get('computerId','')
     print computer_id
     print idnormalizer.normalize(computer_id)
     available = True 
     if int(self.request.form.get('status', -1)) <= 0:
         available = False
     
     brains = api.content.find(context=context, portal_type='polklibrary.type.computeravailability.models.resource', id=idnormalizer.normalize(computer_id))
     if brains:
         obj = brains[0].getObject()
         obj.activated = available
         obj.reindexObject()
         self._data['status'] = 'Updated'
     else:
         obj = api.content.create(
                     type='polklibrary.type.computeravailability.models.resource',
                     title=computer_id,
                     container=context,
                 )
         obj.activated = available
         obj.resources = u"PC"  # Default since most are
         api.content.transition(obj=obj, transition='publish')
         obj.reindexObject()
         self._data['status'] = 'Created'
Exemplo n.º 30
0
 def factory(self):
     #base = cachedItemMixin()
     #base._key = self.key()
     ci = type('SimpleItemMapperCachedItem', (cachedItemMixin,), {key:None for key in self.mapper.keys()})()
     ci._key = self.key()
     alsoProvides(ci, ICachedItem)
     return ci
Exemplo n.º 31
0
 def __init__(self, portal_setup):
     self.portal_setup = portal_setup
     alsoProvides(portal_setup.REQUEST, IDuringUpgrade)
Exemplo n.º 32
0
 def setUp(self):
     self.portal = self.layer['portal']
     alsoProvides(self.portal.REQUEST, ISocialLikeLayer)
     self.plugins = dict(getUtilitiesFor(IPlugin))
Exemplo n.º 33
0
 def setUp(self):
     self.portal = self.layer['portal']
     # Como nao eh um teste funcional, este objeto
     # REQUEST precisa ser anotado com o browser layer
     alsoProvides(self.portal.REQUEST, IBarraInstalada)
Exemplo n.º 34
0
    )

    dexteritytextindexer.searchable('title')
    title = schema.TextLine(title=_(u'label_title', default=u'Title'),
                            required=True)

    dexteritytextindexer.searchable('description')
    description = schema.Text(
        title=_(u'label_description', default=u'Description'),
        required=False,
        missing_value=u'',
        default=u'',
    )


alsoProvides(IOpenGeverBase, form.IFormFieldProvider)


class IOpenGeverBaseMarker(Interface):
    pass


class OpenGeverBase(metadata.MetadataBase):
    def _get_title(self):
        return self.context.title

    def _set_title(self, value):
        if isinstance(value, str):
            raise ValueError('Title must be unicode.')
        self.context.title = value
Exemplo n.º 35
0
 def provide_storagetype_interfaces(self, instance, storage_types):
     """Assign any selected storage type interfaces to the storage.
     """
     for storage_type in storage_types:
         inter = resolve(storage_type)
         alsoProvides(instance, inter)
Exemplo n.º 36
0
class IRelatedItems(Interface):
    """Behavior interface to make a Dexterity type support related items.
    """

    if HAS_CONTENTTREE and not HAS_WIDGETS:

        relatedItems = RelationList(title=_(u'label_related_items',
                                            default=u'Related Items'),
                                    default=[],
                                    value_type=RelationChoice(
                                        title=u"Related",
                                        source=ObjPathSourceBinder()),
                                    required=False)

    else:

        relatedItems = RelationList(
            title=_(u'label_related_items', default=u'Related Items'),
            default=[],
            value_type=RelationChoice(
                title=u"Related", vocabulary="plone.app.vocabularies.Catalog"),
            required=False)


fieldset = Fieldset('categorization',
                    label=_(u'Categorization'),
                    fields=['relatedItems'])
IRelatedItems.setTaggedValue(FIELDSETS_KEY, [fieldset])

alsoProvides(IRelatedItems, IFormFieldProvider)
Exemplo n.º 37
0
 def __init__(self, context, request):
     super(FolderContentsView, self).__init__(context, request)
     alsoProvides(request, IContentsPage)
Exemplo n.º 38
0
 def setUp(self):
     self.portal = self.layer["portal"]
     self.request = self.layer["request"]
     alsoProvides(self.request, IKitconceptDsgvoLayer)
     self.view = api.content.get_view("export-users", self.portal, self.request)
Exemplo n.º 39
0
from z3c.form import group, field

from plone.namedfile.interfaces import IImageScaleTraversable
from plone.namedfile.field import NamedImage, NamedFile
from plone.namedfile.field import NamedBlobImage, NamedBlobFile
from plone.app.z3cform.wysiwyg import WysiwygFieldWidget

from plone.app.textfield import RichText

from z3c.relationfield.schema import RelationList, RelationChoice
from plone.formwidget.contenttree import ObjPathSourceBinder
from plone.multilingualbehavior.directives import languageindependent
from collective import dexteritytextindexer

from interfaithclimate.signup import MessageFactory as _

# Interface class; used to define content-type schema.


class IStatement(form.Schema, IImageScaleTraversable):
    """
    Statement
    """
    form.widget(body=WysiwygFieldWidget)
    body = schema.Text(title=u"Body")
    pass


alsoProvides(IStatement, IFormFieldProvider)
Exemplo n.º 40
0
 def update(self):
     super(Renderer, self).update()
     z2.switch_on(self, request_layer=IFormLayer)
     self.form = self.form(aq_inner(self.context), self.request)
     alsoProvides(self.form, IWrappedForm)
     self.form.update()
Exemplo n.º 41
0
        request=context.REQUEST,
    )
    utility = queryUtility(IPolls, name='collective.polls')
    navigation_root = portal_state.navigation_root()
    polls = utility.recent_polls(context=navigation_root,
                                 show_all=False,
                                 limit=999999)

    values = [SimpleTerm(value='latest', title=_(u'Latest opened poll'))]
    values.extend(
        SimpleTerm(value=i.UID, title=i.Title.decode('utf-8')) for i in polls)

    return SimpleVocabulary(values)


alsoProvides(PossiblePolls, IContextSourceBinder)


class IVotePortlet(IPortletDataProvider):
    """A portlet."""

    header = schema.TextLine(
        title=_(u'Header'),
        description=_(u'The header for the portlet. Leave empty for none.'),
        required=False,
    )

    poll = schema.Choice(
        title=_(u'Poll'),
        description=_(u'Which poll to show in the portlet.'),
        required=True,
Exemplo n.º 42
0
 def fix_frontpage_permissions(self, portal):
     if 'front-page' in portal:
         obj = portal['front-page']
         alsoProvides(obj, IHaveNoBreadCrumbs)
         mp = obj.manage_permission
         mp(permissions.View, ['Anonymous'], 1)
Exemplo n.º 43
0
    def reply(self):
        # Disable CSRF protection
        if "IDisableCSRFProtection" in dir(plone.protect.interfaces):
            alsoProvides(self.request,
                         plone.protect.interfaces.IDisableCSRFProtection)

        portal = getSite()

        # validate important data
        data = json_body(self.request)
        self.errors = []
        self.validate_input_data(portal, data)
        security = getAdapter(self.context, ISecuritySchema)
        registration = getToolByName(self.context, "portal_registration")

        general_usage_error = (
            "Either post to @users to create a user or use "
            "@users/<username>/reset-password to update the password.")
        if len(self.params) not in [0, 2]:
            raise Exception(general_usage_error)

        if len(self.params) == 2:
            if self.params[1] == "reset-password":
                return self.update_password(data)
            raise Exception("Unknown Endpoint @users/%s/%s" % self.params)

        # Add a portal member
        if not self.can_add_member:
            return self._error(403, "Forbidden",
                               "You need AddPortalMember permission.")

        if self.errors:
            self.request.response.setStatus(400)
            return dict(error=dict(
                type="WrongParameterError",
                message="Error in fields. {}".format(self.errors_to_string()),
                errors=self.errors,
            ))

        username = data.pop("username", None)
        email = data.pop("email", None)
        password = data.pop("password", None)
        roles = data.pop("roles", ["Member"])
        send_password_reset = data.pop("sendPasswordReset", None)
        properties = data

        if PLONE5:
            # We are improving the way the userid/login_name is generated using
            # Plone's plone.app.users utilities directly. Plone 4 lacks of the
            # login_name one, so we leave it as it is, improving the Plone 5
            # story
            user_id_login_name_data = {
                "username": username,
                "email": email,
                "fullname": data.get("fullname", ""),
            }

            register_view = getMultiAdapter((self.context, self.request),
                                            name="register")

            register_view.generate_user_id(user_id_login_name_data)
            register_view.generate_login_name(user_id_login_name_data)

            user_id = user_id_login_name_data.get("user_id",
                                                  data.get("username"))
            login_name = user_id_login_name_data.get("login_name",
                                                     data.get("username"))

            username = user_id
            properties["username"] = user_id
        else:
            # set username based on the login settings (username or email)
            if security.use_email_as_login:
                username = email
                properties["username"] = email
            else:
                properties["username"] = username

        properties["email"] = email

        if not self.can_manage_users and not security.enable_user_pwd_choice:
            send_password_reset = True
        if send_password_reset:
            password = registration.generatePassword()
        # Create user
        try:
            registration = getToolByName(portal, "portal_registration")
            user = registration.addMember(username,
                                          password,
                                          roles,
                                          properties=properties)
        except ValueError as e:
            self.request.response.setStatus(400)
            return dict(
                error=dict(type="MissingParameterError", message=str(e)))

        if PLONE5:
            # After user creation, we have to fix the login_name if it differs.
            # That happens when the email login is enabled and we are using
            # UUID as user ID security settings.
            if user_id != login_name:
                # The user id differs from the login name.  Set the login
                # name correctly.
                pas = getToolByName(self.context, "acl_users")
                pas.updateLoginName(user_id, login_name)

        if send_password_reset:
            registration.registeredNotify(username)
        self.request.response.setStatus(201)
        self.request.response.setHeader(
            "Location",
            portal.absolute_url() + "/@users/" + username)
        serializer = queryMultiAdapter((user, self.request), ISerializeToJson)
        return serializer()
Exemplo n.º 44
0
def setUp(self):
    layer = self.globs['layer']
    # Update global variables within the tests.
    self.globs.update({
        'portal': layer['portal'],
        'portal_url': layer['portal'].absolute_url(),
        'browser': Browser(layer['app']),
    })
    ztc.utils.setupCoreSessions(layer['app'])
    portal = self.globs['portal']
    browser = self.globs['browser']
    portal_url = self.globs['portal_url']
    browser.setBaseUrl(portal_url)

    browser.handleErrors = True
    portal.error_log._ignored_exceptions = ()

    setRoles(portal, TEST_USER_ID, ['Manager'])

    portal.invokeFactory('CartFolder', 'cfolder')
    portal.invokeFactory(
        'ShippingMethod',
        'method01',
        title="ShippingMethod01",
        base_charge=10.0,
        weight_charge=5.0,
    )
    method01 = portal.method01
    method01.reindexObject()

    ## Create Product00
    portal.invokeFactory(
        'Document',
        'doc00',
        title='Product00',
        description='Description of Product00',
    )
    doc00 = portal.doc00
    alsoProvides(doc00, IAddableToCart)
    IAnnotations(doc00)['collective.cart.core'] = ProductAnnotations()
    product00 = IProduct(doc00)
    product00.price = Decimal('100.00')
    product00.unlimited_stock = True
    product00.max_addable_quantity = 5

    ## Create Product01
    portal.invokeFactory(
        'Document',
        'doc01',
        title='Product01',
        description='Description of Product01',
    )
    doc01 = portal.doc01
    alsoProvides(doc01, IAddableToCart)
    IAnnotations(doc01)['collective.cart.core'] = ProductAnnotations()
    product01 = IProduct(doc01)
    product01.price = Decimal('10.00')
    product01.stock = 50
    product01.max_addable_quantity = 30

    ## Create Product02
    portal.invokeFactory(
        'Document',
        'doc02',
        title='Product02',
        description='Description of Product02',
    )
    doc02 = portal.doc02
    alsoProvides(doc02, IAddableToCart)
    IAnnotations(doc02)['collective.cart.core'] = ProductAnnotations()
    product02 = IProduct(doc02)
    product02.price = Decimal('5.00')
    product02.stock = 20
    product02.max_addable_quantity = 50

    transaction.commit()
Exemplo n.º 45
0
    """Add SQL content"""

    sql_id = schema.Choice(
        title=_(u"label_sql_id", default=u"SQL Item ID"),
        description=_(u"help_sql_id_column",
                      default=u"The ID of the SQL content item"),
        required=False,
        vocabulary="collective.behavior.sql.AvailableSQLAlchemyItemIDs")

    form.omitted('sql_virtual')
    sql_virtual = schema.Bool(title=_(u"label_sql_virtual",
                                      default=u"SQL Virtual"),
                              default=False)


alsoProvides(ISQLContent['sql_id'], ILanguageIndependentField)


@implementer(ISchemaPlugin)
class SQLContentSchemaAdapter(object):
    def __call__(self):
        raise ValueError(self)


@implementer(ISQLContent)
@adapter(IDexterityContent)
class SQLContent(object):
    def __init__(self, context):
        self.context = context

    def _get_sql_id(self):
Exemplo n.º 46
0
 def setUp(self):
     self.portal = self.layer['portal']
     self.request = self.layer["request"]
     alsoProvides(self.request, IFormLayer)
     self.view = FaleConoscoForm(self.portal, self.request)
     self.request.form['form.widgets.nome'] = '123123132131'
Exemplo n.º 47
0
# changes title and buttons (what to add) in view for AceItem
# extracted from JAVA code:
_datatypes = """
acesearch-datainfotype-lbl-DOCUMENT=Publications and reports
acesearch-datainfotype-lbl-INFORMATIONSOURCE=Information portals
acesearch-datainfotype-lbl-MAPGRAPHDATASET=Maps, graphs and datasets
acesearch-datainfotype-lbl-INDICATOR=Indicators
acesearch-datainfotype-lbl-GUIDANCE=Guidance
acesearch-datainfotype-lbl-TOOL=Tools
acesearch-datainfotype-lbl-RESEARCHPROJECT=Research and knowledge projects
acesearch-datainfotype-lbl-ORGANISATION=Organisations
acesearch-datainfotype-lbl-MEASURE=Adaptation options
acesearch-datainfotype-lbl-ACTION=Case studies
"""
aceitem_datatypes_vocabulary = vocab_from_labels(_datatypes)
alsoProvides(aceitem_datatypes_vocabulary, IVocabularyFactory)

# changes how the view for AceItem behaves (what it shows)
_storagetypes = [
    "PLAINMETADATA",
    "PROJECT",
    "MAPLAYER",
    "URL",
    "SETOFMAPS",
    "MEASURE",
]
aceitem_storagetypes_vocabulary = generic_vocabulary(_storagetypes)
alsoProvides(aceitem_storagetypes_vocabulary, IVocabularyFactory)

_sectors = """
acesearch-sectors-lbl-AGRICULTURE=Agriculture and Forest
Exemplo n.º 48
0
        title=_(u"Subtitle file"),
        description=_(u"Provide a file in srt format"),
        required=False)

    form.omitted('metadata')
    metadata = schema.Text(required=False)

    transcript = RichText(title=_(u"Transcript"),
                          default_mime_type='text/html',
                          output_mime_type='text/html',
                          allowed_mime_types=('text/html', 'text/plain'),
                          default=u"",
                          required=False)


alsoProvides(IVideo, IFormFieldProvider)


class IAudio(model.Schema):

    # main file will always be converted to mp4
    form.widget(audio_file=StreamNamedFileFieldWidget)
    model.primary('audio_file')
    audio_file = namedfile.NamedBlobFile(title=_(u"Audio File"),
                                         description=u"",
                                         required=True,
                                         constraint=valid_audio)

    form.omitted('metadata')
    metadata = schema.Text(required=False)
 def __init__(self, context, request):
     alsoProvides(request, IDisableCSRFProtection)
     self.context = context
     self.request = request
     self.no_duplicate_login = context.unrestrictedTraverse(
         "acl_users/no_duplicate_login")
Exemplo n.º 50
0
class IOGMailMarker(Interface):
    """Marker Interface for opengever mails."""


class IOGMail(form.Schema):
    """Opengever specific behavior,
    which add a title Field to the form."""

    dexteritytextindexer.searchable('title')
    title = schema.TextLine(
        title=_(u'label_title', default=u'Title'),
        required=False,
    )


alsoProvides(IOGMail, IFormFieldProvider)


class OGMail(Item):
    """Opengever specific mail class."""
    @property
    def msg(self):
        """ returns an email.Message instance
        (copied from ftw.mail inheritance hasn't worked)
        """
        if self.message is not None:
            data = self.message.data
            temp_msg = email.message_from_string(data)
            if temp_msg.get('Subject') and '\n\t' in temp_msg['Subject']:
                # It's a long subject header than has been separated by
                # line break and tab - fix it
Exemplo n.º 51
0
 def setUp(self):
     # Make sure our browserlayer is applied
     alsoProvides(IPloneLoginLayer)
     self.browser = Browser(self.layer['app'])
Exemplo n.º 52
0
            )  # makes sure repo has all branches and tags, cleans out old

            try:
                r.head.reference
            except TypeError:
                r.head.reference = r.heads[
                    0]  # make sure we're not in a detached head state (otherwise, pull won't work)
                r.head.reset(index=True, working_tree=True)

            origin.pull()

        #the git file provider factory expects a config with both 'GitReposBaseDir'
        # and MellonSnippet.  We have both of those...but not in the same
        # namespace.  We'll create a new config that contains our desired
        # values.
        config = component.createObject(u'sparc.configuration.container.dict')
        config['GitReposBaseDir'] = self.config['StashProjectRepos'][
            'GitReposBaseDir']
        config['MellonSnippet'] = self.config['MellonSnippet']

        git_file_provider = component.createObject(\
                    u'mellon.factories.git.file_provider_from_git_repos_base_directory',
                    config)
        for f in git_file_provider:
            yield f


MellonFileProviderFromStashConfigFactory = Factory(
    MellonFileProviderFromStashConfig)
interface.alsoProvides(MellonFileProviderFromStashConfigFactory,
                       IMellonFileProviderFactory)
Exemplo n.º 53
0
 def feed_to_microsite(self):
     alsoProvides(self.context, IMicroSiteFeed)
     self.context.reindexObject(idxs=['object_provides'])
     url = self.context.absolute_url()
     return self.request.response.redirect(url)
Exemplo n.º 54
0
 def _update(self):
     if self.available:
         z2.switch_on(self, request_layer=IFormLayer)
         self.form = self.form(aq_inner(self.context), self.request)
         alsoProvides(self.form, IWrappedForm)
         self.form.update()
Exemplo n.º 55
0
def driver(request, driver_interface):
    """ All drivers """
    mock = Mock()
    alsoProvides(mock, driver_interface)
    return mock
Exemplo n.º 56
0
        if nm not in terms:
            terms[nm] = vocabulary.SimpleTerm(
                nm,
                nm.encode('base64').strip(),
                i18n.Message(UTILITY_TITLE, mapping={'name': nm}))
    if isPAU:
        for nm in set(getattr(context, attr_name)):
            if nm not in terms:
                terms[nm] = vocabulary.SimpleTerm(
                    nm,
                    nm.encode('base64').strip(),
                    i18n.Message(MISSING_TITLE, mapping={'name': nm}))
    return vocabulary.SimpleVocabulary(
        [term for nm, term in sorted(terms.items())])


def authenticatorPlugins(context):
    return _pluginVocabulary(context, interfaces.IAuthenticatorPlugin,
                             'authenticatorPlugins')


interface.alsoProvides(authenticatorPlugins, IVocabularyFactory)


def credentialsPlugins(context):
    return _pluginVocabulary(context, interfaces.ICredentialsPlugin,
                             'credentialsPlugins')


interface.alsoProvides(credentialsPlugins, IVocabularyFactory)
Exemplo n.º 57
0
            u'label_dossier_manager',
            default=u'Dossier manager',
        ),
        description=_(
            u'description_dossier_manager',
            default=(
                u'This user or group will get the dossier manager role after '
                u'protecting the dossier.')),
        source=AllUsersAndGroupsSourceBinder(),
        defaultFactory=current_user,
        required=False,
        missing_value=None,
    )


alsoProvides(IProtectDossier, IFormFieldProvider)


class DossierProtection(AnnotationsFactoryImpl):
    """Implement protected dossiers."""

    READING_ROLES = [
        'Reader',
    ]

    READING_AND_WRITING_ROLES = READING_ROLES + [
        'Editor',
        'Contributor',
        'Reviewer',
        'Publisher',
    ]
Exemplo n.º 58
0
    changeNote = schema.TextLine(
        title=_(u'label_change_note', default=u'Change Note'),
        description=_(
            u'help_change_note',
            default=u'Enter a comment that describes the changes you made. '
            u'If versioning is manual, you must set a change note '
            u'to create the new version.'),
        required=False)

    form.omitted('changeNote')
    form.no_omit(IEditForm, 'changeNote')
    form.no_omit(IAddForm, 'changeNote')


alsoProvides(IVersionable, IFormFieldProvider)


class IVersioningSupport(Interface):
    """
    Marker Interface for the IVersionable behavior.
    """


@implementer(IVersionable)
class Versionable(object):
    """ The Versionable adapter prohibits dexterity from saving the changeNote
    on the context. It stores it in a request-annotation for later use in
    event-handlers
    """
    adapts(IDexterityContent)
Exemplo n.º 59
0
 def refresh_issue(self, REQUEST=None):  # noqa
     """Refresh the aggregate body when using collections.
     """
     alsoProvides(self.request, IDisableCSRFProtection)
     self.context.loadContent()
     self.request.response.redirect(self.context.absolute_url())
Exemplo n.º 60
0
    submission_whole_day = Bool(title=_(u'All day'), required=False)

    submission_recurrence = Text(title=_(u'Recurrence'), required=False)

    submission_days = List(title=_(u'On these days'),
                           value_type=Choice(vocabulary=days),
                           required=False,
                           default=days.keys)

    form.widget('submission_recurrence',
                RecurrenceWidget,
                start_field='IEventSubmissionData.submission_date',
                first_day=first_weekday_sun0)


alsoProvides(IEventSubmissionData, IFormFieldProvider)


class IExternalEventSource(form.Schema):
    """Marker for external event sources (content type)"""

    title = TextLine(title=_(u'Name'), )

    enabled = Bool(title=_(u'Enabled'), required=True, default=True)

    limit = Int(
        title=_(u'Limit'),
        description=_(u'The number of events to import every 15 minutes.'),
        required=True,
        default=25)