Beispiel #1
0
def mark_read(request):
    """ mark all threads on the first page read """
    if request.method == 'POST' and request.POST['confirm'] == 'true':
        queryset = Thread.objects.order_by("-stuck", "-last_post")
        count = queryset.count()
        if count > THREADS_PER_PAGE:
            thread_list = queryset[0:THREADS_PER_PAGE]
        else:
            thread_list = queryset[0:count]
        for t in thread_list:
            try:
                lr = LastRead.objects.get(user=request.user, thread=t)
                lr.timestamp = datetime.datetime.now()
                lr.post = t.last_post
            except LastRead.DoesNotExist:
                lr = LastRead(user=request.user,
                              thread=t,
                              post=t.last_post,
                              read_count=0)
            lr.save()
    return HttpResponseRedirect(reverse('list-threads'))
Beispiel #2
0
def view_thread(request, id, start=False, expand=False, hide=None):
    """ display thread  id for a user

        args:
        id: the thread id
        start:  the first post to show otherwise prefs and collapsing are used
        expand: show all posts in the thread
        hide:  hide images in the thread

    """
    thread = get_object_or_404(Thread, pk=id)
    try:
        event = Event.objects.get(thread=thread)
    except Event.DoesNotExist:
        event = None

    #try to make a new post in the thread
    if request.method == 'POST':
        if thread.locked:
            return HttpResponseRedirect(reverse('list-threads'))
        post = Post(thread=thread,
                    creator=request.user,
                    posted_from=get_client_ip(request))
        form = forms.PostForm(request.POST, instance=post)
        if form.is_valid():
            form.save()
            request.posting_users.add_to_set(request.user.id)
            return HttpResponseRedirect(reverse('list-threads'))
    else:
        form = forms.PostForm()

    queryset = thread.post_set.order_by("id").select_related('creator')

    #try to collapse the thread appriately
    try:
        lastread = LastRead.objects.get(user=request.user, thread=thread)
        if not expand:
            coll_size = request.user.get_profile().collapse_size
            if start:
                tset = queryset.filter(pk__lte=start).reverse()
            else:
                tset = queryset.filter(
                    created_at__lte=lastread.timestamp).reverse()
            if tset.count() > coll_size:
                tstart = tset[coll_size].id
                queryset = queryset.filter(pk__gte=tstart)
            else:
                expand = True
    except LastRead.DoesNotExist:
        lastread = LastRead(
            user=request.user,
            thread=thread,
            read_count=0,
        )
        if event:
            cache.delete('event-count:%d' % (request.user.id))
    if not expand and not start and queryset.count() < 10:
        queryset = thread.default_post_list
        queryset = queryset = thread.post_set.order_by(
            "created_at").select_related('creator')
        queryset = queryset[max(0, queryset.count() - 10):]

    post_list = list(queryset)

    #hide images in the thread if appropriate
    try:
        if (not hide is False) and (
                hide or not request.user.get_profile().show_images):
            hide = True
    except ObjectDoesNotExist:
        pass

    lastread.timestamp = datetime.datetime.now()
    lastread.read_count += 1
    lastread.post = post_list[-1]
    lastread.save()
    del thread.total_views

    fav = False
    if thread.favorite.filter(id=request.user.id):
        fav = True

    if len(post_list) < 10:
        expand = True

    if not start and post_list:
        start = post_list[0].id

    #if this is an event display it as such
    if event:
        event = Event.objects.get(thread=thread)
        return render_to_response("events/view_event.html", {
            'object_list': post_list,
            'thread': thread,
            'form': form,
            'expand': expand,
            'hide': hide,
            'start': start,
            'fav': fav,
            'event': event,
            'rsvp_form': RSVPForm(),
            'rsvp_list': event.rsvp_list(),
        },
                                  context_instance=RequestContext(request))

    return render_to_response("board/post_list.html", {
        'object_list': post_list,
        'thread': thread,
        'form': form,
        'expand': expand,
        'hide': hide,
        'start': start,
        'fav': fav,
    },
                              context_instance=RequestContext(request))