diff --git a/amadeus/static/js/ytvideo.js b/amadeus/static/js/ytvideo.js index e4ad5b7..f97497b 100644 --- a/amadeus/static/js/ytvideo.js +++ b/amadeus/static/js/ytvideo.js @@ -20,17 +20,22 @@ function onPlayerStateChange(event) { break; case YT.PlayerState.ENDED: clearInterval(keepAlive) - console.log('ended'); + + watchLog("close"); + + finishLog(); break; case YT.PlayerState.PLAYING: keepAlive = setInterval(function () { keepLogged() }, 60000); - console.log('playing'); + + watchLog("open"); break; case YT.PlayerState.PAUSED: clearInterval(keepAlive) - console.log('paused'); + + watchLog("close"); break; case YT.PlayerState.BUFFERING: console.log('buffering'); @@ -41,6 +46,40 @@ function onPlayerStateChange(event) { } } -function keepLogged() { +function keepLogged () { $(document).mousemove(); +} + +function watchLog (action) { + var url = $('#log_url').val(); + var log_input = $('#log_id'); + + $.ajax({ + url: url, + data: {'action': action, 'log_id': log_input.val()}, + dataType: 'json', + success: function (data) { + if (action == "open") { + log_input.val(data.log_id); + } + }, + error: function (data) { + console.log(data); + } + }); +} + +function finishLog () { + var url = $('#log_finish_url').val(); + + $.ajax({ + url: url, + dataType: 'json', + success: function (data) { + console.log(data); + }, + error: function (data) { + console.log(data); + } + }); } \ No newline at end of file diff --git a/youtube_video/templates/youtube/view.html b/youtube_video/templates/youtube/view.html index ad605b1..c21ba2c 100644 --- a/youtube_video/templates/youtube/view.html +++ b/youtube_video/templates/youtube/view.html @@ -47,6 +47,9 @@
+ + +
diff --git a/youtube_video/templates/youtube/window_view.html b/youtube_video/templates/youtube/window_view.html index 750c23e..9170bc7 100644 --- a/youtube_video/templates/youtube/window_view.html +++ b/youtube_video/templates/youtube/window_view.html @@ -20,6 +20,9 @@ + + + diff --git a/youtube_video/urls.py b/youtube_video/urls.py index b93055e..7039e26 100644 --- a/youtube_video/urls.py +++ b/youtube_video/urls.py @@ -9,4 +9,6 @@ urlpatterns = [ url(r'^delete/(?P[\w_-]+)/$', views.DeleteView.as_view(), name = 'delete'), url(r'^window_view/(?P[\w_-]+)/$', views.NewWindowView.as_view(), name = 'window_view'), url(r'^view/(?P[\w_-]+)/$', views.InsideView.as_view(), name = 'view'), + url(r'^watch/(?P[\w_-]+)/$', views.ytvideo_watch_log, name = 'watch'), + url(r'^finish/(?P[\w_-]+)/$', views.ytvideo_finish_log, name = 'finish'), ] diff --git a/youtube_video/views.py b/youtube_video/views.py index 072da0f..a438ae5 100644 --- a/youtube_video/views.py +++ b/youtube_video/views.py @@ -1,18 +1,29 @@ from django.shortcuts import get_object_or_404, redirect, render from django.views import generic from django.contrib import messages +from django.http import JsonResponse from django.core.urlresolvers import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.mixins import LoginRequiredMixin from amadeus.permissions import has_subject_permissions, has_resource_permissions +import time +from log.models import Log +from log.mixins import LogMixin +from log.decorators import log_decorator_ajax, log_decorator + from topics.models import Topic from .forms import YTVideoForm, InlinePendenciesFormset from .models import YTVideo -class NewWindowView(LoginRequiredMixin, generic.DetailView): +class NewWindowView(LoginRequiredMixin, LogMixin, generic.DetailView): + log_component = 'resources' + log_action = 'view' + log_resource = 'ytvideo' + log_context = {} + login_url = reverse_lazy("users:login") redirect_field_name = 'next' @@ -34,9 +45,32 @@ class NewWindowView(LoginRequiredMixin, generic.DetailView): context['title'] = _("%s - Video")%(self.object.name) + self.log_context['category_id'] = self.object.topic.subject.category.id + self.log_context['category_name'] = self.object.topic.subject.category.name + self.log_context['category_slug'] = self.object.topic.subject.category.slug + self.log_context['subject_id'] = self.object.topic.subject.id + self.log_context['subject_name'] = self.object.topic.subject.name + self.log_context['subject_slug'] = self.object.topic.subject.slug + self.log_context['topic_id'] = self.object.topic.id + self.log_context['topic_name'] = self.object.topic.name + self.log_context['topic_slug'] = self.object.topic.slug + self.log_context['ytvideo_id'] = self.object.id + self.log_context['ytvideo_name'] = self.object.name + self.log_context['ytvideo_slug'] = self.object.slug + self.log_context['timestamp_start'] = str(int(time.time())) + + super(NewWindowView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) + + self.request.session['log_id'] = Log.objects.latest('id').id + return context -class InsideView(LoginRequiredMixin, generic.DetailView): +class InsideView(LoginRequiredMixin, LogMixin, generic.DetailView): + log_component = 'resources' + log_action = 'view' + log_resource = 'ytvideo' + log_context = {} + login_url = reverse_lazy("users:login") redirect_field_name = 'next' @@ -61,9 +95,32 @@ class InsideView(LoginRequiredMixin, generic.DetailView): context['topic'] = self.object.topic context['subject'] = self.object.topic.subject + self.log_context['category_id'] = self.object.topic.subject.category.id + self.log_context['category_name'] = self.object.topic.subject.category.name + self.log_context['category_slug'] = self.object.topic.subject.category.slug + self.log_context['subject_id'] = self.object.topic.subject.id + self.log_context['subject_name'] = self.object.topic.subject.name + self.log_context['subject_slug'] = self.object.topic.subject.slug + self.log_context['topic_id'] = self.object.topic.id + self.log_context['topic_name'] = self.object.topic.name + self.log_context['topic_slug'] = self.object.topic.slug + self.log_context['ytvideo_id'] = self.object.id + self.log_context['ytvideo_name'] = self.object.name + self.log_context['ytvideo_slug'] = self.object.slug + self.log_context['timestamp_start'] = str(int(time.time())) + + super(InsideView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) + + self.request.session['log_id'] = Log.objects.latest('id').id + return context -class CreateView(LoginRequiredMixin, generic.edit.CreateView): +class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): + log_component = 'resources' + log_action = 'create' + log_resource = 'ytvideo' + log_context = {} + login_url = reverse_lazy("users:login") redirect_field_name = 'next' @@ -146,6 +203,21 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): if not pend_form.action == "": pend_form.save() + + self.log_context['category_id'] = self.object.topic.subject.category.id + self.log_context['category_name'] = self.object.topic.subject.category.name + self.log_context['category_slug'] = self.object.topic.subject.category.slug + self.log_context['subject_id'] = self.object.topic.subject.id + self.log_context['subject_name'] = self.object.topic.subject.name + self.log_context['subject_slug'] = self.object.topic.subject.slug + self.log_context['topic_id'] = self.object.topic.id + self.log_context['topic_name'] = self.object.topic.name + self.log_context['topic_slug'] = self.object.topic.slug + self.log_context['ytvideo_id'] = self.object.id + self.log_context['ytvideo_name'] = self.object.name + self.log_context['ytvideo_slug'] = self.object.slug + + super(CreateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) return redirect(self.get_success_url()) @@ -176,7 +248,12 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): return success_url -class UpdateView(LoginRequiredMixin, generic.UpdateView): +class UpdateView(LoginRequiredMixin, LogMixin, generic.UpdateView): + log_component = 'resources' + log_action = 'update' + log_resource = 'ytvideo' + log_context = {} + login_url = reverse_lazy("users:login") redirect_field_name = 'next' @@ -245,6 +322,21 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView): if not pend_form.action == "": pend_form.save() + + self.log_context['category_id'] = self.object.topic.subject.category.id + self.log_context['category_name'] = self.object.topic.subject.category.name + self.log_context['category_slug'] = self.object.topic.subject.category.slug + self.log_context['subject_id'] = self.object.topic.subject.id + self.log_context['subject_name'] = self.object.topic.subject.name + self.log_context['subject_slug'] = self.object.topic.subject.slug + self.log_context['topic_id'] = self.object.topic.id + self.log_context['topic_name'] = self.object.topic.name + self.log_context['topic_slug'] = self.object.topic.slug + self.log_context['ytvideo_id'] = self.object.id + self.log_context['ytvideo_name'] = self.object.name + self.log_context['ytvideo_slug'] = self.object.slug + + super(UpdateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) return redirect(self.get_success_url()) @@ -275,7 +367,12 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView): return success_url -class DeleteView(LoginRequiredMixin, generic.DeleteView): +class DeleteView(LoginRequiredMixin, LogMixin, generic.DeleteView): + log_component = 'resources' + log_action = 'delete' + log_resource = 'ytvideo' + log_context = {} + login_url = reverse_lazy("users:login") redirect_field_name = 'next' @@ -295,4 +392,72 @@ class DeleteView(LoginRequiredMixin, generic.DeleteView): def get_success_url(self): messages.success(self.request, _('The YouTube Video "%s" was removed successfully from virtual environment "%s"!')%(self.object.name, self.object.topic.subject.name)) - return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) \ No newline at end of file + self.log_context['category_id'] = self.object.topic.subject.category.id + self.log_context['category_name'] = self.object.topic.subject.category.name + self.log_context['category_slug'] = self.object.topic.subject.category.slug + self.log_context['subject_id'] = self.object.topic.subject.id + self.log_context['subject_name'] = self.object.topic.subject.name + self.log_context['subject_slug'] = self.object.topic.subject.slug + self.log_context['topic_id'] = self.object.topic.id + self.log_context['topic_name'] = self.object.topic.name + self.log_context['topic_slug'] = self.object.topic.slug + self.log_context['ytvideo_id'] = self.object.id + self.log_context['ytvideo_name'] = self.object.name + self.log_context['ytvideo_slug'] = self.object.slug + + super(DeleteView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) + + return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) + +@log_decorator_ajax('resources', 'watch', 'ytvideo') +def ytvideo_watch_log(request, ytvideo): + action = request.GET.get('action') + + if action == 'open': + ytvideo = get_object_or_404(YTVideo, slug = ytvideo) + + log_context = {} + log_context['category_id'] = ytvideo.topic.subject.category.id + log_context['category_name'] = ytvideo.topic.subject.category.name + log_context['category_slug'] = ytvideo.topic.subject.category.slug + log_context['subject_id'] = ytvideo.topic.subject.id + log_context['subject_name'] = ytvideo.topic.subject.name + log_context['subject_slug'] = ytvideo.topic.subject.slug + log_context['topic_id'] = ytvideo.topic.id + log_context['topic_name'] = ytvideo.topic.name + log_context['topic_slug'] = ytvideo.topic.slug + log_context['ytvideo_id'] = ytvideo.id + log_context['ytvideo_name'] = ytvideo.name + log_context['ytvideo_slug'] = ytvideo.slug + log_context['timestamp_start'] = str(int(time.time())) + log_context['timestamp_end'] = '-1' + + request.log_context = log_context + + log_id = Log.objects.latest('id').id + + return JsonResponse({'message': 'ok', 'log_id': log_id}) + + return JsonResponse({'message': 'ok'}) + +@log_decorator('resources', 'finish', 'ytvideo') +def ytvideo_finish_log(request, ytvideo): + ytvideo = get_object_or_404(YTVideo, slug = ytvideo) + + log_context = {} + log_context['category_id'] = ytvideo.topic.subject.category.id + log_context['category_name'] = ytvideo.topic.subject.category.name + log_context['category_slug'] = ytvideo.topic.subject.category.slug + log_context['subject_id'] = ytvideo.topic.subject.id + log_context['subject_name'] = ytvideo.topic.subject.name + log_context['subject_slug'] = ytvideo.topic.subject.slug + log_context['topic_id'] = ytvideo.topic.id + log_context['topic_name'] = ytvideo.topic.name + log_context['topic_slug'] = ytvideo.topic.slug + log_context['ytvideo_id'] = ytvideo.id + log_context['ytvideo_name'] = ytvideo.name + log_context['ytvideo_slug'] = ytvideo.slug + + request.log_context = log_context + + return JsonResponse({'message': 'ok'}) \ No newline at end of file -- libgit2 0.21.2