diff --git a/club/models.py b/club/models.py index 9484e4e26cde8b1a976142a1394db7091a71b584..90df31a31a33dab6413366682cfedca68ec72334 100644 --- a/club/models.py +++ b/club/models.py @@ -231,6 +231,11 @@ class Mailing(models.Model): club = models.ForeignKey(Club, verbose_name=_('Club'), related_name="mailings", null=False, blank=False) email = models.EmailField(_('Email address'), unique=True) + def clean(self): + if '@' + settings.SITH_MAILING_ALLOWED_DOMAIN not in self.email: + raise ValidationError(_('Unothorized mailing domain')) + super(Mailing, self).clean() + def is_owned_by(self, user): return user.is_in_group(self) or user.is_root or user.is_board_member @@ -242,6 +247,15 @@ class Mailing(models.Model): sub.delete() super(Mailing, self).delete() + def base_mail(self): + return self.email.split('@')[0] + + def fetch_format(self): + resp = self.base_mail() + ': ' + for sub in self.subscriptions.all(): + resp += sub.fetch_format() + return resp + def __str__(self): return "%s - %s" % (self.club, self.email) @@ -270,6 +284,9 @@ class MailingSubscription(models.Model): def can_be_edited_by(self, user): return self.is_owned_by(user) or (user is not None and user.id == self.user.id) + def fetch_format(self): + return self.email + ' ' + def __str__(self): if self.user: user = str(self.user) diff --git a/club/templates/club/mailing.jinja b/club/templates/club/mailing.jinja index 47f11884ce41186b1b4af0c9f7eb1b3fdcb9b2ed..66e5786448768c5d909d24d339f4443a262802e2 100644 --- a/club/templates/club/mailing.jinja +++ b/club/templates/club/mailing.jinja @@ -10,7 +10,7 @@ {% for mailing in object_list %}

{% trans %}Mailing{% endtrans %} {{ mailing.email }} {%- if user.is_owner(mailing) -%} - {% trans %}Delete{% endtrans %} + - {% trans %}Delete{% endtrans %} {%- endif -%}


diff --git a/club/templates/club/mailing_output.jinja b/club/templates/club/mailing_output.jinja new file mode 100644 index 0000000000000000000000000000000000000000..8a7133a73214f2aad446b3135810a53b9fe46d2c --- /dev/null +++ b/club/templates/club/mailing_output.jinja @@ -0,0 +1,3 @@ +{%- for mailing in object_list -%} +{{ mailing.fetch_format() }} +{%- endfor -%} \ No newline at end of file diff --git a/club/urls.py b/club/urls.py index 42074a5cbe5d5389b4e9ef8f8902c946533deb0f..bfd178a0a78e4a34472233a7431e8d5ef24dff30 100644 --- a/club/urls.py +++ b/club/urls.py @@ -44,5 +44,6 @@ urlpatterns = [ url(r'^(?P[0-9]+)/mailing/new/subscription$', ClubMailingView.as_view(action=MailingFormType.MEMBER), name='mailing_subscription_create'), url(r'^(?P[0-9]+)/mailing/delete$', MailingDeleteView.as_view(), name='mailing_delete'), url(r'^(?P[0-9]+)/mailing/delete/subscription$', MailingSubscriptionDeleteView.as_view(), name='mailing_subscription_delete'), + url(r'^mailing/fetch$', MailingFetchView.as_view(), name='mailing_fetch'), url(r'^membership/(?P[0-9]+)/set_old$', MembershipSetOldView.as_view(), name='membership_set_old'), ] diff --git a/club/views.py b/club/views.py index 6a3b35a0c849e768c3bf670262243fa62386868e..a283279c9164886ba70098753b7aafeaaa5dfd9a 100644 --- a/club/views.py +++ b/club/views.py @@ -44,6 +44,8 @@ from club.models import Club, Membership, Mailing, MailingSubscription from sith.settings import SITH_MAXIMUM_FREE_ROLE from counter.models import Selling, Counter +from django.conf import settings + # Custom forms @@ -505,3 +507,15 @@ class MailingSubscriptionDeleteView(CanEditMixin, DeleteView): def get_success_url(self, **kwargs): return reverse_lazy('club:mailing', kwargs={'club_id': self.club_id}) + + +class MailingFetchView(ListView): + + model = Mailing + template_name = 'club/mailing_output.jinja' + + def dispatch(self, request, *args, **kwargs): + key = request.GET.get('key', '') + if key != settings.SITH_MAILING_FETCH_KEY: + raise PermissionDenied + return super(MailingFetchView, self).dispatch(request, *args, **kwargs) diff --git a/sith/settings.py b/sith/settings.py index ff08d42d1e0384958e18c3a923d2a56cb3ad588b..3f4922810d79d30fbe787f082dadf9eb2fec8301 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -586,3 +586,8 @@ if DEBUG: SASS_INCLUDE_FOLDERS = [ 'core/static/', ] + +# Mailing related settings + +SITH_MAILING_ALLOWED_DOMAIN = 'utbm.fr' +SITH_MAILING_FETCH_KEY = 'IloveMails' diff --git a/sith/urls.py b/sith/urls.py index 2b744c2485fd2aabf3d6dbf31a8f082bdb986019..e21a53cb7d68dee3383ecb041b7e0c397bc37ee9 100644 --- a/sith/urls.py +++ b/sith/urls.py @@ -43,6 +43,7 @@ from django.conf.urls.static import static from django.conf import settings from django.views.i18n import javascript_catalog from ajax_select import urls as ajax_select_urls +from club.views import MailingFetchView js_info_dict = { 'packages': ('sith',), @@ -72,6 +73,8 @@ urlpatterns = [ url(r'^ajax_select/', include(ajax_select_urls)), url(r'^i18n/', include('django.conf.urls.i18n')), url(r'^jsi18n/$', javascript_catalog, js_info_dict, name='javascript-catalog'), + # This url is for legacy use + url(r'^mailing.php$', MailingFetchView.as_view(), name='mailing_fetch_legacy'), ] if settings.DEBUG: