Esempio n. 1
0
    def execute(self, form, config, context, layer, name, permission, wrap):

        # Only grok if the context is an interface. We demand this so that the
        # form is more re-usable in case of type customisation.
        if not isinstance(context, zope.interface.interface.InterfaceClass):
            return False

        templates = form.module_info.getAnnotation('grok.templates', None)
        if templates is not None:
            config.action(discriminator=None,
                          callable=self.checkTemplates,
                          args=(templates, form.module_info, form))

        form.__view_name__ = name

        if wrap is None:
            wrap = DEFAULT_WRAP

        # Only use the wrapper view if we are on Zope < 2.12
        if wrap:
            factory = layout.wrap_form(form)
            factory.__view_name__ = name
        else:
            factory = form

        page(config,
             name=name,
             permission=permission,
             for_=context,
             layer=layer,
             class_=factory)

        return True
Esempio n. 2
0
    def execute(self, form, config, context, layer, name, permission, wrap, **kw):
        
        if permission is None:
            permission = self.default_permissions.get(form.__class__, self.permission_fallback)

        if issubclass(form, AutoExtensibleForm):
            if getattr(form, 'schema', None) is None:
                
                if issubclass(form, (EditForm, Form)) and IInterface.providedBy(context):
                    form.schema = context
                else:
                    raise GrokImportError(
                        u"The schema form %s must have a 'schema' attribute "
                          "defining a schema interface for the form. If you want "
                          "to set up your fields manually, use a non-schema form "
                          "base class instead." % (form.__name__))
        
        templates = form.module_info.getAnnotation('grok.templates', None)
        if templates is not None:
            config.action(
                discriminator=None,
                callable=self.checkTemplates,
                args=(templates, form.module_info, form)
                )
        
        form.__view_name__ = name
        
        if wrap is None:
            wrap = DEFAULT_WRAP
        
        # Only use the wrapper view if we are on Zope < 2.12
        if wrap:
            factory = wrap_form(form)
            factory.__view_name__ = name
        else:
            factory = form
        
        page_directive(
                config,
                name=name,
                permission=permission,
                for_=context,
                layer=layer,
                class_=factory
            )
        
        return True
Esempio n. 3
0
    def execute(self, form, config, context, layer, name, permission, wrap,
                **kw):

        if permission is None:
            permission = self.default_permissions.get(form.__class__,
                                                      self.permission_fallback)

        if issubclass(form, AutoExtensibleForm):
            if getattr(form, 'schema', None) is None:

                if issubclass(
                        form,
                    (EditForm, Form)) and IInterface.providedBy(context):
                    form.schema = context
                else:
                    raise GrokImportError(
                        u"The schema form %s must have a 'schema' attribute "
                        "defining a schema interface for the form. If you want "
                        "to set up your fields manually, use a non-schema form "
                        "base class instead." % (form.__name__))

        form.__view_name__ = name

        if wrap is None:
            wrap = DEFAULT_WRAP

        # Only use the wrapper view if we are on Zope < 2.12
        if wrap:
            factory = wrap_form(form)
            factory.__view_name__ = name
        else:
            factory = form

        page_directive(config,
                       name=name,
                       permission=permission,
                       for_=context,
                       layer=layer,
                       class_=factory)

        return True
Esempio n. 4
0
    def execute(self, form, config, context, layer, name, permission, wrap):

        # Only grok if the context is an interface. We demand this so that the
        # form is more re-usable in case of type customisation.
        if not isinstance(context, zope.interface.interface.InterfaceClass):
            return False

        templates = form.module_info.getAnnotation('grok.templates', None)
        if templates is not None:
            config.action(
                discriminator=None,
                callable=self.checkTemplates,
                args=(templates, form.module_info, form)
                )

        form.__view_name__ = name

        if wrap is None:
            wrap = DEFAULT_WRAP

        # Only use the wrapper view if we are on Zope < 2.12
        if wrap:
            factory = layout.wrap_form(form)
            factory.__view_name__ = name
        else:
            factory = form

        page(
                config,
                name=name,
                permission=permission,
                for_=context,
                layer=layer,
                class_=factory
            )

        return True
Esempio n. 5
0
    def formMaybeForceSSL(self):
        """ Redirect to an https:// URL if the 'force SSL' option is on.

            However, don't do so for those with rights to edit the form,
            to avoid making the form uneditable if SSL isn't configured
            properly.  These users will still get an SSL-ified form
            action for when the form is submitted.
        """
        if self.context.forceSSL and not getSecurityManager().checkPermission('cmf.ModifyPortalContent', self):
            # Make sure we're being accessed via a secure connection
            if self.request['SERVER_URL'].startswith('http://'):
                secure_url = self.request['URL'].replace('http://', 'https://')
                self.request.response.redirect(
                    secure_url, status='movedtemporarily')

    def update(self):
        '''See interfaces.IForm'''
        self.formMaybeForceSSL()
        super(EasyFormForm, self).update()


EasyFormView = layout.wrap_form(EasyFormForm)


class EasyFormFormEmbedded(EasyFormForm):

    """
    EasyForm form embedded
    """
    template = ViewPageTemplateFile('easyform_form_embedded.pt')
Esempio n. 6
0
class SolgemaFullcalendarFormBase(extensible.ExtensibleForm, z3cform.EditForm):
    groups = (CalendarGroup, FolderQueryGroup, ColorsGroup)

    @button.buttonAndHandler(plMF('label_save', default=u'Save'), name='apply')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        changes = self.applyChanges(data)
        if changes:
            jstool = getToolByName(self.context, 'portal_javascripts')
            jstool.cookResources()
            self.status = self.successMessage
        else:
            self.status = self.noChangesMessage
        self.request.RESPONSE.redirect(self.context.absolute_url())

    @button.buttonAndHandler(plMF('label_cancel', default=u'Cancel'),
                             name='cancel')
    def handleCancel( self, action):
        self.request.RESPONSE.redirect(self.context.absolute_url())

SolgemaFullcalendarForm = wrap_form(SolgemaFullcalendarFormBase)

class SolgemaFullcalendarTopicFormBase(SolgemaFullcalendarFormBase):
    groups = (CalendarGroup, TopicQueryGroup, ColorsGroup)

