def accounts(request, sort_order):
    """
    Shows registered user list, which can be searched and sorted according to several criteria
    """

    profiles = UserProfile.objects.exclude(user__is_active=False).select_related('user')
    if isinstance(sort_order, (list, tuple)):
        profiles = profiles.order_by(*sort_order)
    else:
        profiles = profiles.order_by(sort_order)

    # Filter user account list with search term
    search_term = ''
    if request.GET:
        search_form = AccountSearchForm(request.GET)
        if search_form.is_valid():
            term = search_form.cleaned_data['term']
            if term:
                profiles = profiles.filter(Q(user__first_name__icontains=term) |
                                           Q(user__last_name__icontains=term))
                search_term = u'term=%s' % term
    else:
        search_form = AccountSearchForm()

    page = paginate(request, profiles, settings.ACCOUNTS_PER_PAGE)

    return {
        'page': page,
        'search_form': search_form,
        'search_term': search_term,
    }
def search(request):
    """
    Shows forum search results as post list
    """

    if request.GET:
        search_form = ForumSearchForm(request.GET)
        search_term = ''
        post_list = []

        if search_form.is_valid():
            search_term = search_form.cleaned_data['term']

            group = Group.group_for_user(request.user)
            visible_forums_ids = list(
                group.permission_set.values_list('forum_id', flat=True))

            #  select_related('profile', 'profile__user', 'profile__group', 'topic', 'topic__first_post').\
            posts = Post.objects.get_visible_posts().\
                                 filter(topic__forum__in=visible_forums_ids, message__icontains=search_term).\
                                 select_related('profile', 'profile__user', 'profile__forum_group', 'topic', 'topic__first_post').\
                                 order_by('-date')
            post_list = paginate(request, posts, settings.POSTS_PER_PAGE)

        return {
            'search_form': search_form,
            'search_term': search_term,
            'post_list': post_list,
        }

    return HttpResponseRedirect(reverse('forum'))
Exemple #3
0
def accounts(request, sort_order):
    """
    Shows registered user list, which can be searched and sorted according to several criteria
    """

    profiles = UserProfile.objects.exclude(
        user__is_active=False).select_related('user')
    if isinstance(sort_order, (list, tuple)):
        profiles = profiles.order_by(*sort_order)
    else:
        profiles = profiles.order_by(sort_order)

    # Filter user account list with search term
    search_term = ''
    if request.GET:
        search_form = AccountSearchForm(request.GET)
        if search_form.is_valid():
            term = search_form.cleaned_data['term']
            if term:
                profiles = profiles.filter(
                    Q(user__first_name__icontains=term)
                    | Q(user__last_name__icontains=term))
                search_term = u'term=%s' % term
    else:
        search_form = AccountSearchForm()

    page = paginate(request, profiles, settings.ACCOUNTS_PER_PAGE)

    return {
        'page': page,
        'search_form': search_form,
        'search_term': search_term,
    }
Exemple #4
0
def search(request):
    """
    Shows forum search results as post list
    """

    if request.GET:
        search_form = ForumSearchForm(request.GET)
        search_term = ''
        post_list = []

        if search_form.is_valid():
            search_term = search_form.cleaned_data['term']

            group = Group.group_for_user(request.user)
            visible_forums_ids = list(group.permission_set.values_list('forum_id', flat=True))

            posts = Post.objects.get_visible_posts().\
                                 filter(topic__forum__in=visible_forums_ids, message__icontains=search_term).\
                                 select_related('profile', 'profile__user', 'profile__group', 'topic', 'topic__first_post').\
                                 order_by('-date')
            post_list = paginate(request, posts, settings.POSTS_PER_PAGE)

        return {
            'search_form': search_form,
            'search_term': search_term,
            'post_list': post_list,
        }

    return HttpResponseRedirect(reverse('forum'))
Exemple #5
0
def post_list_all(request):
    """
    Shows all posts list
    """

    group = Group.group_for_user(request.user)
    visible_forums_ids = list(group.permission_set.values_list('forum_id', flat=True))
    forum_list = Forum.objects.filter(id__in=visible_forums_ids).order_by('priority')
    forum_list_all = forum_list

    if 'category' in request.GET:
        forum_list = forum_list.filter(name=request.GET['category'])

    search_form = ForumSearchForm()

    posts = Post.objects.get_visible_posts().filter(topic__forum__in=forum_list).exclude(is_removed=True).order_by('-id')
    post_list = paginate(request, posts, settings.POSTS_PER_PAGE)

    content = {
        'search_form': search_form,
        'forum_list': forum_list_all,
        'post_list': post_list,
        'term': '',
    }

    if 'category' in request.GET:
        content['term'] = "category=%s" %request.GET['category']

    return content
