Exemple #1
0
def feedback(request):
    if request.method == "POST":
        form = FeedbackForm(request.POST)
        if form.is_valid():
            context = {'user': request.user}

            if not request.user.is_authenticated:
                context['email'] = form.cleaned_data.get('email', None)
            context['message'] = form.cleaned_data['message']
            context['name'] = form.cleaned_data.get('name', None)

            recipients = [(adm.username, adm.email)
                          for adm in User.objects.filter(is_superuser=True)]

            send_email(
                settings.EMAIL_SUBJECT_PREFIX +
                _("Feedback message from %(site_name)s") %
                {'site_name': settings.APP_SHORT_NAME}, recipients,
                "notifications/feedback.html", context)

            msg = _('Thanks for the feedback!')
            request.user.message_set.create(message=msg)
            return HttpResponseRedirect(get_next_url(request))
    else:
        form = FeedbackForm(initial={'next': get_next_url(request)})

    return render_to_response('feedback.html', {'form': form},
                              context_instance=RequestContext(request))
Exemple #2
0
def request_temp_login(request):
    if request.method == 'POST':
        form = TemporaryLoginRequestForm(request.POST)

        if form.is_valid():
            user = form.user_cache

            try:
                hash = get_object_or_404(ValidationHash, user=user, type='templogin')
                if hash.expiration < datetime.datetime.now():
                    hash.delete()
                    return request_temp_login(request)
            except:
                hash = ValidationHash.objects.create_new(user, 'templogin', [user.id])

            send_email(_("Temporary login link"), [(user.username, user.email)], "auth/temp_login_email.html", {
                'temp_login_code': hash,
                'user': user
            })

            request.user.message_set.create(message=_("An email has been sent with your temporary login key"))

            return HttpResponseRedirect(reverse('index'))
    else:
        form = TemporaryLoginRequestForm()

    return render_to_response(
            'auth/temp_login_request.html', {'form': form}, 
            context_instance=RequestContext(request))
Exemple #3
0
def request_temp_login(request):
    if request.method == 'POST':
        form = TemporaryLoginRequestForm(request.POST)

        if form.is_valid():
            user = form.user_cache

            try:
                hash = get_object_or_404(ValidationHash, user=user, type='templogin')
                if hash.expiration < datetime.datetime.now():
                    hash.delete()
                    return request_temp_login(request)
            except:
                hash = ValidationHash.objects.create_new(user, 'templogin', [user.id])

            send_email(_("Temporary login link"), [(user.username, user.email)], "auth/temp_login_email.html", {
                'temp_login_code': hash,
                'user': user
            })

            request.user.message_set.create(message=_("An email has been sent with your temporary login key"))

            return HttpResponseRedirect(reverse('index'))
    else:
        form = TemporaryLoginRequestForm()

    return render_to_response(
            'auth/temp_login_request.html', {'form': form}, 
            context_instance=RequestContext(request))
Exemple #4
0
def question_posted(instance, **kwargs):
    question = instance

    subscribers = User.objects.values('email', 'username').filter(
            Q(subscription_settings__enable_notifications=True, subscription_settings__new_question='i') |
            (Q(subscription_settings__new_question_watched_tags='i') &
              Q(marked_tags__name__in=question.tagnames.split(' ')) &
              Q(tag_selections__reason='good'))
    ).exclude(id=question.author.id).distinct()

    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("New question on %(app_name)s") % dict(app_name=settings.APP_SHORT_NAME),
               recipients, "notifications/newquestion.html", {
        'question': question,
    })

    if question.author.subscription_settings.questions_asked:
        subscription = QuestionSubscription(question=question, user=question.author)
        subscription.save()

    new_subscribers = User.objects.filter(
            Q(subscription_settings__all_questions=True) |
            Q(subscription_settings__all_questions_watched_tags=True,
                    marked_tags__name__in=question.tagnames.split(' '),
                    tag_selections__reason='good'))

    for user in new_subscribers:
        create_subscription_if_not_exists(question, user)
