diff -r e4342c74ed2d -r c07f3accf04a web/views/massmailing.py --- a/web/views/massmailing.py Wed Mar 11 19:54:03 2009 +0100 +++ b/web/views/massmailing.py Wed Mar 11 19:54:30 2009 +0100 @@ -17,12 +17,12 @@ class SendEmailAction(Action): - category = 'mainactions' + id = 'sendemail' # XXX should check email is set as well __select__ = implements(IEmailable) & match_user_groups('managers', 'users') - id = 'sendemail' title = _('send email') + category = 'mainactions' def url(self): params = {'vid': 'massmailing', '__force_display': 1} @@ -31,95 +31,96 @@ return self.build_url(self.req.relative_path(includeparams=False), **params) +from cubicweb.web.form import FieldsForm, FormRenderer +from cubicweb.web.form import StringField, CheckBox, TextInput, AjaxWidget + +class MassMailingForm(FieldsForm): + id = 'massmailing' + + sender = StringField(widget=TextInput({'disabled': 'disabled'}), label=_('From:')) + recipient = StringField(widget=CheckBox(), label=_('Recipients:')) + subject = StringField(label=_('Subject:')) + mailbody = StringField(widget=AjaxWidget(wdgtype='TemplateTextField', + inputid='mailarea')) -class MassMailingForm(EntityView): + def form_field_vocabulary(self, field): + if field.name == 'recipient': + vocab = [(entity.get_email(), entity.eid) for entity in self.rset.entities()] + return [(label, value) for label, value in vocab if label] + return super(MassMailingForm, self).form_field_vocabulary(field) + + def form_field_value(self, field, values): + if field.name == 'recipient': + return [entity.eid for entity in self.rset.entities() if entity.get_email()] + elif field.name == 'mailbody': + field.widget.attrs['cubicweb:variables'] = self.get_allowed_substitutions() + return super(MassMailingForm, self).form_field_value(field, values) + + def form_buttons(self): + context = {'domid': self.domid, + 'cancel' : self.req._(stdmsgs.BUTTON_CANCEL), + 'cancelimgpath' : self.req.external_resource('CANCEL_EMAIL_ICON'), + 'send' : self.req._('send email'), + 'sendimgpath' : self.req.external_resource('SEND_EMAIL_ICON'), + } + return [''' +%(send)s''' % context, + ''' +%(cancel)s''' % context, + ] + + def get_allowed_substitutions(self): + attrs = [] + for coltype in self.rset.column_types(0): + eclass = self.vreg.etype_class(coltype) + attrs.append(eclass.allowed_massmail_keys()) + return sorted(reduce(operator.and_, attrs)) + + def build_substitutions_help(self): + insertLink = u'%%(%s)s' + substs = (u'
')
+ else:
+ w(u' %s | ' % self.render_label(form, field))
+ w(u'')
+ w(field.render(form, self))
+ if field.name == 'mailbody':
+ w(u' | ')
+ w(u'%s | ' % form.build_substitutions_help())
+ w(u' |