def handle(self, *args, **kwargs):
     if len(args) != 2:
         raise CommandError("Enter action {add|del} and username")
     action, username = args
     assert action in ('add', 'del')
     user = compat.get_user_model().objects.get(**{compat.get_username_field(): username})
     forums = Forum.objects.all()
     for forum in forums:
         forum.moderators.remove(user)
         if action == 'add':
             forum.moderators.add(user)
Exemple #2
0
 def handle(self, *args, **kwargs):
     if len(args) != 2:
         raise CommandError("Enter action {add|del} and username")
     action, username = args
     assert action in ('add', 'del')
     user = compat.get_user_model().objects.get(
         **{compat.get_username_field(): username})
     forums = Forum.objects.all()
     for forum in forums:
         forum.moderators.remove(user)
         if action == 'add':
             forum.moderators.add(user)
def get_pybb_profile(user):
    from pybb import defaults

    if not user.is_authenticated():
        if defaults.PYBB_ENABLE_ANONYMOUS_POST:
            user = get_user_model().objects.get(**{get_username_field(): defaults.PYBB_ANONYMOUS_USERNAME})
        else:
            raise ValueError(_('Can\'t get profile for anonymous user'))

    if defaults.PYBB_PROFILE_RELATED_NAME:
        return getattr(user, defaults.PYBB_PROFILE_RELATED_NAME)
    else:
        return user
Exemple #4
0
def get_pybb_profile(user):
    from pybb import defaults

    if not user.is_authenticated():
        if defaults.PYBB_ENABLE_ANONYMOUS_POST:
            user = get_user_model().objects.get(**{get_username_field(): defaults.PYBB_ANONYMOUS_USERNAME})
        else:
            raise ValueError(_('Can\'t get profile for anonymous user'))

    if defaults.PYBB_PROFILE_RELATED_NAME:
        return getattr(user, defaults.PYBB_PROFILE_RELATED_NAME)
    else:
        return user
Exemple #5
0
def send_notification(users, template, context=None):
    context = context or {}
    if not 'site' in context:
        context['site'] = Site.objects.get_current()
    old_lang = translation.get_language()
    from_email = settings.DEFAULT_FROM_EMAIL

    mails = []
    for user in users:
        if not getattr(util.get_pybb_profile(user), 'receive_emails', True):
            continue

        try:
            validate_email(user.email)
        except:
            # Invalid email
            continue

        if user.email == '*****@*****.**' % getattr(
                user, compat.get_username_field()):
            continue

        context['user'] = user

        lang = util.get_pybb_profile(user).language or settings.LANGUAGE_CODE
        translation.activate(lang)

        subject = render_to_string(
            'pybb/mail_templates/%s_subject.html' % template, context)
        # Email subject *must not* contain newlines
        subject = ''.join(subject.splitlines())
        context['subject'] = subject

        txt_message = render_to_string(
            'pybb/mail_templates/%s_body.html' % template, context)
        try:
            html_message = render_to_string(
                'pybb/mail_templates/%s_body-html.html' % template, context)
        except TemplateDoesNotExist as e:
            mails.append((subject, txt_message, from_email, [user.email]))
        else:
            mails.append(
                (subject, txt_message, from_email, [user.email], html_message))

    # Send mails
    send_mass_html_mail(mails, fail_silently=True)

    # Reactivate previous language
    translation.activate(old_lang)
Exemple #6
0
def notify_topic_subscribers(post):
    topic = post.topic
    if post != topic.head:
        old_lang = translation.get_language()

        # Define constants for templates rendering
        delete_url = reverse('pybb:delete_subscription', args=[post.topic.id])
        current_site = Site.objects.get_current()
        from_email = settings.DEFAULT_FROM_EMAIL

        subject = render_to_string(
            'pybb/mail_templates/subscription_email_subject.html', {
                'site': current_site,
                'post': post
            })
        # Email subject *must not* contain newlines
        subject = ''.join(subject.splitlines())

        mails = tuple()
        for user in topic.subscribers.exclude(pk=post.user.pk):
            try:
                validate_email(user.email)
            except:
                # Invalid email
                continue

            if user.email == '*****@*****.**' % getattr(
                    user, compat.get_username_field()):
                continue

            lang = util.get_pybb_profile(
                user).language or settings.LANGUAGE_CODE
            translation.activate(lang)

            message = render_to_string(
                'pybb/mail_templates/subscription_email_body.html', {
                    'site': current_site,
                    'post': post,
                    'delete_url': delete_url,
                    'user': user
                })
            mails += ((subject, message, from_email, [user.email]), )

        # Send mails
        send_mass_mail(mails, fail_silently=True)

        # Reactivate previous language
        translation.activate(old_lang)
