News: odesilani na vlastni seznam adres
This commit is contained in:
parent
b0945a10d9
commit
d2a3d92157
|
@ -231,3 +231,5 @@ class Euro2019InterestForm(ModelForm):
|
||||||
raise ValidationError(_('Prosím, potvrďte souhlas se zpracováním osobních údajů.'), code='invalid')
|
raise ValidationError(_('Prosím, potvrďte souhlas se zpracováním osobních údajů.'), code='invalid')
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
class CustomRecipientsForm(forms.Form):
|
||||||
|
recipients = forms.CharField(widget=forms.Textarea)
|
||||||
|
|
|
@ -147,6 +147,7 @@ def list_show(request, lid):
|
||||||
|
|
||||||
if (request.user == obj.managed_by or 'sso_news_manage' in site_perms):
|
if (request.user == obj.managed_by or 'sso_news_manage' in site_perms):
|
||||||
actions.add('nwsl_edit')
|
actions.add('nwsl_edit')
|
||||||
|
actions.add('nwsl_send_custom')
|
||||||
if (request.user in obj.sent_by.all() or request.user == obj.managed_by
|
if (request.user in obj.sent_by.all() or request.user == obj.managed_by
|
||||||
or 'sso_news_manage' in site_perms):
|
or 'sso_news_manage' in site_perms):
|
||||||
actions.add('nwsl_details')
|
actions.add('nwsl_details')
|
||||||
|
@ -314,10 +315,43 @@ def msg_edit(request, lid, mid=None):
|
||||||
|
|
||||||
return render(request, template, context)
|
return render(request, template, context)
|
||||||
|
|
||||||
|
@ensure_csrf_cookie
|
||||||
|
@login_required(login_url="/prihlaseni")
|
||||||
|
def msg_send_custom(request, id):
|
||||||
|
|
||||||
|
custom_recip=set()
|
||||||
|
|
||||||
|
if request.method == "POST":
|
||||||
|
form = forms.CustomRecipientsForm(request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
all_ok = True
|
||||||
|
for addr in form.cleaned_data['recipients'].replace("\n",",").split(","):
|
||||||
|
addr = addr.strip()
|
||||||
|
try:
|
||||||
|
validate_email(addr)
|
||||||
|
custom_recip.update([addr,]) # add list, string is also a list !!!
|
||||||
|
except ValidationError:
|
||||||
|
messages.error(request, "Email '%s' není ve správném tvaru." % (addr))
|
||||||
|
all_ok=False
|
||||||
|
if all_ok:
|
||||||
|
return msg_send(request, id, True, custom_recip)
|
||||||
|
else:
|
||||||
|
messages.error(request, "Je třeba opravit vadné adresy.")
|
||||||
|
|
||||||
|
else:
|
||||||
|
form = forms.CustomRecipientsForm()
|
||||||
|
|
||||||
|
template = 'news/msg_send_custom.html'
|
||||||
|
context = {
|
||||||
|
'form' : form,
|
||||||
|
}
|
||||||
|
|
||||||
|
return render(request, template, context)
|
||||||
|
|
||||||
|
|
||||||
@ensure_csrf_cookie
|
@ensure_csrf_cookie
|
||||||
@login_required(login_url="/prihlaseni")
|
@login_required(login_url="/prihlaseni")
|
||||||
def msg_send(request, id, realSend=False):
|
def msg_send(request, id, realSend=False, custom_recip=set()):
|
||||||
"""
|
"""
|
||||||
Odeslani newsletteru.
|
Odeslani newsletteru.
|
||||||
"""
|
"""
|
||||||
|
@ -354,6 +388,10 @@ def msg_send(request, id, realSend=False):
|
||||||
update_sent_ts = True
|
update_sent_ts = True
|
||||||
use_public_to_email = True
|
use_public_to_email = True
|
||||||
recip_users = obj.news.get_recip_users()
|
recip_users = obj.news.get_recip_users()
|
||||||
|
elif recipients_wanted == "custom":
|
||||||
|
update_send_ts = False
|
||||||
|
use_public_to_email = True
|
||||||
|
recip_users = [ request.user ]
|
||||||
else:
|
else:
|
||||||
recip_users = [ request.user ]
|
recip_users = [ request.user ]
|
||||||
else:
|
else:
|
||||||
|
@ -383,6 +421,11 @@ def msg_send(request, id, realSend=False):
|
||||||
except ValidationError:
|
except ValidationError:
|
||||||
messages.error(request, "Email '%s' uživatele %s není ve správném tvaru." % (eml, rcp.username))
|
messages.error(request, "Email '%s' uživatele %s není ve správném tvaru." % (eml, rcp.username))
|
||||||
|
|
||||||
|
# add custom recipients
|
||||||
|
recipients_email += list(custom_recip)
|
||||||
|
# do it unique
|
||||||
|
recipients_email = list(set(recipients_email))
|
||||||
|
|
||||||
template = 'news/msg_to_email.html'
|
template = 'news/msg_to_email.html'
|
||||||
context = {
|
context = {
|
||||||
'msg' : obj,
|
'msg' : obj,
|
||||||
|
@ -400,7 +443,7 @@ def msg_send(request, id, realSend=False):
|
||||||
import quopri
|
import quopri
|
||||||
|
|
||||||
for recip_part in chunks(recipients_email, 500):
|
for recip_part in chunks(recipients_email, 500):
|
||||||
# process by part, MailGun API hsa a limit of 1000 messages
|
# process by part, MailGun API has a limit of 1000 messages
|
||||||
|
|
||||||
mailgun_backend = get_connection('anymail.backends.mailgun.EmailBackend')
|
mailgun_backend = get_connection('anymail.backends.mailgun.EmailBackend')
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,9 @@
|
||||||
<td><a href="{% url 'nalodeni:news_msg_preview' msg.id %}" target="_blank">Náhled</a></td>
|
<td><a href="{% url 'nalodeni:news_msg_preview' msg.id %}" target="_blank">Náhled</a></td>
|
||||||
<td><a href="{% url 'nalodeni:news_msg_send' msg.id %}">Testovací email</a></td>
|
<td><a href="{% url 'nalodeni:news_msg_send' msg.id %}">Testovací email</a></td>
|
||||||
{% endif%}
|
{% endif%}
|
||||||
|
{% if 'nwsl_send_custom' in actions %}
|
||||||
|
<td><a href="{% url 'nalodeni:news_msg_send_custom' msg.id %}">Odeslat</a></td>
|
||||||
|
{% endif%}
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
{% extends 'pirati_cz.html' %}
|
||||||
|
|
||||||
|
{%block body%}
|
||||||
|
<div class="row">
|
||||||
|
<div class="medium-12 large-12 columns">
|
||||||
|
<section class="o-section o-section--spaceBot">
|
||||||
|
<div class="o-section-inner">
|
||||||
|
<div class="o-section-block">
|
||||||
|
<h2>Odeslání zprávy na vlastní seznam emailů</h2>
|
||||||
|
<br/>
|
||||||
|
<p>Adresy příjemců zadávejte po jedné na řádek.</p>
|
||||||
|
<form action="#?recipients=custom" method="POST">
|
||||||
|
{%csrf_token%}
|
||||||
|
{{form}}
|
||||||
|
<br/>
|
||||||
|
<input type="submit" class="button button-primary" value="Odeslat"/>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="medium-12 large-12 columns">
|
||||||
|
<section class="o-section o-section--spaceBot">
|
||||||
|
<div class="o-section-inner">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{%endblock%}
|
|
@ -58,6 +58,7 @@ urlpatterns = [
|
||||||
|
|
||||||
url(r'^news/msg/(?P<id>[0-9]+)/preview/$', news.msg_preview, name="news_msg_preview"),
|
url(r'^news/msg/(?P<id>[0-9]+)/preview/$', news.msg_preview, name="news_msg_preview"),
|
||||||
url(r'^news/msg/(?P<id>[0-9]+)/send/$', news.msg_send, name="news_msg_send", kwargs={'realSend':True}),
|
url(r'^news/msg/(?P<id>[0-9]+)/send/$', news.msg_send, name="news_msg_send", kwargs={'realSend':True}),
|
||||||
|
url(r'^news/msg/(?P<id>[0-9]+)/send_custom/$', news.msg_send_custom, name="news_msg_send_custom"),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue