"""Mass mailing form views:organization: Logilab:copyright: 2007-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses"""__docformat__="restructuredtext en"_=unicodeimportoperatorfromcubicweb.interfacesimportIEmailablefromcubicweb.selectorsimportimplements,match_user_groupsfromcubicweb.viewimportEntityViewfromcubicweb.webimportstdmsgs,action,form,formfieldsasfffromcubicweb.web.formwidgetsimportCheckBox,TextInput,AjaxWidget,ImgButtonfromcubicweb.web.viewsimportforms,formrenderersclassSendEmailAction(action.Action):__regid__='sendemail'# XXX should check email is set as well__select__=(action.Action.__select__&implements(IEmailable)&match_user_groups('managers','users'))title=_('send email')category='mainactions'defurl(self):params={'vid':'massmailing','__force_display':1}ifself._cw.form.has_key('rql'):params['rql']=self._cw.form['rql']returnself._cw.build_url(self._cw.relative_path(includeparams=False),**params)defrecipient_vocabulary(form):vocab=[(entity.get_email(),entity.eid)forentityinform.cw_rset.entities()]return[(label,value)forlabel,valueinvocabiflabel]classMassMailingForm(forms.FieldsForm):__regid__='massmailing'sender=ff.StringField(widget=TextInput({'disabled':'disabled'}),label=_('From:'),value=lambdaf:'%s <%s>'%(f._cw.user.dc_title(),f._cw.user.get_email()))recipient=ff.StringField(widget=CheckBox(),label=_('Recipients:'),choices=recipient_vocabulary,value=lambdaf:[entity.eidforentityinf.cw_rset.entities()ifentity.get_email()])subject=ff.StringField(label=_('Subject:'),max_length=256)mailbody=ff.StringField(widget=AjaxWidget(wdgtype='TemplateTextField',inputid='mailbody'))form_buttons=[ImgButton('sendbutton',"javascript: $('#sendmail').submit()",_('send email'),'SEND_EMAIL_ICON'),ImgButton('cancelbutton',"javascript: history.back()",stdmsgs.BUTTON_CANCEL,'CANCEL_EMAIL_ICON')]form_renderer_id=__regid__def__init__(self,*args,**kwargs):super(MassMailingForm,self).__init__(*args,**kwargs)field=self.field_by_name('mailbody')field.widget.attrs['cubicweb:variables']=','.join(self.get_allowed_substitutions())defget_allowed_substitutions(self):attrs=[]forcoltypeinself.cw_rset.column_types(0):eclass=self._cw.vreg['etypes'].etype_class(coltype)attrs.append(eclass.allowed_massmail_keys())returnsorted(reduce(operator.and_,attrs))defbuild_substitutions_help(self):insertLink=u'<a href="javascript: insertText(\'%%(%s)s\', \'emailarea\');">%%(%s)s</a>'substs=(u'<div class="substitution">%s</div>'%(insertLink%(subst,subst))forsubstinself.get_allowed_substitutions())helpmsg=self._cw._('You can use any of the following substitutions in your text')returnu'<div id="substitutions"><span>%s</span>%s</div>'%(helpmsg,u'\n'.join(substs))classMassMailingFormRenderer(formrenderers.FormRenderer):__regid__='massmailing'button_bar_class=u'toolbar'def_render_fields(self,fields,w,form):w(u'<table class="headersform">')forfieldinfields:iffield.name=='mailbody':w(u'</table>')self._render_toolbar(w,form)w(u'<table>')w(u'<tr><td><div>')else:w(u'<tr>')w(u'<td class="hlabel">%s</td>'%self.render_label(form,field))w(u'<td class="hvalue">')w(field.render(form,self))iffield.name=='mailbody':w(u'</div></td>')w(u'<td>%s</td>'%form.build_substitutions_help())w(u'</tr>')else:w(u'</td></tr>')w(u'</table>')def_render_toolbar(self,w,form):w(u'<div id="toolbar">')w(u'<ul>')forbuttoninform.form_buttons:w(u'<li>%s</li>'%button.render(form))w(u'</ul>')w(u'</div>')defrender_buttons(self,w,form):passclassMassMailingFormView(form.FormViewMixIn,EntityView):__regid__='massmailing'__select__=implements(IEmailable)&match_user_groups('managers','users')defcall(self):req=self._cwreq.add_js('cubicweb.widgets.js','cubicweb.massmailing.js')req.add_css('cubicweb.mailform.css')from_addr='%s <%s>'%(req.user.dc_title(),req.user.get_email())form=self._cw.vreg['forms'].select('massmailing',self._cw,rset=self.cw_rset,action='sendmail',domid='sendmail')self.w(form.render())