9 _ = unicode |
9 _ = unicode |
10 |
10 |
11 import operator |
11 import operator |
12 |
12 |
13 from cubicweb.interfaces import IEmailable |
13 from cubicweb.interfaces import IEmailable |
14 from cubicweb.selectors import implements, match_user_groups |
14 from cubicweb.selectors import implements, authenticated_user |
15 from cubicweb.view import EntityView |
15 from cubicweb.view import EntityView |
16 from cubicweb.web import stdmsgs, action, form, formfields as ff |
16 from cubicweb.web import stdmsgs, action, form, formfields as ff |
17 from cubicweb.web.formwidgets import CheckBox, TextInput, AjaxWidget, ImgButton |
17 from cubicweb.web.formwidgets import CheckBox, TextInput, AjaxWidget, ImgButton |
18 from cubicweb.web.views import forms, formrenderers |
18 from cubicweb.web.views import forms, formrenderers |
19 |
19 |
20 |
20 |
21 class SendEmailAction(action.Action): |
21 class SendEmailAction(action.Action): |
22 __regid__ = 'sendemail' |
22 __regid__ = 'sendemail' |
23 # XXX should check email is set as well |
23 # XXX should check email is set as well |
24 __select__ = (action.Action.__select__ & implements(IEmailable) |
24 __select__ = (action.Action.__select__ & implements(IEmailable) |
25 & match_user_groups('managers', 'users')) |
25 & authenticated_user()) |
26 |
26 |
27 title = _('send email') |
27 title = _('send email') |
28 category = 'mainactions' |
28 category = 'mainactions' |
29 |
29 |
30 def url(self): |
30 def url(self): |
39 vocab = [(entity.get_email(), entity.eid) for entity in form.cw_rset.entities()] |
39 vocab = [(entity.get_email(), entity.eid) for entity in form.cw_rset.entities()] |
40 return [(label, value) for label, value in vocab if label] |
40 return [(label, value) for label, value in vocab if label] |
41 |
41 |
42 class MassMailingForm(forms.FieldsForm): |
42 class MassMailingForm(forms.FieldsForm): |
43 __regid__ = 'massmailing' |
43 __regid__ = 'massmailing' |
|
44 |
|
45 needs_js = ('cubicweb.widgets.js', 'cubicweb.massmailing.js') |
|
46 needs_css = ('cubicweb.mailform.css') |
|
47 domid = 'sendmail' |
|
48 action = 'sendmail' |
44 |
49 |
45 sender = ff.StringField(widget=TextInput({'disabled': 'disabled'}), |
50 sender = ff.StringField(widget=TextInput({'disabled': 'disabled'}), |
46 label=_('From:'), |
51 label=_('From:'), |
47 value=lambda f: '%s <%s>' % (f._cw.user.dc_title(), f._cw.user.get_email())) |
52 value=lambda f: '%s <%s>' % (f._cw.user.dc_title(), f._cw.user.get_email())) |
48 recipient = ff.StringField(widget=CheckBox(), label=_('Recipients:'), |
53 recipient = ff.StringField(widget=CheckBox(), label=_('Recipients:'), |
79 helpmsg, u'\n'.join(substs)) |
84 helpmsg, u'\n'.join(substs)) |
80 |
85 |
81 |
86 |
82 class MassMailingFormRenderer(formrenderers.FormRenderer): |
87 class MassMailingFormRenderer(formrenderers.FormRenderer): |
83 __regid__ = 'massmailing' |
88 __regid__ = 'massmailing' |
84 button_bar_class = u'toolbar' |
|
85 |
89 |
86 def _render_fields(self, fields, w, form): |
90 def _render_fields(self, fields, w, form): |
87 w(u'<table class="headersform">') |
91 w(u'<table class="headersform">') |
88 for field in fields: |
92 for field in fields: |
89 if field.name == 'mailbody': |
93 if field.name == 'mailbody': |
113 w(u'</div>') |
117 w(u'</div>') |
114 |
118 |
115 def render_buttons(self, w, form): |
119 def render_buttons(self, w, form): |
116 pass |
120 pass |
117 |
121 |
|
122 |
118 class MassMailingFormView(form.FormViewMixIn, EntityView): |
123 class MassMailingFormView(form.FormViewMixIn, EntityView): |
119 __regid__ = 'massmailing' |
124 __regid__ = 'massmailing' |
120 __select__ = implements(IEmailable) & match_user_groups('managers', 'users') |
125 __select__ = implements(IEmailable) & authenticated_user() |
121 |
126 |
122 def call(self): |
127 def call(self): |
123 req = self._cw |
128 form = self._cw.vreg['forms'].select('massmailing', self._cw, |
124 req.add_js('cubicweb.widgets.js', 'cubicweb.massmailing.js') |
129 rset=self.cw_rset) |
125 req.add_css('cubicweb.mailform.css') |
|
126 from_addr = '%s <%s>' % (req.user.dc_title(), req.user.get_email()) |
|
127 form = self._cw.vreg['forms'].select('massmailing', self._cw, rset=self.cw_rset, |
|
128 action='sendmail', domid='sendmail') |
|
129 self.w(form.render()) |
130 self.w(form.render()) |