示例#1
0
def new_thread(request):
    """ create a new thead """
    if request.method == 'POST':
        thread = Thread(
            creator = request.user,
            site = Site.objects.get_current(),
        )
        post = Post(
            thread = thread,
            creator = request.user,
            posted_from = get_client_ip(request)
        )
        thread_form = forms.ThreadForm(request.POST, instance = thread)
        post_form = forms.PostForm(request.POST, instance = post)
        if thread_form.is_valid() and post_form.is_valid():
            thread = thread_form.save()
            post.thread = thread
            post_form = forms.PostForm(request.POST, instance = post)
            post_form.save()
            request.posting_users.add_to_set(request.user.id)
            return HttpResponseRedirect(reverse('list-threads'))
    else:
        thread_form = forms.ThreadForm()
        post_form = forms.PostForm()
    return render_to_response("board/new_thread.html",{
            'thread_form' : thread_form,
            'post_form' : post_form,
        }, context_instance = RequestContext(request))
示例#2
0
文件: views.py 项目: mgoh/arkestrator
def new_thread(request):
    """ create a new thead """
    if request.method == 'POST':
        thread = Thread(
            creator=request.user,
            site=Site.objects.get_current(),
        )
        post = Post(thread=thread,
                    creator=request.user,
                    posted_from=get_client_ip(request))
        thread_form = forms.ThreadForm(request.POST, instance=thread)
        post_form = forms.PostForm(request.POST, instance=post)
        if thread_form.is_valid() and post_form.is_valid():
            thread = thread_form.save()
            post.thread = thread
            post_form = forms.PostForm(request.POST, instance=post)
            post_form.save()
            request.posting_users.add_to_set(request.user.id)
            return HttpResponseRedirect(reverse('list-threads'))
    else:
        thread_form = forms.ThreadForm()
        post_form = forms.PostForm()
    return render_to_response("board/new_thread.html", {
        'thread_form': thread_form,
        'post_form': post_form,
    },
                              context_instance=RequestContext(request))
示例#3
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))
示例#4
0
文件: views.py 项目: mgoh/arkestrator
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))