Update mailer app to comply with MERCs 5 and 6

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2018-12-31 03:57:29 -04:00
parent 35ef8ba7b8
commit 7f3b28aec8
12 changed files with 173 additions and 112 deletions

View File

@@ -20,8 +20,8 @@ from mayan.celery import app
from .classes import MailerBackend from .classes import MailerBackend
from .links import ( from .links import (
link_document_send, link_document_send_link, link_document_multiple_send, link_document_multiple_send, link_document_multiple_send_link,
link_document_multiple_send_link, link_system_mailer_error_log, link_document_send, link_document_send_link, link_system_mailer_error_log,
link_user_mailer_create, link_user_mailer_delete, link_user_mailer_edit, link_user_mailer_create, link_user_mailer_delete, link_user_mailer_edit,
link_user_mailer_list, link_user_mailer_log_list, link_user_mailer_setup, link_user_mailer_list, link_user_mailer_log_list, link_user_mailer_setup,
link_user_mailer_test link_user_mailer_test
@@ -48,8 +48,8 @@ class MailerApp(MayanAppConfig):
app_label='documents', model_name='Document' app_label='documents', model_name='Document'
) )
LogEntry = self.get_model('LogEntry') LogEntry = self.get_model(model_name='LogEntry')
UserMailer = self.get_model('UserMailer') UserMailer = self.get_model(model_name='UserMailer')
MailerBackend.initialize() MailerBackend.initialize()

View File

@@ -67,7 +67,7 @@ class MailerBackend(six.with_metaclass(MailerBackendMetaclass, MailerBackendBase
def initialize(): def initialize():
for app in apps.get_app_configs(): for app in apps.get_app_configs():
try: try:
import_module('{}.mailers'.format(app.name)) import_module(name='{}.mailers'.format(app.name))
except ImportError as exception: except ImportError as exception:
if force_text(exception) not in ('No module named mailers', 'No module named \'{}.mailers\''.format(app.name)): if force_text(exception) not in ('No module named mailers', 'No module named \'{}.mailers\''.format(app.name)):
logger.error( logger.error(

View File

@@ -47,8 +47,8 @@ class DocumentMailForm(forms.Form):
} }
queryset = AccessControlList.objects.filter_by_access( queryset = AccessControlList.objects.filter_by_access(
permission=permission_user_mailer_use, user=user, permission=permission_user_mailer_use,
queryset=UserMailer.objects.filter(enabled=True) queryset=UserMailer.objects.filter(enabled=True), user=user
) )
self.fields['user_mailer'].queryset = queryset self.fields['user_mailer'].queryset = queryset
@@ -96,8 +96,10 @@ class UserMailerDynamicForm(DynamicModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
result = super(UserMailerDynamicForm, self).__init__(*args, **kwargs) result = super(UserMailerDynamicForm, self).__init__(*args, **kwargs)
if self.instance.backend_data: if self.instance.backend_data:
for key, value in json.loads(self.instance.backend_data).items(): for key, value in json.loads(s=self.instance.backend_data).items():
self.fields[key].initial = value field = self.fields.get(key)
if field:
field.initial = value
return result return result

View File

@@ -5,16 +5,10 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.navigation import Link from mayan.apps.navigation import Link
from .icons import ( from .icons import (
icon_document_send, icon_document_multiple_send, icon_document_multiple_send_link,
icon_document_send_link, icon_document_send, icon_document_send_link, icon_system_mailer_error_log,
icon_document_multiple_send, icon_user_mailer_create, icon_user_mailer_delete, icon_user_mailer_edit,
icon_document_multiple_send_link, icon_user_mailer_list, icon_user_mailer_setup, icon_user_mailer_test
icon_system_mailer_error_log, icon_user_mailer_create,
icon_user_mailer_delete,icon_user_mailer_edit,
icon_user_mailer_list, icon_user_mailer_setup,
icon_user_mailer_test
) )
from .permissions import ( from .permissions import (
permission_mailing_link, permission_mailing_send_document, permission_mailing_link, permission_mailing_send_document,

View File

@@ -7,11 +7,11 @@ DEFAULT_DOCUMENT_BODY_TEMPLATE = _(
'--------\n ' '--------\n '
'This email has been sent from %(project_title)s (%(project_website)s)' 'This email has been sent from %(project_title)s (%(project_website)s)'
) )
DEFAULT_DOCUMENT_SUBJECT_TEMPLATE = _('Document: {{ document }}')
DEFAULT_LINK_BODY_TEMPLATE = _( DEFAULT_LINK_BODY_TEMPLATE = _(
'To access this document click on the following link: ' 'To access this document click on the following link: '
'{{ link }}\n\n--------\n ' '{{ link }}\n\n--------\n '
'This email has been sent from %(project_title)s (%(project_website)s)' 'This email has been sent from %(project_title)s (%(project_website)s)'
) )
DEFAULT_LINK_SUBJECT_TEMPLATE = _('Link for document: {{ document }}')
EMAIL_SEPARATORS = (',', ';') EMAIL_SEPARATORS = (',', ';')

View File

@@ -114,7 +114,7 @@ class UserMailer(models.Model):
""" """
Deserialize the stored backend data. Deserialize the stored backend data.
""" """
return json.loads(self.backend_data) return json.loads(s=self.backend_data)
def natural_key(self): def natural_key(self):
return (self.label,) return (self.label,)
@@ -150,7 +150,9 @@ class UserMailer(models.Model):
mimetype=attachment['mimetype'] mimetype=attachment['mimetype']
) )
email_message.attach_alternative(body, 'text/html') email_message.attach_alternative(
content=body, mimetype='text/html'
)
try: try:
email_message.send() email_message.send()

View File

@@ -5,13 +5,14 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.smart_settings import Namespace from mayan.apps.smart_settings import Namespace
from .literals import ( from .literals import (
DEFAULT_DOCUMENT_BODY_TEMPLATE, DEFAULT_LINK_BODY_TEMPLATE DEFAULT_DOCUMENT_BODY_TEMPLATE, DEFAULT_DOCUMENT_SUBJECT_TEMPLATE,
DEFAULT_LINK_BODY_TEMPLATE, DEFAULT_LINK_SUBJECT_TEMPLATE
) )
namespace = Namespace(name='mailer', label=_('Mailing')) namespace = Namespace(name='mailer', label=_('Mailing'))
setting_link_subject_template = namespace.add_setting( setting_link_subject_template = namespace.add_setting(
default=_('Link for document: {{ document }}'), default=DEFAULT_LINK_SUBJECT_TEMPLATE,
help_text=_('Template for the document link email form subject line.'), help_text=_('Template for the document link email form subject line.'),
global_name='MAILER_LINK_SUBJECT_TEMPLATE' global_name='MAILER_LINK_SUBJECT_TEMPLATE'
) )
@@ -24,7 +25,7 @@ setting_link_body_template = namespace.add_setting(
global_name='MAILER_LINK_BODY_TEMPLATE' global_name='MAILER_LINK_BODY_TEMPLATE'
) )
setting_document_subject_template = namespace.add_setting( setting_document_subject_template = namespace.add_setting(
default=_('Document: {{ document }}'), default=DEFAULT_DOCUMENT_SUBJECT_TEMPLATE,
help_text=_('Template for the document email form subject line.'), help_text=_('Template for the document email form subject line.'),
global_name='MAILER_DOCUMENT_SUBJECT_TEMPLATE' global_name='MAILER_DOCUMENT_SUBJECT_TEMPLATE'
) )

View File

@@ -17,3 +17,4 @@ TEST_RECIPIENTS_MULTIPLE_MIXED_RESULT = [
] ]
TEST_USER_MAILER_BACKEND_PATH = 'mayan.apps.mailer.tests.mailers.TestBackend' TEST_USER_MAILER_BACKEND_PATH = 'mayan.apps.mailer.tests.mailers.TestBackend'
TEST_USER_MAILER_LABEL = 'test user mailer label' TEST_USER_MAILER_LABEL = 'test user mailer label'
TEST_USER_MAILER_LABEL_EDITED = 'test user mailer label edited'

View File

