diff --git a/src/core/forms.py b/src/core/forms.py index cbb1b1f..d8dc965 100644 --- a/src/core/forms.py +++ b/src/core/forms.py @@ -1,4 +1,5 @@ from django import forms +from django.conf import settings from django.contrib.sites.shortcuts import get_current_site from templated_email import send_templated_mail @@ -22,7 +23,7 @@ class CommentCreateForm(forms.ModelForm): 'content_type': forms.HiddenInput(), 'object_id': forms.HiddenInput(), 'content': forms.Textarea(attrs={ - 'placeholder': "Add your comment here, supports markdown" + 'placeholder': 'Add your comment here, supports markdown' }) } @@ -32,7 +33,7 @@ class CommentCreateForm(forms.ModelForm): post = Post.objects.get(pk=self.cleaned_data['object_id']) url = get_current_site(request).domain + post.get_absolute_url() recipients = list(post.recipients.all().values_list('email', flat=True)) - if author in recipients: + if author.email in recipients: recipients.remove(author.email) context = { @@ -44,7 +45,7 @@ class CommentCreateForm(forms.ModelForm): send_templated_mail( template_name=NOTIFICATION_EMAIL_TEMPLATE, - from_email=author.email, + from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=recipients, context=context ) @@ -64,3 +65,39 @@ class PostForm(forms.ModelForm): widgets = { 'recipients': forms.CheckboxSelectMultiple() } + + +class PostCreateForm(forms.ModelForm): + class Meta: + model = Post + fields = [ + 'title', + 'content', + 'recipients' + ] + labels = { + 'content': '' + } + widgets = { + 'recipients': forms.CheckboxSelectMultiple() + } + + def send_notification(self, request, post): + recipients = list(post.recipients.values_list('email', flat=True)) + url = get_current_site(request).domain + post.get_absolute_url() + if author.email in recipients: + recipients.remove(author.email) + + context = { + 'subject': post.title, + 'author': post.author, + 'message': post.content, + 'url': url + } + + send_templated_mail( + template_name=NOTIFICATION_EMAIL_TEMPLATE, + from_email=settings.DEFAULT_FROM_EMAIL, + recipient_list=recipients, + context=context + ) diff --git a/src/core/views.py b/src/core/views.py index 7f611d4..c0aafae 100644 --- a/src/core/views.py +++ b/src/core/views.py @@ -1,5 +1,6 @@ from django.shortcuts import render, reverse, redirect, get_object_or_404 from django.urls import reverse, reverse_lazy +from django.http import HttpResponseRedirect from django.db import models from django.views.generic.base import TemplateView from django.views.generic.detail import DetailView @@ -13,7 +14,7 @@ from django.contrib.messages.views import SuccessMessageMixin from django.contrib.contenttypes.models import ContentType from .models import Topic, Post, Comment -from .forms import PostForm, CommentCreateForm +from .forms import PostForm, PostCreateForm, CommentCreateForm class CommentListView(LoginRequiredMixin, ListView): @@ -105,7 +106,7 @@ class PostCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): model = Post success_message = 'Post created.' template_name_suffix = '_create_form' - form_class = PostForm + form_class = PostCreateForm def get_context_data(self, *args, **kwargs): context = super().get_context_data(*args, **kwargs) @@ -117,7 +118,9 @@ class PostCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): form.instance.topic = get_object_or_404( Topic, pk=self.kwargs['topic_pk'] ) - return super().form_valid(form) + self.object = form.save() + form.send_notification(self.request, self.object) + return HttpResponseRedirect(self.get_success_url()) class PostDetailView(LoginRequiredMixin, DetailView): diff --git a/src/forum/config.py b/src/forum/config.py index 0bdd88b..d697528 100644 --- a/src/forum/config.py +++ b/src/forum/config.py @@ -16,6 +16,7 @@ DATABASE_CONFIG = { SECRET_KEY = os.environ.get('SECRET_KEY', '') STATIC_ROOT_PATH = os.environ.get('STATIC_ROOT_PATH', '/var/www/forum/static/') +LOGGING_FILE_LOCATION = os.environ.get('LOGGING_FILE_LOCATION', '/home/nathanchapman/debug.log') ANYMAIL_CONFIG = { 'MAILGUN_API_KEY': os.environ.get('MAILGUN_API_KEY', ''), diff --git a/src/forum/settings.py b/src/forum/settings.py index 0871b82..e433d3b 100644 --- a/src/forum/settings.py +++ b/src/forum/settings.py @@ -150,7 +150,7 @@ LOGGING = { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filters': ['require_debug_false'], - 'filename': '/home/nathanchapman/debug.log', + 'filename': LOGGING_FILE_LOCATION, 'formatter': 'verbose', }, }, diff --git a/src/templates/templated_email/notification.html.email b/src/templates/templated_email/notification.html.email index fee5456..fb7e9e2 100644 --- a/src/templates/templated_email/notification.html.email +++ b/src/templates/templated_email/notification.html.email @@ -4,7 +4,7 @@ {% block html %}

{{ author }} posted:

- {{ message|markdown|safe|truncatechars_html:64 }} + {{ message|markdown|safe }}

View or reply