mirror of
				https://github.com/ae-utbm/sith.git
				synced 2025-11-04 02:53:06 +00:00 
			
		
		
		
	core, com: make permanent notifications for news to moderate
This needs to be made for other stuff, like the SAS or the files... Signed-off-by: Skia <skia@libskia.so>
This commit is contained in:
		@@ -24,13 +24,15 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from django.shortcuts import render
 | 
					from django.shortcuts import render
 | 
				
			||||||
from django.db import models, transaction
 | 
					from django.db import models, transaction
 | 
				
			||||||
 | 
					from django.db.models import Q
 | 
				
			||||||
from django.utils.translation import ugettext_lazy as _
 | 
					from django.utils.translation import ugettext_lazy as _
 | 
				
			||||||
 | 
					from django.utils import timezone
 | 
				
			||||||
from django.core.urlresolvers import reverse
 | 
					from django.core.urlresolvers import reverse
 | 
				
			||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
from django.contrib.staticfiles.templatetags.staticfiles import static
 | 
					from django.contrib.staticfiles.templatetags.staticfiles import static
 | 
				
			||||||
from django.core.mail import EmailMultiAlternatives
 | 
					from django.core.mail import EmailMultiAlternatives
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from core.models import User, Preferences
 | 
					from core.models import User, Preferences, RealGroup, Notification
 | 
				
			||||||
