class IVelruseGeneralSettings(Interface): site_login_enabled = schema.Bool( title=_(u'Site login enabled'), description=_( 'help_site_login_enabled', default="If checked, the default Plone login form will be preserved" ), required=False, default=True, ) activated_plugins = schema.Tuple( title=_(u'Authentication services enabled'), description=_( 'help_activated_plugins', default= "Provide a list of authentication services properly configured on the Velruse backend" ), required=False, value_type=PersistentObject(IVelruseBackendConfig, title=_(u"Velruse backend")), default=(), missing_value=(), ) connection_timeout = schema.Int( title=_(u'Connection timeout'), description=_( 'help_connection_timeout', default="Max number of seconds to wait for Velruse backend response" ), required=True, default=10, )
def handleSave(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return self.applyChanges(data) IStatusMessage(self.request).addStatusMessage(_(u"Changes saved"), "info") self.context.REQUEST.RESPONSE.redirect("@@velruse-settings")
class IVelruseBackendConfig(Interface): service_name = schema.TextLine( title=_(u"Name"), description=_( "velruse_backend_name_help", default=u"The name of the social network/authentication service"), missing_value=u"", required=False) service_url = schema.ASCIILine( title=_(u"URL or path"), description=_( "velruse_backend_url_help", default=u"An URL (can also be a relative path) to Velruse.\n" u"This URL must be properly configured in Velruse to call the remote " u"service"), missing_value="", required=False) service_icon = schema.ASCIILine( title=_(u"Icon"), description=_( "velruse_backend_icon_help", default= u"An URL (can also be a relative path) to an icon to be displayed in " u"the login form. Best format is 64x64px."), missing_value="", required=False)
class VelruseSettingsForm(controlpanel.RegistryEditForm): #fields = field.Fields(IVelruseGeneralSettings) schema = IVelruseGeneralSettings id = "VelruseSettingsEditForm" label = _(u"Velruse integration settings") description = _(u"help_velruse_settings_form", default=u"Configure how Plone talk with Velruse backend") def updateWidgets(self): super(VelruseSettingsForm, self).updateWidgets() self.widgets['connection_timeout'].size = 4 for widget in self.widgets['activated_plugins'].widgets: widget.style = u'width: 100%'; widget.klass = u' velruseData'; def updateFields(self): super(VelruseSettingsForm, self).updateFields() self.fields['site_login_enabled'].widgetFactory = SingleCheckBoxFieldWidget @button.buttonAndHandler(_('Save'), name='save') def handleSave(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return self.applyChanges(data) IStatusMessage(self.request).addStatusMessage(_(u"Changes saved"), "info") self.context.REQUEST.RESPONSE.redirect("@@velruse-settings") @button.buttonAndHandler(_('Cancel'), name='cancel') def handleCancel(self, action): IStatusMessage(self.request).addStatusMessage(_(u"Edit cancelled"), "info") self.request.response.redirect("%s/%s" % (self.context.absolute_url(), self.control_panel_view))
def __call__(self): form = self.request.form if form.get('form.button.Save', ''): errors = self.saveSettings() if errors: return self.index(errors=errors) else: return self.doReturn(_("Settings saved"), 'info') elif form.get('apply'): self.apply_changes(form.get('user', [])) elif form.get('remove'): self.clean_blacklist(form.get('remove_from_blacklist', [])) elif form.get('form.submitted'): self._search() return self.index()
def apply_changes(self, users): delete_count = 0 storage = self.context._storage blstorage = self.context._blacklist for user in users: if user.get('delete'): try: del storage[user.get('id')] delete_count += 1 except KeyError: pass if user.get('blacklist'): blstorage[user.get('id')] = DateTime() else: try: del blstorage[user.get('id')] except KeyError: pass if delete_count>0: ptool = getToolByName(self.context, 'plone_utils') ptool.addPortalMessage(_('users_delete_message', default="$count users deleted", mapping={'count': delete_count}))
def apply_changes(self, users): delete_count = 0 storage = self.context._storage blstorage = self.context._blacklist for user in users: if user.get('delete'): try: del storage[user.get('id')] delete_count += 1 except KeyError: pass if user.get('blacklist'): blstorage[user.get('id')] = DateTime() else: try: del blstorage[user.get('id')] except KeyError: pass if delete_count > 0: ptool = getToolByName(self.context, 'plone_utils') ptool.addPortalMessage( _('users_delete_message', default="$count users deleted", mapping={'count': delete_count}))
def handleCancel(self, action): IStatusMessage(self.request).addStatusMessage(_(u"Edit cancelled"), "info") self.request.response.redirect("%s/%s" % (self.context.absolute_url(), self.control_panel_view))