Exemple #5
0
def question_posted(sender, instance, **kwargs):
    question = instance.content_object

    subscribers = User.objects.values('email', 'username').filter(
            Q(subscription_settings__enable_notifications=True, subscription_settings__new_question='i') |
            (Q(subscription_settings__new_question_watched_tags='i') &
              Q(marked_tags__name__in=question.tagnames.split(' ')) &
              Q(tag_selections__reason='good'))
    ).exclude(id=question.author.id)

    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("New question on %s") % settings.APP_SHORT_NAME,
               recipients, "notifications/newquestion.html", {
        'question': question,
    })

    if question.author.subscription_settings.questions_asked:
        subscription = QuestionSubscription(question=question, user=question.author)
        subscription.save()

    new_subscribers = User.objects.filter(
            Q(subscription_settings__all_questions=True) |
            Q(subscription_settings__all_questions_watched_tags=True,
                    marked_tags__name__in=question.tagnames.split(' '),
                    tag_selections__reason='good'))

    for user in new_subscribers:
        create_subscription_if_not_exists(question, user)
Exemple #6
0
def answer_posted(instance, **kwargs):
    answer = instance
    question = answer.question

    subscribers = (
        question.subscribers.values("email", "username")
        .filter(
            subscription_settings__enable_notifications=True,
            subscription_settings__notify_answers=True,
            subscription_settings__subscribed_questions="i",
        )
        .exclude(id=answer.author.id)
        .distinct()
    )
    recipients = create_recipients_dict(subscribers)

    send_email(
        settings.EMAIL_SUBJECT_PREFIX + _("New answer to '%(question_title)s'") % dict(question_title=question.title),
        recipients,
        "notifications/newanswer.html",
        {"question": question, "answer": answer},
    )

    if answer.author.subscription_settings.questions_answered:
        create_subscription_if_not_exists(question, answer.author)
Exemple #7
0
def member_joined(action, new):
    subscribers = User.objects.values('email', 'username').filter(
            subscription_settings__enable_notifications=True,
            subscription_settings__member_joins='i'
    ).exclude(id=action.user.id).distinct()

    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("%(username)s is a new member on %(app_name)s") % dict(username=action.user.username, app_name=settings.APP_SHORT_NAME),
               recipients, "notifications/newmember.html", {
        'newmember': action.user,
    }, threaded=False)
Exemple #8
0
def answer_accepted(action, new):
    question = action.node.question

    subscribers = question.subscribers.values('email', 'username').filter(
            subscription_settings__enable_notifications=True,
            subscription_settings__notify_accepted=True,
            subscription_settings__subscribed_questions='i'
    ).exclude(id=action.node.accepted.by.id).distinct()
    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("An answer to '%(question_title)s' was accepted") % dict(question_title=question.title),
               recipients, "notifications/answeraccepted.html", {
        'question': question,
        'answer': action.node
    }, threaded=False)
Exemple #9
0
def answer_accepted(sender, instance, **kwargs):
    answer = instance.content_object
    question = answer.question

    subscribers = question.subscribers.values('email', 'username').filter(
            subscription_settings__enable_notifications=True,
            subscription_settings__notify_accepted=True,
            subscription_settings__subscribed_questions='i'
    ).exclude(id=question.author.id)
    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("An answer to '%s' was accepted") % question.title,
               recipients, "notifications/answeraccepted.html", {
        'question': question,
        'answer': answer
    })
Exemple #10
0
def answer_accepted(instance, created, **kwargs):
    if not created and 'accepted' in instance.get_dirty_fields() and instance.accepted:
        question = instance.question

        subscribers = question.subscribers.values('email', 'username').filter(
                subscription_settings__enable_notifications=True,
                subscription_settings__notify_accepted=True,
                subscription_settings__subscribed_questions='i'
        ).exclude(id=instance.accepted_by.id).distinct()
        recipients = create_recipients_dict(subscribers)

        send_email(settings.EMAIL_SUBJECT_PREFIX + _("An answer to '%(question_title)s' was accepted") % dict(question_title=question.title),
                   recipients, "notifications/answeraccepted.html", {
            'question': question,
            'answer': instance
        })
