Files
mayan-edms/mayan/apps/mailer/forms.py
Roberto Rosario 36a51eeb73 Switch to full app paths
Instead of inserting the path of the apps into the Python app,
the apps are now referenced by their full import path.

This solves name clashes with external or native Python libraries.
Example: Mayan statistics app vs. Python new statistics library.

Every app reference is now prepended with 'mayan.apps'.

Existing config.yml files need to be updated manually.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
2019-04-05 02:02:57 -04:00

125 lines
4.3 KiB
Python

from __future__ import unicode_literals
import json
from django import forms
from django.utils.translation import ugettext_lazy as _
from mayan.apps.acls.models import AccessControlList
from mayan.apps.common.forms import DynamicModelForm
from mayan.apps.common.settings import setting_project_title, setting_project_url
from .classes import MailerBackend
from .models import UserMailer
from .permissions import permission_user_mailer_use
from .settings import (
setting_document_body_template, setting_document_subject_template,
setting_link_body_template, setting_link_subject_template
)
from .validators import validate_email_multiple
class DocumentMailForm(forms.Form):
def __init__(self, *args, **kwargs):
as_attachment = kwargs.pop('as_attachment', False)
user = kwargs.pop('user', None)
super(DocumentMailForm, self).__init__(*args, **kwargs)
if as_attachment:
self.fields[
'subject'
].initial = setting_document_subject_template.value
self.fields[
'body'
].initial = setting_document_body_template.value % {
'project_title': setting_project_title.value,
'project_website': setting_project_url.value
}
else:
self.fields[
'subject'
].initial = setting_link_subject_template.value
self.fields['body'].initial = setting_link_body_template.value % {
'project_title': setting_project_title.value,
'project_website': setting_project_url.value
}
queryset = AccessControlList.objects.filter_by_access(
permission=permission_user_mailer_use, user=user,
queryset=UserMailer.objects.filter(enabled=True)
)
self.fields['user_mailer'].queryset = queryset
try:
self.fields['user_mailer'].initial = queryset.get(default=True)
except UserMailer.DoesNotExist:
pass
email = forms.CharField(
help_text=_(
'Email address of the recipient. Can be multiple addresses '
'separated by comma or semicolon.'
), label=_('Email address'), validators=[validate_email_multiple]
)
subject = forms.CharField(label=_('Subject'), required=False)
body = forms.CharField(
label=_('Body'), widget=forms.widgets.Textarea(), required=False
)
user_mailer = forms.ModelChoiceField(
help_text=_(
'The email profile that will be used to send this email.'
), label=_('Mailing profile'), queryset=UserMailer.objects.none()
)
class UserMailerBackendSelectionForm(forms.Form):
backend = forms.ChoiceField(choices=(), label=_('Backend'))
def __init__(self, *args, **kwargs):
super(UserMailerBackendSelectionForm, self).__init__(*args, **kwargs)
self.fields['backend'].choices = [
(
key, backend.label
) for key, backend in MailerBackend.get_all().items()
]
class UserMailerDynamicForm(DynamicModelForm):
class Meta:
fields = ('label', 'default', 'enabled', 'backend_data')
model = UserMailer
widgets = {'backend_data': forms.widgets.HiddenInput}
def __init__(self, *args, **kwargs):
result = super(UserMailerDynamicForm, self).__init__(*args, **kwargs)
if self.instance.backend_data:
for key, value in json.loads(self.instance.backend_data).items():
self.fields[key].initial = value
return result
def clean(self):
data = super(UserMailerDynamicForm, self).clean()
# Consolidate the dynamic fields into a single JSON field called
# 'backend_data'.
backend_data = {}
for field_name, field_data in self.schema['fields'].items():
backend_data[field_name] = data.pop(
field_name, field_data.get('default', None)
)
data['backend_data'] = json.dumps(backend_data)
return data
class UserMailerTestForm(forms.Form):
email = forms.CharField(
help_text=_(
'Email address of the recipient. Can be multiple addresses '
'separated by comma or semicolon.'
), label=_('Email address'), validators=[validate_email_multiple]
)