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