Exemple #11
0
def answer_accepted(instance, created, **kwargs):
    if not created and 'accepted' in instance.get_dirty_fields() and instance.accepted:
        question = instance.question

        subscribers = question.subscribers.values('email', 'username').filter(
                subscription_settings__enable_notifications=True,
                subscription_settings__notify_accepted=True,
                subscription_settings__subscribed_questions='i'
        ).exclude(id=instance.accepted_by.id).distinct()
        recipients = create_recipients_dict(subscribers)

        send_email(settings.EMAIL_SUBJECT_PREFIX + _("An answer to '%(question_title)s' was accepted") % dict(question_title=question.title),
                   recipients, "notifications/answeraccepted.html", {
            'question': question,
            'answer': instance
        })
Exemple #12
0
def member_joined(sender, instance, created, **kwargs):
    if not created:
        return
        
    subscribers = User.objects.values('email', 'username').filter(
            subscription_settings__enable_notifications=True,
            subscription_settings__member_joins='i'
    ).exclude(id=instance.id).distinct()

    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("%(username)s is a new member on %(app_name)s") % dict(username=instance.username, app_name=settings.APP_SHORT_NAME),
               recipients, "notifications/newmember.html", {
        'newmember': instance,
    })

    sub_settings = SubscriptionSettings(user=instance)
    sub_settings.save()
Exemple #13
0
def member_joined(sender, instance, **kwargs):
    if not instance._is_new:
        return
        
    subscribers = User.objects.values('email', 'username').filter(
            subscription_settings__enable_notifications=True,
            subscription_settings__member_joins='i'
    ).exclude(id=instance.id)

    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("%s is a new member on %s") % (instance.username, settings.APP_SHORT_NAME),
               recipients, "notifications/newmember.html", {
        'newmember': instance,
    })

    sub_settings = SubscriptionSettings(user=instance)
    sub_settings.save()
Exemple #14
0
def answer_posted(action, new):
    answer = action.node
    question = answer.question

    subscribers = question.subscribers.values('email', 'username').filter(
            subscription_settings__enable_notifications=True,
            subscription_settings__notify_answers=True,
            subscription_settings__subscribed_questions='i'
    ).exclude(id=answer.author.id).distinct()
    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("New answer to '%(question_title)s'") % dict(question_title=question.title),
               recipients, "notifications/newanswer.html", {
        'question': question,
        'answer': answer
    }, threaded=False)

    if answer.author.subscription_settings.questions_answered:
        create_subscription_if_not_exists(question, answer.author)
Exemple #15
0
def answer_posted(instance, **kwargs):
    answer = instance
    question = answer.question

    subscribers = question.subscribers.values('email', 'username').filter(
            subscription_settings__enable_notifications=True,
            subscription_settings__notify_answers=True,
            subscription_settings__subscribed_questions='i'
    ).exclude(id=answer.author.id).distinct()
    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("New answer to '%(question_title)s'") % dict(question_title=question.title),
               recipients, "notifications/newanswer.html", {
        'question': question,
        'answer': answer
    })

    if answer.author.subscription_settings.questions_answered:
        create_subscription_if_not_exists(question, answer.author)
Exemple #16
0
def answer_posted(sender, instance, **kwargs):
    answer = instance.content_object
    question = answer.question

    subscribers = question.subscribers.values('email', 'username').filter(
            subscription_settings__enable_notifications=True,
            subscription_settings__notify_answers=True,
            subscription_settings__subscribed_questions='i'
    ).exclude(id=answer.author.id)
    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("New answer to '%s'") % question.title,
               recipients, "notifications/newanswer.html", {
        'question': question,
        'answer': answer
    })

    if answer.author.subscription_settings.questions_answered:
        create_subscription_if_not_exists(question, answer.author)
