import datetime
from forum.models import *
+from forum import settings
from django.db import models
from forum.utils.mail import send_template_email
from django.core.management.base import NoArgsCommand
-from forum.settings.email import EMAIL_DIGEST_CONTROL
+from forum.settings.email import EMAIL_DIGEST_FLAG
from django.utils import translation
import logging
SUB_QUESTION_LIST_LENGTH = 5
TRY_N_USER_TAGS = 5
-
-
class DigestQuestionsIndex(object):
def __init__(self, from_date):
self.from_date = from_date
except:
logging.error("Unable to set the locale in the send emails cron job")
- digest_control = EMAIL_DIGEST_CONTROL.value
+ digest_control = EMAIL_DIGEST_FLAG.value
if digest_control is None:
- digest_control = KeyValue(key='DIGEST_CONTROL', value={
+ digest_control = {
'LAST_DAILY': datetime.datetime.now() - datetime.timedelta(days=1),
'LAST_WEEKLY': datetime.datetime.now() - datetime.timedelta(days=1),
- })
+ }
+
+ from_date = digest_control['LAST_DAILY']
+ digest_control['LAST_DAILY'] = datetime.datetime.now()
+
+ EMAIL_DIGEST_FLAG.set_value(digest_control)
- from_date = digest_control.value['LAST_DAILY']
- digest_control.value['LAST_DAILY'] = datetime.datetime.now()
+ users = User.objects.filter(subscription_settings__enable_notifications=True,
+ subscription_settings__send_digest=True)
- EMAIL_DIGEST_CONTROL.set_value(digest_control)
+ # Send digest only to active users
+ if settings.SEND_DIGEST_ONLY_TO_ACTIVE_USERS:
+ users = users.filter(is_active=True)
+
+ # Send digest only to users with validated emails
+ if settings.SEND_DIGEST_ONLY_TO_VALIDATED_USERS:
+ users = users.filter(email_isvalid=True)
- users = User.objects.filter(subscription_settings__enable_notifications=True)
new_members = User.objects.filter(is_active=True, date_joined__gt=from_date).annotate(n_actions=models.Count('actions')).order_by('-n_actions')
new_member_count = new_members.count()
+ # The number of the flagged content for the day
+ flagged_count = Flag.objects.filter(flagged_at__gt=datetime.datetime.today()-datetime.timedelta(days=1)).count()
+
if new_member_count >= SHOW_N_MORE_ACTIVE_NEW_MEMBERS:
new_members = new_members[:SHOW_N_MORE_ACTIVE_NEW_MEMBERS]
show_all_users = True
digest = DigestQuestionsIndex(from_date)
+ if (not new_member_count) and (not digest.count):
+ return
+
send_template_email(users, "notifications/digest.html", locals())