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:
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 = (',', ';')
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user