Add notifications for Posts

This commit is contained in:
Nathan Chapman 2022-07-22 13:04:09 -06:00
parent d293c09e64
commit e935911bd5
5 changed files with 49 additions and 8 deletions

View File

@ -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
)

View File

@ -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):

View File

@ -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', ''),

View File

@ -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',
},
},

View File

@ -4,7 +4,7 @@
{% block html %}
<h3>{{ author }} posted:</h3>
{{ message|markdown|safe|truncatechars_html:64 }}
{{ message|markdown|safe }}
<p>
<a href="{{ url }}">View or reply</a>