# HG changeset patch
# User sylvain.thenault@logilab.fr
# Date 1236797670 -3600
# Node ID c07f3accf04ac0f6e0b94a0f7078ac380fb2888c
# Parent e4342c74ed2d688d52d8df6f926bd2097e3b015b
new style massmailing view
diff -r e4342c74ed2d -r c07f3accf04a web/test/unittest_form.py
--- a/web/test/unittest_form.py Wed Mar 11 19:54:03 2009 +0100
+++ b/web/test/unittest_form.py Wed Mar 11 19:54:30 2009 +0100
@@ -34,6 +34,13 @@
rset = self.execute('EGroup X')
self.assertTextEquals(self.view('deleteconf', rset, template=None).source,
'')
+
+ def test_massmailing_form(self):
+ self.execute('INSERT EmailAddress X: X address L + "@cubicweb.org", '
+ 'U use_email X WHERE U is EUser, U login L')
+ rset = self.execute('EUser X')
+ self.assertTextEquals(self.view('massmailing', rset, template=None).source,
+ '')
# fields tests ############################################################
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' |