Exemple #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'))
Exemple #2
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'))
Exemple #3
0
def thread(request, thread_id):
	thread = Thread.objects.get(id=thread_id)
	posts_per_page = 5	# this should be a lookup to userprofile
	paginator = Paginator(Post.objects.filter(thread=thread_id).order_by('time'), posts_per_page)
	page = int(request.GET.get('page', 1))

	if thread_id: thread_id = int(thread_id)
	if request.method == 'POST':
		form = PostForm(request.POST)
		if form.is_valid():
			cd = form.cleaned_data
			p = Post(content=cd['content'], author=request.user, thread=thread)
			p.save()
			page = paginator.num_pages
		else:
			return HttpResponse('Error posting; post form was not valid.')

	try:
		posts = paginator.page(page)
	except (EmptyPage, InvalidPage):
		posts = paginator.page(paginator.num_pages)

	last_post = posts.object_list[len(posts.object_list)-1]
	last_read = 0
	try:
		lr = LastRead.objects.get(thread=thread, user=request.user)
		last_read = lr.post.id
		if lr.post.id < last_post.id:
			lr.post = last_post
			lr.save()
	except:
		lr = LastRead(thread=thread, user=request.user, post=last_post)
		lr.save()

	form = PostForm()
	return render_to_response(request, 'thread.html', {'thread': thread, 'posts': posts, 'form': form, 'last_read': last_read})
Exemple #4
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))
Exemple #5
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))