Exemple #7
0
def send_notification(users, template, context=None):
    context = context or {}
    if not 'site' in context:
        context['site'] = Site.objects.get_current()
    old_lang = translation.get_language()
    from_email = settings.DEFAULT_FROM_EMAIL

    mails = []
    for user in users:
        if not getattr(util.get_pybb_profile(user), 'receive_emails', True):
            continue

        try:
            validate_email(user.email)
        except:
            # Invalid email
            continue

        if user.email == '*****@*****.**' % getattr(user, compat.get_username_field()):
            continue

        context['user'] = user

        lang = util.get_pybb_profile(user).language or settings.LANGUAGE_CODE
        translation.activate(lang)

        subject = render_to_string('pybb/mail_templates/%s_subject.html' % template, context)
        # Email subject *must not* contain newlines
        subject = ''.join(subject.splitlines())
        context['subject'] = subject

        txt_message = render_to_string('pybb/mail_templates/%s_body.html' % template, context)
        try:
            html_message = render_to_string('pybb/mail_templates/%s_body-html.html' % template, context)
        except TemplateDoesNotExist as e:
            mails.append((subject, txt_message, from_email, [user.email]))
        else:
            mails.append((subject, txt_message, from_email, [user.email], html_message))

    # Send mails
    send_mass_html_mail(mails, fail_silently=True)

    # Reactivate previous language
    translation.activate(old_lang)
Exemple #8
0
def notify_topic_subscribers(post):
    topic = post.topic
    if post != topic.head:
        old_lang = translation.get_language()

        # Define constants for templates rendering
        delete_url = reverse('pybb:delete_subscription', args=[post.topic.id])
        current_site = Site.objects.get_current()
        from_email = settings.DEFAULT_FROM_EMAIL

        subject = render_to_string('pybb/mail_templates/subscription_email_subject.html',
                                   {'site': current_site,
                                    'post': post})
        # Email subject *must not* contain newlines
        subject = ''.join(subject.splitlines())

        mails = tuple()
        for user in topic.subscribers.exclude(pk=post.user.pk):
            try:
                validate_email(user.email)
            except:
                # Invalid email
                continue

            if user.email == '*****@*****.**' % getattr(user, compat.get_username_field()):
                continue

            lang = util.get_pybb_profile(user).language or settings.LANGUAGE_CODE
            translation.activate(lang)

            message = render_to_string('pybb/mail_templates/subscription_email_body.html',
                                       {'site': current_site,
                                        'post': post,
                                        'delete_url': delete_url,
                                        'user': user})
            mails += ((subject, message, from_email, [user.email]),)

        # Send mails
        send_mass_mail(mails, fail_silently=True)

        # Reactivate previous language
        translation.activate(old_lang)
Exemple #9
0
from __future__ import unicode_literals
import re
import inspect

from django import forms
from django.core.exceptions import FieldError
from django.forms.models import inlineformset_factory, BaseInlineFormSet
from django.utils.translation import ugettext, ugettext_lazy
from django.utils.timezone import now as tznow

from pybb import compat, defaults, util
from pybb.models import Topic, Post, Attachment, PollAnswer


User = compat.get_user_model()
username_field = compat.get_username_field()


class AttachmentForm(forms.ModelForm):
    class Meta(object):
        model = Attachment
        fields = ('file', )

    def clean_file(self):
        if self.cleaned_data['file'].size > defaults.PYBB_ATTACHMENT_SIZE_LIMIT:
            raise forms.ValidationError(ugettext('Attachment is too big'))
        return self.cleaned_data['file']

AttachmentFormSet = inlineformset_factory(Post, Attachment, extra=1, form=AttachmentForm)

Exemple #10
0
 def get_absolute_url(self):
     return reverse(
         'pybb:user',
         kwargs={'username': getattr(self.user, get_username_field())})
Exemple #11
0
 def get_absolute_url(self):
     return reverse('pybb:user', kwargs={'username': getattr(self.user, get_username_field())})
Exemple #12
0
 def get_absolute_url(self):
     return reverse("pybb:user", kwargs={"username": getattr(self.user, get_username_field())})
 def get_results(self, request, term, page, context):
     username_field = get_username_field()
     lookup = {'user__{}__icontains'.format(username_field): term}
     results = get_pybb_profile_model().objects.filter(**lookup)\
         .values_list('user__id', 'user__{}'.format(username_field))
     return ('nil', False, results)
 def get_results(self, request, term, page, context):
     username_field = get_username_field()
     lookup = {'user__{}__icontains'.format(username_field): term}
     results = get_pybb_profile_model().objects.filter(**lookup)\
         .values_list('user__id', 'user__{}'.format(username_field))
     return ('nil', False, results)