Exemple #17
0
def comment_posted(instance, **kwargs):
    comment = instance
    post = comment.content_object

    if post.__class__ == Question:
        question = post
    else:
        question = post.question

    subscribers = question.subscribers.values("email", "username")

    q_filter = Q(subscription_settings__notify_comments=True) | Q(
        subscription_settings__notify_comments_own_post=True, id=post.author.id
    )

    inreply = re.search("@\w+", comment.comment)
    if inreply is not None:
        q_filter = q_filter | Q(
            subscription_settings__notify_reply_to_comments=True,
            username__istartswith=inreply.group(0)[1:],
            comments__object_id=post.id,
            comments__content_type=ContentType.objects.get_for_model(post.__class__),
        )

    subscribers = (
        subscribers.filter(
            q_filter, subscription_settings__subscribed_questions="i", subscription_settings__enable_notifications=True
        )
        .exclude(id=comment.user.id)
        .distinct()
    )

    recipients = create_recipients_dict(subscribers)

    send_email(
        settings.EMAIL_SUBJECT_PREFIX + _("New comment on %(question_title)s") % dict(question_title=question.title),
        recipients,
        "notifications/newcomment.html",
        {"comment": comment, "post": post, "question": question},
    )

    if comment.user.subscription_settings.questions_commented:
        create_subscription_if_not_exists(question, comment.user)
Exemple #18
0
def comment_posted(sender, instance, **kwargs):
    comment = instance.content_object
    post = comment.content_object

    if post.__class__ == Question:
        question = post
    else:
        question = post.question

    subscribers = question.subscribers.values('email', 'username')

    q_filter = Q(subscription_settings__notify_comments=True) | Q(
        subscription_settings__notify_comments_own_post=True,
        id=post.author.id)

    #inreply = re.search('@\w+', comment.comment)
    #if inreply is not None:
    #    q_filter = q_filter | Q(subscription_settings__notify_reply_to_comments=True,
    #                            username__istartswith=inreply.group(0)[1:],
    #                            comments__object_id=post.id,
    #                            comments__content_type=ContentType.objects.get_for_model(post.__class__)
    #                            )

    subscribers = subscribers.filter(
        q_filter,
        subscription_settings__subscribed_questions='i',
        subscription_settings__enable_notifications=True).exclude(
            id=comment.user.id)

    recipients = create_recipients_dict(subscribers)

    send_email(
        settings.EMAIL_SUBJECT_PREFIX +
        _("New comment on %s") % question.title, recipients,
        "notifications/newcomment.html", {
            'comment': comment,
            'post': post,
            'question': question,
        })

    if comment.user.subscription_settings.questions_commented:
        create_subscription_if_not_exists(question, comment.user)
Exemple #19
0
def question_posted(instance, **kwargs):
    question = instance

    subscribers = (
        User.objects.values("email", "username")
        .filter(
            Q(subscription_settings__enable_notifications=True, subscription_settings__new_question="i")
            | (
                Q(subscription_settings__new_question_watched_tags="i")
                & Q(marked_tags__name__in=question.tagnames.split(" "))
                & Q(tag_selections__reason="good")
            )
        )
        .exclude(id=question.author.id)
        .distinct()
    )

    recipients = create_recipients_dict(subscribers)

    send_email(
        settings.EMAIL_SUBJECT_PREFIX + _("New question on %(app_name)s") % dict(app_name=settings.APP_SHORT_NAME),
        recipients,
        "notifications/newquestion.html",
        {"question": question},
    )

    if question.author.subscription_settings.questions_asked:
        subscription = QuestionSubscription(question=question, user=question.author)
        subscription.save()

    new_subscribers = User.objects.filter(
        Q(subscription_settings__all_questions=True)
        | Q(
            subscription_settings__all_questions_watched_tags=True,
            marked_tags__name__in=question.tagnames.split(" "),
            tag_selections__reason="good",
        )
    )

    for user in new_subscribers:
        create_subscription_if_not_exists(question, user)
