mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-10 11:59:23 +00:00
All: Apply Black coding rules
This commit is contained in:
138
com/models.py
138
com/models.py
@ -40,10 +40,9 @@ from core.models import User, Preferences, RealGroup, Notification, SithFile
|
||||
from club.models import Club
|
||||
|
||||
|
||||
|
||||
|
||||
class Sith(models.Model):
|
||||
"""A one instance class storing all the modifiable infos"""
|
||||
|
||||
alert_msg = models.TextField(_("alert message"), default="", blank=True)
|
||||
info_msg = models.TextField(_("info message"), default="", blank=True)
|
||||
index_page = models.TextField(_("index page"), default="", blank=True)
|
||||
@ -57,23 +56,30 @@ class Sith(models.Model):
|
||||
|
||||
|
||||
NEWS_TYPES = [
|
||||
('NOTICE', _('Notice')),
|
||||
('EVENT', _('Event')),
|
||||
('WEEKLY', _('Weekly')),
|
||||
('CALL', _('Call')),
|
||||
("NOTICE", _("Notice")),
|
||||
("EVENT", _("Event")),
|
||||
("WEEKLY", _("Weekly")),
|
||||
("CALL", _("Call")),
|
||||
]
|
||||
|
||||
|
||||
class News(models.Model):
|
||||
"""The news class"""
|
||||
|
||||
title = models.CharField(_("title"), max_length=64)
|
||||
summary = models.TextField(_("summary"))
|
||||
content = models.TextField(_("content"))
|
||||
type = models.CharField(_("type"), max_length=16, choices=NEWS_TYPES, default="EVENT")
|
||||
type = models.CharField(
|
||||
_("type"), max_length=16, choices=NEWS_TYPES, default="EVENT"
|
||||
)
|
||||
club = models.ForeignKey(Club, related_name="news", verbose_name=_("club"))
|
||||
author = models.ForeignKey(User, related_name="owned_news", verbose_name=_("author"))
|
||||
author = models.ForeignKey(
|
||||
User, related_name="owned_news", verbose_name=_("author")
|
||||
)
|
||||
is_moderated = models.BooleanField(_("is moderated"), default=False)
|
||||
moderator = models.ForeignKey(User, related_name="moderated_news", verbose_name=_("moderator"), null=True)
|
||||
moderator = models.ForeignKey(
|
||||
User, related_name="moderated_news", verbose_name=_("moderator"), null=True
|
||||
)
|
||||
|
||||
def is_owned_by(self, user):
|
||||
return user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID) or user == self.author
|
||||
@ -85,7 +91,7 @@ class News(models.Model):
|
||||
return self.is_moderated or user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('com:news_detail', kwargs={'news_id': self.id})
|
||||
return reverse("com:news_detail", kwargs={"news_id": self.id})
|
||||
|
||||
def get_full_url(self):
|
||||
return "https://%s%s" % (settings.SITH_URL, self.get_absolute_url())
|
||||
@ -95,15 +101,28 @@ class News(models.Model):
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(News, self).save(*args, **kwargs)
|
||||
for u in RealGroup.objects.filter(id=settings.SITH_GROUP_COM_ADMIN_ID).first().users.all():
|
||||
Notification(user=u, url=reverse("com:news_admin_list"),
|
||||
type="NEWS_MODERATION", param="1").save()
|
||||
for u in (
|
||||
RealGroup.objects.filter(id=settings.SITH_GROUP_COM_ADMIN_ID)
|
||||
.first()
|
||||
.users.all()
|
||||
):
|
||||
Notification(
|
||||
user=u,
|
||||
url=reverse("com:news_admin_list"),
|
||||
type="NEWS_MODERATION",
|
||||
param="1",
|
||||
).save()
|
||||
|
||||
|
||||
def news_notification_callback(notif):
|
||||
count = News.objects.filter(
|
||||
Q(dates__start_date__gt=timezone.now(), is_moderated=False) |
|
||||
Q(type="NOTICE", is_moderated=False)
|
||||
).distinct().count()
|
||||
count = (
|
||||
News.objects.filter(
|
||||
Q(dates__start_date__gt=timezone.now(), is_moderated=False)
|
||||
| Q(type="NOTICE", is_moderated=False)
|
||||
)
|
||||
.distinct()
|
||||
.count()
|
||||
)
|
||||
if count:
|
||||
notif.viewed = False
|
||||
notif.param = "%s" % count
|
||||
@ -111,6 +130,7 @@ def news_notification_callback(notif):
|
||||
else:
|
||||
notif.viewed = True
|
||||
|
||||
|
||||
class NewsDate(models.Model):
|
||||
"""
|
||||
A date class, useful for weekly events, or for events that just have no date
|
||||
@ -118,9 +138,10 @@ class NewsDate(models.Model):
|
||||
This class allows more flexibilty managing the dates related to a news, particularly when this news is weekly, since
|
||||
we don't have to make copies
|
||||
"""
|
||||
|
||||
news = models.ForeignKey(News, related_name="dates", verbose_name=_("news_date"))
|
||||
start_date = models.DateTimeField(_('start_date'), null=True, blank=True)
|
||||
end_date = models.DateTimeField(_('end_date'), null=True, blank=True)
|
||||
start_date = models.DateTimeField(_("start_date"), null=True, blank=True)
|
||||
end_date = models.DateTimeField(_("end_date"), null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return "%s: %s - %s" % (self.news.title, self.start_date, self.end_date)
|
||||
@ -130,6 +151,7 @@ class Weekmail(models.Model):
|
||||
"""
|
||||
The weekmail class
|
||||
"""
|
||||
|
||||
title = models.CharField(_("title"), max_length=64, blank=True)
|
||||
intro = models.TextField(_("intro"), blank=True)
|
||||
joke = models.TextField(_("joke"), blank=True)
|
||||
@ -138,16 +160,21 @@ class Weekmail(models.Model):
|
||||
sent = models.BooleanField(_("sent"), default=False)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-id']
|
||||
ordering = ["-id"]
|
||||
|
||||
def send(self):
|
||||
dest = [i[0] for i in Preferences.objects.filter(receive_weekmail=True).values_list('user__email')]
|
||||
dest = [
|
||||
i[0]
|
||||
for i in Preferences.objects.filter(receive_weekmail=True).values_list(
|
||||
"user__email"
|
||||
)
|
||||
]
|
||||
with transaction.atomic():
|
||||
email = EmailMultiAlternatives(
|
||||
subject=self.title,
|
||||
body=self.render_text(),
|
||||
from_email=settings.SITH_COM_EMAIL,
|
||||
to=Sith.objects.first().weekmail_destinations.split(' '),
|
||||
to=Sith.objects.first().weekmail_destinations.split(" "),
|
||||
bcc=dest,
|
||||
)
|
||||
email.attach_alternative(self.render_html(), "text/html")
|
||||
@ -157,14 +184,14 @@ class Weekmail(models.Model):
|
||||
Weekmail().save()
|
||||
|
||||
def render_text(self):
|
||||
return render(None, "com/weekmail_renderer_text.jinja", context={
|
||||
'weekmail': self,
|
||||
}).content.decode('utf-8')
|
||||
return render(
|
||||
None, "com/weekmail_renderer_text.jinja", context={"weekmail": self}
|
||||
).content.decode("utf-8")
|
||||
|
||||
def render_html(self):
|
||||
return render(None, "com/weekmail_renderer_html.jinja", context={
|
||||
'weekmail': self,
|
||||
}).content.decode('utf-8')
|
||||
return render(
|
||||
None, "com/weekmail_renderer_html.jinja", context={"weekmail": self}
|
||||
).content.decode("utf-8")
|
||||
|
||||
def get_banner(self):
|
||||
return "http://" + settings.SITH_URL + static("com/img/weekmail_bannerA18.jpg")
|
||||
@ -180,12 +207,18 @@ class Weekmail(models.Model):
|
||||
|
||||
|
||||
class WeekmailArticle(models.Model):
|
||||
weekmail = models.ForeignKey(Weekmail, related_name="articles", verbose_name=_("weekmail"), null=True)
|
||||
weekmail = models.ForeignKey(
|
||||
Weekmail, related_name="articles", verbose_name=_("weekmail"), null=True
|
||||
)
|
||||
title = models.CharField(_("title"), max_length=64)
|
||||
content = models.TextField(_("content"))
|
||||
author = models.ForeignKey(User, related_name="owned_weekmail_articles", verbose_name=_("author"))
|
||||
club = models.ForeignKey(Club, related_name="weekmail_articles", verbose_name=_("club"))
|
||||
rank = models.IntegerField(_('rank'), default=-1)
|
||||
author = models.ForeignKey(
|
||||
User, related_name="owned_weekmail_articles", verbose_name=_("author")
|
||||
)
|
||||
club = models.ForeignKey(
|
||||
Club, related_name="weekmail_articles", verbose_name=_("club")
|
||||
)
|
||||
rank = models.IntegerField(_("rank"), default=-1)
|
||||
|
||||
def is_owned_by(self, user):
|
||||
return user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID)
|
||||
@ -199,7 +232,9 @@ class Screen(models.Model):
|
||||
|
||||
def active_posters(self):
|
||||
now = timezone.now()
|
||||
return self.posters.filter(is_moderated=True, date_begin__lte=now).filter(Q(date_end__isnull=True) | Q(date_end__gte=now))
|
||||
return self.posters.filter(is_moderated=True, date_begin__lte=now).filter(
|
||||
Q(date_end__isnull=True) | Q(date_end__gte=now)
|
||||
)
|
||||
|
||||
def is_owned_by(self, user):
|
||||
return user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID)
|
||||
@ -209,21 +244,40 @@ class Screen(models.Model):
|
||||
|
||||
|
||||
class Poster(models.Model):
|
||||
name = models.CharField(_("name"), blank=False, null=False, max_length=128, default="")
|
||||
name = models.CharField(
|
||||
_("name"), blank=False, null=False, max_length=128, default=""
|
||||
)
|
||||
file = models.ImageField(_("file"), null=False, upload_to="com/posters")
|
||||
club = models.ForeignKey(Club, related_name="posters", verbose_name=_("club"), null=False)
|
||||
club = models.ForeignKey(
|
||||
Club, related_name="posters", verbose_name=_("club"), null=False
|
||||
)
|
||||
screens = models.ManyToManyField(Screen, related_name="posters")
|
||||
date_begin = models.DateTimeField(blank=False, null=False, default=timezone.now)
|
||||
date_end = models.DateTimeField(blank=True, null=True)
|
||||
display_time = models.IntegerField(_("display time"), blank=False, null=False, default=15)
|
||||
display_time = models.IntegerField(
|
||||
_("display time"), blank=False, null=False, default=15
|
||||
)
|
||||
is_moderated = models.BooleanField(_("is moderated"), default=False)
|
||||
moderator = models.ForeignKey(User, related_name="moderated_posters", verbose_name=_("moderator"), null=True, blank=True)
|
||||
moderator = models.ForeignKey(
|
||||
User,
|
||||
related_name="moderated_posters",
|
||||
verbose_name=_("moderator"),
|
||||
null=True,
|
||||
blank=True,
|
||||
)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.is_moderated:
|
||||
for u in RealGroup.objects.filter(id=settings.SITH_GROUP_COM_ADMIN_ID).first().users.all():
|
||||
Notification(user=u, url=reverse("com:poster_moderate_list"),
|
||||
type="POSTER_MODERATION").save()
|
||||
for u in (
|
||||
RealGroup.objects.filter(id=settings.SITH_GROUP_COM_ADMIN_ID)
|
||||
.first()
|
||||
.users.all()
|
||||
):
|
||||
Notification(
|
||||
user=u,
|
||||
url=reverse("com:poster_moderate_list"),
|
||||
type="POSTER_MODERATION",
|
||||
).save()
|
||||
return super(Poster, self).save(*args, **kwargs)
|
||||
|
||||
def clean(self, *args, **kwargs):
|
||||
@ -231,7 +285,9 @@ class Poster(models.Model):
|
||||
raise ValidationError(_("Begin date should be before end date"))
|
||||
|
||||
def is_owned_by(self, user):
|
||||
return user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID) or Club.objects.filter(id__in=user.clubs_with_rights)
|
||||
return user.is_in_group(
|
||||
settings.SITH_GROUP_COM_ADMIN_ID
|
||||
) or Club.objects.filter(id__in=user.clubs_with_rights)
|
||||
|
||||
def can_be_moderated_by(self, user):
|
||||
return user.is_in_group(settings.SITH_GROUP_COM_ADMIN_ID)
|
||||
|
Reference in New Issue
Block a user