web/views/massmailing.py
branchstable
changeset 5366 5f116a4d8a54
parent 4396 98e98a5aa399
child 5421 8167de96c523
equal deleted inserted replaced
5365:ca838c79af97 5366:5f116a4d8a54
     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())