SolgemaFullcalendarTopicForm = wrap_form(SolgemaFullcalendarTopicFormBase)
        # Check permissions
        can_edit = getSecurityManager().checkPermission(
            'Edit comments',
            self.context)
        mtool = getToolByName(self.context, 'portal_membership')
        if mtool.isAnonymousUser() or not can_edit:
            return

        # Update text
        self.context.text = data['text']

        # Redirect to comment
        IStatusMessage(self.request).add(_(u'comment_edit_notification',
                                           default="Comment was edited"),
                                         type='info')
        return self._redirect(
            target=self.action.replace("@@edit-comment", "@@view"))

    @button.buttonAndHandler(_(u'cancel_form_button',
                               default=u'Cancel'), name='cancel')
    def handle_cancel(self, action):
            IStatusMessage(self.request).add(
                _(u'comment_edit_cancel_notification',
                  default=u'Edit comment cancelled'),
                type='info')
            return self._redirect(target=self.context.absolute_url())

EditComment = wrap_form(EditCommentForm)

#EOF
from plone.z3cform import layout

from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper

from plonetheme.jquerymobile.interfaces import IThemeSettings
from plonetheme.jquerymobile import i18n

class ThemeSettingsControlPanelForm(RegistryEditForm):
    schema = IThemeSettings

ThemeSettingsControlPanelView = layout.wrap_form(ThemeSettingsControlPanelForm,
                                                 ControlPanelFormWrapper)
ThemeSettingsControlPanelView.label = i18n.label_controlpanel

# -*- coding: utf-8 -*-
from collective.calltoaction import _
from collective.calltoaction.interfaces import ICollectiveCalltoactionSettings
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper
from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.z3cform import layout
from z3c.form import form


class CalltoactionControlPanelForm(RegistryEditForm):
    form.extends(RegistryEditForm)
    schema = ICollectiveCalltoactionSettings

CalltoactionControlPanelView = layout.wrap_form(
    CalltoactionControlPanelForm, ControlPanelFormWrapper)
CalltoactionControlPanelView.label = _(u'Call to action settings')
Esempio n. 10
0
        shortname.mode = HIDDEN_MODE
        shortname.value = self.request.get('form.widgets.shortname')

    @button.buttonAndHandler(u'Delete')
    def handle_delete(self, action):
        data, errors = self.extractData()
        if errors:
            return

        lfa = LandFileApi(self.context.landfiles)
        orig = lfa.get_by_shortname(data['shortname'])
        title = orig.title
        try:
            lfa.delete(title)
        except KeyError as err:
            raise ActionExecutionError(Invalid(err.message))

        messages = IStatusMessage(self.request)
        messages.add(u'Deleted landfile: {}'.format(title))

        self.redirect_to_listing()

    @button.buttonAndHandler(u'Cancel')
    def handle_cancel(self, action):
        self.redirect_to_listing()


AddLandFileFormView = layout.wrap_form(AddLandFileForm)
EditLandFileFormView = layout.wrap_form(EditLandFileForm)
DeleteLandfileFormView = layout.wrap_form(DeleteLandFileForm)
Esempio n. 11
0
        return None

    def _set_buddy(self, value):
        print "setting", value

    buddy = property(_get_buddy, _set_buddy)

    def _get_friends(self):
        return []

    def _set_friends(self, value):
        print "setting", value

    friends = property(_get_friends, _set_friends)


class TestForm(form.Form):
    fields = field.Fields(ITestForm)
    fields['buddy'].widgetFactory = ContentTreeFieldWidget
    fields['friends'].widgetFactory = MultiContentTreeFieldWidget
    # To check display mode still works, uncomment this and hit refresh.
    #mode = 'display'

    @button.buttonAndHandler(u'Ok')
    def handle_ok(self, action):
        data, errors = self.extractData()
        print data, errors


TestView = layout.wrap_form(TestForm)
Esempio n. 12
0
    @button.buttonAndHandler(plMF('label_save', default=u'Save'), name='apply')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        changes = self.applyChanges(data)
        if changes:
            jstool = getToolByName(self.context, 'portal_javascripts')
            jstool.cookResources()
            self.status = self.successMessage
        else:
            self.status = self.noChangesMessage
        self.request.RESPONSE.redirect(self.context.absolute_url())

    @button.buttonAndHandler(plMF('label_cancel', default=u'Cancel'),
                             name='cancel')
    def handleCancel(self, action):
        self.request.RESPONSE.redirect(self.context.absolute_url())


SolgemaFullcalendarForm = wrap_form(SolgemaFullcalendarFormBase)


class SolgemaFullcalendarTopicFormBase(SolgemaFullcalendarFormBase):
    groups = (CalendarGroup, TopicQueryGroup, ColorsGroup)


SolgemaFullcalendarTopicForm = wrap_form(SolgemaFullcalendarTopicFormBase)
Esempio n. 13
0
        brains = catalog.searchResults(
            object_provides=ILinkedDataHomepage.__identifier__)

        for brain in brains:
            # remove root and Plone site from path
            path = '/' + brain.getPath().split('/', 2)[2]

            if path not in data['homepages']:
                obj = brain.getObject()
                noLongerProvides(obj, ILinkedDataHomepage)
                obj.reindexObject(idxs=['object_provides'])

        for path in data['homepages']:
            path = path[1:]     # change to relative to Plone root path
            obj = site.restrictedTraverse(path)

            if not alsoProvides(obj, ILinkedDataHomepage):
                alsoProvides(obj, ILinkedDataHomepage)
                obj.reindexObject(idxs=['object_provides'])

        self.status = "Changes saved"

    @button.buttonAndHandler(u"Cancel")
    def handleCancel(self, action):
        """ User cancelled. Redirect back to the front page.
        """


EditLinkedDataHomepagesView = layout.wrap_form(EditLinkedDataHomepagesForm)
Esempio n. 14
0
    def portal_url(self):
        portal_tool = getToolByName(self.context, 'portal_url', None)
        if portal_tool is not None:
            return portal_tool.getPortalObject().absolute_url()
        return None

    def render(self):
        self.request['disable_border'] = True

        for field in self.fields.keys():
            if field in self.schema:
                if ILanguageIndependentField.providedBy(self.schema[field]):
                    self.widgets[field].addClass('languageindependent')
            # With plone.autoform, fieldnames from additional schematas
            # reference their schema by prefixing their fieldname
            # with schema.__identifier__ and then a dot as a separator
            # See autoform.txt in the autoform package
            if '.' in field:
                schemaname, fieldname = field.split('.')
                for schema in self.additionalSchemata:
                    if schemaname == schema.__identifier__ and fieldname in schema:
                        if ILanguageIndependentField.providedBy(\
                            schema[fieldname]):
                            self.widgets[field].addClass('languageindependent')
        self.babel_content = super(MultilingualEditForm, self).render()
        return self.babel()


