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'))
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))