def discussion(request, discussion_id): discussion = CommunityDiscussions.objects.select_related().get(id=discussion_id) replies = CommunityDiscussionReplies.objects.select_related().filter(discussion=discussion_id) total = CommunityDiscussions.objects.filter(community=discussion.community).count() users = CommunityUsers.objects.filter(community=discussion.community).count() mems = CommunityUsers.objects.select_related().filter(user=request.user, community=discussion.community) views_connect = view_counter_store() views_connect.set_item("discussion", discussion_id, 1, {"community": str(discussion.community.id)}) poll_connect = poll_store() has_poll = poll_connect.poll_exists("discussion", discussion_id) trending = get_trending(discussion.community.id) data = { "discussion": discussion, "replies": replies, "community": discussion.community, "has_poll": has_poll, "total_discussions": total, "total_users": users, "trending": trending, "mem": mems[0] if mems.count() else None, } if has_poll: data.update({"poll": poll_data("discussion", discussion_id, request.user.id)}) return render_to_response("communities/discussion.html", data)
def discussion_list(request, community_id): try: page = int(request.GET.get("page")) start = (page - 1) * 5 community = CommunityCommunities.objects.get(id=community_id) discussions = CommunityDiscussions.objects.filter(community=community).order_by("-date_reply")[ start : start + 5 ] total = CommunityDiscussions.objects.filter(community=community).count() views_connect = view_counter_store() data = {"pager": get_pager(total, 5, page, 5), "discussions": list()} for discussion in discussions: views_object = views_connect.get_item("discussion", str(discussion.id)) if views_object is None: views = 0 else: views = views_object["views"] data["discussions"].append( { "url": reverse("community_discussion_view", args=[discussion.id]), "subject": discussion.subject, "replies": CommunityDiscussionReplies.objects.filter(discussion=discussion).count(), "views": views, "date_create": "{dt:%b}. {dt.day}, {dt.year}".format(dt=discussion.date_create), "first_name": discussion.user.first_name, "last_name": discussion.user.last_name, "avatar": reverse("user_photo", args=[discussion.user.id]), } ) except Exception as e: data = {"Error": e} return HttpResponse(json.dumps(data), content_type="application/json")
def get_trending(community_id): views_connect = view_counter_store() trending_views = views_connect.get_most_viewed("discussion", 5, {"community": str(community_id)}) trending = list() for tv in trending_views: trending.append(CommunityDiscussions.objects.get(id=tv["identifier"])) return trending
def community(request, community_id): """ Returns a single community page. :param request: Request object. :param community_id: The machine name of the community. :return: The Community page. """ views_connect = view_counter_store() page = request.GET.get("page", "") if page.isdigit() and int(page) > 0: page = int(page) else: page = 1 start = (page - 1) * 5 community = CommunityCommunities.objects.get(id=community_id) facilitator = CommunityUsers.objects.select_related().filter(facilitator=True, community=community) users = CommunityUsers.objects.filter(community=community) discussions = CommunityDiscussions.objects.filter(community=community).order_by("-date_reply")[start : start + 5] total = CommunityDiscussions.objects.filter(community=community).count() # mems = CommunityUsers.objects.select_related().filter(user=request.user, community=community) resources = CommunityResources.objects.filter(community=community) courses = CommunityCourses.objects.filter(community=community) for d in discussions: d.replies = CommunityDiscussionReplies.objects.filter(discussion=d).count() views = views_connect.get_item("discussion", str(d.id)) if views is None: d.views = 0 else: d.views = views["views"] trending = get_trending(community_id) data = { "community": community, "facilitator": facilitator[0] if len(facilitator) else None, "discussions": discussions, "trending": trending, "users": users, "resources": resources, "courses": courses, # "mem": mems[0] if mems.count() else None, "pager": get_pager(total, 5, page, 5), "total_discussions": total, } return render_to_response("communities/community.html", data)
def discussion_delete(request, discussion_id): discussion = CommunityDiscussions.objects.get(id=discussion_id) redirect_url = reverse("community_view", args=[discussion.community.id]) # try: view_connect = view_counter_store() view_connect.delete_item("discussion", discussion_id) poll_connect = poll_store() if poll_connect.poll_exists("discussion", discussion_id): poll_connect.delete_poll("discussion", discussion_id) discussion.delete() # except Exception as e: # log.warning('There was an error deleting a discussion: {0}'.format(e)) return redirect(redirect_url)