def process_request(self, request): if request.user.is_authenticated(): try: # Here we try to load profile, but can get error # if user created during syncdb but profile model # under south control. (Like pybb.Profile). profile = util.get_pybb_profile(request.user) except ObjectDoesNotExist: # Ok, we should create new profile for this user # and grant permissions for add posts # It should be caused rarely, so we move import signal here # to prevent circular import from tendenci.apps.forums.signals import user_saved user_saved(request.user, created=True) profile = util.get_pybb_profile(request.user) if not profile.language: profile.language = translation.get_language_from_request(request) profile.save() request.session['django_language'] = profile.language translation.activate(profile.language) request.LANGUAGE_CODE = translation.get_language() # if Self Registration is on, users can post on forums per Ed. # assign the add_post perm if user doesn't have it. if get_setting('module', 'users', 'selfregistration'): if not request.user.has_perm('forums.add_post'): [perm] = Permission.objects.filter( content_type__app_label='forums', content_type__model='post', codename='add_post')[:1] or [None] if perm: request.user.user_permissions.add(perm)
def post_saved(instance, **kwargs): if not defaults.PYBB_DISABLE_NOTIFICATIONS: notify_topic_subscribers(instance) if util.get_pybb_profile(instance.user).autosubscribe and \ perms.may_subscribe_topic(instance.user, instance.topic): instance.topic.subscribers.add(instance.user) if kwargs['created']: profile = util.get_pybb_profile(instance.user) profile.post_count = instance.user.posts.count() profile.save()
def dispatch(self, request, *args, **kwargs): if request.user.is_authenticated(): self.user = request.user else: if defaults.PYBB_ENABLE_ANONYMOUS_POST: self.user, new = User.objects.get_or_create(**{username_field: defaults.PYBB_ANONYMOUS_USERNAME}) else: from django.contrib.auth.views import redirect_to_login return redirect_to_login(request.get_full_path()) self.forum = None self.topic = None if 'forum_id' in kwargs: self.forum = get_object_or_404(perms.filter_forums(request.user, Forum.objects.all()), pk=kwargs['forum_id']) if not perms.may_create_topic(self.user, self.forum): raise PermissionDenied elif 'topic_id' in kwargs: self.topic = get_object_or_404(perms.filter_topics(request.user, Topic.objects.all()), pk=kwargs['topic_id']) if not perms.may_create_post(self.user, self.topic): raise PermissionDenied self.quote = '' if 'quote_id' in request.GET: try: quote_id = int(request.GET.get('quote_id')) except TypeError: raise Http404 else: post = get_object_or_404(Post, pk=quote_id) profile = util.get_pybb_profile(post.user) self.quote = util._get_markup_quoter(defaults.PYBB_MARKUP)(post.body, profile.get_display_name()) if self.quote and request.is_ajax(): return HttpResponse(self.quote) return super(AddPostView, self).dispatch(request, *args, **kwargs)
def post_deleted(instance, **kwargs): Profile = util.get_pybb_profile_model() User = compat.get_user_model() try: profile = util.get_pybb_profile(instance.user) except (Profile.DoesNotExist, User.DoesNotExist) as e: #When we cascade delete an user, profile and posts are also deleted pass else: profile.post_count = instance.user.posts.count() profile.save()
def process_request(self, request): if request.user.is_authenticated(): try: # Here we try to load profile, but can get error # if user created during syncdb but profile model # under south control. (Like pybb.Profile). profile = util.get_pybb_profile(request.user) except ObjectDoesNotExist: # Ok, we should create new profile for this user # and grant permissions for add posts # It should be caused rarely, so we move import signal here # to prevent circular import from tendenci.apps.forums.signals import user_saved user_saved(request.user, created=True) profile = util.get_pybb_profile(request.user) if not profile.language: profile.language = translation.get_language_from_request(request) profile.save() request.session['django_language'] = profile.language translation.activate(profile.language) request.LANGUAGE_CODE = translation.get_language()
def process_request(self, request): if request.user.is_authenticated(): try: # Here we try to load profile, but can get error # if user created during syncdb but profile model # under south control. (Like pybb.Profile). profile = util.get_pybb_profile(request.user) except ObjectDoesNotExist: # Ok, we should create new profile for this user # and grant permissions for add posts # It should be caused rarely, so we move import signal here # to prevent circular import from tendenci.apps.forums.signals import user_saved user_saved(request.user, created=True) profile = util.get_pybb_profile(request.user) if not profile.language: profile.language = translation.get_language_from_request( request) profile.save() request.session['django_language'] = profile.language translation.activate(profile.language) request.LANGUAGE_CODE = translation.get_language()
def get_email_message(user, **kwargs): try: validate_email(user.email) except: # Invalid email return if user.email == '*****@*****.**' % getattr(user, compat.get_username_field()): return 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', kwargs) return message
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() site_url = get_setting('site', 'global', 'siteurl') from_email = settings.DEFAULT_FROM_EMAIL subject = render_to_string('pybb/mail_templates/subscription_email_subject.html', {'site': current_site, 'site_url': site_url, '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, 'site_url': site_url, '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)
def dispatch(self, request, *args, **kwargs): if request.user.is_authenticated(): self.user = request.user else: if defaults.PYBB_ENABLE_ANONYMOUS_POST: self.user, new = User.objects.get_or_create( **{username_field: defaults.PYBB_ANONYMOUS_USERNAME}) else: from django.contrib.auth.views import redirect_to_login return redirect_to_login(request.get_full_path()) self.forum = None self.topic = None if 'forum_id' in kwargs: self.forum = get_object_or_404(perms.filter_forums( request.user, Forum.objects.all()), pk=kwargs['forum_id']) if not perms.may_create_topic(self.user, self.forum): raise PermissionDenied elif 'topic_id' in kwargs: self.topic = get_object_or_404(perms.filter_topics( request.user, Topic.objects.all()), pk=kwargs['topic_id']) if not perms.may_create_post(self.user, self.topic): raise PermissionDenied self.quote = '' if 'quote_id' in request.GET: try: quote_id = int(request.GET.get('quote_id')) except TypeError: raise Http404 else: post = get_object_or_404(Post, pk=quote_id) profile = util.get_pybb_profile(post.user) self.quote = util._get_markup_quoter(defaults.PYBB_MARKUP)( post.body, profile.get_display_name()) if self.quote and request.is_ajax(): return HttpResponse(self.quote) return super(AddPostView, self).dispatch(request, *args, **kwargs)
def get_object(self, queryset=None): return util.get_pybb_profile(self.request.user)