Commit 724a79a6dbf7afc8b6dcaa210ac2cbaeaaea6f0b

Authored by Gustavo
2 parents ff398c6e b5ff3719

Merge branch 'refactoring' of https://github.com/amadeusproject/amadeuslms into refactoring

amadeus/static/js/chat.js
@@ -79,6 +79,48 @@ function getModalInfo(btn, space, space_type) { @@ -79,6 +79,48 @@ function getModalInfo(btn, space, space_type) {
79 } 79 }
80 }); 80 });
81 81
  82 + var viewed = $(".messages-container").data('viewed'),
  83 + sub_badge = $(".messages-container").data('space'),
  84 + father = $(".messages-container").parent().parent().parent().parent(),
  85 + chat_list_item_id = "#talk-" + father.attr("id");
  86 +
  87 + $('.chat_badge').each(function () {
  88 + var actual = $(this).text();
  89 +
  90 + if (actual != "+99") {
  91 + actual = parseInt(actual, 10) - viewed;
  92 +
  93 + if (actual <= 0) {
  94 + $(this).text("0");
  95 + $(this).hide();
  96 + } else {
  97 + $(this).text(actual);
  98 + }
  99 + }
  100 + });
  101 +
  102 + var counter = $(chat_list_item_id).find('.chat_notify_list').text();
  103 +
  104 + counter = parseInt(counter, 10) - viewed;
  105 +
  106 + if (counter <= 0) {
  107 + counter = "0";
  108 + }
  109 +
  110 + $(chat_list_item_id).find('.chat_notify_list').text(counter);
  111 +
  112 + var subject_cbadge = $("#subject_" + sub_badge).find('.chat_notify'),
  113 + actual = subject_cbadge.text();
  114 +
  115 + if (actual != "+99") {
  116 + actual = parseInt(actual, 10) - viewed;
  117 +
  118 + if (actual <= 0) {
  119 + subject_cbadge.text("0");
  120 + subject_cbadge.hide();
  121 + }
  122 + }
  123 +