from club.models import Club
 | 
					from club.models import Club
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -82,6 +84,23 @@ class News(models.Model):
 | 
				
			|||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        return "%s: %s" % (self.type, self.title)
 | 
					        return "%s: %s" % (self.type, self.title)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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()
 | 
				
			||||||
 | 
					    if count:
 | 
				
			||||||
 | 
					        notif.viewed = False
 | 
				
			||||||
 | 
					        notif.param = "%s" % count
 | 
				
			||||||
 | 
					        notif.date = timezone.now()
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        notif.viewed = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class NewsDate(models.Model):
 | 
					class NewsDate(models.Model):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								core/migrations/0024_auto_20170906_1317.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								core/migrations/0024_auto_20170906_1317.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations, models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('core', '0023_auto_20170902_1226'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.AlterField(
 | 
				
			||||||
 | 
					            model_name='notification',
 | 
				
			||||||
 | 
					            name='type',
 | 
				
			||||||
 | 
					            field=models.CharField(choices=[('MAILING_MODERATION', 'A new mailing list needs to be moderated'), ('NEWS_MODERATION', 'There are %s fresh news to be moderated'), ('FILE_MODERATION', 'New files to be moderated'), ('SAS_MODERATION', 'New pictures/album to be moderated in the SAS'), ('NEW_PICTURES', "You've been identified on some pictures"), ('REFILLING', 'You just refilled of %s €'), ('SELLING', 'You just bought %s'), ('GENERIC', 'You have a notification')], verbose_name='type', default='GENERIC', max_length=32),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
@@ -21,6 +21,7 @@
 | 
				
			|||||||
# Place - Suite 330, Boston, MA 02111-1307, USA.
 | 
					# Place - Suite 330, Boston, MA 02111-1307, USA.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					import importlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.db import models
 | 
					from django.db import models
 | 
				
			||||||
from django.core.mail import send_mail
 | 
					from django.core.mail import send_mail
 | 
				
			||||||
@@ -1063,3 +1064,14 @@ class Notification(models.Model):
 | 
				
			|||||||
        if self.param:
 | 
					        if self.param:
 | 
				
			||||||
            return self.get_type_display() % self.param
 | 
					            return self.get_type_display() % self.param
 | 
				
			||||||
        return self.get_type_display()
 | 
					        return self.get_type_display()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def save(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        if not self.id and self.type in settings.SITH_PERMANENT_NOTIFICATIONS:
 | 
				
			||||||
 | 
					            old_notif = self.user.notifications.filter(type=self.type).last()
 | 
				
			||||||
 | 
					            if old_notif:
 | 
				
			||||||
 | 
					                mod_name, func_name = settings.SITH_PERMANENT_NOTIFICATIONS[self.type].rsplit('.',1)
 | 
				
			||||||
 | 
					                mod = importlib.import_module(mod_name)
 | 
				
			||||||
 | 
					                getattr(mod, func_name)(old_notif)
 | 
				
			||||||
 | 
					                old_notif.save()
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					        super(Notification, self).save(*args, **kwargs)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@ from django.http import JsonResponse
 | 
				
			|||||||
from django.core import serializers
 | 
					from django.core import serializers
 | 
				
			||||||
from django.contrib.auth.decorators import login_required
 | 
					from django.contrib.auth.decorators import login_required
 | 
				
			||||||
from django.views.generic import ListView, TemplateView
 | 
					from django.views.generic import ListView, TemplateView
 | 
				
			||||||
 | 
					from django.conf import settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,15 +51,18 @@ class NotificationList(ListView):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def get_queryset(self):
 | 
					    def get_queryset(self):
 | 
				
			||||||
        if 'see_all' in self.request.GET.keys():
 | 
					        if 'see_all' in self.request.GET.keys():
 | 
				
			||||||
            self.request.user.notifications.update(viewed=True)
 | 
					            for n in self.request.user.notifications.all():
 | 
				
			||||||
 | 
					                n.viewed = True
 | 
				
			||||||
 | 
					                n.save()
 | 
				
			||||||
        return self.request.user.notifications.order_by('-date')[:20]
 | 
					        return self.request.user.notifications.order_by('-date')[:20]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def notification(request, notif_id):
 | 
					def notification(request, notif_id):
 | 
				
			||||||
    notif = Notification.objects.filter(id=notif_id).first()
 | 
					    notif = Notification.objects.filter(id=notif_id).first()
 | 
				
			||||||
    if notif:
 | 
					    if notif:
 | 
				
			||||||
        notif.viewed = True
 | 
					        if notif.type not in settings.SITH_PERMANENT_NOTIFICATIONS:
 | 
				
			||||||
        notif.save()
 | 
					            notif.viewed = True
 | 
				
			||||||
 | 
					            notif.save()
 | 
				
			||||||
        return redirect(notif.url)
 | 
					        return redirect(notif.url)
 | 
				
			||||||
    return redirect("/")
 | 
					    return redirect("/")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -551,7 +551,7 @@ SITH_LAUNDERETTE_PRICES = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SITH_NOTIFICATIONS = [
 | 
					SITH_NOTIFICATIONS = [
 | 
				
			||||||
    ('MAILING_MODERATION', _("A new mailing list needs to be moderated")),
 | 
					    ('MAILING_MODERATION', _("A new mailing list needs to be moderated")),
 | 
				
			||||||
    ('NEWS_MODERATION', _("A fresh new to be moderated")),
 | 
					    ('NEWS_MODERATION', _("There are %s fresh news to be moderated")),
 | 
				
			||||||
    ('FILE_MODERATION', _("New files to be moderated")),
 | 
					    ('FILE_MODERATION', _("New files to be moderated")),
 | 
				
			||||||
    ('SAS_MODERATION', _("New pictures/album to be moderated in the SAS")),
 | 
					    ('SAS_MODERATION', _("New pictures/album to be moderated in the SAS")),
 | 
				
			||||||
    ('NEW_PICTURES', _("You've been identified on some pictures")),
 | 
					    ('NEW_PICTURES', _("You've been identified on some pictures")),
 | 
				
			||||||
@@ -560,6 +560,13 @@ SITH_NOTIFICATIONS = [
 | 
				
			|||||||
    ('GENERIC', _("You have a notification")),
 | 
					    ('GENERIC', _("You have a notification")),
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The keys are the notification names as found in SITH_NOTIFICATIONS, and the
 | 
				
			||||||
 | 
					# values are the callback function to update the notifs.
 | 
				
			||||||
 | 
					# The callback must take the notif object as first and single argument.
 | 
				
			||||||
 | 
					SITH_PERMANENT_NOTIFICATIONS = {
 | 
				
			||||||
 | 
					    'NEWS_MODERATION': 'com.models.news_notification_callback',
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SITH_QUICK_NOTIF = {
 | 
					SITH_QUICK_NOTIF = {
 | 
				
			||||||
    'qn_success': _("Success!"),
 | 
					    'qn_success': _("Success!"),
 | 
				
			||||||
    'qn_fail': _("Fail!"),
 | 
					    'qn_fail': _("Fail!"),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user