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