From 8ea454ec15882261abe70dae99d53bff0ac4af0f Mon Sep 17 00:00:00 2001 From: Zambom Date: Tue, 28 Mar 2017 21:56:55 -0300 Subject: [PATCH] Adding subject chat --- amadeus/static/js/chat.js | 2 +- amadeus/static/js/socket.js | 4 ++-- chat/templates/chat/list.html | 2 +- chat/templates/chat/list_category.html | 6 +++--- chat/templates/chat/list_subject.html | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ chat/templatetags/chat_tags.py | 6 ++++++ chat/urls.py | 5 ++++- chat/views.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 8 files changed, 209 insertions(+), 12 deletions(-) create mode 100644 chat/templates/chat/list_subject.html diff --git a/amadeus/static/js/chat.js b/amadeus/static/js/chat.js index af7897e..e7cd984 100644 --- a/amadeus/static/js/chat.js +++ b/amadeus/static/js/chat.js @@ -437,7 +437,7 @@ $('.chat-collapse').on('shown.bs.collapse', function(e) { if($(this).is(e.target)){ var li = $(".breadcrumb").find('li:last-child'); var li_text = $(li).html(); - var url = $(".cat_url").val(); + var url = $(".item_url").val(); var new_li = $(li).clone(); new_li.html($(this).parent().find('.panel-title .item_name').text()); diff --git a/amadeus/static/js/socket.js b/amadeus/static/js/socket.js index 1e46668..5128091 100644 --- a/amadeus/static/js/socket.js +++ b/amadeus/static/js/socket.js @@ -283,8 +283,8 @@ function messageReceived(content) { var item = $("#" + content.space); if (typeof(item) != "undefined") { - var span = item.parent().find('span:not(.item_name)'), - actual = span.text(); + var span = item.parent().find('span.item_badge'), + actual = span.text(); actual = parseInt(actual, 10) + 1; diff --git a/chat/templates/chat/list.html b/chat/templates/chat/list.html index 6bda7c4..6c4a97b 100644 --- a/chat/templates/chat/list.html +++ b/chat/templates/chat/list.html @@ -16,7 +16,7 @@ diff --git a/chat/templates/chat/list_category.html b/chat/templates/chat/list_category.html index c2a51ac..6ea61b2 100644 --- a/chat/templates/chat/list_category.html +++ b/chat/templates/chat/list_category.html @@ -12,13 +12,13 @@ {% endblock %} {% block content %} - +
@@ -41,7 +41,7 @@

- {{ category.name }} ({{ category|notifies_category:request.user }}) + {{ category.name }} ({{ category|notifies_category:request.user }})

diff --git a/chat/templates/chat/list_subject.html b/chat/templates/chat/list_subject.html new file mode 100644 index 0000000..6726f7e --- /dev/null +++ b/chat/templates/chat/list_subject.html @@ -0,0 +1,111 @@ +{% extends 'base.html' %} + +{% load static i18n pagination permissions_tags chat_tags %} +{% load django_bootstrap_breadcrumbs %} + +{% block breadcrumbs %} + {{ block.super }} + + {% trans 'Messages per Subject' as subject %} + + {% breadcrumb subject 'chat:manage_category' %} +{% endblock %} + +{% block content %} + + + + +
+ {% if subjects.count > 0 %} +
+ {% for subject in subjects %} + {% subject_permissions request.user subject as has_subject_permissions %} + + {% if subject.visible or has_subject_permissions %} + {% if subject.visible %} +
+
+ {% elif has_subject_permissions %} +
+
+ {% endif %} +
+
+

+ + {{ subject }} + + ({{ subject|notifies_subject:request.user }}) + +

+ +
+ {% if has_subject_permissions %} + + + {% endif %} +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ {% endif %} + {% endfor %} + + {% pagination request paginator page_obj %} +
+ {% endif %} +
+ + + + + + + + + + +{% endblock %} \ No newline at end of file diff --git a/chat/templatetags/chat_tags.py b/chat/templatetags/chat_tags.py index 43cb6c7..5177a18 100644 --- a/chat/templatetags/chat_tags.py +++ b/chat/templatetags/chat_tags.py @@ -82,4 +82,10 @@ def fav_class(message, user): def notifies_category(category, user): total = ChatVisualizations.objects.filter(message__talk__categorytalk__space = category, user = user, viewed = False).count() + return total + +@register.filter(name = 'notifies_subject') +def notifies_subject(subject, user): + total = ChatVisualizations.objects.filter(message__talk__subjecttalk__space = subject, user = user, viewed = False).count() + return total \ No newline at end of file diff --git a/chat/urls.py b/chat/urls.py index 32c6347..843df3c 100644 --- a/chat/urls.py +++ b/chat/urls.py @@ -3,10 +3,13 @@ from . import views urlpatterns = [ url(r'^$', views.GeneralIndex.as_view(), name='manage_general'), - url(r'^participants/$', views.GeneralParticipants.as_view(), name='participants_general'), url(r'^categories/$', views.CategoryIndex.as_view(), name='manage_category'), + url(r'^subjects/$', views.SubjectIndex.as_view(), name='manage_subject'), + url(r'^participants/$', views.GeneralParticipants.as_view(), name='participants_general'), url(r'^category/talks/(?P[\w_-]+)/$', views.CategoryTalks.as_view(), name='category_talks'), url(r'^category/participants/(?P[\w_-]+)/$', views.CategoryParticipants.as_view(), name='participants_category'), + url(r'^subject/talks/(?P[\w_-]+)/$', views.SubjectTalks.as_view(), name='subject_talks'), + url(r'^subject/participants/(?P[\w_-]+)/$', views.SubjectParticipants.as_view(), name='participants_subject'), url(r'^render_message/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.render_message, name='render_message'), url(r'^favorite/([\w_-]+)/$', views.favorite, name='favorite'), url(r'^load_messages/([\w_-]+)/$', views.load_messages, name='load_messages'), diff --git a/chat/views.py b/chat/views.py index 78c6d50..e3c3cdd 100644 --- a/chat/views.py +++ b/chat/views.py @@ -135,8 +135,6 @@ class CategoryTalks(LoginRequiredMixin, generic.ListView): conversations = CategoryTalk.objects.filter((Q(user_one = user) | Q(user_two = user)) & Q(space__id = cat)) - print(cat) - return conversations def get_context_data(self, **kwargs): @@ -159,8 +157,6 @@ class CategoryParticipants(LoginRequiredMixin, generic.ListView): cat = self.kwargs.get('category', 0) search = self.request.GET.get('search', '') - print(search) - users = User.objects.filter((Q(username__icontains = search) | Q(last_name__icontains = search) | Q(social_name__icontains = search) | Q(email__icontains = search)) & (Q(is_staff = True) | Q(subject_student__category__id = cat) | Q(professors__category__id = cat) | Q(coordinators__id = cat))).distinct().order_by('social_name','username').exclude(email = user.email) return users @@ -173,6 +169,87 @@ class CategoryParticipants(LoginRequiredMixin, generic.ListView): return context +class SubjectIndex(LoginRequiredMixin, generic.ListView): + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'chat/list_subject.html' + context_object_name = "subjects" + paginate_by = 10 + + totals = {} + + def get_queryset(self): + user = self.request.user + page = self.request.GET.get('page', False) + + if user.is_staff: + subjects = Subject.objects.all() + else: + subjects = Subject.objects.filter(Q(professor__pk = user.pk) | Q(students__pk = user.pk, visible = True) | Q(category__coordinators__pk = user.pk)).distinct() + + self.totals['general'] = ChatVisualizations.objects.filter(user = user, viewed = False, message__talk__generaltalk__isnull = False).count() + self.totals['category'] = ChatVisualizations.objects.filter(user = user, viewed = False, message__talk__categorytalk__isnull = False).count() + self.totals['subject'] = ChatVisualizations.objects.filter(user = user, viewed = False, message__talk__subjecttalk__isnull = False).count() + + return subjects + + def get_context_data(self, **kwargs): + context = super(SubjectIndex, self).get_context_data(**kwargs) + + context['title'] = _('Messages per Subject') + context['totals'] = self.totals + context['chat_menu_active'] = 'subjects_menu_active' + + return context + +class SubjectTalks(LoginRequiredMixin, generic.ListView): + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'chat/_talks_list.html' + context_object_name = "conversations" + + def get_queryset(self): + user = self.request.user + sub = self.kwargs.get('subject', 0) + + conversations = SubjectTalk.objects.filter((Q(user_one = user) | Q(user_two = user)) & Q(space__id = sub)) + + return conversations + + def get_context_data(self, **kwargs): + context = super(SubjectTalks, self).get_context_data(**kwargs) + + context['space'] = self.kwargs.get('subject', 0) + context['space_type'] = 'subject' + + return context + +class SubjectParticipants(LoginRequiredMixin, generic.ListView): + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'chat/_participants.html' + context_object_name = "participants" + + def get_queryset(self): + user = self.request.user + sub = self.kwargs.get('subject', 0) + search = self.request.GET.get('search', '') + + users = User.objects.filter((Q(username__icontains = search) | Q(last_name__icontains = search) | Q(social_name__icontains = search) | Q(email__icontains = search)) & (Q(is_staff = True) | Q(subject_student__id = sub) | Q(professors__id = sub) | Q(coordinators__subject_category__id = sub))).distinct().order_by('social_name','username').exclude(email = user.email) + + return users + + def get_context_data(self, **kwargs): + context = super(SubjectParticipants, self).get_context_data(**kwargs) + + context['space'] = self.kwargs.get('subject', 0) + context['space_type'] = 'subject' + + return context + class ParticipantProfile(LoginRequiredMixin, generic.DetailView): login_url = reverse_lazy("users:login") redirect_field_name = 'next' -- libgit2 0.21.2