Esempio n. 1
0
def find_post(request, name):
    """Find all posts written by an user.

    Returns:
        HttpResponse

    """
    u = get_object_or_404(User, username=name)

    posts = Post.objects.all().filter(author=u)\
        .order_by('-pubdate')

    paginator = Paginator(posts, settings.POSTS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_posts = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_posts = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_posts = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('forum/find_post.html', {
        'posts': shown_posts, 'usr': u,
        'pages': paginator_range(page, paginator.num_pages), 'nb': page
    })
Esempio n. 2
0
def find_topic(request, name):
    """Find all topics created by an user.

    Returns:
        HttpResponse

    """
    u = get_object_or_404(User, username=name)

    topics = Topic.objects.all().filter(author=u)\
                          .order_by('-pubdate')

    # Paginator
    paginator = Paginator(topics, settings.TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'forum/find_topic.html', {
            'topics': shown_topics,
            'usr': u,
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page
        })
Esempio n. 3
0
def find_topic(request, name):
    """Find all topics created by an user.

    Returns:
        HttpResponse

    """
    u = get_object_or_404(User, username=name)

    topics = Topic.objects.all().filter(author=u)\
                          .order_by('-pubdate')

    # Paginator
    paginator = Paginator(topics, settings.TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('forum/find_topic.html', {
        'topics': shown_topics, 'usr': u,
        'pages': paginator_range(page, paginator.num_pages), 'nb': page
    })
Esempio n. 4
0
def followed_topics(request):
    """Displays all the topics followed by an user.

    Returns:
        HttpResponse

    """
    followed_topics = Profile.objects.get(user=request.user)\
        .get_followed_topics()

    # Paginator
    paginator = Paginator(followed_topics, settings.FOLLOWED_TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'forum/followed_topics.html', {
            'followed_topics': shown_topics,
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page
        })
Esempio n. 5
0
def find_post(request, name):
    """Find all posts written by an user.

    Returns:
        HttpResponse

    """
    u = get_object_or_404(User, username=name)

    posts = Post.objects.all().filter(author=u)\
        .order_by('-pubdate')

    paginator = Paginator(posts, settings.POSTS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_posts = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_posts = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_posts = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'forum/find_post.html', {
            'posts': shown_posts,
            'usr': u,
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page
        })
Esempio n. 6
0
def index(request):
    """Display list of registered users.

    Returns:
        HttpResponse

    """
    members = User.objects.order_by('-date_joined')

    paginator = Paginator(members, settings.MEMBERS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_members = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_members = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_members = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'member/index.html', {
            'members': shown_members,
            'members_count': members.count(),
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page,
        })
Esempio n. 7
0
def index(request):
    """Display messages of the user.

    Returns:
        HttpResponse

    """
    # Delete using checkboxes
    if request.method == 'POST':
        if 'delete' in request.POST:
            delete_selected_inbox_messages(request)

    privatetopics = PrivateTopic.objects.all()\
        .filter(Q(participants__in=[request.user]) | Q(author=request.user)) \
        .distinct() \
        .order_by('-last_message__pubdate')

    # Paginator
    paginator = Paginator(privatetopics, settings.TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_privatetopics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_privatetopics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_privatetopics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('messages/index.html', {
        'privatetopics': shown_privatetopics,
        'pages': paginator_range(page, paginator.num_pages), 'nb': page
    })
Esempio n. 8
0
def index(request):
    """Display list of registered users.

    Returns:
        HttpResponse

    """
    members = User.objects.order_by('-date_joined')

    paginator = Paginator(members, settings.MEMBERS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_members = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_members = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_members = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('member/index.html', {
        'members': shown_members,
        'members_count': members.count(),
        'pages': paginator_range(page, paginator.num_pages),
        'nb': page,
    })
Esempio n. 9
0
def followed_topics(request):
    """Displays all the topics followed by an user.

    Returns:
        HttpResponse

    """
    followed_topics = request.user.get_profile().get_followed_topics()

    # Paginator
    paginator = Paginator(followed_topics, settings.FOLLOWED_TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('forum/followed_topics.html', {
        'followed_topics': shown_topics,
        'pages': paginator_range(page, paginator.num_pages),
        'nb': page
    })
Esempio n. 10
0
def index(request):
    """Display list of registered users.

    Returns:
        HttpResponse

    """
    members = User.objects.order_by("-date_joined")

    paginator = Paginator(members, settings.MEMBERS_PER_PAGE)
    page = request.GET.get("page")

    try:
        shown_members = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_members = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_members = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        "member/index.html",
        {
            "members": shown_members,
            "members_count": members.count(),
            "pages": paginator_range(page, paginator.num_pages),
            "nb": page,
        },
    )
Esempio n. 11
0
def by_category(request, name):
    """Display all tutorials belonging to a specific category.

    Returns:
        HttpResponse

    """

    # Deduce category to display based on its name
    if name == 'tous':
        category = TutorialCategory(title=u'Tous les tutoriels', slug=u'tous')
        tutorials = Tutorial.objects \
            .filter(is_beta=False, is_visible=True) \
            .order_by('-pubdate')
    elif name == 'autres':
        category = TutorialCategory(title=u'Non classés', slug=u'autres')
        tutorials = Tutorial.objects \
            .filter(is_beta=False, is_visible=True) \
            .filter(category=None) \
            .order_by('-pubdate')
    elif name == 'beta':
        # Only visible for members
        if not request.user.is_authenticated():
            raise PermissionDenied

        category = TutorialCategory(title=u'Bêta', slug=u'beta')
        tutorials = Tutorial.objects \
            .filter(is_beta=True) \
            .order_by('-pubdate')
    else:
        category = get_object_or_404(TutorialCategory, slug=name)
        tutorials = Tutorial.objects \
            .filter(category=category, is_beta=False, is_visible=True) \
            .order_by('-pubdate')

    paginator = Paginator(tutorials, settings.TUTORIALS_PER_PAGE)

    try:
        page_nbr = int(request.GET['page'])
    except KeyError:
        page_nbr = 1

    try:
        tutorials = paginator.page(page_nbr)
    except PageNotAnInteger:
        tutorials = paginator.page(1)
    except EmptyPage:
        raise Http404

    categories = TutorialCategory.objects.all()

    return render_template('tutorial/by_category.html', {
        'category': category,
        'categories': categories,
        'tutorials': tutorials,
        'nb': page_nbr,
        'pages': paginator_range(page_nbr, paginator.num_pages),
    })
Esempio n. 12
0
def details(request, cat_slug, forum_slug):
    """Display the given forum and all its topics.

    Returns:
        HttpResponse

    """
    forum = get_object_or_404(Forum, slug=forum_slug)

    sticky_topics = Topic.objects.all() \
        .filter(forum__pk=forum.pk, is_sticky=True) \
        .order_by('-last_message__pubdate')

    topics = Topic.objects.all() \
        .filter(forum__pk=forum.pk, is_sticky=False) \
        .order_by('-last_message__pubdate')

    # Paginator
    paginator = Paginator(topics, settings.TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'forum/details.html', {
            'forum': forum,
            'sticky_topics': sticky_topics,
            'topics': shown_topics,
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page
        })
Esempio n. 13
0
def details(request, cat_slug, forum_slug):
    """Display the given forum and all its topics.

    Returns:
        HttpResponse

    """
    forum = get_object_or_404(Forum, slug=forum_slug)

    sticky_topics = Topic.objects.all() \
        .filter(forum__pk=forum.pk, is_sticky=True) \
        .order_by('-last_message__pubdate')

    topics = Topic.objects.all() \
        .filter(forum__pk=forum.pk, is_sticky=False) \
        .order_by('-last_message__pubdate')

    # Paginator
    paginator = Paginator(topics, settings.TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('forum/details.html', {
        'forum': forum,
        'sticky_topics': sticky_topics,
        'topics': shown_topics,
        'pages': paginator_range(page, paginator.num_pages),
        'nb': page
    })
Esempio n. 14
0
def index(request):
    """Display messages of the user.

    Returns:
        HttpResponse

    """
    # Delete using checkboxes
    if request.method == 'POST':
        if 'delete' in request.POST:
            delete_selected_inbox_messages(request)

    privatetopics = PrivateTopic.objects.all()\
        .filter(Q(participants__in=[request.user]) | Q(author=request.user)) \
        .distinct() \
        .order_by('-last_message__pubdate')

    # Paginator
    paginator = Paginator(privatetopics, settings.TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_privatetopics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_privatetopics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_privatetopics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'messages/index.html', {
            'privatetopics': shown_privatetopics,
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page
        })
Esempio n. 15
0
 def test_big_end_limit(self):
     result = paginator_range(7, 10)
     self.assertEqual(result, [1, None, 6, 7, 8, 9, 10])
Esempio n. 16
0
 def test_big_end(self):
     result = paginator_range(10, 10)
     self.assertEqual(result, [1, None, 9, 10])
Esempio n. 17
0
 def test_big_middle(self):
     result = paginator_range(5, 10)
     self.assertEqual(result, [1, None, 4, 5, 6, None, 10])
Esempio n. 18
0
 def test_big_start_limit(self):
     result = paginator_range(3, 10)
     self.assertEqual(result, [1, 2, 3, 4, None, 10])
Esempio n. 19
0
 def test_big_start(self):
     result = paginator_range(1, 10)
     self.assertEqual(result, [1, 2, None, 10])
Esempio n. 20
0
 def test_small_limit(self):
     result = paginator_range(1, 4)
     self.assertEqual(result, [1, 2, 3, 4])
Esempio n. 21
0
 def test_small(self):
     result = paginator_range(2, 3)
     self.assertEqual(result, [1, 2, 3])
Esempio n. 22
0
 def test_one(self):
     result = paginator_range(1, 1)
     self.assertEqual(result, [1])
Esempio n. 23
0
 def test_out_of_range(self):
     self.assertRaises(ValueError, lambda: paginator_range(3, 2))
Esempio n. 24
0
def topic(request, topic_pk, topic_slug):
    """Display a topic and its posts using a pager.

    Returns:
        HttpResponse

    """
    # TODO: Clean that up
    g_topic = get_object_or_404(PrivateTopic, pk=topic_pk)

    # Check permissions
    if not is_participant(request.user, g_topic):
        raise PermissionDenied

    # Check link
    if not topic_slug == slugify(g_topic.title):
        return redirect(g_topic.get_absolute_url())

    # Mark the topic as read
    if request.user.is_authenticated():
        if never_privateread(g_topic):
            mark_read(g_topic)

    posts = PrivatePost.objects.all().filter(privatetopic__pk=g_topic.pk)\
        .order_by('position_in_topic')

    last_post_pk = g_topic.last_message.pk

    # Handle pagination
    paginator = Paginator(posts, settings.POSTS_PER_PAGE)

    try:
        page_nbr = int(request.GET['page'])
    except KeyError:
        page_nbr = 1

    try:
        posts = paginator.page(page_nbr)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        raise Http404

    res = []
    if page_nbr != 1:
        # Show the last post of the previous page
        last_page = paginator.page(page_nbr - 1).object_list
        last_post = (last_page)[len(last_page) - 1]
        res.append(last_post)

    for post in posts:
        res.append(post)

    members = [g_topic.author] + list(g_topic.participants.all())

    return render_template('messages/topic.html', {
        'topic': g_topic, 'posts': res,
        'pages': paginator_range(page_nbr, paginator.num_pages),
        'nb': page_nbr,
        'last_post_pk': last_post_pk,
        'members': members
    })
Esempio n. 25
0
def topic(request, topic_pk, topic_slug):
    """Display a topic and its posts using a pager.

    Returns:
        HttpResponse

    """
    # TODO: Clean that up
    g_topic = get_object_or_404(PrivateTopic, pk=topic_pk)

    # Check permissions
    if not is_participant(request.user, g_topic):
        raise PermissionDenied

    # Check link
    if not topic_slug == slugify(g_topic.title):
        return redirect(g_topic.get_absolute_url())

    # Mark the topic as read
    if request.user.is_authenticated():
        if never_privateread(g_topic):
            mark_read(g_topic)

    posts = PrivatePost.objects.all().filter(privatetopic__pk=g_topic.pk)\
        .order_by('position_in_topic')

    last_post_pk = g_topic.last_message.pk

    # Handle pagination
    paginator = Paginator(posts, settings.POSTS_PER_PAGE)

    try:
        page_nbr = int(request.GET['page'])
    except KeyError:
        page_nbr = 1

    try:
        posts = paginator.page(page_nbr)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        raise Http404

    res = []
    if page_nbr != 1:
        # Show the last post of the previous page
        last_page = paginator.page(page_nbr - 1).object_list
        last_post = (last_page)[len(last_page) - 1]
        res.append(last_post)

    for post in posts:
        res.append(post)

    members = [g_topic.author] + list(g_topic.participants.all())

    return render_template(
        'messages/topic.html', {
            'topic': g_topic,
            'posts': res,
            'pages': paginator_range(page_nbr, paginator.num_pages),
            'nb': page_nbr,
            'last_post_pk': last_post_pk,
            'members': members
        })
Esempio n. 26
0
def topic(request, topic_pk, topic_slug):
    """Display a thread and its posts using a pager.

    Returns:
        HttpResponse

    """

    # TODO: Clean that up
    g_topic = get_object_or_404(Topic, pk=topic_pk)

    # Check link
    if not topic_slug == slugify(g_topic.title):
        return redirect(g_topic.get_absolute_url())

    # We mark the topic as read
    if request.user.is_authenticated() and never_read(g_topic):
        mark_read(g_topic)

    posts = Post.objects.all() \
        .filter(topic__pk=g_topic.pk) \
        .order_by('position_in_topic')

    last_post_pk = g_topic.last_message.pk

    # Handle pagination
    paginator = Paginator(posts, settings.POSTS_PER_PAGE)

    # The category list is needed to move threads
    categories = Category.objects.all()

    # We try to get page number
    try:
        page_nbr = request.GET['page']
    except KeyError:
        page_nbr = 1

    # We try to page content
    try:
        posts = paginator.page(page_nbr)
        page_nbr = int(page_nbr)
    except PageNotAnInteger:
        posts = paginator.page(1)
        page_nbr = 1
    except EmptyPage:
        raise Http404

    res = []
    if page_nbr > 1:
        # Show the last post of the previous page
        last_page = paginator.page(page_nbr - 1).object_list
        last_post = (last_page)[len(last_page) - 1]
        res.append(last_post)

    for post in posts:
        res.append(post)

    return render_template(
        'forum/topic.html', {
            'topic': g_topic,
            'posts': res,
            'categories': categories,
            'pages': paginator_range(page_nbr, paginator.num_pages),
            'nb': page_nbr,
            'last_post_pk': last_post_pk
        })
Esempio n. 27
0
def topic(request, topic_pk, topic_slug):
    """Display a thread and its posts using a pager.

    Returns:
        HttpResponse

    """

    # TODO: Clean that up
    g_topic = get_object_or_404(Topic, pk=topic_pk)

    # Check link
    if not topic_slug == slugify(g_topic.title):
        return redirect(g_topic.get_absolute_url())

    # We mark the topic as read
    if request.user.is_authenticated() and never_read(g_topic):
        mark_read(g_topic)

    posts = Post.objects.all() \
        .filter(topic__pk=g_topic.pk) \
        .order_by('position_in_topic')

    last_post_pk = g_topic.last_message.pk

    # Handle pagination
    paginator = Paginator(posts, settings.POSTS_PER_PAGE)

    # The category list is needed to move threads
    categories = Category.objects.all()

    # We try to get page number
    try:
        page_nbr = request.GET['page']
    except KeyError:
        page_nbr = 1

    # We try to page content
    try:
        posts = paginator.page(page_nbr)
        page_nbr = int(page_nbr)
    except PageNotAnInteger:
        posts = paginator.page(1)
        page_nbr = 1
    except EmptyPage:
        raise Http404

    res = []
    if page_nbr > 1:
        # Show the last post of the previous page
        last_page = paginator.page(page_nbr - 1).object_list
        last_post = (last_page)[len(last_page) - 1]
        res.append(last_post)

    for post in posts:
        res.append(post)

    return render_template('forum/topic.html', {
        'topic': g_topic,
        'posts': res,
        'categories': categories,
        'pages': paginator_range(page_nbr, paginator.num_pages),
        'nb': page_nbr,
        'last_post_pk': last_post_pk
    })