@@ -5,8 +5,8 @@ import json
from ..models import UserMailer from ..models import UserMailer
from .literals import ( from .literals import (
TEST_EMAIL_FROM_ADDRESS, TEST_USER_MAILER_BACKEND_PATH, TEST_EMAIL_ADDRESS, TEST_EMAIL_FROM_ADDRESS, TEST_USER_MAILER_BACKEND_PATH,
TEST_USER_MAILER_LABEL TEST_USER_MAILER_LABEL, TEST_USER_MAILER_LABEL_EDITED
) )
@@ -23,3 +23,42 @@ class MailerTestMixin(object):
} }
) )
) )
def _request_user_mailer_create(self):
return self.post(
viewname='mailer:user_mailer_create', kwargs={
'class_path': TEST_USER_MAILER_BACKEND_PATH
}, data={
'default': True, 'enabled': True,
'label': TEST_USER_MAILER_LABEL,
}
)
def _request_user_mailer_delete(self):
return self.post(
viewname='mailer:user_mailer_delete',
kwargs={'mailer_pk': self.user_mailer.pk}
)
def _request_user_mailer_edit(self):
return self.post(
viewname='mailer:user_mailer_edit',
kwargs={'mailer_pk': self.user_mailer.pk},
data={
'label': TEST_USER_MAILER_LABEL_EDITED
}
)
def _request_user_mailer_list_view(self):
return self.get(viewname='mailer:user_mailer_list')
def _request_user_mailer_test(self):
return self.post(
viewname='mailer:user_mailer_test',
kwargs={'mailer_pk': self.user_mailer.pk},
data={
'email': getattr(
self, 'test_email_address', TEST_EMAIL_ADDRESS
)
}
)

View File

