def subscribe_forum(request, forum_id): """ Subscribe to the specified forum for new topics notification """ forum = get_object_or_404(Forum, id=forum_id) profile = request.user.get_profile() do_subscribe(profile, forum) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def subscribe_topic(request, topic_id): """ Subscribe to the specified topic for new posts notification """ topic = get_object_or_404(Topic, id=topic_id) profile = request.user.get_profile() do_subscribe(profile, topic) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def topic_add(request, forum_id): """ Adds a new topic """ forum = get_object_or_404(Forum, id=forum_id) group, perms = get_group_perms_or_404(request.user, forum) if perms.can_add_topic(): PollFormset = inlineformset_factory(Topic, Poll, fk_name='topic', form=PollForm, max_num=10, extra=10) if request.method == 'POST': topic_form = TopicForm(request.POST, prefix='topic_form') post_form = PostForm(request.POST, prefix='post_form') poll_formset = PollFormset(request.POST) if topic_form.is_valid() and post_form.is_valid() and poll_formset.is_valid(): profile = request.user.get_profile() ip_address = request.META.get('REMOTE_ADDR', None) topic = topic_form.save(commit=False) topic.forum = forum topic.save() post = post_form.save(commit=False) post.topic = topic post.profile = profile post.ip_address = ip_address post.save() topic.first_post = post topic.save() # Save poll poll_formset.instance = topic for form in poll_formset.forms: if hasattr(form, 'cleaned_data') and form.cleaned_data: form.cleaned_data['topic'] = topic poll_formset.save() # Save poll choices for form in poll_formset.forms: form.save_choices() # Inform subscribed users about new topic inform_new_topic(topic) # Auto subscribe user to his topic do_subscribe(profile, topic) return HttpResponseRedirect(topic.get_absolute_url()) else: topic_form = TopicForm(prefix='topic_form') post_form = PostForm(prefix='post_form') poll_formset = PollFormset() else: raise Http404 return { 'forum': forum, 'topic_form': topic_form, 'post_form': post_form, 'poll_formset': poll_formset, }