Exemple #20
0
def feedback(request):
    if request.method == "POST":
        form = FeedbackForm(request.POST)
        if form.is_valid():
            context = {'user': request.user}

            if not request.user.is_authenticated:
                context['email'] = form.cleaned_data.get('email',None)
            context['message'] = form.cleaned_data['message']
            context['name'] = form.cleaned_data.get('name',None)

            recipients = [(adm.username, adm.email) for adm in User.objects.filter(is_superuser=True)]

            send_email(settings.EMAIL_SUBJECT_PREFIX + _("Feedback message from %(site_name)s") % {'site_name': settings.APP_SHORT_NAME},
                       recipients, "notifications/feedback.html", context)
            
            msg = _('Thanks for the feedback!')
            request.user.message_set.create(message=msg)
            return HttpResponseRedirect(get_next_url(request))
    else:
        form = FeedbackForm(initial={'next':get_next_url(request)})

    return render_to_response('feedback.html', {'form': form}, context_instance=RequestContext(request))
Exemple #21
0
def comment_posted(instance, **kwargs):
    comment = instance
    post = comment.content_object

    if post.__class__ == Question:
        question = post
    else:
        question = post.question

    subscribers = question.subscribers.values('email', 'username')

    q_filter = Q(subscription_settings__notify_comments=True) | Q(subscription_settings__notify_comments_own_post=True, id=post.author.id)

    inreply = re.search('@\w+', comment.comment)
    if inreply is not None:
        q_filter = q_filter | Q(subscription_settings__notify_reply_to_comments=True,
                                username__istartswith=inreply.group(0)[1:],
                                comments__object_id=post.id,
                                comments__content_type=ContentType.objects.get_for_model(post.__class__)
                                )

    subscribers = subscribers.filter(
            q_filter, subscription_settings__subscribed_questions='i', subscription_settings__enable_notifications=True
    ).exclude(id=comment.user.id).distinct()

    recipients = create_recipients_dict(subscribers)

    send_email(settings.EMAIL_SUBJECT_PREFIX + _("New comment on %(question_title)s") % dict(question_title=question.title),
               recipients, "notifications/newcomment.html", {
                'comment': comment,
                'post': post,
                'question': question,
    })

    if comment.user.subscription_settings.questions_commented:
        create_subscription_if_not_exists(question, comment.user)
Exemple #22
0
def member_joined(sender, instance, created, **kwargs):
    if not created:
        return

    subscribers = (
        User.objects.values("email", "username")
        .filter(subscription_settings__enable_notifications=True, subscription_settings__member_joins="i")
        .exclude(id=instance.id)
        .distinct()
    )

    recipients = create_recipients_dict(subscribers)

    send_email(
        settings.EMAIL_SUBJECT_PREFIX
        + _("%(username)s is a new member on %(app_name)s")
        % dict(username=instance.username, app_name=settings.APP_SHORT_NAME),
        recipients,
        "notifications/newmember.html",
        {"newmember": instance},
    )

    sub_settings = SubscriptionSettings(user=instance)
    sub_settings.save()
Exemple #23
0
def send_validation_email(user):
    hash = ValidationHash.objects.create_new(user, 'email', [user.email])
    send_email(_("Email Validation"), [(user.username, user.email)], "auth/email_validation.html", {
        'validation_code': hash,
        'user': user
    })
Exemple #24
0
def send_validation_email(user):
    hash = ValidationHash.objects.create_new(user, 'email', [user.email])
    send_email(_("Email Validation"), [(user.username, user.email)], "auth/email_validation.html", {
        'validation_code': hash,
        'user': user
    })
