diff --git a/core/decorators.py b/core/decorators.py index 63d1e53..88b5b9d 100644 --- a/core/decorators.py +++ b/core/decorators.py @@ -1,6 +1,8 @@ from django.conf import settings import json +import time from functools import wraps +from django.shortcuts import get_object_or_404 from .models import Action, Resource, Action_Resource, Log, Notification def log_decorator(log_component = '', log_action = '', log_resource = ''): @@ -38,7 +40,6 @@ def log_decorator(log_component = '', log_action = '', log_resource = ''): log = Log() log.user = request.user log.component = log_component - #log.context = json.dumps(request.log_context) log.context = request.log_context log.action_resource = action_resource @@ -51,6 +52,75 @@ def log_decorator(log_component = '', log_action = '', log_resource = ''): return _log_decorator +def log_decorator_ajax(log_component = '', log_action = '', log_resource = ''): + + def _log_decorator_ajax(view_function): + + def _decorator(request, *args, **kwargs): + view_action = request.GET.get("action") + + if view_action == 'open': + if request.user.is_authenticated: + action = Action.objects.filter(name = log_action) + resource = Resource.objects.filter(name = log_resource) + + if not action: + action = Action(name = log_action) + action.save() + else: + action = action[0] + + if not resource: + resource = Resource(name = log_resource) + resource.save() + else: + resource = resource[0] + + action_resource = Action_Resource.objects.filter(action = action, resource = resource) + + if not action_resource: + action_resource = Action_Resource(action = action, resource = resource) + action_resource.save() + else: + action_resource = action_resource[0] + + log = Log() + log.user = request.user + log.component = log_component + log.context = "" + log.action_resource = action_resource + + log.save() + + response = view_function(request, *args, **kwargs) + + log = Log.objects.latest('id') + log.context = request.log_context + log.save() + elif view_action == 'close': + if request.user.is_authenticated: + log = get_object_or_404(Log, id = request.GET.get('log_id')) + + if type(log.context) == dict: + log_context = log.context + else: + log_context = json.loads(log.context) + + log_context['timestamp_end'] = str(int(time.time())) + + log.context = log_context + + log.save() + + response = view_function(request, *args, **kwargs) + + return response + + return wraps(view_function)(_decorator) + + return _log_decorator_ajax + + def notification_decorator(read = False, message = '', actor = None, users = [], not_action='', not_resource='', resource_link=''): def _notification_decorator(view_function): diff --git a/core/middleware.py b/core/middleware.py index 0dae756..0107aee 100644 --- a/core/middleware.py +++ b/core/middleware.py @@ -32,3 +32,17 @@ class TimeSpentMiddleware(object): log.save() request.session['log_id'] = None + + oppened_logs = Log.objects.filter(user = request.user, context__contains={'timestamp_end': '-1'}) + + for op_log in oppened_logs: + if type(op_log.context) == dict: + log_context = op_log.context + else: + log_context = json.loads(op_log.context) + + log_context['timestamp_end'] = str(int(time.time())) + + op_log.context = log_context + + op_log.save() diff --git a/courses/static/js/topic.js b/courses/static/js/topic.js new file mode 100644 index 0000000..3ae9649 --- /dev/null +++ b/courses/static/js/topic.js @@ -0,0 +1,30 @@ +function openTopic(url, topic, btn) { + var icon = btn.find('i'); + var action = '', log_id; + + if (icon.hasClass('fa-caret-square-o-down')) { + icon.removeClass('fa-caret-square-o-down'); + icon.addClass('fa-caret-square-o-up'); + action = 'open'; + log_id = -1; + } else { + icon.addClass('fa-caret-square-o-down'); + icon.removeClass('fa-caret-square-o-up'); + action = 'close'; + log_id = $(".topic_" + topic).find(".log_id").val(); + } + + $.ajax({ + url: url, + data: {"action": action, "log_id": log_id}, + dataType: 'json', + success: function (data) { + if (action == 'open') { + $(".topic_" + topic).find(".log_id").val(data.log_id); + } + }, + error: function(data) { + console.log('Error'); + } + }); +} \ No newline at end of file diff --git a/courses/templates/subject/form_view_student.html b/courses/templates/subject/form_view_student.html index a09929e..72aebda 100644 --- a/courses/templates/subject/form_view_student.html +++ b/courses/templates/subject/form_view_student.html @@ -6,6 +6,7 @@ + {% endblock %}
@@ -13,7 +14,7 @@ -
+ + {% if not professor_links %}
@@ -82,4 +82,6 @@ {% include "links/update_link.html" %} {% endif %}
+
+
\ No newline at end of file diff --git a/courses/templates/subject/form_view_teacher.html b/courses/templates/subject/form_view_teacher.html index b1ca3b7..052db49 100644 --- a/courses/templates/subject/form_view_teacher.html +++ b/courses/templates/subject/form_view_teacher.html @@ -1,10 +1,12 @@ {% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access list_topic_exercises %} + +
-
+