# HG changeset patch # User sylvain.thenault@logilab.fr # Date 1235091045 -3600 # Node ID 51e371245bc59515dbb8f996c89ec2161ebde0a4 # Parent 0b417be91dcae5395a037ca37658a6ceb5327232 various fixes to have change state and deletion forms working diff -r 0b417be91dca -r 51e371245bc5 web/form.py --- a/web/form.py Fri Feb 20 01:50:20 2009 +0100 +++ b/web/form.py Fri Feb 20 01:50:45 2009 +0100 @@ -379,7 +379,7 @@ def __init__(self, name=None, id=None, label=None, widget=None, required=False, initial=None, help=None, - eidparam=True): + eidparam=False): self.required = required if widget is not None: self.widget = widget @@ -476,22 +476,22 @@ return super(metafieldsform, mcs).__new__(mcs, name, bases, classdict) -class FieldsForm(object): +class FieldsForm(FormMixIn): __metaclass__ = metafieldsform - def __init__(self, req, id=None, title=None, action='edit', + def __init__(self, req, domid=None, title=None, action='edit', onsubmit="return freezeFormButtons('%s');", cssclass=None, cssstyle=None, cwtarget=None, buttons=None, redirect_path=None, set_error_url=True, copy_nav_params=False): self.req = req - self.id = id or 'form' + self.domid = domid or 'form' self.title = title self.action = action self.onsubmit = onsubmit self.cssclass = cssclass self.cssstyle = cssstyle self.cwtarget = cwtarget - self.redirect_path = None + self.redirect_path = redirect_path self.fields = list(self.__class__._fields_) if set_error_url: self.form_add_hidden('__errorurl', req.url()) @@ -552,30 +552,6 @@ def form_field_vocabulary(self, field): raise NotImplementedError - - BUTTON_STR = u'' - ACTION_SUBMIT_STR = u'' - - def button_ok(self, label=None, tabindex=None): - label = self.req._(label or stdmsgs.BUTTON_OK).capitalize() - return self.BUTTON_STR % ('defaultsubmit', label, tabindex or 2) - - def button_apply(self, label=None, tabindex=None): - label = self.req._(label or stdmsgs.BUTTON_APPLY).capitalize() - return self.ACTION_SUBMIT_STR % ('__action_apply', label, self.id, label, tabindex or 3) - - def button_delete(self, label=None, tabindex=None): - label = self.req._(label or stdmsgs.BUTTON_DELETE).capitalize() - return self.ACTION_SUBMIT_STR % ('__action_delete', label, self.id, label, tabindex or 3) - - def button_cancel(self, label=None, tabindex=None): - label = self.req._(label or stdmsgs.BUTTON_CANCEL).capitalize() - return self.ACTION_SUBMIT_STR % ('__action_cancel', label, self.id, label, tabindex or 4) - - def button_reset(self, label=None, tabindex=None): - label = self.req._(label or stdmsgs.BUTTON_CANCEL).capitalize() - return u'' % ( - label, tabindex or 4) def form_buttons(self): return self.buttons @@ -583,11 +559,11 @@ class EntityFieldsForm(FieldsForm): def __init__(self, *args, **kwargs): - kwargs.setdefault('id', 'entityForm') + kwargs.setdefault('domid', 'entityForm') self.entity = kwargs.pop('entity', None) super(EntityFieldsForm, self).__init__(*args, **kwargs) - self.form_add_hidden('__type') - self.form_add_hidden('eid', eidparam=False) + self.form_add_hidden('__type', eidparam=True) + self.form_add_hidden('eid') def form_render(self, **values): self.form_add_entity_hiddens(self.entity.e_schema) @@ -599,6 +575,7 @@ if fieldname != 'eid' and ( (eschema.has_subject_relation(fieldname) or eschema.has_object_relation(fieldname))): + field.eidparam = True self.fields.append(self.form_entity_hidden_field(field)) def form_entity_hidden_field(self, field): @@ -611,7 +588,7 @@ name = 'edits-%s' % field.name else: name = 'edito-%s' % field.name - return HiddenInitialValueField(field, name=name) + return HiddenInitialValueField(field, name=name, eidparam=True) def form_field_value(self, field, values): """look for field's value with the following rules: @@ -699,13 +676,12 @@ data = [] w = data.append # XXX form_needs_multipart - print 'render', form w(self.open_form(form)) w(u'
%s
' % _('validating...')) w(u'
') - w(tags.input(type='hidden', name='__form_id', value=form.id)) + w(tags.input(type='hidden', name='__form_id', value=form.domid)) if form.redirect_path: - w(tags.input(type='hidden', name='__redirect_path', value=form.redirect_path)) + w(tags.input(type='hidden', name='__redirectpath', value=form.redirect_path)) self.render_fields(w, form, values) self.render_buttons(w, form) w(u'
') @@ -717,8 +693,8 @@ enctype = 'multipart/form-data' else: enctype = 'application/x-www-form-urlencoded' - tag = ('
%s\n' % _('Do you want to delete the following element(s) ?')) - form = MultipleFieldsForm(req, id='deleteconf', action=self.build_url(), + form = MultipleFieldsForm(req, domid='deleteconf', action=self.build_url('edit'), onsubmit=self.onsubmit, copy_nav_params=True) form.buttons.append(form.button_delete(label=stdmsgs.YES)) form.buttons.append(form.button_cancel(label=stdmsgs.NO)) @@ -73,8 +73,8 @@ class ChangeStateForm(EntityFieldsForm): - state = TextField(widget=HiddenInput) __method = TextField(name='__method', initial='set_state', widget=HiddenInput) + state = TextField(widget=HiddenInput, eidparam=True) trcomment = RichTextField(eidparam=True) def form_buttons(self): @@ -98,15 +98,15 @@ dest = transition.destination() self.req.add_js('cubicweb.edition.js') _ = self.req._ - self.w(self.error_message()) + form = ChangeStateForm(self.req, entity=entity, + redirect_path=self.redirectpath(entity)) + self.w(form.error_message()) self.w(u'

%s %s

\n' % (_(transition.name), entity.view('oneline'))) msg = _('status will change from %(st1)s to %(st2)s') % { 'st1': _(state.name), 'st2': _(dest.name)} self.w(u'

%s

\n' % msg) - form = ChangeStateForm(req, entity=entity, - redirect_path=self.redirectpath(entity)) - self.w(form.form_render(entity, state=dest.eid)) + self.w(form.form_render(state=dest.eid)) def redirectpath(self, entity): return entity.rest_path()