hackspace/mhackspace/base/models.py

101 lines
3.3 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import
from django.db import models
from django.conf import settings
from django.contrib.sites.models import Site
from django.utils import timezone
from stdimage.models import StdImageField
from dynamic_filenames import FilePattern
from stdimage.validators import MinSizeValidator
from spirit.comment.models import Comment
from spirit.topic.models import Topic
from wiki.models.article import ArticleRevision
from django.core.mail import EmailMessage
from django.db.models.signals import post_save
from mhackspace.base.tasks import matrix_message
upload_to_pattern = FilePattern(
filename_pattern="{model_name}/{instance.title:slug}{ext}"
)
class BannerImage(models.Model):
url = models.URLField()
title = models.CharField(max_length=255)
displayed = models.BooleanField(default=True)
image = StdImageField(
upload_to=upload_to_pattern,
variations={
"small": {"width": 400, "height": 300, "crop": True},
"small2x": {"width": 800, "height": 600, "crop": True},
"medium": {"width": 800, "height": 300, "crop": True},
"medium2x": {"width": 1600, "height": 600, "crop": True},
"large": {"width": 1200, "height": 300, "crop": True},
"large2x": {"width": 2400, "height": 600, "crop": True},
},
validators=[MinSizeValidator(2400, 600)],
)
caption = models.TextField()
date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
# should be done inside spirit
def send_topic_update_email(sender, instance, **kwargs):
comments = Comment.objects.filter(topic=instance.topic)
addresses = {comment.user.email for comment in comments}
for user_email in addresses:
email = EmailMessage(
"[%s] - %s" % (settings.MSG_PREFIX, instance.topic.title),
"A topic you have interacted with has been updated click link to see new comments %s"
% instance.get_absolute_url(),
"no-reply@maidstone-hackspace.org.uk",
to=[user_email],
headers={"Reply-To": "no-reply@maidstone-hackspace.org.uk"},
)
email.send()
matrix_message.delay(
"https://%s%s"
% (
Site.objects.get_current().domain,
instance.topic.get_absolute_url(),
)
)
def wiki_article_updated(sender, instance, **kwargs):
matrix_message.delay(
"https://%s%s"
% (
Site.objects.get_current().domain,
instance.article.get_absolute_url(),
)
)
def send_new_topic_notification(sender, instance, **kwargs):
matrix_message.delay(
"https://%s%s"
% (Site.objects.get_current().domain, instance.get_absolute_url())
)
email = EmailMessage(
"[%s - TOPIC] - %s" % (settings.MSG_PREFIX, instance),
"A new topic has been created, click link to view %s"
% instance.get_absolute_url(),
settings.EMAIL_MAILING_LIST,
to=[settings.EMAIL_MAILING_LIST],
headers={"Reply-To": settings.EMAIL_MAILING_LIST},
)
email.send()
post_save.connect(wiki_article_updated, sender=ArticleRevision)
post_save.connect(send_topic_update_email, sender=Comment)
post_save.connect(send_new_topic_notification, sender=Topic)