55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
from django.contrib.auth.models import User
|
|
from django.core.mail import EmailMultiAlternatives
|
|
from django.db import models
|
|
from django.db.models.signals import post_save
|
|
from django.dispatch import receiver
|
|
from django.template.loader import render_to_string
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from musicians.models import Musician
|
|
|
|
|
|
class Message(models.Model):
|
|
titel = models.CharField(max_length=100, verbose_name=_("titel"))
|
|
text = models.TextField(blank=False, verbose_name=_("text"))
|
|
|
|
creation_time = models.DateTimeField(verbose_name=_("creation_time"))
|
|
|
|
author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("Author"))
|
|
|
|
class Meta:
|
|
ordering = ["-creation_time"]
|
|
|
|
def __str__(self):
|
|
return self.author.username + " : " + self.titel
|
|
|
|
|
|
@receiver(post_save, sender=Message)
|
|
def send_forum_notification(sender, instance, created, **kwargs):
|
|
"""Send email notification when a new message is created."""
|
|
if not created:
|
|
return
|
|
|
|
receivers = [m.user.email for m in Musician.objects.all() if m.user.email]
|
|
|
|
if not receivers:
|
|
return
|
|
|
|
subject = "Blechreiz Forum: " + instance.titel
|
|
from_email = "forum@blechreiz.com"
|
|
|
|
context = {"messages": Message.objects.all().order_by("-creation_time")[:10]}
|
|
|
|
text_content = render_to_string("simpleforum/mail.txt", context)
|
|
|
|
msg = EmailMultiAlternatives(subject, text_content, from_email, receivers)
|
|
# Uncomment to add HTML version:
|
|
# html_content = render_to_string("simpleforum/mail.html", context)
|
|
# msg.attach_alternative(html_content, "text/html")
|
|
|
|
try:
|
|
msg.send()
|
|
except Exception:
|
|
# Log the error but don't crash
|
|
pass
|