class OAuthControlPanelForm(RegistryEditForm): # A form with two subforms # 1. a small form to add new configurations # - handle create # 2. a form with one group form for each existing configuration # - handle edit and delete form.extends(RegistryEditForm) template = ViewPageTemplateFile('controlpanel.pt') # no schema needed to drive this form schema = None # part 1 of the form (part 2 is this form itself) addform = None def __init__(self, context, request): super(OAuthControlPanelForm, self).__init__(context, request) self.addform = CreateNewForm(context, request) def getContent(self): # TODO: there is something borked with setting ignoreContext # when I hit save it tries to persist the fields in this form # to whatever is returned here (None causes troubles which # should be fine for a from with ignoreContext=True) return {} def updateFields(self): super(OAuthControlPanelForm, self).updateFields() # This is the place to add groups. # superclass groups have been created now, # and it won't mess with ours. # we can also add GroupFactory here, because update # will take care of it registry = getUtility(IRegistry) coll = registry.collectionOfInterface(IOAuth1Settings, check=False) groups = [] for rid, record in coll.items(): # TODO: prefix of record id? subform = OAuth1EditForm(record, self.request, self) subform.label = record.title or record.id or rid locate(subform, self, record.id or rid) groups.append(subform) coll = registry.collectionOfInterface(IOAuth2Settings, check=False) for rid, record in coll.items(): # TODO: prefix of record id? subform = OAuth2EditForm(record, self.request, self) subform.label = record.title or record.id or rid locate(subform, self, record.id or rid) groups.append(subform) self.groups += tuple(groups) def update(self): self.addform.update() # TODO check response for shortcut (if addform.update # executed it's action the response is probably # already set to redirect?) super(OAuthControlPanelForm, self).update()
class StoryEditQuickForm(EditQuickForm): form.extends(EditQuickForm) fields = field.Fields(IQuickForm) + field.Fields(IStory).select( 'text', 'estimate', 'assigned_to' )
class Add(add.DefaultAddForm): """ Add Experiment """ template = ViewPageTemplateFile("experiment_add.pt") extends(view.DefaultView, ignoreButtons=True) buttons = button.Buttons(add.DefaultAddForm.buttons['cancel']) @button.buttonAndHandler(_('Create and start'), name='save') def handleAdd(self, action): data, errors = self.extractData() self.validateAction(data) if errors: self.status = self.formErrorsMessage return # TODO: this is prob. a bug in base form, because createAndAdd # does not return the wrapped object. obj = self.createAndAdd(data) if obj is None: # TODO: this is probably an error here? # object creation/add failed for some reason return # get wrapped instance fo new object (see above) obj = self.context[obj.id] # mark only as finished if we get the new object self._finishedAdd = True IStatusMessage(self.request).addStatusMessage(_(u"Item created"), "info") # auto start job here jt = IJobTracker(obj) msgtype, msg = jt.start_job(self.request) if msgtype is not None: IStatusMessage(self.request).add(msg, type=msgtype) @button.buttonAndHandler(_('Create'), name='create') def handleCreate(self, action): data, errors = self.extractData() self.validateAction(data) if errors: self.status = self.formErrorsMessage return # TODO: this is prob. a bug in base form, because createAndAdd # does not return the wrapped object. obj = self.createAndAdd(data) if obj is None: # TODO: this is probably an error here? # object creation/add failed for some reason return # get wrapped instance fo new object (see above) obj = self.context[obj.id] # mark only as finished if we get the new object self._finishedAdd = True IStatusMessage(self.request).addStatusMessage(_(u"Item created"), "info")
class EditHostForm(EditForm): """ Edit form for host """ form.extends(form.EditForm) label = _(u'Host Edit Form') factory = Host omitFields = HostDetails.omit_editfields fields = fieldsForFactory(factory, omitFields) fields['isTemplate'].widgetFactory = \ checkbox.SingleCheckBoxFieldWidget
class EditForm(form.EditForm): extends(form.EditForm) grok.context(IFearture) grok.require('zope2.View') fields = field.Fields(IFearture) label = _(u"modify standard parameters for Plotting the figure") fields['coordination'].widgetFactory = DataGridFieldFactory
class DateManagementView(form.EditForm): label = _("Set the date for the school") template = ViewPageTemplateFile('date_management.pt') form.extends(form.EditForm) fields = field.Fields(IDateManager) def updateActions(self): super(DateManagementView, self).updateActions() self.actions['apply'].addClass('button-ok')
class Edit(mars.form.FormView, layout.FormLayoutSupport, form.EditForm): form.extends(form.EditForm) label = u'Message Edit Form' fields = field.Fields(IMessage) @button.buttonAndHandler(u'Apply and View', name='applyView') def handleApplyView(self, action): self.handleApply(self, action) if not self.widgets.errors: url = absoluteURL(self.context, self.request) self.request.response.redirect(url)
class IamIsearchSettingsEditForm(RegistryEditForm): form.extends(RegistryEditForm) schema = IIamIsearchSettings label = _(u"I am / I search settings") def updateFields(self): super(IamIsearchSettingsEditForm, self).updateFields() def updateWidgets(self): super(IamIsearchSettingsEditForm, self).updateWidgets()
class HelloWorldEditForm(EditForm): grok.context(message.HelloWorld) form.extends(form.EditForm) label = u'Hello World Message Edit Form' fields = field.Fields(interfaces.IHelloWorld) @button.buttonAndHandler(u'Apply and View', name='applyView') def handleApplyView(self, action): self.handleApply(self, action) if not self.widgets.errors: url = absoluteURL(self.context, self.request) self.request.response.redirect(url)
class Edit(mars.form.FormView, layout.FormLayoutSupport, group.GroupForm, form.EditForm): """Edit form for site""" grok.name('edit') grok.require(permissions.MANAGECONTENT) form.extends(form.EditForm) label = _('Edit Metadata for the site.') groups = (ContentMetaDataGroup, ) @button.buttonAndHandler(u'Apply and View', name='applyView') def handleApplyView(self, action): self.handleApply(self, action) if not self.widgets.errors: url = absoluteURL(self.context, self.request) self.request.response.redirect(url)
class SettingsPanelForm(RegistryEditForm): """ Define form logic """ form.extends(RegistryEditForm) schema = ISettings fields = field.Fields(ISettingsDefault) groups = (FormVectorizer, FormClustering) @button.buttonAndHandler(_(u"Compute"), name='compute') def handleCompute(self, action): model = ILearningModel(self.context) # pr = cProfile.Profile() # pr.enable() self.status = model.compute()
class EditForm(layout.FormLayoutSupport, form.EditForm): """ Edit form """ form.extends(form.EditForm) label = _(u'Edit Superclass') factory = Superclass omitFields = SuperclassDetails.omit_editfields fields = fieldsForFactory(factory, omitFields) def update(self): """ check for necessary permissions """ for field_name in self.fields.keys(): if not canWrite(self.context, field_name): print "delete: %s from %s" % (field_name, self.context) del self.fields[field_name] super(form.EditForm, self).update() def applyChanges(self, data): content = self.getContent() changes = applyChanges(self, content, data) # ``changes`` is a dictionary; if empty, there were no changes if changes: # Construct change-descriptions for the object-modified event descriptions = [] for interface, attrs in changes.items(): if interface == IAdmUtilEvent: #print "##### Event #######" pass elif IEventIfSuperclass.isEqualOrExtendedBy(interface): #print "##### Superclass #######" pass names = attrs.keys() #for attr in attrs: #print "attr: %s (I:%s)" % (attr, interface) #print " old: ", attrs[attr]['oldval'] #print " new: ", attrs[attr]['newval'] descriptions.append(Attributes(interface, *names)) # Send out a detailed object-modified event zope.event.notify(ObjectModifiedEvent(content, *descriptions)) # workaround for gocept.objectquery import transaction transaction.savepoint() return changes
class OpengraphControlpanelForm(extensible.ExtensibleForm, form.EditForm): successMessage = _(u'Data successfully updated.') noChangesMessage = _(u'No changes were applied.') formErrorsMessage = _(u"There were some errors.") form.extends(form.EditForm, ignoreButtons=True) fields = field.Fields(IOpengraphSettings) label = _(u'Configure Collective Opengraph') def __init__(self, context, request): super(OpengraphControlpanelForm, self).__init__(context, request) self.ptool = getToolByName(self.context, 'plone_utils') @button.buttonAndHandler(_(u'Apply'), name='apply') def handle_apply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return registry = getUtility(IRegistry) settings = registry.forInterface(IOpengraphSettings, check=False) IAnnotations( self.context)['old_content_types'] = settings.content_types changes = self.applyChanges(data) if changes: self.status = self.successMessage if not self.context.restrictedTraverse( '@@opengraph_sitewide_enabled')(): notify(OpengraphSettingsEvent(self.context, data)) else: self.status = self.noChangesMessage self.ptool.addPortalMessage(self.status, 'info') self.request.response.redirect(self.back_link) @button.buttonAndHandler(_(u'Cancel'), name='cancel') def handle_cancel(self, action): self.ptool.addPortalMessage(self.noChangesMessage, 'info') self.request.response.redirect(self.back_link) @property def back_link(self): return back_to_controlpanel(self)['url']
class ImportAllXlsDataForm(layout.FormLayoutSupport, form.Form): """ Import all objects """ form.extends(form.Form) label = _(u"Import all XLS data") fields = field.Fields(IImportXlsData) def getTitle(self): """this title will be displayed in the head of form""" return u"aaa" @button.buttonAndHandler(u'Submit') def handleSubmit(self, action): """submit was pressed""" supervisor = getUtility(IAdmUtilSupervisor, name='AdmUtilSupervisor') if 'xlsdata' in self.widgets: codepage = self.widgets['codepage'].value[0] fileWidget = self.widgets['xlsdata'] fileUpload = fileWidget.extract() filename = datetime.now().strftime('in_%Y%m%d%H%M%S.xls') f_handle, f_name = tempfile.mkstemp(filename) outf = open(f_name, 'wb') outf.write(fileUpload.read()) outf.close() try: supervisor.importAllXlsData(self.request, f_name, codepage) finally: os.remove(f_name) url = absoluteURL(self.context, self.request) self.request.response.redirect(url) @button.buttonAndHandler(u'Cancel') def handleCancel(self, action): """cancel was pressed""" url = absoluteURL(self.context, self.request) self.request.response.redirect(url) def update(self): """update all widgets""" #if ISuperclass.providedBy(self.context): #self.label = self.getTitle() form.Form.update(self)
class FieldDescriptionEditView(form.EditForm): """Edit form for basic person.""" form.extends(form.EditForm) template = ViewPageTemplateFile('templates/person_add.pt') fields = field.Fields(IFieldDescription).omit('name') @button.buttonAndHandler(_("Cancel")) def handle_cancel_action(self, action): url = absoluteURL(self.context, self.request) self.request.response.redirect(url) def updateActions(self): super(FieldDescriptionEditView, self).updateActions() self.actions['apply'].addClass('button-ok') self.actions['cancel'].addClass('button-cancel') @property def label(self): return _(u'Change information for ${field_title}', mapping={'field_title': self.context.title})
class DatasetEditView(DatasetFieldMixin, DefaultEditForm): # kw: ignoreFields, ignoreButtons, ignoreHandlers form.extends(DefaultEditForm, ignoreFields=True) @property def additionalSchemata(self): for schema in super(DatasetFieldMixin, self).additionalSchemata: yield schema for schema in self.getGenreSchemata(): yield schema # TODO: do this only for zipped files @button.buttonAndHandler(u'Edit File Details', name='edit_file_metadata') def handleEditFileMetadata(self, action): # do whatever here and redirect to metadata edit view # TODO: use restrictedTraverse to check security as well? # (would avoid login page) url = self.context.absolute_url() + '/@@editfilemetadata' self.request.response.redirect(url)
class ContactEditView(form.EditForm): """Edit form for basic contact.""" form.extends(form.EditForm) template = ViewPageTemplateFile('templates/contact_add.pt') fields = field.Fields(IContact) formErrorsMessage = _('Please correct the marked fields below.') @button.buttonAndHandler(_("Cancel")) def handle_cancel_action(self, action): url = absoluteURL(self.context, self.request) self.request.response.redirect(url) def update(self): super(ContactEditView, self).update() self.subforms = [] for relationship_info in self.context.persons.all().relationships: subform = ContactPersonInfoSubForm(self.context, self.request, self, relationship_info) # XXX: should also apply at least urllib.quote here: prefix = unicode( relationship_info.target.__name__).encode('punycode') subform.prefix += '.%s' % prefix subform.update() # One more hack. if subform.changed and self.status == self.noChangesMessage: self.status = self.successMessage self.subforms.append(subform) def updateActions(self): super(ContactEditView, self).updateActions() self.actions['apply'].addClass('button-ok') self.actions['cancel'].addClass('button-cancel') @property def label(self): return _(u'Change contact information for ${person}', mapping={'person': self.context.title})
class ImportCsvDataComponentForm(layout.FormLayoutSupport, form.Form): """ Delete the net """ form.extends(form.Form) label = _(u"Import CSV data") fields = field.Fields(IImportCsvData) def getTitle(self): """this title will be displayed in the head of form""" return u"aaa" @button.buttonAndHandler(u'Submit') def handleSubmit(self, action): """submit was pressed""" if 'csvdata' in self.widgets: fileWidget = self.widgets['csvdata'] fileUpload = fileWidget.extract() reader = csv.reader(fileUpload.readlines(), delimiter=';', quoting=csv.QUOTE_NONNUMERIC) # for row in reader: # print '> ', row url = absoluteURL(self.context, self.request) self.request.response.redirect(url) @button.buttonAndHandler(u'Cancel') def handleCancel(self, action): """cancel was pressed""" url = absoluteURL(self.context, self.request) self.request.response.redirect(url) def update(self): """update all widgets""" #if ISuperclass.providedBy(self.context): #self.label = self.getTitle() form.Form.update(self)
class AllFieldsForm(mars.form.FormView, form.EditForm): """A form showing all fields.""" grok.name('widgets') grok.context(zope.interface.Interface) form.extends(form.EditForm) fields = field.Fields(interfaces.IAllFields).omit('dictField', 'objectField') fields['checkboxBoolField'].widgetFactory = \ checkbox.SingleCheckBoxFieldWidget buttons = form.EditForm.buttons + \ button.Buttons( button.ImageButton(name='pressme', image=u'pressme.png') ) label = 'Widgets Demo' @button.handler(buttons['pressme']) def handlePressMe(self, action): self.status = u'Press me was clicked!' def getContent(self): return interfaces.IAllFields(self.context) def updateWidgets(self): self.widgets = zope.component.getMultiAdapter( (self, self.request, self.getContent()), IWidgets) self.widgets.update() self.widgets['hiddenField'].mode = HIDDEN_MODE self.widgets['promptChoiceField'].prompt = True self.widgets['promptChoiceField'].update() def __call__(self): self.update() layout = zope.component.getMultiAdapter((self, self.request), ILayoutTemplate) return layout(self)
class AddForm(layout.FormLayoutSupport, form.AddForm): """Add form.""" form.extends(form.AddForm) label = _(u'Add Superclass') factory = Superclass omitFields = SuperclassDetails.omit_addfields fields = fieldsForFactory(factory, omitFields) def nextURL(self): """ forward the browser """ return absoluteURL(self.context[self._newObjectID], self.request) def create(self, data): """ will create the object """ obj = self.factory(**data) self.newdata = data IBrwsOverview(obj).setTitle(data['ikName']) obj.__post_init__() return obj def add(self, obj): """ will store the new one in object tree """ travp = self.context # store obj id for nextURL() self._newObjectID = obj.objectID while IPagelet.providedBy(travp): travp = self.context.__parent__ travp[obj.objectID] = obj if hasattr(obj, "store_refs"): obj.store_refs(**self.newdata) # workaround for gocept.objectquery #import transaction #transaction.savepoint() return obj
class DeleteForm(layout.FormLayoutSupport, form.Form): """ Delete the net """ form.extends(form.Form) label = _(u"Delete this object?") def getTitle(self): """this title will be displayed in the head of form""" return _(u"Delete this object: '%s'?") % \ IBrwsOverview(self.context).getTitle() @button.buttonAndHandler(u'Delete') def handleDelete(self, action): """delete was pressed""" if ISuperclass.providedBy(self.context): parent = self.context.__parent__ del parent[self.context.objectID] self.deleted = True self.context = parent url = absoluteURL(parent, self.request) self.request.response.redirect(url) # workaround for gocept.objectquery import transaction transaction.savepoint() @button.buttonAndHandler(u'Cancel') def handleCancel(self, action): """cancel was pressed""" url = absoluteURL(self.context, self.request) self.request.response.redirect(url) def update(self): """update all widgets""" if ISuperclass.providedBy(self.context): self.label = self.getTitle() form.Form.update(self)
class SettingsEditForm(RegistryEditForm): form.extends(RegistryEditForm) schema = ISettings
class GeolocationDefaultControlPanelForm(RegistryEditForm): form.extends(RegistryEditForm) schema = IGeolocationDefaults id = "geolocation-defaults" label = _("Geolocation default")
class EditHostForm(EditForm): """ Edit form for host """ form.extends(form.EditForm) label = _(u'VMware ESX Server Edit Form') fields = field.Fields(IHostVMwareEsx).omit(*HostDetails.omit_editfields)
class ControlPanelForm(RegistryEditForm): form.extends(RegistryEditForm) schema = ITilesControlPanel label = _(u"Tiles default settings") description = _(u'Default settings to use for all tiles.')
class EditHostForm(EditForm): """ Edit form for host """ form.extends(form.EditForm) label = _(u'Host Edit Form') fields = field.Fields(IHost).omit(*HostDetails.omit_editfields)
class RabbitMQClientControlPanelForm(RegistryEditForm): """RabbitMQClientControlPanelForm.""" form.extends(RegistryEditForm) schema = IRabbitMQClientSettings
class SettingsControlPanelForm(RegistryEditForm): form.extends(RegistryEditForm) schema = IMobileThemingSettings
class TASettingControlPanelForm(RegistryEditForm): form.extends(RegistryEditForm) schema = ITASetting
class BasicInformControlPanelForm(RegistryEditForm): form.extends(RegistryEditForm) schema = IInform