@@ -9,7 +9,8 @@ from ..models import UserMailer
from ..permissions import ( from ..permissions import (
permission_mailing_link, permission_mailing_send_document, permission_mailing_link, permission_mailing_send_document,
permission_user_mailer_create, permission_user_mailer_delete, permission_user_mailer_create, permission_user_mailer_delete,
permission_user_mailer_use, permission_user_mailer_view permission_user_mailer_edit, permission_user_mailer_use,
permission_user_mailer_view
) )
from .literals import ( from .literals import (
@@ -17,8 +18,8 @@ from .literals import (
TEST_RECIPIENTS_MULTIPLE_COMMA, TEST_RECIPIENTS_MULTIPLE_COMMA_RESULT, TEST_RECIPIENTS_MULTIPLE_COMMA, TEST_RECIPIENTS_MULTIPLE_COMMA_RESULT,
TEST_RECIPIENTS_MULTIPLE_MIXED, TEST_RECIPIENTS_MULTIPLE_MIXED_RESULT, TEST_RECIPIENTS_MULTIPLE_MIXED, TEST_RECIPIENTS_MULTIPLE_MIXED_RESULT,
TEST_RECIPIENTS_MULTIPLE_SEMICOLON, TEST_RECIPIENTS_MULTIPLE_SEMICOLON,
TEST_RECIPIENTS_MULTIPLE_SEMICOLON_RESULT, TEST_USER_MAILER_BACKEND_PATH, TEST_RECIPIENTS_MULTIPLE_SEMICOLON_RESULT, TEST_USER_MAILER_LABEL,
TEST_USER_MAILER_LABEL TEST_USER_MAILER_LABEL_EDITED
) )
from .mailers import TestBackend from .mailers import TestBackend
from .mixins import MailerTestMixin from .mixins import MailerTestMixin
@@ -29,31 +30,6 @@ class MailerViewsTestCase(MailerTestMixin, GenericViewTestCase):
super(MailerViewsTestCase, self).setUp() super(MailerViewsTestCase, self).setUp()
self.login_user() self.login_user()
def _request_user_mailer_create(self):
return self.post(
viewname='mailer:user_mailer_create', args=(
TEST_USER_MAILER_BACKEND_PATH,
), data={
'default': True, 'enabled': True,
'label': TEST_USER_MAILER_LABEL,
}
)
def _request_user_mailer_delete(self):
return self.post(
viewname='mailer:user_mailer_delete', args=(self.user_mailer.pk,)
)
def _request_user_mailer_test(self):
return self.post(
viewname='mailer:user_mailer_test', args=(self.user_mailer.pk,),
data={
'email': getattr(
self, 'test_email_address', TEST_EMAIL_ADDRESS
)
}
)
def test_user_mailer_create_view_no_permissions(self): def test_user_mailer_create_view_no_permissions(self):
response = self._request_user_mailer_create() response = self._request_user_mailer_create()
@@ -62,7 +38,7 @@ class MailerViewsTestCase(MailerTestMixin, GenericViewTestCase):
) )
self.assertEqual(UserMailer.objects.count(), 0) self.assertEqual(UserMailer.objects.count(), 0)
def test_user_mailer_create_view_with_permissions(self): def test_user_mailer_create_view_with_permission(self):
self.grant_permission(permission=permission_user_mailer_create) self.grant_permission(permission=permission_user_mailer_create)
response = self._request_user_mailer_create() response = self._request_user_mailer_create()
@@ -73,7 +49,8 @@ class MailerViewsTestCase(MailerTestMixin, GenericViewTestCase):
def test_user_mailer_delete_view_no_permissions(self): def test_user_mailer_delete_view_no_permissions(self):
self._create_user_mailer() self._create_user_mailer()
self._request_user_mailer_delete() response = self._request_user_mailer_delete()
self.assertEqual(response.status_code, 404)
self.assertQuerysetEqual( self.assertQuerysetEqual(
UserMailer.objects.all(), (repr(self.user_mailer),) UserMailer.objects.all(), (repr(self.user_mailer),)
@@ -86,12 +63,32 @@ class MailerViewsTestCase(MailerTestMixin, GenericViewTestCase):
obj=self.user_mailer, permission=permission_user_mailer_delete obj=self.user_mailer, permission=permission_user_mailer_delete
) )
self._request_user_mailer_delete() response = self._request_user_mailer_delete()
self.assertEqual(response.status_code, 302)
self.assertEqual(UserMailer.objects.count(), 0) self.assertEqual(UserMailer.objects.count(), 0)
def _request_user_mailer_list_view(self): def test_user_mailer_edit_view_no_permission(self):
return self.get(viewname='mailer:user_mailer_list') self._create_user_mailer()
response = self._request_user_mailer_edit()
self.assertEqual(response.status_code, 404)
self.user_mailer.refresh_from_db()
self.assertEqual(self.user_mailer.label, TEST_USER_MAILER_LABEL)
def test_user_mailer_edit_view_with_access(self):
self._create_user_mailer()
self.grant_access(
obj=self.user_mailer, permission=permission_user_mailer_edit
)
response = self._request_user_mailer_edit()
self.assertEqual(response.status_code, 302)
self.user_mailer.refresh_from_db()
self.assertEqual(self.user_mailer.label, TEST_USER_MAILER_LABEL_EDITED)
def test_user_mailer_list_view_no_permissions(self): def test_user_mailer_list_view_no_permissions(self):
self._create_user_mailer() self._create_user_mailer()
@@ -118,7 +115,7 @@ class MailerViewsTestCase(MailerTestMixin, GenericViewTestCase):
response = self._request_user_mailer_test() response = self._request_user_mailer_test()
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 404)
self.assertEqual(len(mail.outbox), 0) self.assertEqual(len(mail.outbox), 0)
@@ -192,7 +189,8 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
def _request_document_link_send(self): def _request_document_link_send(self):
return self.post( return self.post(
viewname='mailer:document_send_link', args=(self.document.pk,), viewname='mailer:document_send_link',
kwargs={'document_pk': self.document.pk},
data={ data={
'email': getattr( 'email': getattr(
self, 'test_email_address', TEST_EMAIL_ADDRESS self, 'test_email_address', TEST_EMAIL_ADDRESS
@@ -203,7 +201,8 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
def _request_document_send(self): def _request_document_send(self):
return self.post( return self.post(
viewname='mailer:document_send', args=(self.document.pk,), viewname='mailer:document_send',
kwargs={'document_pk': self.document.pk},
data={ data={
'email': getattr( 'email': getattr(
self, 'test_email_address', TEST_EMAIL_ADDRESS self, 'test_email_address', TEST_EMAIL_ADDRESS
@@ -267,7 +266,8 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
permission=permission_user_mailer_use, obj=self.user_mailer permission=permission_user_mailer_use, obj=self.user_mailer
) )
self._request_document_link_send() response = self._request_document_link_send()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS) self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS)
@@ -285,7 +285,6 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
) )
self.assertEqual(len(mail.outbox), 0) self.assertEqual(len(mail.outbox), 0)
def test_mail_document_view_with_document_access(self): def test_mail_document_view_with_document_access(self):
self._create_user_mailer() self._create_user_mailer()
@@ -328,12 +327,12 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
) )
response = self._request_document_send() response = self._request_document_send()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS) self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS)
self.assertEqual(mail.outbox[0].to, [TEST_EMAIL_ADDRESS]) self.assertEqual(mail.outbox[0].to, [TEST_EMAIL_ADDRESS])
def test_mail_link_view_recipients_comma(self): def test_mail_link_view_recipients_comma(self):
self._create_user_mailer() self._create_user_mailer()
@@ -341,7 +340,8 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
self.grant_permission(permission=permission_user_mailer_use) self.grant_permission(permission=permission_user_mailer_use)
self.test_email_address = TEST_RECIPIENTS_MULTIPLE_COMMA self.test_email_address = TEST_RECIPIENTS_MULTIPLE_COMMA
self._request_document_link_send() response = self._request_document_link_send()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS) self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS)
@@ -356,7 +356,8 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
self.grant_permission(permission=permission_user_mailer_use) self.grant_permission(permission=permission_user_mailer_use)
self.test_email_address = TEST_RECIPIENTS_MULTIPLE_MIXED self.test_email_address = TEST_RECIPIENTS_MULTIPLE_MIXED
self._request_document_link_send() response = self._request_document_link_send()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS) self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS)
@@ -371,7 +372,8 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
self.grant_permission(permission=permission_user_mailer_use) self.grant_permission(permission=permission_user_mailer_use)
self.test_email_address = TEST_RECIPIENTS_MULTIPLE_SEMICOLON self.test_email_address = TEST_RECIPIENTS_MULTIPLE_SEMICOLON
self._request_document_link_send() response = self._request_document_link_send()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS) self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS)
@@ -386,7 +388,8 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
self.grant_permission(permission=permission_user_mailer_use) self.grant_permission(permission=permission_user_mailer_use)
self.test_email_address = TEST_RECIPIENTS_MULTIPLE_COMMA self.test_email_address = TEST_RECIPIENTS_MULTIPLE_COMMA
self._request_document_send() response = self._request_document_send()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS) self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS)
@@ -401,7 +404,8 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
self.grant_permission(permission=permission_user_mailer_use) self.grant_permission(permission=permission_user_mailer_use)
self.test_email_address = TEST_RECIPIENTS_MULTIPLE_MIXED self.test_email_address = TEST_RECIPIENTS_MULTIPLE_MIXED
self._request_document_send() response = self._request_document_send()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS) self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS)
@@ -416,7 +420,8 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
self.grant_permission(permission=permission_user_mailer_use) self.grant_permission(permission=permission_user_mailer_use)
self.test_email_address = TEST_RECIPIENTS_MULTIPLE_SEMICOLON self.test_email_address = TEST_RECIPIENTS_MULTIPLE_SEMICOLON
self._request_document_send() response = self._request_document_send()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(mail.outbox), 1) self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS) self.assertEqual(mail.outbox[0].from_email, TEST_EMAIL_FROM_ADDRESS)