Exemple #25
0
    def send_digest(self, name, char_in_db, control_date):
        new_questions, question_records = self.prepare_activity(control_date)
        new_users = User.objects.filter(date_joined__gt=control_date)

        digest_subject = settings.EMAIL_SUBJECT_PREFIX + _('Daily digest')

        users = User.objects.filter(
            subscription_settings__enable_notifications=True)

        msgs = []

        for u in users:
            context = {
                'user': u,
                'digest_type': name,
            }

            if u.subscription_settings.member_joins == char_in_db:
                context['new_users'] = new_users
            else:
                context['new_users'] = False

            if u.subscription_settings.subscribed_questions == char_in_db:
                activity_in_subscriptions = []

                for id, r in question_records.items():
                    try:
                        subscription = QuestionSubscription.objects.get(
                            question=r.question, user=u)

                        record = r.get_activity_since(subscription.last_view)

                        if not u.subscription_settings.notify_answers:
                            del record['answers']

                        if not u.subscription_settings.notify_comments:
                            if u.subscription_settings.notify_comments_own_post:
                                record.comments = [
                                    a for a in record.comments if
                                    a.content_object.content_object.author == u
                                ]
                                record['own_comments_only'] = True
                            else:
                                del record['comments']

                        if not u.subscription_settings.notify_accepted:
                            del record['accepted']

                        if record.get('answers', False) or record.get(
                                'comments', False) or record.get(
                                    'accepted', False):
                            activity_in_subscriptions.append({
                                'question': r.question,
                                'activity': record
                            })
                    except:
                        pass

                context[
                    'activity_in_subscriptions'] = activity_in_subscriptions
            else:
                context['activity_in_subscriptions'] = False

            if u.subscription_settings.new_question == char_in_db:
                context['new_questions'] = new_questions
                context['watched_tags_only'] = False
            elif u.subscription_settings.new_question_watched_tags == char_in_db:
                context['new_questions'] = [
                    q for q in new_questions
                    if q.tags.filter(id__in=u.marked_tags.filter(
                        user_selections__reason='good')).count() > 0
                ]
                context['watched_tags_only'] = True
            else:
                context['new_questions'] = False

            if context['new_users'] or context[
                    'activity_in_subscriptions'] or context['new_questions']:
                send_email(digest_subject, (u.username, u.email),
                           "notifications/digest.html",
                           context,
                           threaded=False)
Exemple #26
0
    def send_digest(self, name, char_in_db, control_date):
        
        new_questions, question_records = self.prepare_activity(control_date)
        new_users = User.objects.filter(date_joined__gt=control_date)

        digest_subject = settings.EMAIL_SUBJECT_PREFIX + _('Daily digest')

        users = User.objects.filter(subscription_settings__enable_notifications=True)

        msgs = []

        for u in users:
            context = {
                'user': u,
                'digest_type': name,
            }

            if u.subscription_settings.member_joins == char_in_db:
                context['new_users'] = new_users
            else:
                context['new_users'] = False

            if u.subscription_settings.subscribed_questions == char_in_db:
                activity_in_subscriptions = []

                for id, r in question_records.items():
                    try:
                        subscription = QuestionSubscription.objects.get(question=r.question, user=u)

                        record = r.get_activity_since(subscription.last_view)

                        if not u.subscription_settings.notify_answers:
                            del record['answers']

                        if not u.subscription_settings.notify_comments:
                            if u.subscription_settings.notify_comments_own_post:
                                record.comments = [a for a in record.comments if a.user == u]
                                record['own_comments_only'] = True
                            else:
                                del record['comments']

                        if not u.subscription_settings.notify_accepted:
                            del record['accepted']

                        if record.get('answers', False) or record.get('comments', False) or record.get('accepted', False):
                            activity_in_subscriptions.append({'question': r.question, 'activity': record})
                    except:
                        pass

                context['activity_in_subscriptions'] = activity_in_subscriptions
            else:
                context['activity_in_subscriptions'] = False


            if u.subscription_settings.new_question == char_in_db:
                context['new_questions'] = new_questions
                context['watched_tags_only'] = False
            elif u.subscription_settings.new_question_watched_tags == char_in_db:
                context['new_questions'] = [q for q in new_questions if
                                            q.tags.filter(id__in=u.marked_tags.filter(user_selections__reason='good')).count() > 0]
                context['watched_tags_only'] = True
            else:
                context['new_questions'] = False

            if context['new_users'] or context['activity_in_subscriptions'] or context['new_questions']:
                send_email(digest_subject, [(u.username, u.email)], "notifications/digest.html", context, threaded=False)