Commits (31)
image: maxking/mailman-ci-runner
py35-django-1.11:
stage: test
script:
- tox -e py35-django111
py36-django-1.11:
stage: test
script:
- tox -e py36-django111
py37-django-20:
stage: test
script:
......
include COPYING
include *.rst
recursive-include src/postorius *.py *.html *.js *.rst *.txt
recursive-include src/postorius *.py *.html *.js *.rst *.txt *.po
prune src/postorius/doc/_build
graft src/postorius/static
include src/postorius/doc/Makefile
......
......@@ -17,5 +17,5 @@
# Postorius. If not, see <http://www.gnu.org/licenses/>.
__version__ = '1.3.1'
__version__ = '1.3.2'
default_app_config = 'postorius.apps.PostoriusConfig'
......@@ -18,6 +18,16 @@ You should have received a copy of the GNU Lesser General Public License
along with Postorius. If not, see <http://www.gnu.org/licenses/>.
1.3.2
=====
(2020-01-12)
* Do not show pagination, when user is authenticated. (Closes #387)
* Drop support for Django 1.11.
* Add support to choose options for ``pre_confirm``, ``pre_approve`` and
``pre_verify`` when mass subscribing. (Fixes #203)
1.3.1
=====
......
......@@ -12,7 +12,7 @@ Installation
Install Postorius
=================
Postorius supports Python 3.5+ and Django 1.11+.
Postorius supports Python 3.5+ and Django 2.0+.
Latest release
......
......@@ -723,6 +723,35 @@ class ListMassSubscription(forms.Form):
),
)
pre_confirmed = forms.BooleanField(
label=_('Pre confirm'),
initial=True,
required=False,
help_text=_(
'If checked, users will not have to confirm their subscription.'),
widget=forms.CheckboxInput()
)
pre_approved = forms.BooleanField(
label=_('Pre approved'),
initial=True,
required=False,
help_text=_(
'If checked, moderators will not have to approve the subscription'
' request.',),
widget=forms.CheckboxInput()
)
pre_verified = forms.BooleanField(
label=_('Pre Verified'),
initial=False,
required=False,
help_text=_(
'If checked, users will not have to verify that their '
'email address is valid.'),
widget=forms.CheckboxInput()
)
class ListMassRemoval(forms.Form):
......
......@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-16 15:39+0200\n"
"PO-Revision-Date: 2019-08-28 22:24+0000\n"
"Last-Translator: Adolfo Jayme Barrientos <fitojb@ubuntu.com>\n"
"PO-Revision-Date: 2019-12-11 13:45+0000\n"
"Last-Translator: Federico Sayd <federicosayd@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/gnu-mailman/"
"translations/es/>\n"
"postorius/es/>\n"
"Language: es\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"
"X-Generator: Weblate 3.9-dev\n"
"X-Generator: Weblate 3.10-dev\n"
#: forms/domain_forms.py:34
#, python-format
......@@ -220,7 +220,7 @@ msgstr ""
#: forms/list_forms.py:192 templates/postorius/domain/template_delete.html:27
#: templates/postorius/lists/template_delete.html:24
msgid "Confirm"
msgstr ""
msgstr "Confirmar"
#: forms/list_forms.py:193
msgid "Moderate"
......@@ -1447,7 +1447,7 @@ msgstr ""
#: templates/postorius/lists/confirm_remove_role.html:17
msgid "Remove"
msgstr "Quitar"
msgstr "Remover"
#: templates/postorius/lists/confirm_removeall_subscribers.html:6
msgid "Unsubscribe all members"
......
......@@ -3,21 +3,22 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-16 15:40+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"PO-Revision-Date: 2020-01-07 04:21+0000\n"
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
"Language-Team: Croatian <https://hosted.weblate.org/projects/gnu-mailman/"
"postorius/hr/>\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.10\n"
#: forms/domain_forms.py:34
#, python-format
......@@ -220,7 +221,7 @@ msgstr ""
#: forms/list_forms.py:192 templates/postorius/domain/template_delete.html:27
#: templates/postorius/lists/template_delete.html:24
msgid "Confirm"
msgstr ""
msgstr "Potvrdi"
#: forms/list_forms.py:193
msgid "Moderate"
......@@ -1186,7 +1187,7 @@ msgstr ""
#: templates/postorius/base.html:73
msgid "Account"
msgstr ""
msgstr "Račun"
#: templates/postorius/base.html:77
msgid "Mailman settings"
......@@ -1445,7 +1446,7 @@ msgstr ""
#: templates/postorius/lists/confirm_remove_role.html:17
msgid "Remove"
msgstr ""
msgstr "Ukloni"
#: templates/postorius/lists/confirm_removeall_subscribers.html:6
msgid "Unsubscribe all members"
......
......@@ -3,20 +3,21 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-16 15:40+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"PO-Revision-Date: 2020-01-08 17:21+0000\n"
"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
"Language-Team: Marathi <https://hosted.weblate.org/projects/gnu-mailman/"
"postorius/mr/>\n"
"Language: mr\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"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.10.1-dev\n"
#: forms/domain_forms.py:34
#, python-format
......@@ -1185,7 +1186,7 @@ msgstr ""
#: templates/postorius/base.html:73
msgid "Account"
msgstr ""
msgstr "खाते"
#: templates/postorius/base.html:77
msgid "Mailman settings"
......@@ -1444,7 +1445,7 @@ msgstr ""
#: templates/postorius/lists/confirm_remove_role.html:17
msgid "Remove"
msgstr ""
msgstr "हटवा"
#: templates/postorius/lists/confirm_removeall_subscribers.html:6
msgid "Unsubscribe all members"
......
......@@ -3,22 +3,23 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-16 15:40+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"PO-Revision-Date: 2020-01-05 16:21+0000\n"
"Last-Translator: kakiremora <piotrek.pastuszak2003@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/gnu-mailman/"
"postorius/pl/>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
"%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<"
"12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) "
"|| (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"X-Generator: Weblate 3.10\n"
#: forms/domain_forms.py:34
#, python-format
......@@ -27,130 +28,135 @@ msgid ""
"same or different from the Mail Host. You can edit the list of available web "
"hosts <a href=\"%s\">here</a>."
msgstr ""
"Domena z której interfejs webowy będzie serwowany. Może być taka sama lub "
"różna od Mail Host. Możesz edytować listę dostępnych hostów webowych <a href="
"\"%s\">tutaj</a>."
#: forms/domain_forms.py:45 forms/list_forms.py:95
#: templates/postorius/domain/index.html:21
msgid "Mail Host"
msgstr ""
msgstr "Dostawca Poczty"
#: forms/domain_forms.py:46 forms/domain_forms.py:65
msgid "Please enter a domain name"
msgstr ""
msgstr "Proszę podaj nazwę domeny"
#: forms/domain_forms.py:47 forms/domain_forms.py:66
msgid "Please enter a valid domain name."
msgstr ""
msgstr "Wpisz poprawną nazwę domeny."
#: forms/domain_forms.py:50
msgid ""
"The domain for your mailing lists. For example when you want lists like "
"testing@example.com, enter example.com here."
msgstr ""
"Domena używana przez Twoje listy mailowe. Przykładowo jeśli chcesz mieś "
"listę testing@example.com, umieść tutaj example.com."
#: forms/domain_forms.py:54 forms/list_forms.py:88 forms/list_forms.py:666
#: templates/postorius/domain/index.html:22 templates/postorius/index.html:56
msgid "Description"
msgstr ""
msgstr "Opis"
#: forms/domain_forms.py:57 templates/postorius/domain/index.html:23
msgid "Alias Domain"
msgstr ""
msgstr "Alias domeny"
#: forms/domain_forms.py:59 forms/domain_forms.py:88
msgid "Please enter a valid domain name or nothing."
msgstr ""
msgstr "Wpisz poprawną nazwę domeny lub pozostaw puste."
#: forms/domain_forms.py:61
msgid "Normally empty. Used only for unusual Postfix configs."
msgstr ""
msgstr "Zwykle puste. Używane dla niestandardowych konfiguracji Postfixa."
#: forms/domain_forms.py:64 templates/postorius/domain/index.html:24
msgid "Web Host"
msgstr ""
msgstr "Web Host"
#: forms/domain_forms.py:78
msgid "Please enter a valid domain name"
msgstr ""
msgstr "Proszę podaj prawidłową nazwę domeny"
#: forms/domain_forms.py:103
msgid "Owner's Email"
msgstr ""
msgstr "Adres email właściciela"
#: forms/fields.py:81
msgid "Make at least one selection"
msgstr ""
msgstr "Dokonaj przynajmniej jednego wyboru"
#: forms/list_forms.py:35
msgid "Hold for moderation"
msgstr ""
msgstr "Zatrzymane do moderacji"
#: forms/list_forms.py:36
msgid "Reject (with notification)"
msgstr ""
msgstr "Odrzuć (z powiadomieniem)"
#: forms/list_forms.py:37
msgid "Discard (no notification)"
msgstr ""
msgstr "Porzuć (bez powiadomienia)"
#: forms/list_forms.py:38
msgid "Accept immediately (bypass other rules)"
msgstr ""
msgstr "Zaakceptuj natychmiast (pomiń inne reguły)"
#: forms/list_forms.py:39
msgid "Default processing"
msgstr ""
msgstr "Zachowanie domyślne"
#: forms/list_forms.py:43
msgid "Daily"
msgstr ""
msgstr "Dziennie"
#: forms/list_forms.py:44
msgid "Weekly"
msgstr ""
msgstr "Tygodniowo"
#: forms/list_forms.py:45
msgid "Quarterly"
msgstr ""
msgstr "Kwartalnie"
#: forms/list_forms.py:46
msgid "Monthly"
msgstr ""
msgstr "Miesięcznie"
#: forms/list_forms.py:47
msgid "Yearly"
msgstr ""
msgstr "Rocznie"
#: forms/list_forms.py:51
msgid "Only mailinglist moderators"
msgstr ""
msgstr "Tylko moderatorzy listy mailowej"
#: forms/list_forms.py:52
msgid "Only mailinglist members"
msgstr ""
msgstr "Tylko członkowie listy mailowej"
#: forms/list_forms.py:53
msgid "Anyone"
msgstr ""
msgstr "Ktokolwiek"
#: forms/list_forms.py:67 templates/postorius/user/subscriptions.html:22
msgid "List Name"
msgstr ""
msgstr "Nazwa Listy"
#: forms/list_forms.py:69
msgid "Please enter a name for your list."
msgstr ""
msgstr "Wpisz nazwę dla twojej listy."
#: forms/list_forms.py:70
msgid "Please enter a valid list name."
msgstr ""
msgstr "Wpisz poprawną nazwę listy."
#: forms/list_forms.py:73
msgid "Initial list owner address"
msgstr ""
msgstr "Adres oryginalnego właściciela listy"
#: forms/list_forms.py:75
msgid "Please enter the list owner's email address."
msgstr ""
msgstr "Wpisz adres oryginalnego właściciela listy."
#: forms/list_forms.py:79
msgid "Advertise this list?"
......@@ -158,7 +164,7 @@ msgstr ""
#: forms/list_forms.py:81
msgid "Please choose a list type."
msgstr ""
msgstr "Wybierz typ listy."
#: forms/list_forms.py:84
msgid "Advertise this list in list index"
......@@ -166,11 +172,11 @@ msgstr ""
#: forms/list_forms.py:85
msgid "Hide this list in list index"
msgstr ""
msgstr "Ukryj tą listę na spisie list"
#: forms/list_forms.py:98
msgid "Choose an existing Domain."
msgstr ""
msgstr "Wybierz istniejącą domenę"
#: forms/list_forms.py:99
msgid "Choose a valid Mail Host"
......@@ -178,50 +184,50 @@ msgstr ""
#: forms/list_forms.py:102
msgid "List Style"
msgstr ""
msgstr "Styl listy"
#: forms/list_forms.py:105
msgid "Choose a List Style."
msgstr ""
msgstr "Wybierz styl listy."
#: forms/list_forms.py:106
msgid "Choose a valid List Style."
msgstr ""
msgstr "Wybierz poprawny styl listy."
#: forms/list_forms.py:109
msgid "Site admin has not created any domains"
msgstr ""
msgstr "Administrator strony nie utworzył żadnej domeny"
#: forms/list_forms.py:122
msgid "Please enter a valid listname"
msgstr ""
msgstr "Wpisz poprawną nazwę listy"
#: forms/list_forms.py:148 forms/list_forms.py:169
msgid "Your email address"
msgstr ""
msgstr "Twój adres e-mail"
#: forms/list_forms.py:152 forms/list_forms.py:172 forms/list_forms.py:757
#: forms/member_forms.py:29
msgid "Please enter an email address."
msgstr ""
msgstr "Wpisz adres e-mail."
#: forms/list_forms.py:153 forms/list_forms.py:173 forms/list_forms.py:758
#: forms/member_forms.py:30
msgid "Please enter a valid email address."
msgstr ""
msgstr "Wpisz poprawny adres e-mail."
#: forms/list_forms.py:156 forms/list_forms.py:176
msgid "Your name (optional)"
msgstr ""
msgstr "Twoje imię (opcjonalnie)"
#: forms/list_forms.py:191
msgid "Open"
msgstr ""
msgstr "Otwórz"
#: forms/list_forms.py:192 templates/postorius/domain/template_delete.html:27
#: templates/postorius/lists/template_delete.html:24
msgid "Confirm"
msgstr ""
msgstr "Akceptuj"
#: forms/list_forms.py:193
msgid "Moderate"
......@@ -247,19 +253,19 @@ msgstr ""
#: forms/list_forms.py:221
msgid "Public archives"
msgstr ""
msgstr "Publiczne archiwa"
#: forms/list_forms.py:222
msgid "Private archives"
msgstr ""
msgstr "Prywatne archiwa"
#: forms/list_forms.py:223
msgid "Do not archive this list"
msgstr ""
msgstr "Nie archiwuj tej listy"
#: forms/list_forms.py:229
msgid "Archive policy"
msgstr ""
msgstr "Polityka archiwizacji"
#: forms/list_forms.py:230
msgid "Policy for archiving messages for this list"
......@@ -267,7 +273,7 @@ msgstr ""
#: forms/list_forms.py:235
msgid "Active archivers"
msgstr ""
msgstr "Aktywni archiwizatorzy"
#: forms/list_forms.py:260
msgid "Acceptable aliases"
......
......@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-16 15:40+0200\n"
"PO-Revision-Date: 2019-10-02 11:56+0000\n"
"Last-Translator: Manuela Silva <mmsrs@sky.com>\n"
"PO-Revision-Date: 2020-01-05 16:21+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/gnu-mailman/"
"translations/pt/>\n"
"postorius/pt/>\n"
"Language: pt\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"
"X-Generator: Weblate 3.9-dev\n"
"X-Generator: Weblate 3.10\n"
#: forms/domain_forms.py:34
#, python-format
......@@ -1249,7 +1249,7 @@ msgstr ""
#: templates/postorius/lists/template_list.html:32
#: templates/postorius/menu/list_nav.html:60
msgid "Delete"
msgstr ""
msgstr "Apagar"
#: templates/postorius/domain/confirm_delete.html:34
#: templates/postorius/domain/template_delete.html:28
......@@ -1445,7 +1445,7 @@ msgstr ""
#: templates/postorius/lists/confirm_remove_role.html:17
msgid "Remove"
msgstr ""
msgstr "Remover"
#: templates/postorius/lists/confirm_removeall_subscribers.html:6
msgid "Unsubscribe all members"
......@@ -1508,7 +1508,7 @@ msgstr ""
#: templates/postorius/lists/held_messages.html:36
msgid "Subject"
msgstr ""
msgstr "Assunto"
#: templates/postorius/lists/held_messages.html:37
msgid "Sender"
......@@ -1791,7 +1791,7 @@ msgstr ""
#: templates/postorius/menu/user_nav.html:7
#: templates/postorius/user/subscriptions.html:8 templatetags/nav_helpers.py:42
msgid "Subscriptions"
msgstr ""
msgstr "Assinaturas"
#: templates/postorius/menu/user_nav.html:8
msgid "Global Mailman preferences"
......
......@@ -81,7 +81,9 @@
{% if user.is_superuser %}
<small>* {% trans 'Only admins see unadvertised lists in the list index.' %}</small>
{% endif %}
{% paginator lists %}
{% if not user.is_authenticated or "all-lists" in request.GET %}
{% paginator lists %}
{% endif %}
{% else %}
<p>{% trans 'There are currently no mailing lists.' %}</p>
{% endif %}
......
......@@ -192,6 +192,24 @@ class ListIndexPageTest(ViewTestCase):
# showup here.
self.assertEqual(len(response.context['lists']), 1)
def test_list_index_pagination(self):
# Test that pagination is shown when user is not authenticated.
url = reverse('list_index')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertTrue(b'Results per page' in response.content)
# Test that pagination is not shown when user is authenticated.
self.client.login(username='user', password='pwd')
self.foo_list.add_owner(self.user.email)
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.context['lists']), 1)
self.assertTrue(b'Results per page' not in response.content)
# Test that pagination is shown when `all-lists` is in query params.
response = self.client.get(url + '?all-lists')
self.assertEqual(response.status_code, 200)
self.assertTrue(b'Results per page' in response.content)
@override_settings(FILTER_VHOST=True, ALLOWED_HOSTS=["*"])
class DomainFilteringListIndexPageTest(ListIndexPageTest):
......
......@@ -297,3 +297,63 @@ class ListSettingsTest(ViewTestCase):
self.assertEqual(
m_list.settings[field], value,
'Field: {}'.format(field))
def test_mass_subscribe_options(self):
self.client.login(username='testsu', password='testpass')
mlist = List.objects.get(fqdn_listname='foo.example.com')
updated_values = {
'emails': 'john3@example.com',
'pre_verified': True,
'pre_confirmed': True,
'pre_approved': True,
}
url = reverse('mass_subscribe',
args=('foo.example.com',))
response = self.client.post(url, updated_values)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(mlist.members), 1)
# Now, let's see if we can moderate.
self.foo_list.settings['subscription_policy'] = 'moderate'
self.foo_list.settings.save()
updated_values = {
'emails': 'john@example.com',
'pre_confirmed': True,
'pre_approved': True,
'pre_verified': True
}
self.assertEqual(len(mlist.members), 1)
response = self.client.post(url, updated_values)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(mlist.members), 2)
# With pre_confirmed = False, there should be a pending subscription
# event.
updated_values = {
'emails': 'john2@example.com',
'pre_confirmed': True,
'pre_verified': True
}
response = self.client.post(url, updated_values)
self.assertEqual(response.status_code, 200)
# Now, there should be a pending request to confirm.
self.assertEqual(len(mlist.members), 2)
self.assertEqual(len(mlist.requests), 1)
self.assertEqual(mlist.requests[0].get('token_owner'), 'moderator')
# Test mass subscribe without all options.
self.foo_list.settings['subscription_policy'] = 'confirm_then_moderate'
self.foo_list.settings.save()
updated_values = {
'emails': 'john4@example.com',
'pre_confirmed': False,
'pre_verified': True
}
response = self.client.post(url, updated_values)
self.assertEqual(response.status_code, 200)
self.assertEqual(len(mlist.requests), 2)
self.assertEqual(mlist.requests[1].get('token_owner'), 'subscriber')
......@@ -179,7 +179,7 @@ class TestSubscription(ViewTestCase):
<test-5@example.org>\n"""
self.client.post(
reverse('mass_subscribe', args=('open_list.example.com',)),
{'emails': email_list})
{'emails': email_list, 'pre_verified': True})
self.assertEqual(len(self.open_list.members), 5)
first = self.open_list.get_member('test-1@example.org')
second = self.open_list.get_member('test-2@example.org')
......
......@@ -431,11 +431,12 @@ def list_mass_subscribe(request, list_id):
# Parse the data to get the address and the display name
display_name, address = email.utils.parseaddr(data)
validate_email(address)
mailing_list.subscribe(address=address,
display_name=display_name,
pre_verified=True,
pre_confirmed=True,
pre_approved=True)
mailing_list.subscribe(
address=address,
display_name=display_name,
pre_verified=form.cleaned_data['pre_verified'],
pre_confirmed=form.cleaned_data['pre_confirmed'],
pre_approved=form.cleaned_data['pre_approved'])
messages.success(
request, _('The address %(address)s has been'
' subscribed to %(list)s.') %
......
......@@ -15,7 +15,6 @@ deps =
dev: -e../mailmanclient
dev: -e../django-mailman3
dev: https://github.com/django/django/archive/master.tar.gz
django111: Django>=1.11,<1.12
django20: Django>=2.0,<2.1
django21: Django>=2.1,<2.2
django22: Django>=2.2,<2.3
......