101 lines
3.3 KiB
Python
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)
|