Exemple #6
0
def forum_subscription(request):
    """
    Shows forum subscriptions
    """

    profile = request.user.get_profile()
    subscription = load_content_objects(profile.forum_subscription.order_by('-date'))
    subscription_list = paginate(request, subscription, settings.SUBSCRIPTIONS_PER_PAGE)

    return {
        'subscription_list': subscription_list,
    }
def forum_subscription(request):
    """
    Shows forum subscriptions
    """

    profile = request.user.profile
    subscription = load_content_objects(
        profile.forum_subscription.order_by('-date'))
    subscription_list = paginate(request, subscription,
                                 settings.SUBSCRIPTIONS_PER_PAGE)

    return {
        'subscription_list': subscription_list,
    }
def topic_list(request, forum_id):
    """
    Shows the list of topics in the specified forum
    """

    forum = get_object_or_404(Forum, id=forum_id)
    group, perms = get_group_perms_or_404(request.user, forum)

    subscribed = is_subscribed(request.user, forum)

    topics = forum.topics.order_by('-is_sticky', '-last_post__date').\
                   select_related('last_post', 'last_post__profile', 'last_post__profile__user',
                                  'first_post', 'first_post__profile', 'first_post__profile__user')
    topic_list = paginate(request, topics, settings.TOPICS_PER_PAGE)
    mark_unread_topics(request.user, topic_list.object_list)

    return {
        'forum': forum,
        'subscribed': subscribed,
        'forum_perms': perms,
        'topic_list': topic_list,
    }
Exemple #9
0
def topic_list(request, forum_id):
    """
    Shows the list of topics in the specified forum
    """

    forum = get_object_or_404(Forum, id=forum_id)
    group, perms = get_group_perms_or_404(request.user, forum)

    subscribed = is_subscribed(request.user, forum)

    topics = forum.topics.order_by('-is_sticky', '-last_post__date').\
                   select_related('last_post', 'last_post__profile', 'last_post__profile__user',
                                  'first_post', 'first_post__profile', 'first_post__profile__user')
    topic_list = paginate(request, topics, settings.TOPICS_PER_PAGE)
    mark_unread_topics(request.user, topic_list.object_list)

    return {
        'forum': forum,
        'subscribed': subscribed,
        'forum_perms': perms,
        'topic_list': topic_list,
    }
def post_list_all(request):
    """
    Shows all posts list
    """

    group = Group.group_for_user(request.user)
    visible_forums_ids = list(
        group.permission_set.values_list('forum_id', flat=True))
    forum_list = Forum.objects.filter(
        id__in=visible_forums_ids).order_by('priority')
    forum_list_all = forum_list

    if 'category' in request.GET:
        forum_list = forum_list.filter(name=request.GET['category'])

    posts = Post.objects.get_visible_posts().filter(
        topic__forum__in=forum_list).exclude(is_removed=True).order_by('-id')
    post_list = paginate(request, posts, settings.POSTS_PER_PAGE)

    return {
        'forum_list': forum_list_all,
        'post_list': post_list,
        'term': "category=%s" % request.GET.get('forum', None),
    }