DefaultMultilingualEditView = layout.wrap_form(MultilingualEditForm)
Esempio n. 15
0

class EventListingSettingsForm(form.Form):
    fields = field.Fields(IEventListingSettings)
    ignoreContext = False

    def getContent(self):
        data = {}
        settings = IEventListingSettings(self.context)
        data['current_folder_only'] = settings.current_folder_only
        return data

    def form_next(self):
        self.request.response.redirect(self.context.absolute_url())

    @button.buttonAndHandler(u'Save')
    def handleSave(self, action):
        data, errors = self.extractData()
        if errors:
            return False
        settings = IEventListingSettings(self.context)
        settings.current_folder_only = data['current_folder_only']
        self.form_next()

    @button.buttonAndHandler(u'Cancel')
    def handleCancel(self, action):
        self.form_next()


EventListingSettingsFormView = wrap_form(EventListingSettingsForm)
        # If valid user
        if user:
            # Getting the users' bar-code reset token saved in his profile.
            bar_code_reset_token = user.getProperty('bar_code_reset_token')

            # Validate the user data
            user_data_validation_result = validate_user_data(
                request=self.request, user=user)

            # If all goes well, regenerate the token (overwrite_secret=True) and show the bar code image.
            if barcode_field:
                if user_data_validation_result.result and bar_code_reset_token == token:
                    barcode_field.field.description = _(
                        get_token_description(user=user,
                                              overwrite_secret=False))
                else:
                    if not user_data_validation_result.result:
                        IStatusMessage(self.request).addStatusMessage(
                            ' '.join(user_data_validation_result.reason),
                            'error')
                    else:
                        IStatusMessage(self.request).addStatusMessage(
                            _("Invalid bar-code reset token"), 'error')

        return super(ResetBarCodeForm, self).updateFields(*args, **kwargs)


# View for the ``ResetBarCodeForm``.
ResetBarCodeFormView = wrap_form(ResetBarCodeForm)
Esempio n. 17
0
    label = _(u"Media Settings")
    description = _(u'description_media_global_settings_form',
                    default=u"Configure the parameters for media.")

    @button.buttonAndHandler(pmf('Save'), name='apply')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        self.applyChanges(data)

        self.status = pmf('Changes saved.')

GlobalSettingsFormView = wrap_form(GlobalSettingsForm)


class ConvertVideo(BrowserView):
    def __call__(self):
        # Mark the video as not converted
        self.context.video_converted = False
        video_edited(self.context, None)
        self.request.response.redirect(self.context.absolute_url())


class Utils(MediaView):

    def valid_type(self):
        return IMediaEnabled.providedBy(self.context)
Esempio n. 18
0
    @button.buttonAndHandler(_(u'Save Configuration'))
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        assert IAttributeAnnotatable.providedBy(self.context)
        annotations = IAnnotations(self.context)
        annotations[ISOTOPE_CONFIGURATION_KEY] = data

        self.request.response.redirect(self.context.absolute_url())
        messages = IStatusMessage(self.request)
        messages.add(_(u"Your configuration has been saved"), type=u"info")

IsotopeConfigurationView = wrap_form(IsotopeViewConfigurationForm)


def call_or_attr(obj, name):
    """get the value of attribute 'name' from 'obj'

    if 'name' is callable, call it to get the value
    """
    value = getattr(obj, name, None)
    if callable(value):
        value = value()
    return value

