"""Mass mailing form views:organization: Logilab:copyright: 2007-2009 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.webimportstdmsgsfromcubicweb.web.actionimportActionfromcubicweb.web.formimportFormViewMixInfromcubicweb.web.formfieldsimportStringFieldfromcubicweb.web.formwidgetsimportCheckBox,TextInput,AjaxWidget,ImgButtonfromcubicweb.web.viewsimportforms,formrenderersclassSendEmailAction(Action):id='sendemail'# XXX should check email is set as well__select__=implements(IEmailable)&match_user_groups('managers','users')title=_('send email')category='mainactions'defurl(self):params={'vid':'massmailing','__force_display':1}ifself.req.form.has_key('rql'):params['rql']=self.req.form['rql']returnself.build_url(self.req.relative_path(includeparams=False),**params)classMassMailingForm(forms.FieldsForm):id='massmailing'sender=StringField(widget=TextInput({'disabled':'disabled'}),label=_('From:'))recipient=StringField(widget=CheckBox(),label=_('Recipients:'))subject=StringField(label=_('Subject:'),max_length=256)mailbody=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=iddefform_field_vocabulary(self,field):iffield.name=='recipient':vocab=[(entity.get_email(),entity.eid)forentityinself.rset.entities()]return[(label,value)forlabel,valueinvocabiflabel]returnsuper(MassMailingForm,self).form_field_vocabulary(field)defform_field_value(self,field,values):iffield.name=='recipient':return[entity.eidforentityinself.rset.entities()ifentity.get_email()]eliffield.name=='mailbody':field.widget.attrs['cubicweb:variables']=','.join(self.get_allowed_substitutions())returnsuper(MassMailingForm,self).form_field_value(field,values)defget_allowed_substitutions(self):attrs=[]forcoltypeinself.rset.column_types(0):eclass=self.vreg.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.req._('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):id='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(FormViewMixIn,EntityView):id='massmailing'__select__=implements(IEmailable)&match_user_groups('managers','users')defcall(self):req=self.reqreq.add_js('cubicweb.widgets.js')req.add_css('cubicweb.mailform.css')from_addr='%s <%s>'%(req.user.dc_title(),req.user.get_email())form=self.vreg.select_object('forms','massmailing',self.req,self.rset,action='sendmail',domid='sendmail')self.w(form.form_render(sender=from_addr))