82 setShortChatFormSubmit(); 124 setShortChatFormSubmit();
83 setFiltersSubmitAndPagination(); 125 setFiltersSubmitAndPagination();
84 }); 126 });
amadeus/static/js/mural_ungeneral.js
@@ -50,6 +50,7 @@ $(&#39;.mural-ungeneral&#39;).on(&#39;shown.bs.collapse&#39;, function(e) { @@ -50,6 +50,7 @@ $(&#39;.mural-ungeneral&#39;).on(&#39;shown.bs.collapse&#39;, function(e) {
50 actual = parseInt(actual, 10) - data.unviewed; 50 actual = parseInt(actual, 10) - data.unviewed;
51 51
52 if (actual <= 0) { 52 if (actual <= 0) {
  53 + $(this).text("0");
53 $(this).hide(); 54 $(this).hide();
54 } else { 55 } else {
55 $(this).text(actual); 56 $(this).text(actual);
amadeus/static/js/socket.js
@@ -241,9 +241,14 @@ function messageReceived(content) { @@ -241,9 +241,14 @@ function messageReceived(content) {
241 241
242 $(this).hide(); 242 $(this).hide();
243 }); 243 });
  244 +
  245 + $.ajax({
  246 + type: 'GET',
  247 + url: content.view_url
  248 + });
244 } else { 249 } else {
245 var talk_line = $("#talk-" + content.container), 250 var talk_line = $("#talk-" + content.container),
246 - talk_notifies = talk_line.find('.chat_notify'), 251 + talk_notifies = talk_line.find('.chat_notify_list'),
247 actual_count = talk_notifies.text(), 252 actual_count = talk_notifies.text(),
248 actual_date = talk_line.find(".talk-last_msg"); 253 actual_date = talk_line.find(".talk-last_msg");
249 254
chat/templates/chat/_view.html
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 <img src="{{ talking_to.image_url }}" class="img-responsive" /> 9 <img src="{{ talking_to.image_url }}" class="img-responsive" />
10 </div> 10 </div>
11 <div class="col-md-6 user-info"> 11 <div class="col-md-6 user-info">
12 - <h4 class='talking-header'><a class="user_{{ talking_to.id }}_status status {{ status }}" data-toggle="tooltip" title="{{ status|status_text }}"></a> {{ talking_to }} (<span class="chat_notify">{{ chat|notifies:request.user }}</span>)</h4> 12 + <h4 class='talking-header'><a class="user_{{ talking_to.id }}_status status {{ status }}" data-toggle="tooltip" title="{{ status|status_text }}"></a> {{ talking_to }} (<span class="chat_notify_list">{{ chat|notifies:request.user }}</span>)</h4>
13 <p class="talk-last_msg">{% trans 'Last message in' %} {{ chat|last_message }}</p> 13 <p class="talk-last_msg">{% trans 'Last message in' %} {{ chat|last_message }}</p>
14 </div> 14 </div>
15 <div class="col-md-4 buttons pull-right text-center"> 15 <div class="col-md-4 buttons pull-right text-center">
chat/templates/chat/talk.html
@@ -39,7 +39,7 @@ @@ -39,7 +39,7 @@
39 </div> 39 </div>
40 </div> 40 </div>
41 <div class="row-fluid"> 41 <div class="row-fluid">
42 - <div class="messages-container" data-talk="{{ talk_id }}" data-url="{% url 'chat:load_messages' talk_id %}" data-page="{{ page_obj.number }}" data-pages="{{ paginator.num_pages }}"> 42 + <div class="messages-container" data-talk="{{ talk_id }}" data-url="{% url 'chat:load_messages' talk_id %}" data-page="{{ page_obj.number }}" data-pages="{{ paginator.num_pages }}" data-viewed="{{ messages_viewed }}" data-space="{{ subject }}">
43 <button type="button" class="btn btn-block btn-success btn-raised more-msgs" style="{% if paginator.num_pages == page_obj.number %}display:none;{% endif %}margin:0px"> 43 <button type="button" class="btn btn-block btn-success btn-raised more-msgs" style="{% if paginator.num_pages == page_obj.number %}display:none;{% endif %}margin:0px">
44 {% trans 'See old messages' %} 44 {% trans 'See old messages' %}
45 </button> 45 </button>
@@ -8,6 +8,7 @@ urlpatterns = [ @@ -8,6 +8,7 @@ urlpatterns = [
8 url(r'^subject/participants/(?P<subject>[\w_-]+)/$', views.SubjectParticipants.as_view(), name='participants_subject'), 8 url(r'^subject/participants/(?P<subject>[\w_-]+)/$', views.SubjectParticipants.as_view(), name='participants_subject'),
9 url(r'^render_message/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.render_message, name='render_message'), 9 url(r'^render_message/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.render_message, name='render_message'),
10 url(r'^favorite/([\w_-]+)/$', views.favorite, name='favorite'), 10 url(r'^favorite/([\w_-]+)/$', views.favorite, name='favorite'),
  11 + url(r'^view_message/([\w_-]+)/$', views.message_viewed, name='view_message'),
11 url(r'^load_messages/([\w_-]+)/$', views.load_messages, name='load_messages'), 12 url(r'^load_messages/([\w_-]+)/$', views.load_messages, name='load_messages'),
12 url(r'^talk/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.GetTalk.as_view(), name = 'talk'), 13 url(r'^talk/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.GetTalk.as_view(), name = 'talk'),
13 url(r'^send_message/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/(?P<talk_id>[\w_-]+)/(?P<space>[\w_-]+)/(?P<space_type>[\w_-]+)/$', views.SendMessage.as_view(), name = 'create'), 14 url(r'^send_message/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/(?P<talk_id>[\w_-]+)/(?P<space>[\w_-]+)/(?P<space_type>[\w_-]+)/$', views.SendMessage.as_view(), name = 'create'),
@@ -258,6 +258,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): @@ -258,6 +258,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView):
258 template_name = 'chat/talk.html' 258 template_name = 'chat/talk.html'
259 paginate_by = 20 259 paginate_by = 20
260 talk_id = "-1" 260 talk_id = "-1"
  261 + n_viewed = 0
261 262
262 def get_queryset(self): 263 def get_queryset(self):
263 user = self.request.user 264 user = self.request.user
@@ -274,6 +275,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): @@ -274,6 +275,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView):
274 messages = TalkMessages.objects.filter(talk = talk).order_by('-create_date') 275 messages = TalkMessages.objects.filter(talk = talk).order_by('-create_date')
275 276
276 views = ChatVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(message__talk = talk))) 277 views = ChatVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(message__talk = talk)))
  278 + self.n_viewed = views.count()