def itemize(value):
    """return value one item at a time from a generator
Esempio n. 19
0
from castle.cms.interfaces import IUploadedToYoutube
from plone.dexterity.browser import edit
from plone.z3cform import layout
from z3c.form.interfaces import HIDDEN_MODE
from castle.cms.services.google import youtube


class VideoEditForm(edit.DefaultEditForm):
    def update(self):
        super(VideoEditForm, self).update()
        if IUploadedToYoutube.providedBy(self.context):
            # can only move these to youtube...
            self.widgets['upload_to_youtube'].mode = HIDDEN_MODE
            self.widgets['youtube_url'].mode = HIDDEN_MODE
        elif youtube.get_oauth_token() is None:
            self.widgets['upload_to_youtube'].mode = HIDDEN_MODE


VideoEditView = layout.wrap_form(VideoEditForm)
Esempio n. 20
0
 def __call__(self):
     view_factor = layout.wrap_form(EventControlPanelEditForm,
                                    ControlPanelFormWrapper)
     self.form = view_factor(self.context, self.request)
     self.form.update()
     return super(EventControlPanel, self).__call__()
from zope.interface import classImplements


class DefaultEditForm(BaseEdit):
    """
    """
    def updateWidgets(self):
        super(DefaultEditForm, self).updateWidgets()
        self.widgets["week_table"].allow_insert = False
        self.widgets["week_table"].allow_delete = False
        self.widgets["week_table"].allow_append = False
        self.widgets["week_table"].allow_reorder = False
        self.widgets["week_table"].auto_append = False


DefaultEditView = layout.wrap_form(DefaultEditForm)
classImplements(DefaultEditView, IDexterityEditForm)


class DefaultAddForm(BaseAddForm):
    """
    """
    def updateWidgets(self):
        super(DefaultAddForm, self).updateWidgets()
        self.widgets["week_table"].allow_insert = False
        self.widgets["week_table"].allow_delete = False
        self.widgets["week_table"].allow_append = False
        self.widgets["week_table"].allow_reorder = False
        self.widgets["week_table"].auto_append = False

    @button.buttonAndHandler(_(u"Clear"), name='clear')
    def handleClear(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        self.tool.clear()

        logger.info("database cleared.")

        IStatusMessage(self.request).addStatusMessage(
            _(u"All data cleared."), "info")

    def RSS(self):
        body = self.rss_template()

        self.request.response.setHeader('Content-Type', 'application/rss+xml')
        self.request.response.setHeader(
            'Content-Disposition',
            'attachment; filename="linkcheck.rss"'
            )

        return body


ControlPanel = layout.wrap_form(
    ControlPanelEditForm,
    controlpanel.ControlPanelFormWrapper
    )
Esempio n. 23
0
            api.portal.show_message(
                message=_('remove_advice_inheritance_removed'),
                request=self.request)
        # in case an adviser removed inherited advice and may not
        # see the item anymore, we redirect him to a viewable place
        cleanMemoize(
            self.context,
            prefixes=['borg.localrole.workspace.checkLocalRolesAllowed'])
        url = findViewableURL(self.context, self.request)
        self.request.RESPONSE.redirect(url)

        # add logging message to fingerpointing log
        extras = 'object={0} advice_uid={1} inherited_advice_action={2}'.format(
            repr(self.context), data['advice_uid'],
            data['inherited_advice_action'])
        fplog('remove_advice_inheritance', extras=extras)
        return

    @button.buttonAndHandler(_('Cancel'), name='cancel')
    def handleCancel(self, action):
        self.request.RESPONSE.redirect(self.context.absolute_url())

    def update(self):
        """ """
        super(AdviceRemoveInheritanceForm, self).update()
        # after calling parent's update, self.actions are available
        self.actions.get('cancel').addClass('standalone')


AdviceRemoveInheritanceFormWrapper = wrap_form(AdviceRemoveInheritanceForm)
Esempio n. 24
0
    )

    svg_logo = schema.Text(
        title=_(u"SVG Logo for Report"),
        description=_(
            u"SVG Logo (in XMl) which should be used by the Report."
        ),
        required=False,
        default=u''
    )


def get(name):
    prefix = ISeantisKantonsratSettings.__identifier__
    return api.portal.get_registry_record('.'.join((prefix, name)))


def set(name, value):
    prefix = ISeantisKantonsratSettings.__identifier__
    return api.portal.set_registry_record('.'.join((prefix, name)), value)


class SeantisKantonsratSettingsPanelForm(RegistryEditForm):
    schema = ISeantisKantonsratSettings
    label = _(u"Seantis Kantonsrat Settings")


SeantisKantonsratControlPanelView = layout.wrap_form(
    SeantisKantonsratSettingsPanelForm, ControlPanelFormWrapper
)
Esempio n. 25
0
            return self.content_cached()

    @view.memoize
    def content_contextual(self):
        content = list(self.settings.content)
        if "unavailable_after_end" in content:
            content.remove("unavailable_after_end")
        expiration = self.context.getExpirationDate()
        if expiration:
            dt_formated = expiration.strftime('%d %b %Y %H:%M:%S %Z')
            value = "unavailable_after: %s" % formated
            value = value.strip()
            content.append(value)

        return u", ".join(content)

    @view.memoize_contextless
    def content_cached(self):
        content = list(self.settings.content)
        if "unavailable_after_end" in content:
            content.remove("unavailable_after_end")
        return u", ".join(content)


class ControlPanelForm(RegistryEditForm):
    form.extends(RegistryEditForm)
    schema = TagSettings

ControlPanelView = layout.wrap_form(ControlPanelForm, ControlPanelFormWrapper)
ControlPanelView.label = _(u"Meta tag Robots settings")
Esempio n. 26
0
        description=u'The list of additional local roles members will be '
                    u'granted in the context of their own profile objects',
        value_type=schema.TextLine(),
        required=False,
        missing_value=set([]),
        default=set([]))

    use_email_as_username = schema.Bool(
        title=u'Use email address for username?',
        description=u'If checked, the value in the "email" field will be '
                    u'used as a username/login. If unchecked, your content '
                    u'type must provide a "username" field.',
        required=False)

    use_uuid_as_userid = schema.Bool(
        title=u'Use object UUID for the userid?',
        description=u'If checked, the UUID value for the adapted object '
                    u'will be used for a userid. Otherwise, the username '
                    u'will be used for the userid.',
        required=False)


class DexterityMembraneControlPanelForm(RegistryEditForm):
    schema = IDexterityMembraneSettings


DexterityMembraneControlPanelView = layout.wrap_form(
    DexterityMembraneControlPanelForm,
    ControlPanelFormWrapper
)
    """
    grok.provides(IMongoDBConnector)

    def getDBConnection(self,db_name=None,transformation_class=None):
        """
        Returns the connection object
        """
        registry = getUtility(IMongoDBConnector)
        vars = self.getSettings()
        if db_name == None:
            db_name = vars['db_name']
            
        connection = Connection(host=vars['host'],port=int(vars['port']))
        db = connection[db_name]
        if transformation_class != None:
            db.add_son_manipulator(transformation_class())
        return db
 
    def getSettings(self):
        registry = getUtility(IRegistry)
        vars = {'db_name':registry.records.get('vindula.mongodbconnector.interfaces.IMongoDBConnector.db_name').value,
                'host':registry.records.get('vindula.mongodbconnector.interfaces.IMongoDBConnector.host').value,
                'port':registry.records.get('vindula.mongodbconnector.interfaces.IMongoDBConnector.port').value,
                }
        return vars

class MongoDBControlPanel(RegistryEditForm):
    schema = IMongoDBConnector