def post_list(request, topic_id):
    """
    Shows posts list in specified topic and process add new post
    """

    topic = get_object_or_404(Topic.objects.get_visible_topics(), id=topic_id)
    forum = topic.forum
    group, perms = get_group_perms_or_404(request.user, forum)

    subscribed = is_subscribed(request.user, topic)

    if perms.can_add_post(topic):
        if request.method == 'POST':
            post_form = PostForm(request.POST, prefix='post_form')

            if post_form.is_valid():
                profile = request.user.profile

                # Glue two consecutive posts from same user if time interval between them less than GLUE_MESSAGE_TIMEOUT
                delta = (datetime.today() - topic.last_post.date).seconds
                if (topic.last_post.profile == profile) and (
                        delta < settings.GLUE_MESSAGE_TIMEOUT):
                    post = topic.last_post
                    glue_message = post.message + settings.GLUE_MESSAGE % (
                        timesince(
                            post.date), post_form.cleaned_data['message'])
                    data = {'message': glue_message}

                    if PostForm(data).is_valid():
                        post.message = glue_message
                        post.save()
                        return HttpResponseRedirect(post.get_absolute_url())

                ip_address = request.META.get('REMOTE_ADDR', None)

                post = post_form.save(commit=False)
                post.topic = topic
                post.profile = profile
                post.ip_address = ip_address
                post.save()

                # Inform subscribed users about new post
                inform_new_post(post)

                return HttpResponseRedirect(post.get_absolute_url())
        else:
            post_form = PostForm(prefix='post_form')
    else:
        post_form = None

    # posts = topic.posts.order_by('date').select_related('profile', 'profile__user', 'profile__group', 'topic', 'topic__first_post')
    posts = topic.posts.order_by('date').select_related(
        'profile', 'profile__user', 'profile__forum_group', 'topic',
        'topic__first_post')
    post_list = paginate(request, posts, settings.POSTS_PER_PAGE)

    # Generate poll list for the first topic page
    if post_list.number == 1:
        polls = topic.polls.annotate(
            max_votes_count=Max('choices__votes_count'))
        polls_ids = list(polls.values_list('id', flat=True))

        # Select dictionary of user choices for topic polls
        if request.user.is_authenticated():
            profile = request.user.profile
            poll_votes = dict(
                PollVote.objects.filter(profile=profile,
                                        poll__in=polls_ids).values_list(
                                            'poll', 'choice'))
        else:
            poll_votes = {}

        # For every poll in sequence set:
        #  - user_can_vote, ability user to vote in specified poll
        #  - user_vote, user vote for specified poll
        for poll in polls:
            poll.user_can_vote = not bool(
                poll.expired() or request.user.is_anonymous()
                or bool(poll.id in poll_votes.keys()))
            if poll.id in poll_votes.keys():
                poll.user_vote = poll_votes[poll.id]
    else:
        polls = []

    mark_read(request.user, post_list.object_list)
    return {
        'forum': forum,
        'topic': topic,
        'polls': polls,
        'subscribed': subscribed,
        'forum_perms': perms,
        'post_list': post_list,
        'post_form': post_form,
    }
Exemple #12
0
def post_list(request, topic_id):
    """
    Shows posts list in specified topic and process add new post
    """

    topic = get_object_or_404(Topic.objects.get_visible_topics(), id=topic_id)
    forum = topic.forum
    group, perms = get_group_perms_or_404(request.user, forum)

    subscribed = is_subscribed(request.user, topic)

    if perms.can_add_post(topic):
        if request.method == 'POST':
            post_form = PostForm(request.POST, prefix='post_form')

            if post_form.is_valid():
                profile = request.user.get_profile()

                # Glue two consecutive posts from same user if time interval between them less than GLUE_MESSAGE_TIMEOUT
                delta = (datetime.today()-topic.last_post.date).seconds
                if (topic.last_post.profile == profile) and (delta < settings.GLUE_MESSAGE_TIMEOUT):
                    post = topic.last_post
                    glue_message = post.message + settings.GLUE_MESSAGE % (timesince(post.date), post_form.cleaned_data['message'])
                    data = {'message': glue_message}

                    if PostForm(data).is_valid():
                        post.message = glue_message
                        post.save()
                        return HttpResponseRedirect(post.get_absolute_url())

                ip_address = request.META.get('REMOTE_ADDR', None)

                post = post_form.save(commit=False)
                post.topic = topic
                post.profile = profile
                post.ip_address = ip_address
                post.save()

                # Inform subscribed users about new post
                inform_new_post(post)

                return HttpResponseRedirect(post.get_absolute_url())
        else:
            post_form = PostForm(prefix='post_form')
    else:
        post_form = None

    posts = topic.posts.order_by('date').select_related('profile', 'profile__user', 'profile__group', 'topic', 'topic__first_post')
    post_list = paginate(request, posts, settings.POSTS_PER_PAGE)

    # Generate poll list for the first topic page
    if post_list.number == 1:
        polls = topic.polls.annotate(max_votes_count=Max('choices__votes_count'))
        polls_ids = list(polls.values_list('id', flat=True))

        # Select dictionary of user choices for topic polls
        if request.user.is_authenticated():
            profile = request.user.get_profile()
            poll_votes = dict(PollVote.objects.filter(profile=profile, poll__in=polls_ids).values_list('poll', 'choice'))
        else:
            poll_votes = {}

        # For every poll in sequence set:
        #  - user_can_vote, ability user to vote in specified poll
        #  - user_vote, user vote for specified poll
        for poll in polls:
            poll.user_can_vote = not bool(poll.expired() or request.user.is_anonymous() or bool(poll.id in poll_votes.keys()))
            if poll.id in poll_votes.keys():
                poll.user_vote = poll_votes[poll.id]
    else:
        polls = []

    mark_read(request.user, post_list.object_list)

    return {
        'forum': forum,
        'topic': topic,
        'polls': polls,
        'subscribed': subscribed,
        'forum_perms': perms,
        'post_list': post_list,
        'post_form': post_form,
    }