From c7f20b236298a72b371f2f1d2a89a3e8fbf89b6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89lie=20Bouttier?= Date: Sat, 4 Nov 2017 21:12:58 +0100 Subject: [PATCH] notify co-speaker --- cfp/forms.py | 5 ++ cfp/views.py | 43 +++++++++++++- locale/fr/LC_MESSAGES/django.mo | Bin 21053 -> 21786 bytes locale/fr/LC_MESSAGES/django.po | 102 +++++++++++++++++++++++--------- 4 files changed, 120 insertions(+), 30 deletions(-) diff --git a/cfp/forms.py b/cfp/forms.py index a2bc667..ec862e1 100644 --- a/cfp/forms.py +++ b/cfp/forms.py @@ -196,12 +196,17 @@ class TalkActionForm(forms.Form): class ParticipantForm(OnSiteNamedModelForm): + notify = forms.BooleanField(initial=True, required=False, label=_('Notify by mail?')) + def __init__(self, *args, **kwargs): social = kwargs.pop('social', True) + ask_notify = kwargs.pop('ask_notify', False) super().__init__(*args, **kwargs) if not social: for field in ['twitter', 'linkedin', 'github', 'website', 'facebook', 'mastodon']: self.fields.pop(field) + if not ask_notify: + self.fields.pop('notify') class Meta: model = Participant diff --git a/cfp/views.py b/cfp/views.py index 0e7d2cf..416c6e9 100644 --- a/cfp/views.py +++ b/cfp/views.py @@ -326,11 +326,52 @@ def proposal_speaker_edit(request, speaker, talk_id=None, co_speaker_id=None): co_speaker = get_object_or_404(Participant, site=request.conference.site, talk__pk=talk.pk, pk=co_speaker_id) else: co_speaker_candidates = speaker.co_speaker_set.exclude(pk__in=talk.speakers.values_list('pk')) - form = ParticipantForm(request.POST or None, conference=request.conference, instance=co_speaker if talk else speaker) + form = ParticipantForm(request.POST or None, conference=request.conference, + instance=co_speaker if talk else speaker, ask_notify=talk and not co_speaker) if request.method == 'POST' and form.is_valid(): edited_speaker = form.save() if talk: talk.speakers.add(edited_speaker) + if co_speaker_id: + messages.success(request, _('Changes saved.')) + else: + if form.cleaned_data['notify']: + base_url = ('https' if request.is_secure() else 'http') + '://' + request.conference.site.domain + url_dashboard = base_url + reverse('proposal-dashboard', kwargs=dict(speaker_token=edited_speaker.token)) + url_talk_details = base_url + reverse('proposal-talk-details', kwargs=dict(speaker_token=edited_speaker.token, talk_id=talk.pk)) + url_speaker_add = base_url + reverse('proposal-speaker-add', kwargs=dict(speaker_token=edited_speaker.token, talk_id=talk.pk)) + body = _("""Hi {}, + +{} add you as a co-speaker for the conference {}. + +Here is a summary of the talk: +Title: {} +Description: {} + +You can at anytime: +- review and edit your profile: {} +- review and edit the talk: {} +- add another co-speaker: {} + +If you have any question, your can answer to this email. + +Thanks! + +{} + +""").format( + edited_speaker.name, speaker.name, request.conference.name, + talk.title, talk.description, + url_dashboard, url_talk_details, url_speaker_add, + request.conference.name, + ) + Message.objects.create( + thread=edited_speaker.conversation, + author=request.conference, + from_email=request.conference.contact_email, + content=body, + ) + messages.success(request, _('Co-speaker successfully added to the talk.')) #return redirect(reverse('proposal-speaker-details', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk))) return redirect(reverse('proposal-talk-details', kwargs=dict(speaker_token=speaker.token, talk_id=talk.pk))) else: diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index 731ab28f779e900cd0b78be40671dc52cf19180a..62cf5537c7e6fed2d9cb8525c88498302e07a6dd 100644 GIT binary patch delta 6060 zcmYk=33L=i0><$Q#ab>YF49eU{j<$WXv`S8u5FmfqaC~_&IjMudxdzw{|vCOrb6i zMh)}{+x`sd_}8!{Zb8k+9@LB-K@F%Lb^aL)spH=$Xv8rrpr$4nJ(z|aa4=@!47?Io zVlHk*t$jUeM$Vz`Fp&pI*U7TxqB`t~+TR;>UTHe(pGl#dhWBw9F2^x#SU)_5**uIl zwlyXnXSZ|jc#Y#;;1$$E_%`y7*~7mykWe`L_+2GqkAz-XL@8ej_SkIKj;M!Z7-|5MQ6rv#dWb@(j+UU-FpSZ-8`Z%+R0jua`%%=5eTSNn z)7GRM%>e74ML~CT73#!d)YK0{U3dac!YQbM?LsX@J!;9~JGd8ikQc!8LcM;asN>48 z8!okOM}45qU_AYsCLP_8w?y6X<)}N(z*zKHd!nYi7#m{=YJjDv<8MZtUuLaB&Bz_7 zJ70_%&{H@Rw_~W1LSiTPj^`q6X1T3z#?I9DqVDXx^)ecHGfh`(30_4#fCac3^~KzW zx?WVSy9Aw41L}slvBF&Dzm!5h+py9e@U*Qzk8$jO3FEOAH3M6bZS)(oBsBQSeY$iW=co)E(}`LOg)YFeTspm1~cDD$Een zlK7ETF-uV$Z$!ps-o&PO95qAd?EVYbh!>DiiU!Hz9qzF8J+2|MpMs|HfZcH(heXl9{0xDiUELp> zM^P87!^mrhdj0A#6EE2P8N6#+<6P8lKo46VjT(R#b$$i5(ffZlg%&hChx+;5h$*-W zHT6fZ2cAM*ActR+zUZ+AQ3I*9erWv)HIVbD>&EgRXlB}2voJyLe;x(>*z`nAZ7Fgy zW-M~9S&lmKUDQLh8>eDDYH3OsT`Jy+8ekPR#|5bU%PNZU52f24eHt0hMLJ8sPp!tuJc(>=3i6v zwcT+F`%*uP%(m&-%YEo7F^Bp}9Esae&rC~R5#8CPyh_8l-p0IuHATi$(msN}IDNS78h7LwecjitGwKenLp^-Apzd%H zcE$%$--WHX0)NBR_;5e|`oV&0d63Z`qM)fQ=2OwAE_r$5A$Z!v+^$L890a?^#1=ufmJYVuX7&~FKUGM zqB?vO>6CZorW4 zU>gNZSsm)baR6iSThu^)Ks^(`U;?%rYQGPt_Kv8BvOns3Fc#H;-?q<2hx&5#;X1qv z(}pqskuTFQ_vv4cTAL%Nk^hQXL(dKF(>?V!;N&%-9vuSVTrF*-N~^%l%Q4fuA{jIF?C_@r%r z2{mIoFcJ4+E`El27$3UP{dw$;>Zmtr2?nB09F1CIFBanM*acrlFV>?5Jh;R?zXY|$ zV^K3R8?V6)$f4#m_Qe5wMhh@>HwAV4Pi&6wU^m=v>+z%9_rEo2Df*#07>6F5j~c)$ zn2(!KGjR+X;Yrl>e?-mLdDM(w#HRFb;%;(Zn^cTuM;2f;C-aH6XUGDg z`P@xrkm*F5rs{)8i63}tWBPcW@=2nHfGuQ>@oz1Zw)Nx*GKMTC>0}>ymfTCuks5O8 zrZ3KEveh?fGxSMzJDsqA7TivjYrtk*wley$)l11JldN1E1yU2a&|5ehF=u4sRMqV zEv&$qpBgG`10cm^KCGyEzNcmPU{hDj^4jsM2s}43GKnFNkP6bUt)wuUv?u*+ z<8l1Wmb+Siv5IVx7{#BxZ7ym2kn+?^>KT;hTvFde`7!d5ZF?Q3*)lJ^d5!cXsbnlk zBA=5rBsP4aRZggs(hj2SYceWQ;;$r3BOA$gB!+27uv3vjy_{%!iu5Kw5r^nIGl6Kk zncPOslbxiHyhN&qw((lr<`n)x{!XIk;A!kZz926WZArB6!M{an{B?{atuT$xyP5j3ljz zHvOf2wAPn)I(}riGk-yDLc;t7j(5@|XKrAo1kR^6)@)`Q*9Igt<tP)9RS26 delta 5765 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