MongodbControlPanelView = layout.wrap_form(MongoDBControlPanel, ControlPanelFormWrapper)
MongodbControlPanelView.label = u"Vindula: MongoDB settings"
Esempio n. 28
0
        user in.

        We will do that ourselves in the handleSubmit() above, but only once
        the user entered a valid token.
        """
        logger.debug("Landed in the token hook.")

        request = self.request
        response = request['RESPONSE']
        response.setCookie('__ac', '', path='/')

        # Drop the "Login failed" message that appears because we consumed
        # the credentials in our authenticator plugin.
        drop_login_failed_msg(request)

        # Updating the description
        token_field = self.fields.get('token')
        if token_field:
            token_field.field.description = _(
                'Enter the verification code generated by your mobile '
                'application. If you have somehow lost your bar code, '
                'request a bar code reset '
                '<a href=\"{0}/@@request-bar-code-reset\">here</a>.'.format(
                    self.context.absolute_url()))

        return super(TokenForm, self).updateFields(*args, **kwargs)


# View for the ``TokenForm``.
TokenFormView = wrap_form(TokenForm)
                if recipient is None:
                    failed.append(safe_unicode(obj.Title()))
                    continue

                api.portal.send_email(recipient=recipient,
                                      sender=sender_mail,
                                      subject=data['subject'],
                                      body=msg)
                mailcount += 1

        statusmessages.add(_(u"status_mail_send",
                             default="Sent ${number} E-Mails.",
                             mapping={"number": mailcount}),
                           type="info")

        if failed:
            statusmessages.add(_(
                u"status_mails_failed",
                default="${num} contacts without email-address: ${names}",
                mapping={
                    'num': len(failed),
                    'names': u','.join(failed)
                }),
                               type="warning")

        self.request.response.redirect(self.context.absolute_url())


mailSelectionTemplate = ViewPageTemplateFile('mail.pt')
MailSelectionView = wrap_form(MailSendForm, index=mailSelectionTemplate)
Esempio n. 30
0
class IJSONMigrator(Interface):
    """ remote source interface """

    config = Choice(
        title=_(u"Select configuration"),
        description=_(u"Registered configurations to choose from."),
        vocabulary=u"collective-jsonmigrator-configurations",
    )


class JSONMigrator(form.Form):

    label = _(u"Synchronize and migrate")
    fields = field.Fields(IJSONMigrator)

    ignoreContext = True

    @button.buttonAndHandler(u"Select")
    def handleSelect(self, action):
        data, errors = self.extractData()
        if errors:
            return False
        self.request.RESPONSE.redirect(
            "%s/@@jsonmigrator-run?form.widgets.%s" % (self.context.absolute_url(), urllib.urlencode(data))
        )


JSONMigratorConfigurationsFactory = JSONMigratorConfigurations()
JSONMigratorRunView = wrap_form(JSONMigratorRun)
JSONMigratorView = wrap_form(JSONMigrator)
Esempio n. 31
0
from collective.portletmetadata import MessageFactory as _
from collective.portletmetadata.interfaces import IMetadataSettings

from plone.app.registry.browser import controlpanel
from plone.z3cform import layout

from z3c.form import field


class ControlPanelEditForm(controlpanel.RegistryEditForm):
    schema = IMetadataSettings
    fields = field.Fields(IMetadataSettings)

    label = _(u"Configure portlet metadata")
    description = _(u"This form lets you configure the settings for"
                    u"the portlet metadata extension.")


ControlPanel = layout.wrap_form(ControlPanelEditForm,
                                controlpanel.ControlPanelFormWrapper)
Esempio n. 32
0
        types_tool = getToolByName(self.context, 'portal_types')
        import_context = ZipFileImportContext(
            types_tool,
            StringIO(profile_import.profile_file.data)
        )
        # run the profile
        setup_tool = getToolByName(self.context, 'portal_setup')
        handler = setup_tool.getImportStep(u'typeinfo')
        handler(import_context)
        self.status = _(u"Imported successfully.")

    def nextURL(self):
        url = self.context.absolute_url()
        return url

TypeProfileImportFormPage = wrap_form(TypeProfileImportForm)


@implementer(IImportContext)
class ZipFileImportContext(BaseContext):
    """ GS Import context for a ZipFile """

    def __init__(self, tool, archive_bits, encoding=None, should_purge=False):
        super(ZipFileImportContext, self).__init__(tool, encoding)
        self._archive = ZipFile(archive_bits, 'r')
        self._should_purge = bool(should_purge)
        self.name_list = self._archive.namelist()

    def readDataFile(self, filename, subdir=None):

        if subdir is not None:
Esempio n. 33
0
from plone.app.layout.viewlets.common import ViewletBase
from plone.registry.interfaces import IRegistry
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile

from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper
from nfg.webfonts.interfaces import IWebfontsSettings
from plone.z3cform import layout

import logging
logger = logging.getLogger('nfg.webfonts')

class WebFontsControlPanelForm(RegistryEditForm):
    schema = IWebfontsSettings

WebFontsControlPanel = layout.wrap_form(WebFontsControlPanelForm, ControlPanelFormWrapper)

class WebfontsApiViewlet(ViewletBase):
    render = ViewPageTemplateFile('templates/webfonts-api.pt')

    def __init__(self, context, request, view, manager):
        super(WebfontsApiViewlet, self).__init__(context, request, view, manager)
        self.__parent__ = view
        self.view = view
        self.manager = manager
        self.hostname=''
        self.apikey=''
        registry = queryUtility(IRegistry)
        if registry is not None:
            self.hostname = registry.forInterface(IWebfontsSettings).hostname
            self.apikey = registry.forInterface(IWebfontsSettings).apikey
Esempio n. 34
0
        ttool = getToolByName(self.context, 'portal_types')
        ttool.manage_delObjects([id])

    def link(self, item, field):
        """Generate links to the edit page for each type.

        (But only for types with schemata that can be edited through the web.)
        """
        if field == 'title':
            return '{0}/{1}'.format(self.context.absolute_url(),
                                    urllib.quote(item.__name__))


# Create a form wrapper so the form gets layout.
TypesListingPage = layout.wrap_form(TypesListing,
                                    __wrapper_class=TypesEditFormWrapper,
                                    label=_(u'Dexterity content types'))


@implementer(ITypeSchemaContext)
class TypeSchemaContext(SchemaContext):

    fti = None
    schemaName = u''
    schemaEditorView = 'fields'

    def browserDefault(self, request):
        return self, ('@@overview', )

    @property
    def additionalSchemata(self):
Esempio n. 35
0
                description=description,
            )

            message = message.encode(encoding)

            host.send(
                message,
                mto=send_to_address,
                mfrom=send_from_address,
                subject=subject,
                charset="utf-8",
            )

        except ConflictError:
            raise
        except Exception as e:
            # TODO To many things could possibly go wrong. So we catch all.
            logger.info("Unable to send mail: " + str(e))
            IStatusMessage(self.request).addStatusMessage(
                _(u"Unable to send mail."), type=u"error"
            )
            return

        IStatusMessage(self.request).addStatusMessage(_(u"Mail sent."), type=u"info")

        self.request.response.redirect(self.context.absolute_url())
        return ""


send_to_form = layout.wrap_form(SendToManagerForm)
Esempio n. 36
0
from zope import schema
from zope.interface import Interface
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper
from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.z3cform import layout
from z3c.form import form


from ilo.socialsticker import MessageFactory as _

class IFacebookSettings(Interface):
    fb_app_id = schema.TextLine(title=_(u'App ID'),
                                description=_(u'The App ID you generated at https://developers.facebook.com/apps'))
   


class FacebookControlPanelForm(RegistryEditForm):
    form.extends(RegistryEditForm)
    schema = IFacebookSettings

FacebookControlPanelView = layout.wrap_form(FacebookControlPanelForm, ControlPanelFormWrapper)
FacebookControlPanelView.label = _(u"Facebook Settings")





Esempio n. 37
0
        data['behaviors'] = '\n'.join([
            'plone.dublincore',
            'plone.namefromtitle',
        ])
        data['model_source'] = """