277 views.update(viewed = True, date_viewed = datetime.now()) 279 views.update(viewed = True, date_viewed = datetime.now())
278 280
279 return messages 281 return messages
@@ -283,6 +285,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): @@ -283,6 +285,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView):
283 285
284 user_email = self.kwargs.get('email', '') 286 user_email = self.kwargs.get('email', '')
285 287
  288 + context['messages_viewed'] = self.n_viewed
286 context['participant'] = get_object_or_404(User, email = user_email) 289 context['participant'] = get_object_or_404(User, email = user_email)
287 context['talk_id'] = self.talk_id 290 context['talk_id'] = self.talk_id
288 context['space'] = self.request.GET.get('space', '0') 291 context['space'] = self.request.GET.get('space', '0')
@@ -290,6 +293,10 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): @@ -290,6 +293,10 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView):
290 context['form'] = ChatMessageForm() 293 context['form'] = ChatMessageForm()
291 context['form_url'] = reverse_lazy('chat:create', args = (), kwargs = {'email': self.kwargs.get('email', ''), 'talk_id': self.talk_id, 'space': self.request.GET.get('space', '0'), 'space_type': self.request.GET.get('space_type', 'general')}) 294 context['form_url'] = reverse_lazy('chat:create', args = (), kwargs = {'email': self.kwargs.get('email', ''), 'talk_id': self.talk_id, 'space': self.request.GET.get('space', '0'), 'space_type': self.request.GET.get('space_type', 'general')})
292 295
  296 + if context['space_type'] == "subject":
  297 + subject = get_object_or_404(Subject, id = context['space'])
  298 + context['subject'] = subject.slug
  299 +
293 self.log_context['talk_id'] = self.talk_id 300 self.log_context['talk_id'] = self.talk_id
294 self.log_context['user_id'] = context['participant'].id 301 self.log_context['user_id'] = context['participant'].id
295 self.log_context['user_name'] = str(context['participant']) 302 self.log_context['user_name'] = str(context['participant'])
@@ -352,6 +359,7 @@ class SendMessage(LoginRequiredMixin, LogMixin, generic.edit.CreateView): @@ -352,6 +359,7 @@ class SendMessage(LoginRequiredMixin, LogMixin, generic.edit.CreateView):
352 "user_icon": self.object.user.image_url, 359 "user_icon": self.object.user.image_url,
353 "notify_title": str(self.object.user), 360 "notify_title": str(self.object.user),
354 "simple_notify": simple_notify, 361 "simple_notify": simple_notify,
  362 + "view_url": reverse("chat:view_message", args = (self.object.id, ), kwargs = {}),
355 "complete": render_to_string("chat/_message.html", {"talk_msg": self.object}, self.request), 363 "complete": render_to_string("chat/_message.html", {"talk_msg": self.object}, self.request),
356 "container": "chat-" + str(self.object.user.id), 364 "container": "chat-" + str(self.object.user.id),
357 "last_date": _("Last message in %s")%(formats.date_format(self.object.create_date, "SHORT_DATETIME_FORMAT")) 365 "last_date": _("Last message in %s")%(formats.date_format(self.object.create_date, "SHORT_DATETIME_FORMAT"))
@@ -417,6 +425,13 @@ def favorite(request, message): @@ -417,6 +425,13 @@ def favorite(request, message):
417 425
418 return JsonResponse({'label': _('Favorite')}) 426 return JsonResponse({'label': _('Favorite')})
419 427
  428 +def message_viewed(request, message):
  429 + view = ChatVisualizations.objects.filter(message__id = message, user = request.user)
  430 +
  431 + view.update(viewed = True, date_viewed = datetime.now())
  432 +
  433 + return JsonResponse({'msg': 'ok'})
  434 +
420 def load_messages(request, talk): 435 def load_messages(request, talk):
421 context = { 436 context = {
422 'request': request, 437 'request': request,