From 98c24dc926835cad3f5aa0fd75b68a224dc3d87a Mon Sep 17 00:00:00 2001 From: erichhasl Date: Sat, 22 Oct 2016 18:04:07 +0200 Subject: [PATCH 01/10] add mailer system --- jdav_web/jdav_web/settings.py | 1 + jdav_web/jdav_web/urls.py | 1 + jdav_web/mailer/__init__.py | 0 jdav_web/mailer/admin.py | 43 +++++++++++++++++++ jdav_web/mailer/apps.py | 5 +++ jdav_web/mailer/models.py | 14 ++++++ .../mailer/templates/admin/change_form.html | 15 +++++++ jdav_web/mailer/templates/mailer/index.html | 2 + jdav_web/mailer/tests.py | 3 ++ jdav_web/mailer/urls.py | 8 ++++ jdav_web/mailer/views.py | 6 +++ 11 files changed, 98 insertions(+) create mode 100644 jdav_web/mailer/__init__.py create mode 100644 jdav_web/mailer/admin.py create mode 100644 jdav_web/mailer/apps.py create mode 100644 jdav_web/mailer/models.py create mode 100644 jdav_web/mailer/templates/admin/change_form.html create mode 100644 jdav_web/mailer/templates/mailer/index.html create mode 100644 jdav_web/mailer/tests.py create mode 100644 jdav_web/mailer/urls.py create mode 100644 jdav_web/mailer/views.py diff --git a/jdav_web/jdav_web/settings.py b/jdav_web/jdav_web/settings.py index f67581e..b735efe 100644 --- a/jdav_web/jdav_web/settings.py +++ b/jdav_web/jdav_web/settings.py @@ -37,6 +37,7 @@ INSTALLED_APPS = [ 'startpage.apps.StartpageConfig', 'material.apps.MaterialConfig', 'members.apps.MembersConfig', + 'mailer.apps.MailerConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/jdav_web/jdav_web/urls.py b/jdav_web/jdav_web/urls.py index 9ebd7a6..9f394f0 100644 --- a/jdav_web/jdav_web/urls.py +++ b/jdav_web/jdav_web/urls.py @@ -23,6 +23,7 @@ urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += i18n_patterns( url(r'^admin/', admin.site.urls), + url(r'^newsletter/', include('mailer.urls', namespace="mailer")), url(r'^$', include('startpage.urls')), ) diff --git a/jdav_web/mailer/__init__.py b/jdav_web/mailer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jdav_web/mailer/admin.py b/jdav_web/mailer/admin.py new file mode 100644 index 0000000..abead81 --- /dev/null +++ b/jdav_web/mailer/admin.py @@ -0,0 +1,43 @@ +from django.contrib import admin +from django.utils.translation import ugettext_lazy as _ + +from .models import Message + + +class Button: + short_description = "" + view = "" + + +class ButtonableModelAdmin(admin.ModelAdmin): + buttons = [] + + def change_view(self, request, object_id, extra_context={}): + extra_context['buttons'] = self.buttons + if '/' in object_id: + object_id = object_id[:object_id.find('/')] + return super( + ButtonableModelAdmin, + self).change_view( + request, + object_id, + extra_context=extra_context) + + +class MessageAdmin(ButtonableModelAdmin): + """Message creation view""" + list_display = ('subject', 'from_addr', 'to_group') + + # can't find a good solution for this at the moment + # send_message = Button() + # send_message.short_description = _("Send") + # send_message.view = "mailer:index" + # buttons = [send_message] + actions = ['send_message'] + + def send_message(self, request, queryset): + for msg in queryset: + msg.submit() + self.message_user(request, _("Message sent")) + +admin.site.register(Message, MessageAdmin) diff --git a/jdav_web/mailer/apps.py b/jdav_web/mailer/apps.py new file mode 100644 index 0000000..2af0c1d --- /dev/null +++ b/jdav_web/mailer/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class MailerConfig(AppConfig): + name = 'mailer' diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py new file mode 100644 index 0000000..a9d0962 --- /dev/null +++ b/jdav_web/mailer/models.py @@ -0,0 +1,14 @@ +from django.db import models +from django.utils.translation import ugettext_lazy as _ + + +# Create your models here. +class Message(models.Model): + """Represents a message that can be sent to some members""" + from_addr = models.EmailField('email') + subject = models.CharField(_('subject'), max_length=50) + content = models.TextField(_('content')) + to_group = models.ForeignKey('members.Group', verbose_name=_('group')) + + def submit(self): + print("Sending message") diff --git a/jdav_web/mailer/templates/admin/change_form.html b/jdav_web/mailer/templates/admin/change_form.html new file mode 100644 index 0000000..226923d --- /dev/null +++ b/jdav_web/mailer/templates/admin/change_form.html @@ -0,0 +1,15 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} + +{% block object-tools %} + {% if change %}{% if not is_popup %} + + {% endif %}{% endif %} +{% endblock %} + diff --git a/jdav_web/mailer/templates/mailer/index.html b/jdav_web/mailer/templates/mailer/index.html new file mode 100644 index 0000000..c4e81f2 --- /dev/null +++ b/jdav_web/mailer/templates/mailer/index.html @@ -0,0 +1,2 @@ +{% load i18n %} +{% trans "This is the mailer app!" %} diff --git a/jdav_web/mailer/tests.py b/jdav_web/mailer/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/jdav_web/mailer/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/jdav_web/mailer/urls.py b/jdav_web/mailer/urls.py new file mode 100644 index 0000000..3497ade --- /dev/null +++ b/jdav_web/mailer/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import url + +from . import views + +app_name = "mailer" +urlpatterns = [ + url(r'^$', views.index, name='index') +] diff --git a/jdav_web/mailer/views.py b/jdav_web/mailer/views.py new file mode 100644 index 0000000..06a5c6f --- /dev/null +++ b/jdav_web/mailer/views.py @@ -0,0 +1,6 @@ +from django.shortcuts import render + + +# Create your views here. +def index(request): + return render(request, 'mailer/index.html') From a826849031c7dc8305c0041c3e8ee279ea4f0915 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Sat, 22 Oct 2016 18:31:28 +0200 Subject: [PATCH 02/10] enable mailing and add translations --- jdav_web/jdav_web/settings.py | 9 +++ jdav_web/mailer/apps.py | 2 + .../mailer/locale/de/LC_MESSAGES/django.po | 59 +++++++++++++++++++ jdav_web/mailer/models.py | 19 +++++- 4 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 jdav_web/mailer/locale/de/LC_MESSAGES/django.po diff --git a/jdav_web/jdav_web/settings.py b/jdav_web/jdav_web/settings.py index b735efe..c38a5db 100644 --- a/jdav_web/jdav_web/settings.py +++ b/jdav_web/jdav_web/settings.py @@ -134,3 +134,12 @@ STATIC_URL = '/static/' # Locale files (translations) LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),) + + +# Email setup + +EMAIL_HOST = 'localhost' +EMAIL_PORT = 25 +EMAIL_HOST_USER = '' +EMAIL_HOST_PASSWORD = '' +EMAIL_USE_TLS = False diff --git a/jdav_web/mailer/apps.py b/jdav_web/mailer/apps.py index 2af0c1d..86c7e65 100644 --- a/jdav_web/mailer/apps.py +++ b/jdav_web/mailer/apps.py @@ -1,5 +1,7 @@ from django.apps import AppConfig +from django.utils.translation import ugettext_lazy as _ class MailerConfig(AppConfig): name = 'mailer' + verbose_name = _('mailer') diff --git a/jdav_web/mailer/locale/de/LC_MESSAGES/django.po b/jdav_web/mailer/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000..8d7a2ad --- /dev/null +++ b/jdav_web/mailer/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,59 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-10-22 18:28+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: admin.py:41 +msgid "Message sent" +msgstr "Nachricht gesendet" + +#: apps.py:7 +msgid "mailer" +msgstr "Verteiler" + +#: models.py:9 +msgid "from email" +msgstr "Von Email" + +#: models.py:10 +msgid "subject" +msgstr "Betreff" + +#: models.py:11 +msgid "content" +msgstr "Inhalt" + +#: models.py:12 +msgid "to group" +msgstr "An Gruppe" + +#: models.py:23 +msgid "message" +msgstr "Nachricht" + +#: models.py:24 +msgid "messages" +msgstr "Nachrichten" + +#: templates/admin/change_form.html:10 +msgid "History" +msgstr "Geschichte" + +#: templates/mailer/index.html:2 +msgid "This is the mailer app!" +msgstr "Das ist die Mailer App!" diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index a9d0962..2140c53 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -1,14 +1,27 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ +from django.core.mail import send_mass_mail # Create your models here. class Message(models.Model): """Represents a message that can be sent to some members""" - from_addr = models.EmailField('email') + from_addr = models.EmailField(_('from email')) subject = models.CharField(_('subject'), max_length=50) content = models.TextField(_('content')) - to_group = models.ForeignKey('members.Group', verbose_name=_('group')) + to_group = models.ForeignKey('members.Group', verbose_name=_('to group')) + + def __str__(self): + return self.subject def submit(self): - print("Sending message") + """Sends the mail to the specified group of members""" + data = [ + (self.subject, self.content, self.from_addr, [member.email]) + for member in self.to_group.member_set.all() + ] + send_mass_mail(data) + + class Meta: + verbose_name = _('message') + verbose_name_plural = _('messages') From 52d0431ce370f321d61e3cc7f85783c43ed7cb39 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Sat, 22 Oct 2016 22:56:37 +0200 Subject: [PATCH 03/10] add newsletter views --- jdav_web/mailer/models.py | 3 ++ jdav_web/mailer/templates/mailer/index.html | 1 + jdav_web/mailer/templates/mailer/send.html | 25 ++++++++++++++ jdav_web/mailer/urls.py | 4 ++- jdav_web/mailer/views.py | 36 ++++++++++++++++++++- 5 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 jdav_web/mailer/templates/mailer/send.html diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index 2140c53..475b8d0 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -25,3 +25,6 @@ class Message(models.Model): class Meta: verbose_name = _('message') verbose_name_plural = _('messages') + permissions = ( + ("submit_mails", _("Can submit mails")), + ) diff --git a/jdav_web/mailer/templates/mailer/index.html b/jdav_web/mailer/templates/mailer/index.html index c4e81f2..c58684a 100644 --- a/jdav_web/mailer/templates/mailer/index.html +++ b/jdav_web/mailer/templates/mailer/index.html @@ -1,2 +1,3 @@ {% load i18n %} {% trans "This is the mailer app!" %} +

New Mail

diff --git a/jdav_web/mailer/templates/mailer/send.html b/jdav_web/mailer/templates/mailer/send.html new file mode 100644 index 0000000..ad36842 --- /dev/null +++ b/jdav_web/mailer/templates/mailer/send.html @@ -0,0 +1,25 @@ +{% load i18n %} +{% trans "Here you can send new emails!" %} + +{% if error_message %} +

{{ error_message }}

+{% endif %} + +
+ {% csrf_token %} + + {% trans "Subject:" %}
+
+ + {% trans "Content:" %}
+
+ + {% trans "Receiving group:" %}
+
+ + +
diff --git a/jdav_web/mailer/urls.py b/jdav_web/mailer/urls.py index 3497ade..03ad286 100644 --- a/jdav_web/mailer/urls.py +++ b/jdav_web/mailer/urls.py @@ -4,5 +4,7 @@ from . import views app_name = "mailer" urlpatterns = [ - url(r'^$', views.index, name='index') + url(r'^$', views.index, name='index'), + url(r'^send_mail', views.send_mail, name='send_mail'), + url(r'^send', views.send, name='send') ] diff --git a/jdav_web/mailer/views.py b/jdav_web/mailer/views.py index 06a5c6f..9bc0fcb 100644 --- a/jdav_web/mailer/views.py +++ b/jdav_web/mailer/views.py @@ -1,6 +1,40 @@ from django.shortcuts import render +from django.utils.translation import ugettext_lazy as _ +from django.urls import reverse +from django.http import HttpResponseRedirect +from django.contrib.auth.decorators import permission_required +from members.models import Group -# Create your views here. +from .models import Message + + +@permission_required('mailer.submit_mails', login_url='/admin/') def index(request): + """This is the main newsletter view""" return render(request, 'mailer/index.html') + + +@permission_required('mailer.submit_mails', login_url='/admin/') +def send(request): + return render(request, 'mailer/send.html', { + 'groups': Group.objects.all() + }) + + +@permission_required('mailer.submit_mails', login_url='/admin/') +def send_mail(request): + try: + subject = request.POST['subject'] + content = request.POST['content'] + to_group = Group.objects.get(pk=request.POST['to_group']) + except (KeyError, Group.DoesNotExist): + return render(request, 'mailer/send.html', { + 'error_message': _("Please fill in every field!"), + 'groups': Group.objects.all() + }) + else: + msg = Message(subject=subject, content=content, to_group=to_group) + msg.submit() + msg.save() + return HttpResponseRedirect(reverse('mailer:index')) From 31b99057f436bf6f55890fc90d88992b1ac9333f Mon Sep 17 00:00:00 2001 From: Schlabonski Date: Sat, 19 Nov 2016 11:33:59 +0100 Subject: [PATCH 04/10] update gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index a48cce4..e7400cd 100644 --- a/.gitignore +++ b/.gitignore @@ -96,3 +96,5 @@ jdav_web/db.sqlite3 # test images for file upload *.jpeg *.png +jdav_web/media +jdav_web/*/migrations From 59f7139c526144c73aba94695d3a5de04d4c64aa Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 19 Nov 2016 14:14:32 +0100 Subject: [PATCH 05/10] update requirements --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6c4722e..19e4b8f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ Django==1.10.2 +Pillow==3.4.2 mysqlclient==1.3.9 -PyMySQL==0.7.9 From 0b9d3639316d0abf0aa01cea8bf5847b12361931 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 19 Nov 2016 14:16:08 +0100 Subject: [PATCH 06/10] not working send button, confirm send message --- jdav_web/mailer/admin.py | 30 +++++--- .../mailer/locale/de/LC_MESSAGES/django.po | 69 +++++++++++++++++-- jdav_web/mailer/models.py | 3 + jdav_web/mailer/static/admin/style.css | 4 ++ .../mailer/templates/admin/change_form.html | 4 +- .../mailer/templates/mailer/confirm_send.html | 38 ++++++++++ jdav_web/mailer/templatetags/custom_send.py | 8 +++ 7 files changed, 142 insertions(+), 14 deletions(-) create mode 100644 jdav_web/mailer/static/admin/style.css create mode 100644 jdav_web/mailer/templates/mailer/confirm_send.html create mode 100644 jdav_web/mailer/templatetags/custom_send.py diff --git a/jdav_web/mailer/admin.py b/jdav_web/mailer/admin.py index abead81..9c7da22 100644 --- a/jdav_web/mailer/admin.py +++ b/jdav_web/mailer/admin.py @@ -1,5 +1,7 @@ from django.contrib import admin +from django.contrib.admin import helpers from django.utils.translation import ugettext_lazy as _ +from django.shortcuts import render from .models import Message @@ -26,18 +28,30 @@ class ButtonableModelAdmin(admin.ModelAdmin): class MessageAdmin(ButtonableModelAdmin): """Message creation view""" - list_display = ('subject', 'from_addr', 'to_group') + list_display = ('subject', 'from_addr', 'to_group', 'sent') + # TODO: get this working # can't find a good solution for this at the moment - # send_message = Button() - # send_message.short_description = _("Send") - # send_message.view = "mailer:index" - # buttons = [send_message] + send_message = Button() + send_message.short_description = _("Send") + send_message.view = "mailer:send_mail" + buttons = [send_message] actions = ['send_message'] def send_message(self, request, queryset): - for msg in queryset: - msg.submit() - self.message_user(request, _("Message sent")) + print("calling send_message") + if request.POST.get('confirmed'): + for msg in queryset: + msg.submit() + self.message_user(request, _("Message sent")) + else: + context = { + 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME, + 'mails': queryset, + 'ids': queryset.values_list("id"), + 'some_sent': any(m.sent for m in queryset)} + return render(request, 'mailer/confirm_send.html', context) + send_message.short_description = _("Send message") + admin.site.register(Message, MessageAdmin) diff --git a/jdav_web/mailer/locale/de/LC_MESSAGES/django.po b/jdav_web/mailer/locale/de/LC_MESSAGES/django.po index 8d7a2ad..bc20696 100644 --- a/jdav_web/mailer/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/mailer/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-22 18:28+0200\n" +"POT-Creation-Date: 2016-11-19 13:59+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,10 +18,18 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: admin.py:41 +#: admin.py:36 templates/mailer/confirm_send.html:30 +msgid "Send" +msgstr "Senden" + +#: admin.py:46 msgid "Message sent" msgstr "Nachricht gesendet" +#: admin.py:54 +msgid "Send message" +msgstr "Nachricht verschicken" + #: apps.py:7 msgid "mailer" msgstr "Verteiler" @@ -42,18 +50,69 @@ msgstr "Inhalt" msgid "to group" msgstr "An Gruppe" -#: models.py:23 +#: models.py:13 +msgid "sent" +msgstr "Gesendet" + +#: models.py:29 msgid "message" msgstr "Nachricht" -#: models.py:24 +#: models.py:30 msgid "messages" msgstr "Nachrichten" -#: templates/admin/change_form.html:10 +#: models.py:32 +msgid "Can submit mails" +msgstr "Kann Mails verschicken" + +#: templates/admin/change_form.html:12 msgid "History" msgstr "Geschichte" +#: templates/mailer/confirm_send.html:7 +msgid "Do you really want to send these mails?" +msgstr "Möchtest du diese Emails wirklich verschicken?" + +#: templates/mailer/confirm_send.html:13 +msgid "already sent" +msgstr "schon verschickt" + +#: templates/mailer/confirm_send.html:19 +msgid "" +"Some messages have already been sent! Do you really want to resend them?" +msgstr "" +"Einige Emails wurden schon versendet! Möchtest du diese wirklich nochmal " +"senden?" + +#: templates/mailer/confirm_send.html:35 +msgid "Cancel" +msgstr "Abbruch" + #: templates/mailer/index.html:2 msgid "This is the mailer app!" msgstr "Das ist die Mailer App!" + +#: templates/mailer/send.html:2 +msgid "Here you can send new emails!" +msgstr "Hier kannst du neue Emails verschicken!" + +#: templates/mailer/send.html:11 +msgid "Subject:" +msgstr "Betreff" + +#: templates/mailer/send.html:14 +msgid "Content:" +msgstr "Inhalt:" + +#: templates/mailer/send.html:17 +msgid "Receiving group:" +msgstr "Erhaltende Gruppe" + +#: templates/mailer/send.html:24 +msgid "Send mail" +msgstr "Email senden" + +#: views.py:33 +msgid "Please fill in every field!" +msgstr "Bitte jedes Feld ausfüllen!" diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index 475b8d0..0498719 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -10,6 +10,7 @@ class Message(models.Model): subject = models.CharField(_('subject'), max_length=50) content = models.TextField(_('content')) to_group = models.ForeignKey('members.Group', verbose_name=_('to group')) + sent = models.BooleanField(_('sent'), default=False) def __str__(self): return self.subject @@ -21,6 +22,8 @@ class Message(models.Model): for member in self.to_group.member_set.all() ] send_mass_mail(data) + self.sent = True + self.save() class Meta: verbose_name = _('message') diff --git a/jdav_web/mailer/static/admin/style.css b/jdav_web/mailer/static/admin/style.css new file mode 100644 index 0000000..5d34418 --- /dev/null +++ b/jdav_web/mailer/static/admin/style.css @@ -0,0 +1,4 @@ +form { + float:left; + margin-right:30px; +} diff --git a/jdav_web/mailer/templates/admin/change_form.html b/jdav_web/mailer/templates/admin/change_form.html index 226923d..3e71d7b 100644 --- a/jdav_web/mailer/templates/admin/change_form.html +++ b/jdav_web/mailer/templates/admin/change_form.html @@ -1,11 +1,13 @@ {% extends "admin/change_form.html" %} {% load i18n %} +{% load custom_send %} {% block object-tools %} {% if change %}{% if not is_popup %}
    {% for button in buttons %} -
  • {{ button.short_description }}
  • + + {% endfor %}
  • {% trans "History" %}
  • {% if has_absolute_url %}
  • View on site
  • {% endif%} diff --git a/jdav_web/mailer/templates/mailer/confirm_send.html b/jdav_web/mailer/templates/mailer/confirm_send.html new file mode 100644 index 0000000..82ae759 --- /dev/null +++ b/jdav_web/mailer/templates/mailer/confirm_send.html @@ -0,0 +1,38 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} +{% load static %} + +{% block content %} + +

    {% trans "Do you really want to send these mails?" %}

    +
      +{% for mail in mails %} +
    • + {{mail.subject}} + {% if mail.sent %} + ({% trans "already sent" %}) + {%endif %} +
    • +{% endfor %} +
    +{% if some_sent %} +

    {% trans "Some messages have already been sent! Do you really want to resend them?" %}

    +{% endif %} + +
    + {% csrf_token %} + + + + {% for id in ids %} + + {% endfor %} + +
    + +
    + {% csrf_token %} + +
    + +{% endblock %} diff --git a/jdav_web/mailer/templatetags/custom_send.py b/jdav_web/mailer/templatetags/custom_send.py new file mode 100644 index 0000000..0ea534f --- /dev/null +++ b/jdav_web/mailer/templatetags/custom_send.py @@ -0,0 +1,8 @@ +from django import template + +register = template.Library() + + +@register.inclusion_tag('change_form.html') +def custom_send(): + print("CUstom send!") From febdff7602c07c5dcce525188ede213eb54d4bcb Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 19 Nov 2016 16:16:22 +0100 Subject: [PATCH 07/10] add newsletter send button --- jdav_web/mailer/admin.py | 38 ++++++------------- .../mailer/locale/de/LC_MESSAGES/django.po | 23 ++++++----- jdav_web/mailer/static/admin/style.css | 4 -- .../mailer/templates/admin/change_form.html | 24 ++++++------ jdav_web/mailer/templatetags/custom_send.py | 8 ---- 5 files changed, 35 insertions(+), 62 deletions(-) delete mode 100644 jdav_web/mailer/static/admin/style.css delete mode 100644 jdav_web/mailer/templatetags/custom_send.py diff --git a/jdav_web/mailer/admin.py b/jdav_web/mailer/admin.py index 9c7da22..74d78c6 100644 --- a/jdav_web/mailer/admin.py +++ b/jdav_web/mailer/admin.py @@ -6,36 +6,10 @@ from django.shortcuts import render from .models import Message -class Button: - short_description = "" - view = "" - - -class ButtonableModelAdmin(admin.ModelAdmin): - buttons = [] - - def change_view(self, request, object_id, extra_context={}): - extra_context['buttons'] = self.buttons - if '/' in object_id: - object_id = object_id[:object_id.find('/')] - return super( - ButtonableModelAdmin, - self).change_view( - request, - object_id, - extra_context=extra_context) - - -class MessageAdmin(ButtonableModelAdmin): +class MessageAdmin(): """Message creation view""" list_display = ('subject', 'from_addr', 'to_group', 'sent') - # TODO: get this working - # can't find a good solution for this at the moment - send_message = Button() - send_message.short_description = _("Send") - send_message.view = "mailer:send_mail" - buttons = [send_message] actions = ['send_message'] def send_message(self, request, queryset): @@ -53,5 +27,15 @@ class MessageAdmin(ButtonableModelAdmin): return render(request, 'mailer/confirm_send.html', context) send_message.short_description = _("Send message") + def response_change(self, request, obj): + if "_send" in request.POST: + obj.submit() + return super(MessageAdmin, self).response_change(request, obj) + + def response_add(self, request, obj): + if "_send" in request.POST: + obj.submit() + return super(MessageAdmin, self).response_change(request, obj) + admin.site.register(Message, MessageAdmin) diff --git a/jdav_web/mailer/locale/de/LC_MESSAGES/django.po b/jdav_web/mailer/locale/de/LC_MESSAGES/django.po index bc20696..fd5005e 100644 --- a/jdav_web/mailer/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/mailer/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-11-19 13:59+0100\n" +"POT-Creation-Date: 2016-11-19 16:11+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,15 +18,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: admin.py:36 templates/mailer/confirm_send.html:30 -msgid "Send" -msgstr "Senden" - -#: admin.py:46 +#: admin.py:20 msgid "Message sent" msgstr "Nachricht gesendet" -#: admin.py:54 +#: admin.py:28 msgid "Send message" msgstr "Nachricht verschicken" @@ -66,9 +62,9 @@ msgstr "Nachrichten" msgid "Can submit mails" msgstr "Kann Mails verschicken" -#: templates/admin/change_form.html:12 -msgid "History" -msgstr "Geschichte" +#: templates/admin/change_form.html:11 +msgid "Save and send mail" +msgstr "Speichern und Email senden" #: templates/mailer/confirm_send.html:7 msgid "Do you really want to send these mails?" @@ -85,6 +81,10 @@ msgstr "" "Einige Emails wurden schon versendet! Möchtest du diese wirklich nochmal " "senden?" +#: templates/mailer/confirm_send.html:30 +msgid "Send" +msgstr "Senden" + #: templates/mailer/confirm_send.html:35 msgid "Cancel" msgstr "Abbruch" @@ -116,3 +116,6 @@ msgstr "Email senden" #: views.py:33 msgid "Please fill in every field!" msgstr "Bitte jedes Feld ausfüllen!" + +#~ msgid "History" +#~ msgstr "Geschichte" diff --git a/jdav_web/mailer/static/admin/style.css b/jdav_web/mailer/static/admin/style.css deleted file mode 100644 index 5d34418..0000000 --- a/jdav_web/mailer/static/admin/style.css +++ /dev/null @@ -1,4 +0,0 @@ -form { - float:left; - margin-right:30px; -} diff --git a/jdav_web/mailer/templates/admin/change_form.html b/jdav_web/mailer/templates/admin/change_form.html index 3e71d7b..c5be0e0 100644 --- a/jdav_web/mailer/templates/admin/change_form.html +++ b/jdav_web/mailer/templates/admin/change_form.html @@ -1,17 +1,15 @@ {% extends "admin/change_form.html" %} {% load i18n %} -{% load custom_send %} +{% block content %} +{{ block.super }} +{% load static %} -{% block object-tools %} - {% if change %}{% if not is_popup %} - - {% endif %}{% endif %} -{% endblock %} + + +{% endblock %} diff --git a/jdav_web/mailer/templatetags/custom_send.py b/jdav_web/mailer/templatetags/custom_send.py deleted file mode 100644 index 0ea534f..0000000 --- a/jdav_web/mailer/templatetags/custom_send.py +++ /dev/null @@ -1,8 +0,0 @@ -from django import template - -register = template.Library() - - -@register.inclusion_tag('change_form.html') -def custom_send(): - print("CUstom send!") From 87c5847e24fa3fe7e954d677fc1b1979864e60a6 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 19 Nov 2016 17:04:52 +0100 Subject: [PATCH 08/10] fix message admin --- jdav_web/mailer/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdav_web/mailer/admin.py b/jdav_web/mailer/admin.py index 74d78c6..d434cb3 100644 --- a/jdav_web/mailer/admin.py +++ b/jdav_web/mailer/admin.py @@ -6,7 +6,7 @@ from django.shortcuts import render from .models import Message -class MessageAdmin(): +class MessageAdmin(admin.ModelAdmin): """Message creation view""" list_display = ('subject', 'from_addr', 'to_group', 'sent') From 4ce74c2efc2e2d9ac913ece5710ce6913ceb5942 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 19 Nov 2016 17:18:16 +0100 Subject: [PATCH 09/10] fix template overriding --- jdav_web/mailer/admin.py | 1 + jdav_web/mailer/templates/{admin => mailer}/change_form.html | 0 2 files changed, 1 insertion(+) rename jdav_web/mailer/templates/{admin => mailer}/change_form.html (100%) diff --git a/jdav_web/mailer/admin.py b/jdav_web/mailer/admin.py index d434cb3..a5913bb 100644 --- a/jdav_web/mailer/admin.py +++ b/jdav_web/mailer/admin.py @@ -9,6 +9,7 @@ from .models import Message class MessageAdmin(admin.ModelAdmin): """Message creation view""" list_display = ('subject', 'from_addr', 'to_group', 'sent') + change_form_template = "mailer/change_form.html" actions = ['send_message'] diff --git a/jdav_web/mailer/templates/admin/change_form.html b/jdav_web/mailer/templates/mailer/change_form.html similarity index 100% rename from jdav_web/mailer/templates/admin/change_form.html rename to jdav_web/mailer/templates/mailer/change_form.html From e2751b22b13cc033678a0acc5a29981291f906fb Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sun, 20 Nov 2016 11:43:31 +0100 Subject: [PATCH 10/10] group select now many to many field --- jdav_web/mailer/admin.py | 2 +- jdav_web/mailer/models.py | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/jdav_web/mailer/admin.py b/jdav_web/mailer/admin.py index a5913bb..ffb476a 100644 --- a/jdav_web/mailer/admin.py +++ b/jdav_web/mailer/admin.py @@ -8,7 +8,7 @@ from .models import Message class MessageAdmin(admin.ModelAdmin): """Message creation view""" - list_display = ('subject', 'from_addr', 'to_group', 'sent') + list_display = ('subject', 'from_addr', 'get_groups', 'sent') change_form_template = "mailer/change_form.html" actions = ['send_message'] diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index 0498719..edabb55 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -9,17 +9,27 @@ class Message(models.Model): from_addr = models.EmailField(_('from email')) subject = models.CharField(_('subject'), max_length=50) content = models.TextField(_('content')) - to_group = models.ForeignKey('members.Group', verbose_name=_('to group')) + to_groups = models.ManyToManyField('members.Group', + verbose_name=_('to group')) sent = models.BooleanField(_('sent'), default=False) def __str__(self): return self.subject + def get_groups(self): + return ", ".join([g.name for g in self.to_groups.all()]) + get_groups.short_description = _('recipicients') + def submit(self): """Sends the mail to the specified group of members""" + members = set() + for group in self.to_groups.all(): + group_members = group.member_set.all() + for member in group_members: + members.add(member) data = [ (self.subject, self.content, self.from_addr, [member.email]) - for member in self.to_group.member_set.all() + for member in members ] send_mass_mail(data) self.sent = True