<model xmlns="http://namespaces.plone.org/supermodel/schema">
    <schema>
    </schema>
</model>
"""

        data['klass'] = 'plone.dexterity.content.Container'
        data['filter_content_types'] = True
        data['icon_expr'] = 'string:${portal_url}/document_icon.png'
        fti.manage_changeProperties(**data)
        return fti

    def add(self, fti):
        ttool = getToolByName(self.context, 'portal_types')
        ttool._setObject(fti.id, fti)
        self.fti_id = fti.id
        self.status = _(u"Type added successfully.")

    def nextURL(self):
        url = self.context.absolute_url()
        if self.fti_id is not None:
            url += '/{0}/@@fields'.format(self.fti_id)
        return url

TypeAddFormPage = wrap_form(TypeAddForm)
Esempio n. 38
0
        key_obj = [b.getURL() + '/edit' for b in
                   self.context.portal_catalog.searchResults(keywords=key)]

        return json.dumps(key_obj)


class GoogleAnalyticsAPIEditForm(RegistryEditForm):
    """
    Define form logic
    """

    z3cform.extends(RegistryEditForm)
    schema = IGoogleAnalyticsAPI


ConfigureGoogleAnalyticsAPI = layout.wrap_form(
    GoogleAnalyticsAPIEditForm, ControlPanelFormWrapper)

ConfigureGoogleAnalyticsAPI.label = u"Setup Google Analytics API Integration"


def initialize_analyticsreporting(credentials_data):
    """Initializes an Analytics Reporting API V4 service object.

    Returns:
    An authorized Analytics Reporting API V4 service object.
    """
    SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
    # json_data = json.loads(open(KEY_FILE_LOCATION).read())
    credentials = ServiceAccountCredentials.from_json_keyfile_dict(
        credentials_data, SCOPES)
Esempio n. 39
0
        self.context = context

    def _get_buddy(self):
        return None

    def _set_buddy(self, value):
        print "setting", value
    buddy = property(_get_buddy, _set_buddy)

    def _get_friends(self):
        return []

    def _set_friends(self, value):
        print "setting", value
    friends = property(_get_friends, _set_friends)


class TestForm(form.Form):
    fields = field.Fields(ITestForm)
    fields['buddy'].widgetFactory = ContentTreeFieldWidget
    fields['friends'].widgetFactory = MultiContentTreeFieldWidget
    # To check display mode still works, uncomment this and hit refresh.
    #mode = 'display'

    @button.buttonAndHandler(u'Ok')
    def handle_ok(self, action):
        data, errors = self.extractData()
        print data, errors

TestView = layout.wrap_form(TestForm)
    def updateActions(self):
        super().updateActions()
        if self.actions and 'save' in self.actions:
            self.actions['save'].addClass('context')


class ControlPanelFormWrapper(layout.FormWrapper):
    """Use this form as the plone.z3cform layout wrapper to get the control
    panel layout.
    """

    index = ViewPageTemplateFile('controlpanel_usergroups_layout.pt')


UserGroupsSettingsPanelView = layout.wrap_form(UserGroupsSettingsControlPanel,
                                               ControlPanelFormWrapper)


class UsersGroupsControlPanelView(BrowserView):
    @property
    def portal_roles(self):
        pmemb = getToolByName(aq_inner(self.context), 'portal_membership')
        return [r for r in pmemb.getPortalRoles() if r != 'Owner']

    @property
    def many_users(self):
        return getAdapter(aq_inner(self.context),
                          IUserGroupsSettingsSchema).many_users

    @property
    def many_groups(self):
        # initialize import context
        types_tool = getToolByName(self.context, 'portal_types')
        import_context = ZipFileImportContext(
            types_tool, StringIO(profile_import.profile_file.data))
        # run the profile
        setup_tool = getToolByName(self.context, 'portal_setup')
        handler = setup_tool.getImportStep(u'typeinfo')
        handler(import_context)
        self.status = _(u"Imported successfully.")

    def nextURL(self):
        url = self.context.absolute_url()
        return url


TypeProfileImportFormPage = wrap_form(TypeProfileImportForm)


@implementer(IImportContext)
class ZipFileImportContext(BaseContext):
    """ GS Import context for a ZipFile """
    def __init__(self, tool, archive_bits, encoding=None, should_purge=False):
        super(ZipFileImportContext, self).__init__(tool, encoding)
        self._archive = ZipFile(archive_bits, 'r')
        self._should_purge = bool(should_purge)
        self.name_list = self._archive.namelist()

    def readDataFile(self, filename, subdir=None):

        if subdir is not None:
            filename = '/'.join((subdir, filename))
from plone.z3cform import layout

from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper

from plonetheme.senchatouch.interfaces import IThemeSettings
from plonetheme.senchatouch import i18n

class ThemeSettingsControlPanelForm(RegistryEditForm):
    schema = IThemeSettings

ThemeSettingsControlPanelView = layout.wrap_form(ThemeSettingsControlPanelForm,
                                                 ControlPanelFormWrapper)
ThemeSettingsControlPanelView.label = i18n.label_controlpanel

Esempio n. 43
0
        ctx = self.view.context
        acl = getToolByName(ctx, 'acl_users')
        if value:
            vl = acl.searchUsers(id=value)
            if len(vl) < 1:
                raise Invalid(
                    _('No such user ${user}',
                      mapping={'user' : value})
                )
validator.WidgetValidatorDiscriminators(
    UserValidator, view=IUserForm, field=ICron['user'])


class ControlPanelFormView(layout.FormWrapper):
    index = ViewPageTemplateFile('cpanelformwrapper.pt')
AddFormView = layout.wrap_form(AddForm, ControlPanelFormView)
EditFormView = layout.wrap_form(EditForm, ControlPanelFormView)

class ICrontabManager(Interface):
    """."""
    def add():
        """."""
    def cron_edit():
        """."""
    def cron_view():
        """."""
    def cron_deletelog():
        """."""
    def cron_action():
        """."""
    def process_multiple():
Esempio n. 44
0
class EventListingSettingsForm(form.Form):
    fields = field.Fields(IEventListingSettings)
    ignoreContext = False

    def getContent(self):
        data = {}
        settings = IEventListingSettings(self.context)
        data['current_folder_only'] = settings.current_folder_only
        data['language_neutral'] = settings.language_neutral
        return data

    def form_next(self):
        self.request.response.redirect(self.context.absolute_url())

    @button.buttonAndHandler(u'Save')
    def handleSave(self, action):
        data, errors = self.extractData()
        if errors:
            return False
        settings = IEventListingSettings(self.context)
        settings.current_folder_only = data['current_folder_only']
        settings.language_neutral = data['language_neutral']
        self.form_next()

    @button.buttonAndHandler(u'Cancel')
    def handleCancel(self, action):
        self.form_next()


EventListingSettingsFormView = wrap_form(EventListingSettingsForm)
Esempio n. 45
0
                      default=u"Please select content types in which the "
                              u"viewlet will be applied."),
        value_type=Choice(vocabulary=TYPES)
    )

    use_as_action = Bool(
        title=_(u'Use as a content action?'),
        description=_(u'help_use_as_content_action',
                      default=u"Check this if you want the social bookmarks to"
                              u" appear as an action for contents."),
    )

    show_icons_only = Bool(
        title=_(u'Show icons only?'),
        description=_(u'help_show_icons_only',
                      default=u"Check this if you want the social bookmarks to"
                              u" be rendered as icons only."),
    )


class ProvidersControlPanelEditForm(RegistryEditForm):
    schema = IProvidersSchema
    schema_prefix = 'sc.social.bookmarks'

    label = _(u'Social Bookmark Providers settings')
    description = _(u"""Select Social Bookmarks Providers available for this
                        site.""")

ProvidersControlPanel = layout.wrap_form(ProvidersControlPanelEditForm,
                                         ControlPanelFormWrapper)
Esempio n. 46
0
from plone.app.dexterity.interfaces import ITypeSettings


class TypeCloneForm(form.AddForm):

    label = _(u'Clone Content Type')
    fields = field.Fields(ITypeSettings).select('title', 'id')
    id = 'clone-type-form'

    def create(self, data):
        type_id = data.pop('id')
        props = dict(self.context.fti.propertyItems())
        # make sure we don't share the factory
        if props['factory'] == self.context.fti.getId():
            del props['factory']

        props['title'] = data['title']
        props['add_view_expr'] = props['add_view_expr'].replace(self.context.fti.getId(), type_id)
        fti = DexterityFTI(type_id, **props)
        return fti

    def add(self, fti):
        ttool = getToolByName(self.context, 'portal_types')
        ttool._setObject(fti.id, fti)
        self.status = _(u"Type cloned successfully.")

    def nextURL(self):
        return self.context.aq_parent.absolute_url()

TypeCloneFormPage = wrap_form(TypeCloneForm)
Esempio n. 47
0
from cs.auth.facebook import FBMessageFactory as _
from plone.app.registry.browser.controlpanel import (
    ControlPanelFormWrapper,
    RegistryEditForm,
)
from plone.z3cform import layout
from zope import schema
from zope.interface import Interface


class IFacebookloginSettings(Interface):
    fb_app_id = schema.TextLine(
        title=_(u'App ID/API Key'),
        description=
        _(u'The App ID/API Key you got when creating the app at https://developers.facebook.com/apps'
          ))
    fb_app_secret = schema.TextLine(
        title=_(u'App Secret'),
        description=
        _(u'The App Secret Key you got when creating the app at https://developers.facebook.com/apps'
          ))


class FacebookloginControlPanelForm(RegistryEditForm):
    schema = IFacebookloginSettings


FacebookloginControlPanelView = layout.wrap_form(FacebookloginControlPanelForm,
                                                 ControlPanelFormWrapper)
FacebookloginControlPanelView.label = _(u"Facebooklogin Settings")
Esempio n. 48
0
        disable_filtering = int(data['disable_filtering'])
        if disable_filtering != safe_html._config['disable_transform']:
            safe_html._config['disable_transform'] = disable_filtering
            safe_html._p_changed = True
            safe_html.reload()

        stripped_combinations = data['stripped_combinations']
        if stripped_combinations != safe_html._config['stripped_combinations']:
            safe_html._config['stripped_combinations'] = stripped_combinations
            safe_html._p_changed = True
            safe_html.reload()

        if errors:
            self.status = self.formErrorsMessage
            return
        self.applyChanges(data)
        IStatusMessage(self.request).addStatusMessage(_(u"Changes saved."),
                                                      "info")
        self.request.response.redirect(self.request.getURL())


class ControlPanelFormWrapper(layout.FormWrapper):
    """Use this form as the plone.z3cform layout wrapper to get the control
    panel layout.
    """
    index = ViewPageTemplateFile('filter_controlpanel.pt')


FilterControlPanelView = layout.wrap_form(FilterControlPanel,
                                          ControlPanelFormWrapper)
Esempio n. 49
0
from plone.schemaeditor.interfaces import INewField
from plone.schemaeditor.utils import IEditableSchema
from plone.schemaeditor.utils import SchemaModifiedEvent


class FieldAddForm(form.AddForm):

    fields = field.Fields(INewField)
    label = _("Add new field")
    id = 'add-field-form'

    def create(self, data):
        factory = data.pop('factory')
        return factory(**data)

    def add(self, field):
        schema = IEditableSchema(self.context.schema)
        try:
            schema.addField(field)
        except ValueError:
            raise WidgetActionExecutionError('__name__',
                Invalid(_(u'Please select a field name that is not already used.')))
        notify(ObjectAddedEvent(field, self.context.schema))
        notify(SchemaModifiedEvent(self.context))
        self.status = _(u"Field added successfully.")

    def nextURL(self):
        return self.context.absolute_url()

FieldAddFormPage = wrap_form(FieldAddForm)
Esempio n. 50
0
        return None

    def render(self):
        self.request['disable_border'] = True

        for field in self.fields.keys():
            if field in self.schema:
                if ILanguageIndependentField.providedBy(self.schema[field]):
                    self.widgets[field].addClass('languageindependent')
            # With plone.autoform, fieldnames from additional schematas
            # reference their schema by prefixing their fieldname
            # with schema.__identifier__ and then a dot as a separator
            # See autoform.txt in the autoform package
            if '.' in field:
                schemaname, fieldname = field.split('.')
                for schema in self.additionalSchemata:
                    if schemaname == schema.__identifier__ \
                       and fieldname in schema:
                        if ILanguageIndependentField.providedBy(schema[fieldname]):  # noqa
                            self.widgets[field].addClass('languageindependent')
        self.babel_content = super(MultilingualEditForm, self).render()
        return self.babel()

    @property
    def max_nr_of_buttons(self):
        registry = getUtility(IRegistry)
        settings = registry.forInterface(IMultiLanguageExtraOptionsSchema)
        return settings.buttons_babel_view_up_to_nr_translations

DefaultMultilingualEditView = layout.wrap_form(MultilingualEditForm)
Esempio n. 51
0
    ignoreContext = True

    def updateWidgets(self):
        super(ImportForm, self).updateWidgets()

    @button.buttonAndHandler(u'Import')
    def handleImport(self, action):
        data, errors = self.extractData()
        if errors:
            return False

        if 'file_to_import' in data:
            import_clubs(self, data['file_to_import'])

        IStatusMessage(self.request).addStatusMessage(
            "File %s imported. See log-file for more details." % data['file_to_import'],
            'info')
        redirect_url = "%s/@@import_form" % self.context.absolute_url()
        self.request.response.redirect(redirect_url)

    @button.buttonAndHandler(u'Cancel')
    def handleCancel(self, action):
        IStatusMessage(self.request).addStatusMessage(
            "Nothing imported...",
            'info')
        redirect_url = "%s/@@import_form" % self.context.absolute_url()
        self.request.response.redirect(redirect_url)

from plone.z3cform.layout import wrap_form
ImportFormView = wrap_form(ImportForm)
Esempio n. 52
0
# -*- coding: utf-8 -*-
"""Module for configuring the control panel stuffs.

For the purposes of keeping class names brief, CS == Course Scheduling.
"""
from Department.schedules import _
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper
from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.z3cform import layout
from zope.interface import Interface
from Department.schedules.interfaces.controlpanel_schema import ICSVocubulary

# Need to add feilds that were originally going to be
# content types

# Move this class to its own schema / model file
# Use instructions here: https://pypi.python.org/pypi/plone.app.registry


class CSControlPanelForm(RegistryEditForm):
    schema = ICSVocubulary
    schema_prefix = "york.scheduling"
    label = u'Course Scheduling Settings'


CSPanelView = layout.wrap_form(CSControlPanelForm, ControlPanelFormWrapper)
    def updateWidgets(self):
        super(FormMixin, self).updateWidgets()
        for name, widget in self.widgets.items():
            related_attribute = self.related_widgets.get(name)
            if not related_attribute:
                continue
            if getattr(self.category_group, related_attribute) is False:
                widget.mode = HIDDEN_MODE


class BaseEditForm(FormMixin, DefaultEditForm):
    pass


BaseEditView = layout.wrap_form(BaseEditForm)
classImplements(BaseEditView, IDexterityEditForm)


class BaseAddForm(FormMixin, DefaultAddForm):
    pass


class BaseAddView(DefaultAddView):
    form = BaseAddForm


class BaseView(DefaultView):
    related_widgets = {
        'confidential': 'confidentiality_activated',
        'to_print': 'to_be_printed_activated',
Esempio n. 54
0
class IJSONMigrator(Interface):
    """ remote source interface """

    config = Choice(
        title=_(u"Select configuration"),
        description=_(u"Registered configurations to choose from."),
        vocabulary=u"collective-jsonmigrator-configurations",
    )


class JSONMigrator(form.Form):

    label = _(u"Synchronize and migrate")
    fields = field.Fields(IJSONMigrator)

    ignoreContext = True

    @button.buttonAndHandler(u'Select')
    def handleSelect(self, action):
        data, errors = self.extractData()
        if errors:
            return False
        self.request.RESPONSE.redirect(
            '%s/@@jsonmigrator-run?form.widgets.%s' %
            (self.context.absolute_url(), urllib.urlencode(data)))


JSONMigratorConfigurationsFactory = JSONMigratorConfigurations()
JSONMigratorRunView = wrap_form(JSONMigratorRun)
JSONMigratorView = wrap_form(JSONMigrator)
Esempio n. 55
0
 def render(self):
     view_factor = layout.wrap_form(SettingsEditForm,
             ControlPanelFormWrapper)
     view = view_factor(self.context, self.request)
     return view()
        return ctx.getArchive()


class EasyFormImportForm(form.Form):

    """The form class for importing of exported easyforms
    """
    fields = field.Fields(IEasyFormImportFormSchema)
    ignoreContext = True
    ignoreReadonly = True

    @button.buttonAndHandler(_(u'import'), name='import')
    def handleImport(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        ctx = TarballImportContext(self.context, data['upload'])
        IFilesystemImporter(self.context).import_(ctx, 'structure', True)

        self.status = _(u'Form imported.')
        IStatusMessage(self.request).addStatusMessage(self.status, type='info')

        url = getMultiAdapter(
            (self.context, self.request), name='absolute_url')()
        self.request.response.redirect(url)


EasyFormImportView = layout.wrap_form(EasyFormImportForm)
Esempio n. 57
0
                     'style_whitelist'):
            value = data[attr]
            if value is None:
                if attr == 'stripped_combinations':
                    value = {}
                else:
                    value = []
            if value != safe_html._config[attr]:
                safe_html._config[attr] = value

        # always reload the transform
        safe_html._p_changed = True
        safe_html.reload()

        self.applyChanges(data)
        IStatusMessage(self.request).addStatusMessage(
            _(u"Changes saved."),
            "info")
        self.request.response.redirect(self.request.getURL())


class ControlPanelFormWrapper(layout.FormWrapper):
    """Use this form as the plone.z3cform layout wrapper to get the control
    panel layout.
    """
    index = ViewPageTemplateFile('filter_controlpanel.pt')


FilterControlPanelView = layout.wrap_form(
    FilterControlPanel, ControlPanelFormWrapper)