View File

@@ -11,52 +11,53 @@ from .views import (
urlpatterns = [ urlpatterns = [
url( url(
r'^documents/(?P<pk>\d+)/send/link/$', MailDocumentLinkView.as_view(), regex=r'^documents/(?P<document_pk>\d+)/send/link/$',
name='document_send_link' name='document_send_link', view=MailDocumentLinkView.as_view()
), ),
url( url(
r'^documents/multiple/send/link/$', MailDocumentLinkView.as_view(), regex=r'^documents/multiple/send/link/$',
name='document_multiple_send_link' name='document_multiple_send_link',
view=MailDocumentLinkView.as_view()
), ),
url( url(
r'^documents/(?P<pk>\d+)/send/$', MailDocumentView.as_view(), regex=r'^documents/(?P<document_pk>\d+)/send/$', name='document_send',
name='document_send' view=MailDocumentView.as_view()
), ),
url( url(
r'^documents/multiple/send/document/$', MailDocumentView.as_view(), regex=r'^documents/multiple/send/document/$',
name='document_multiple_send' name='document_multiple_send', view=MailDocumentView.as_view()
), ),
url( url(
r'^system_mailer/log/$', SystemMailerLogEntryListView.as_view(), regex=r'^system_mailer/log/$', name='system_mailer_error_log',
name='system_mailer_error_log' view=SystemMailerLogEntryListView.as_view()
), ),
url( url(
r'^user_mailers/backend/selection/$', regex=r'^user_mailers/backend/selection/$',
UserMailerBackendSelectionView.as_view(), name='user_mailer_backend_selection',
name='user_mailer_backend_selection' view=UserMailerBackendSelectionView.as_view()
), ),
url( url(
r'^user_mailers/(?P<class_path>[a-zA-Z0-9_.]+)/create/$', regex=r'^user_mailers/(?P<class_path>[a-zA-Z0-9_.]+)/create/$',
UserMailingCreateView.as_view(), name='user_mailer_create' name='user_mailer_create', view=UserMailingCreateView.as_view()
), ),
url( url(
r'^user_mailers/(?P<pk>\d+)/delete/$', UserMailingDeleteView.as_view(), regex=r'^user_mailers/(?P<mailer_pk>\d+)/delete/$',
name='user_mailer_delete' name='user_mailer_delete', view=UserMailingDeleteView.as_view()
), ),
url( url(
r'^user_mailers/(?P<pk>\d+)/edit/$', UserMailingEditView.as_view(), regex=r'^user_mailers/(?P<mailer_pk>\d+)/edit/$',
name='user_mailer_edit' name='user_mailer_edit', view=UserMailingEditView.as_view()
), ),
url( url(
r'^user_mailers/(?P<pk>\d+)/log/$', regex=r'^user_mailers/(?P<mailer_pk>\d+)/log/$',
UserMailerLogEntryListView.as_view(), name='user_mailer_log' name='user_mailer_log', view=UserMailerLogEntryListView.as_view()
), ),
url( url(
r'^user_mailers/(?P<pk>\d+)/test/$', regex=r'^user_mailers/(?P<mailer_pk>\d+)/test/$',
UserMailerTestView.as_view(), name='user_mailer_test' name='user_mailer_test', view=UserMailerTestView.as_view()
), ),
url( url(
r'^user_mailers/$', UserMailerListView.as_view(), regex=r'^user_mailers/$', name='user_mailer_list',
name='user_mailer_list' view=UserMailerListView.as_view()
), ),
] ]

View File

@@ -47,7 +47,8 @@ class MailDocumentView(MultipleObjectFormActionView):
form_class = DocumentMailForm form_class = DocumentMailForm
model = Document model = Document
object_permission = permission_mailing_send_document object_permission = permission_mailing_send_document
object_permission_raise_404 = True
pk_url_kwarg = 'document_pk'
success_message = _('%(count)d document queued for email delivery') success_message = _('%(count)d document queued for email delivery')
success_message_plural = _( success_message_plural = _(
'%(count)d documents queued for email delivery' '%(count)d documents queued for email delivery'
@@ -126,13 +127,17 @@ class UserMailerBackendSelectionView(FormView):
def form_valid(self, form): def form_valid(self, form):
backend = form.cleaned_data['backend'] backend = form.cleaned_data['backend']
return HttpResponseRedirect( return HttpResponseRedirect(
reverse('mailer:user_mailer_create', args=(backend,),) reverse(
viewname='mailer:user_mailer_create', kwargs={
'class_path': backend
}
)
) )
class UserMailingCreateView(SingleObjectDynamicFormCreateView): class UserMailingCreateView(SingleObjectDynamicFormCreateView):
form_class = UserMailerDynamicForm form_class = UserMailerDynamicForm
post_action_redirect = reverse_lazy('mailer:user_mailer_list') post_action_redirect = reverse_lazy(viewname='mailer:user_mailer_list')
view_permission = permission_user_mailer_create view_permission = permission_user_mailer_create
def get_backend(self): def get_backend(self):
@@ -168,7 +173,9 @@ class UserMailingCreateView(SingleObjectDynamicFormCreateView):
class UserMailingDeleteView(SingleObjectDeleteView): class UserMailingDeleteView(SingleObjectDeleteView):
model = UserMailer model = UserMailer
object_permission = permission_user_mailer_delete object_permission = permission_user_mailer_delete
post_action_redirect = reverse_lazy('mailer:user_mailer_list') object_permission_raise_404 = True
pk_url_kwarg = 'mailer_pk'
post_action_redirect = reverse_lazy(viewname='mailer:user_mailer_list')
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -180,6 +187,8 @@ class UserMailingEditView(SingleObjectDynamicFormEditView):
form_class = UserMailerDynamicForm form_class = UserMailerDynamicForm
model = UserMailer model = UserMailer
object_permission = permission_user_mailer_edit object_permission = permission_user_mailer_edit
object_permission_raise_404 = True
pk_url_kwarg = 'mailer_pk'
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -206,14 +215,16 @@ class UserMailerLogEntryListView(SingleObjectListView):
return { return {
'hide_object': True, 'hide_object': True,
'object': self.get_user_mailer(), 'object': self.get_user_mailer(),
'title': _('Error log for mailing profile: %s') % self.get_user_mailer(), 'title': _(
'Error log for mailing profile: %s'
) % self.get_user_mailer(),
} }
def get_object_list(self): def get_object_list(self):
return self.get_user_mailer().error_log.all() return self.get_user_mailer().error_log.all()
def get_user_mailer(self): def get_user_mailer(self):
return get_object_or_404(klass=UserMailer, pk=self.kwargs['pk']) return get_object_or_404(klass=UserMailer, pk=self.kwargs['mailer_pk'])
class UserMailerListView(SingleObjectListView): class UserMailerListView(SingleObjectListView):
@@ -242,7 +253,6 @@ class UserMailerListView(SingleObjectListView):
class UserMailerTestView(FormView): class UserMailerTestView(FormView):
form_class = UserMailerTestForm form_class = UserMailerTestForm
object_permission = permission_user_mailer_edit
def form_valid(self, form): def form_valid(self, form):
obj = self.get_object() obj = self.get_object()
@@ -253,11 +263,15 @@ class UserMailerTestView(FormView):
obj.test(to=form.cleaned_data['email']) obj.test(to=form.cleaned_data['email'])
except Exception as exception: except Exception as exception:
messages.error( messages.error(
self.request, _('Error sending test message; %s.') % exception request=self.request, message=_(
'Error sending test message; %s.'
) % exception
) )
else: else:
messages.success( messages.success(
self.request, _('Successfully sent test message.') request=self.request, message=_(
'Successfully sent test message.'
)
) )
return super(UserMailerTestView, self).form_valid(form=form) return super(UserMailerTestView, self).form_valid(form=form)
@@ -271,10 +285,12 @@ class UserMailerTestView(FormView):
} }
def get_object(self): def get_object(self):
user_mailer = get_object_or_404(klass=UserMailer, pk=self.kwargs['pk']) return get_object_or_404(
AccessControlList.objects.check_access( klass=self.get_queryset(), pk=self.kwargs['mailer_pk']
permissions=permission_user_mailer_use, user=self.request.user,
obj=user_mailer
) )
return user_mailer def get_queryset(self):
return AccessControlList.objects.filter_by_access(
permission=permission_user_mailer_use,
queryset=UserMailer.objects.all(), user=self.request.user
)