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
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
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
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
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')
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')
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)
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)
@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)
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)
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)
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)
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)
@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
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)
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 )
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)
) 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 )
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")
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"
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)
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)
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)
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:
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
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):
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)
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")
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)
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)
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
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():
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)
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)
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)
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")
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)
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)
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)
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)
# -*- 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',
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)
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)
'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)