def reply_to_event(request, event_id): event = get_object_or_404_and_check_access(request, Event, pk=event_id, command='view') try: reply = Reply.objects.get(event=event, user=request.user) except Reply.DoesNotExist: reply = Reply(event=event, user=request.user, choice='-', inviter=request.user) import django.forms class ReplyForm(django.forms.Form): choice = django.forms.ChoiceField(choices=(('Y', 'Yes'), ('N', 'No'), ('?', '?'),), label=_('Choice'), help_text=_('Will you participate in this event?'), widget = django.forms.RadioSelect) comment = django.forms.CharField(required=False, label=_('Comment'), help_text=_('Leave a comment with your reply')) if request.POST: form = ReplyForm(request.POST) if form.is_valid(): reply.choice = form.cleaned_data['choice'] reply.comment = form.cleaned_data['comment'] reply.save() from curia.times import set_time_on set_time_on(event) return HttpResponseRedirect('/calendars/agenda/') else: form = ReplyForm(initial={'choice':reply.choice, 'comment':reply.comment}) return render_to_response(request, 'calendars/reply.html', {'form': form})
def reply_to_event(request, event_id): event = get_object_or_404_and_check_access(request, Event, pk=event_id, command="view") try: reply = Reply.objects.get(event=event, user=request.user) except Reply.DoesNotExist: reply = Reply(event=event, user=request.user, choice="-", inviter=request.user) import django.forms class ReplyForm(django.forms.Form): choice = django.forms.ChoiceField( choices=(("Y", "Yes"), ("N", "No"), ("?", "?")), label=_("Choice"), help_text=_("Will you participate in this event?"), widget=django.forms.RadioSelect, ) comment = django.forms.CharField( required=False, label=_("Comment"), help_text=_("Leave a comment with your reply") ) if request.POST: form = ReplyForm(request.POST) if form.is_valid(): reply.choice = form.cleaned_data["choice"] reply.comment = form.cleaned_data["comment"] reply.save() from curia.times import set_time_on set_time_on(event) return HttpResponseRedirect("/calendars/agenda/") else: form = ReplyForm(initial={"choice": reply.choice, "comment": reply.comment}) return render_to_response(request, "calendars/reply.html", {"form": form})
def reply(request, event_id, new_reply): event = get_object_or_404_and_check_access(request, Event, pk=event_id, command='view') try: reply = Reply.objects.get(event=event, user=request.user) except Reply.DoesNotExist: reply = Reply(event=event, user=request.user, choice='-', inviter=request.user) if new_reply == 'U': new_reply = '?' if new_reply == 'Y' or new_reply == 'N' or new_reply == '?': reply.choice = new_reply reply.save() from curia.times import set_time_on set_time_on(event) return HttpResponseRedirect('/calendars/agenda/')
def reply(request, event_id, new_reply): event = get_object_or_404_and_check_access(request, Event, pk=event_id, command="view") try: reply = Reply.objects.get(event=event, user=request.user) except Reply.DoesNotExist: reply = Reply(event=event, user=request.user, choice="-", inviter=request.user) if new_reply == "U": new_reply = "?" if new_reply == "Y" or new_reply == "N" or new_reply == "?": reply.choice = new_reply reply.save() from curia.times import set_time_on set_time_on(event) return HttpResponseRedirect("/calendars/agenda/")
def render(self, context): obj = get_item_from_context(self.obj, context) user = get_item_from_context('user', context) if not user.is_anonymous(): set_time_on(obj, user) return ''
def view_thread(request, thread_id, page=None): thread = get_object_or_404_and_check_access(request, Thread, pk=thread_id, command="view") page_size = get_integer(request, "page_size", default=12) orphans = 10 try: set_time_on(thread, request.user, datetime_from_string(request.GET["set_time"])) set_time = False except KeyError: set_time = True last_viewed = get_time_from(thread, request.user).last_viewed try: time = datetime_from_string(request.GET["time"]) except KeyError: time = last_viewed message_query = Message.objects.filter(parent_thread__pk=thread_id) show_deleted = get_boolean(request, "show_deleted") if not show_deleted: message_query = message_query.filter(deleted=show_deleted) threaded = get_boolean(request, "threaded", settings.THREADED_FORUMS) if threaded: message_order_by = "cache_hierarchy" else: message_order_by = "creation_time" paginator = Paginator(message_query.order_by(message_order_by), page_size, orphans=orphans) number_of_pages = paginator.num_pages got_page_size = False if number_of_pages != 0: if not page: page = number_of_pages page = int(page) # TODO: implement getting page ranges # end_page = int(request.GET['end_page']) end_page = page messages = paginator.page(page) else: end_page = 0 page = 0 messages = [] next_page = page + 1 has_next_page = paginator.page(page).has_next() messages = list(messages.object_list) if threaded: try: # get "first" (i.e. the upper most on the page) new message: the message with lowest cache_hierarchy, of the messages that have a timestamp set after "time" if time is None: time = datetime.fromordinal(1) first_message = Message.objects.filter(parent_thread=thread, creation_time__gt=time).order_by( message_order_by )[0] # if we didn't get an explicit request for a specific page and the current page does not include the "first" (i.e. the upper most on the page) unread message if not got_page_size: while first_message not in messages and page > 1: # extend one page end_page = page page -= 1 tmp = messages messages = paginator.page(page).object_list messages.extend(tmp) # set firstnew on the first unread message in the page for message in messages: if time is None or message.creation_time >= last_viewed: message.firstnew = True break except IndexError: # for correct scrolling: set firstnew flag on the last message if there are no unread messages if len(messages) != 0: messages[-1].firstnew = True else: # not threaded has_unread = False # set firstnew on the first unread message in the page for message in messages: if time is None or message.creation_time >= last_viewed: message.firstnew = True has_unread = True break # for correct scrolling: set firstnew flag on the last message if there are no unread messages if not has_unread: messages[-1].firstnew = True # If this is in a forum, get list of suggested_labels. suggested_label = None parents = None forum = False if thread.owner_group is None: forum = True parents = [] try: suggested_label = request.GET["suggested_label"] tp = SuggestedLabel.objects.get(title=suggested_label) except (KeyError, SuggestedLabel.DoesNotExist): tp = None suggested_label = tp suggested_labels = get_objects_from(SuggestedLabel, deleted=False, parent=tp) if tp == None: pass else: if tp.parent: has_parent = True while has_parent: parents.append(tp.parent) m = tp.parent if not m.parent: has_parent = False tp = tp.parent parents.reverse() # Add message import django.forms class EditForm(django.forms.Form): body = django.forms.CharField(widget=django.forms.Textarea, label=_("Message")) parent_message = None if request.REQUEST.has_key("parent_message_id") and request.REQUEST["parent_message_id"] != "": parent_message = Message.objects.get(pk=request.REQUEST["parent_message_id"]) if request.method == "POST": form = EditForm(request.POST) check_access( request.user, command="add message", obj=thread ) # NOTE: same command in message.html and view_thread.html if form.is_valid(): import re replacer = re.compile(" ") body = form.cleaned_data["body"] body = replacer.sub(" ", body) if body != "": Message.objects.create( parent_thread=thread, parent_message=parent_message, owner=request.user, body=body ) thread.last_changed_by = request.user thread.last_changed_time = datetime.now() thread.save() Thread.objects.filter(pk=thread.id).update(count=F("number_of_replies") + 1) set_time_on(thread, user=None) try: Watcher.objects.get( object_id=thread.id, user=request.user, content_type=ContentType.objects.get(name="thread") ) except Watcher.DoesNotExist: Watcher.objects.create( user=request.user, object_id=thread.id, owner_user=request.user, owner_group=request.community, content_type=ContentType.objects.get(name="thread"), ) return HttpResponseRedirect(thread.get_absolute_url() + "?time=" + str(time) + "#firstnew") else: form = EditForm(initial={}) return render_to_response( request, "forums/view_thread.html", { "watch_object": thread, "thread": thread, "messages": messages, "number_of_pages": number_of_pages, "page": page, "end_page": end_page, "has_next_page": has_next_page, "has_previous_page": paginator.page(page).has_previous(), "next_page": next_page, "previous_page": page - 1, "page_size": page_size, "show_deleted": show_deleted, "time": time, "set_time": set_time, "owner": get_owner(thread), "suggested_label": suggested_label, "parents": parents, "forum": forum, "form": form, "is_paginated": True, "base_url": thread.get_absolute_url(), "threaded": threaded, "number_of_replies": thread.number_of_replies, "current_user": request.user, "paginator": paginator, }, )
def view_thread(request, thread_id, page=None): thread = get_object_or_404_and_check_access(request, Thread, pk=thread_id, command='view') page_size = get_integer(request, 'page_size', default=12) orphans = 10 try: set_time_on(thread, request.user, datetime_from_string(request.GET['set_time'])) set_time = False except KeyError: set_time = True last_viewed = get_time_from(thread, request.user).last_viewed try: time = datetime_from_string(request.GET['time']) except KeyError: time = last_viewed message_query = Message.objects.filter(parent_thread__pk=thread_id) show_deleted = get_boolean(request, 'show_deleted') if not show_deleted: message_query = message_query.filter(deleted=show_deleted) threaded = get_boolean(request, 'threaded', settings.THREADED_FORUMS) if threaded: message_order_by = 'cache_hierarchy' else: message_order_by = 'creation_time' paginator = Paginator(message_query.order_by(message_order_by), page_size, orphans=orphans) number_of_pages = paginator.num_pages got_page_size = False if number_of_pages != 0: if not page: page = number_of_pages page = int(page) # TODO: implement getting page ranges #end_page = int(request.GET['end_page']) end_page = page messages = paginator.page(page) else: end_page = 0 page = 0 messages = [] next_page = page + 1 has_next_page = paginator.page(page).has_next() messages = list(messages.object_list) if threaded: try: # get "first" (i.e. the upper most on the page) new message: the message with lowest cache_hierarchy, of the messages that have a timestamp set after "time" if time is None: time = datetime.fromordinal(1) first_message = Message.objects.filter( parent_thread=thread, creation_time__gt=time).order_by(message_order_by)[0] # if we didn't get an explicit request for a specific page and the current page does not include the "first" (i.e. the upper most on the page) unread message if not got_page_size: while first_message not in messages and page > 1: # extend one page end_page = page page -= 1 tmp = messages messages = paginator.page(page).object_list messages.extend(tmp) # set firstnew on the first unread message in the page for message in messages: if time is None or message.creation_time >= last_viewed: message.firstnew = True break except IndexError: # for correct scrolling: set firstnew flag on the last message if there are no unread messages if len(messages) != 0: messages[-1].firstnew = True else: # not threaded has_unread = False # set firstnew on the first unread message in the page for message in messages: if time is None or message.creation_time >= last_viewed: message.firstnew = True has_unread = True break # for correct scrolling: set firstnew flag on the last message if there are no unread messages if not has_unread: messages[-1].firstnew = True # If this is in a forum, get list of suggested_labels. suggested_label = None parents = None forum = False if thread.owner_group is None: forum = True parents = [] try: suggested_label = request.GET['suggested_label'] tp = SuggestedLabel.objects.get(title=suggested_label) except (KeyError, SuggestedLabel.DoesNotExist): tp = None suggested_label = tp suggested_labels = get_objects_from(SuggestedLabel, deleted=False, parent=tp) if tp == None: pass else: if tp.parent: has_parent = True while has_parent: parents.append(tp.parent) m = tp.parent if not m.parent: has_parent = False tp = tp.parent parents.reverse() #Add message import django.forms class EditForm(django.forms.Form): body = django.forms.CharField(widget=django.forms.Textarea, label=_('Message')) parent_message = None if request.REQUEST.has_key('parent_message_id') and request.REQUEST[ 'parent_message_id'] != '': parent_message = Message.objects.get( pk=request.REQUEST['parent_message_id']) if request.method == 'POST': form = EditForm(request.POST) check_access( request.user, command='add message', obj=thread ) # NOTE: same command in message.html and view_thread.html if form.is_valid(): import re replacer = re.compile(' ') body = form.cleaned_data['body'] body = replacer.sub(' ', body) if body != '': Message.objects.create(parent_thread=thread, parent_message=parent_message, owner=request.user, body=body) thread.last_changed_by = request.user thread.last_changed_time = datetime.now() thread.save() Thread.objects.filter(pk=thread.id).update( count=F('number_of_replies') + 1) set_time_on(thread, user=None) try: Watcher.objects.get( object_id=thread.id, user=request.user, content_type=ContentType.objects.get(name="thread")) except Watcher.DoesNotExist: Watcher.objects.create( user=request.user, object_id=thread.id, owner_user=request.user, owner_group=request.community, content_type=ContentType.objects.get(name="thread")) return HttpResponseRedirect(thread.get_absolute_url() + '?time=' + str(time) + '#firstnew') else: form = EditForm(initial={}) return render_to_response( request, 'forums/view_thread.html', { 'watch_object': thread, 'thread': thread, 'messages': messages, 'number_of_pages': number_of_pages, 'page': page, 'end_page': end_page, 'has_next_page': has_next_page, 'has_previous_page': paginator.page(page).has_previous(), 'next_page': next_page, 'previous_page': page - 1, 'page_size': page_size, 'show_deleted': show_deleted, 'time': time, 'set_time': set_time, 'owner': get_owner(thread), 'suggested_label': suggested_label, 'parents': parents, 'forum': forum, 'form': form, 'is_paginated': True, 'base_url': thread.get_absolute_url(), 'threaded': threaded, 'number_of_replies': thread.number_of_replies, 'current_user': request.user, 'paginator': paginator })