Commit 8b5dead56a59beb07e9830bf4a195e9cc7a83c4a

Authored by Felipe Bormann
1 parent bcc4439c

modified analytics and dashboards app, now they serve their right purpose and ar…

…e more separated and functional
amadeus/settings.py
@@ -83,6 +83,7 @@ INSTALLED_APPS = [ @@ -83,6 +83,7 @@ INSTALLED_APPS = [
83 'webconference', 83 'webconference',
84 'news', 84 'news',
85 'analytics', 85 'analytics',
  86 + 'dashboards',
86 ] 87 ]
87 88
88 MIDDLEWARE_CLASSES = [ 89 MIDDLEWARE_CLASSES = [
amadeus/templates/base.html
@@ -251,7 +251,7 @@ @@ -251,7 +251,7 @@
251 </a> 251 </a>
252 </li> 252 </li>
253 <li class="item" data-toggle="tooltip" data-placement="right" title="{% trans "Analytics" %}"> 253 <li class="item" data-toggle="tooltip" data-placement="right" title="{% trans "Analytics" %}">
254 - <a href="{% url 'analytics:view_general' %}"><i class="fa fa-bar-chart" aria-hid{% get_current_language as LANGUAGE_CODE %}den="true"></i></a> 254 + <a href="{% url 'dashboards:view_general' %}"><i class="fa fa-bar-chart" aria-hid{% get_current_language as LANGUAGE_CODE %}den="true"></i></a>
255 </li> 255 </li>
256 </ul> 256 </ul>
257 {% endblock %} 257 {% endblock %}
@@ -306,7 +306,7 @@ @@ -306,7 +306,7 @@
306 </a> 306 </a>
307 </li> 307 </li>
308 <li class="item" data-toggle="tooltip" data-placement="top" title="{% trans "Analytics" %}"> 308 <li class="item" data-toggle="tooltip" data-placement="top" title="{% trans "Analytics" %}">
309 - <a href="{% url 'analytics:view_general' %}"><i class="fa fa-bar-chart" aria-hid{% get_current_language as LANGUAGE_CODE %}den="true"></i></a> 309 + <a href="{% url 'dashboards:view_general' %}"><i class="fa fa-bar-chart" aria-hid{% get_current_language as LANGUAGE_CODE %}den="true"></i></a>
310 </li> 310 </li>
311 </ul> 311 </ul>
312 </div> 312 </div>
amadeus/urls.py
@@ -46,6 +46,7 @@ urlpatterns = [ @@ -46,6 +46,7 @@ urlpatterns = [
46 url(r'^news/', include('news.urls', namespace='news')), 46 url(r'^news/', include('news.urls', namespace='news')),
47 url(r'^i18n/', include('django.conf.urls.i18n')), 47 url(r'^i18n/', include('django.conf.urls.i18n')),
48 url(r'^analytics/', include('analytics.urls', namespace='analytics')), 48 url(r'^analytics/', include('analytics.urls', namespace='analytics')),
  49 + url(r'^dashboards/', include('dashboards.urls', namespace='dashboards')),
49 #API 50 #API
50 url(r'^o/', include('oauth2_provider.urls', namespace='oauth2_provider')), 51 url(r'^o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
51 #S3Direct 52 #S3Direct
analytics/static/analytics/js/behavior.js
@@ -1,96 +0,0 @@ @@ -1,96 +0,0 @@
1 -  
2 -  
3 -  
4 -$(document).ready(function(){  
5 - selectors_options.init();  
6 -  
7 - //for month selector  
8 -  
9 - $('#month_selector').change(function(){  
10 - $.get('/analytics/amount_active_users_per_day', {month: $(this).val() }).done(function(data){  
11 - charts.month_heatmap(data, '#right-chart-body');  
12 -  
13 - });  
14 - });  
15 - //week date selector at the right-chart field  
16 - $('input.datepicker').datetimepicker({  
17 - format: 'L',  
18 - defaultDate: new Date(),  
19 - }).on('dp.change', function(ev){  
20 - $.get('/analytics/get_days_of_the_week_log', {date: ev.date._i}).done(function(data){  
21 - charts.month_heatmap(data, '#bottom-right-chart-body');  
22 - });  
23 -  
24 - });  
25 -  
26 -  
27 -  
28 -  
29 -});  
30 -  
31 -  
32 -  
33 -var selectors_options = {  
34 - init: function(){  
35 - selectors = $("div.selector");  
36 - selectors.click(function(e){  
37 - selectors_options.loadData(e.currentTarget);  
38 - });  
39 - },  
40 - loadData: function(e){  
41 - if (e){  
42 - opened = $(e).attr('opened');  
43 - if (typeof opened !== typeof undefined && opened !== false){  
44 - selectors_options.deleteChildren(e);  
45 - }else {  
46 - switch(e.attributes['data-url'].value){  
47 - case "subjects":  
48 - var url = "/analytics/most_accessed_subjects";  
49 - break;  
50 - case "categories":  
51 - var url = "/analytics/most_accessed_categories";  
52 - break;  
53 - case "resources":  
54 - var url = "/analytics/most_accessed_resources";  
55 - break;  
56 -  
57 - }  
58 -  
59 - }  
60 - }  
61 - if(url){  
62 - $.get(url, function(dataset){  
63 - return dataset;  
64 - }).done(function(data){  
65 - selectors_options.modifyElement(e, data);  
66 -  
67 - }).fail(function(error){  
68 - console.log("couldn't complete get request");  
69 - });  
70 - }  
71 -  
72 -  
73 - },  
74 - modifyElement: function(e, data){  
75 - var string_build = "";  
76 - string_build += '<ul class="most-accessed-list" style="display:none;">';  
77 -  
78 - data.forEach(function(datum){  
79 - string_build += '<li class="most-accessed-item">' +datum.name+ ' ' + datum.count+ '</li>';  
80 - });  
81 - string_build += "</ul>";  
82 -  
83 - $(e).after(string_build);  
84 - var new_elem = $(e).next();  
85 - new_elem.slideDown({easing: 'easeInOutSine'}, 5000);  
86 - $(e).attr("opened", true);  
87 -  
88 - },  
89 - deleteChildren: function(e){  
90 - var most_accessed_list = $(e).next();  
91 - $(most_accessed_list).slideUp({easing: 'easeInOutSine'}, 1200);  
92 - $(e).removeAttr("opened"); //remove attribute so it can call API again  
93 - },  
94 -};  
95 -  
96 -  
analytics/templates/analytics/category.html
@@ -1,25 +0,0 @@ @@ -1,25 +0,0 @@
1 -{% extends 'base.html' %}  
2 -  
3 -{% load static i18n pagination %}  
4 -{% load django_bootstrap_breadcrumbs %}  
5 -{% block style %}  
6 - <link rel="stylesheet" type="text/css" href="{% static 'analytics/general.css' %}">  
7 -{% endblock style %}  
8 -  
9 -{% block javascript %}  
10 - <script type="text/javascript" src="{% static "analytics/js/charts.js" %}"></script>  
11 - <script type="text/javascript" src=" {% static "analytics/js/behavior.js" %} "></script>  
12 -{% endblock javascript %}  
13 -  
14 -{% block breadcrumbs %}  
15 - {{ block.super }}  
16 -  
17 - {% trans 'Analytics Category' as category %}  
18 -  
19 - {% breadcrumb category 'dashboard:view_general' %}  
20 -{% endblock %}  
21 -  
22 -  
23 -{% block content %}  
24 -  
25 -{% endblock content %}  
26 \ No newline at end of file 0 \ No newline at end of file
analytics/templates/analytics/general.html
@@ -1,133 +0,0 @@ @@ -1,133 +0,0 @@
1 -{% extends 'base.html' %}  
2 -  
3 -{% load static i18n pagination %}  
4 -{% load django_bootstrap_breadcrumbs %}  
5 -{% block style %}  
6 - <link rel="stylesheet" type="text/css" href="{% static 'analytics/general.css' %}">  
7 -{% endblock style %}  
8 -  
9 -{% block javascript %}  
10 -  
11 - <script type="text/javascript" src="{% static "analytics/js/charts.js" %}"></script>  
12 - <script type="text/javascript" src=" {% static "analytics/js/behavior.js" %} "></script>  
13 -{% endblock javascript %}  
14 -  
15 -{% block breadcrumbs %}  
16 - {{ block.super }}  
17 -  
18 - {% trans 'Analytics General' as general %}  
19 -  
20 - {% breadcrumb general 'dashboard:view_general' %}  
21 -{% endblock %}  
22 -  
23 -  
24 -{% block content %}  
25 - <section id="core-subjects-options-div">  
26 - <nav>  
27 - <ul class="core-subjects-options report-menu-choice">  
28 -  
29 - <li class="active">  
30 - {% trans "Platform Report" %}  
31 - </li>  
32 - <li>  
33 - {% trans "Category Report" %}  
34 - </li>  
35 - <li>  
36 - {% trans "Subject Report" %}  
37 - </li>  
38 -  
39 - </ul>  
40 - </nav>  
41 - </section>  
42 -  
43 - <section id="general-report">  
44 - <header id="general-report-header">  
45 - <h3>{% trans "Amadeus Report" %}</h3>  
46 -  
47 - <ul id="report-header-options">  
48 - <li class="selected">  
49 - {% trans "Focus" %}  
50 - </li>  
51 - <li>  
52 - {% trans "Log" %}  
53 - </li>  
54 - </ul>  
55 - </header>  
56 -  
57 - <article class="report-body">  
58 -  
59 - <section id="most-used-tags">  
60 - <header id="most-used-tags-header">  
61 - <h4 >  
62 - {% trans "most used tags" %}  
63 - </h4>  
64 - </header>  
65 - <div id="most-used-tags-body">  
66 -  
67 - </div>  
68 - </section>  
69 - <section class="bottom-section">  
70 - <div class="chart left-chart">  
71 -  
72 - <h4>{% trans "Most accessed " %}</h4>  
73 - <div id="left-data-selector">  
74 -  
75 -  
76 - <div class="selector" data-url="categories">  
77 - <p> {% trans "Most accessed categories" %} </p>  
78 - </div>  
79 -  
80 - <div class="selector" data-url="subjects">  
81 - <p> {% trans "Most accessed subjects" %} </p>  
82 - </div>  
83 -  
84 - <div class="selector" data-url="resources">  
85 - <p> {% trans "Most accessed resource" %} </p>  
86 - </div>  
87 -  
88 - </div>  
89 -  
90 - </div>  
91 - <div class="chart middle-chart">  
92 - <article>  
93 - <h4>{% trans "Most active users" %}</h4>  
94 - </article>  
95 -  
96 - </div>  
97 - <div class="chart right-chart">  
98 - <div id="month_selector_div">  
99 - <h4>{% trans "Amount of access in: " %}  
100 - <select id="month_selector">  
101 - {% for month in months %}  
102 - <option>{{month}}</option>  
103 - {% endfor %}  
104 -  
105 - </select>  
106 - </h4>  
107 - </div>  
108 -  
109 - <div id="right-chart-body">  
110 -  
111 - </div>  
112 -  
113 - <div class='input-group date'>  
114 - <label>{% trans "Select the begin of the week: " %}</label>  
115 - <input type='text' class="datepicker form-control" />  
116 - <span class="input-group-addon">  
117 - <span class="glyphicon glyphicon-calendar"></span>  
118 - </span>  
119 - </div>  
120 - <div id="bottom-right-chart-body">  
121 -  
122 - </div>  
123 - </div>  
124 - </section>  
125 -  
126 - </article>  
127 - </section>  
128 -  
129 - <script type="text/javascript">  
130 - </script>  
131 -  
132 -  
133 -{% endblock content %}  
134 \ No newline at end of file 0 \ No newline at end of file
analytics/urls.py
@@ -3,8 +3,6 @@ from . import views @@ -3,8 +3,6 @@ from . import views
3 3
4 4
5 urlpatterns = [ 5 urlpatterns = [
6 - url(r'^view/general/$', views.GeneralView.as_view(), name='view_general'),  
7 - url(r'^view/category/data$', views.CategoryView.as_view(), name='view_category_data'),  
8 6
9 #"api" callls 7 #"api" callls
10 url(r'^most_used_tags/$', views.most_used_tags, name="most_used_tags"), 8 url(r'^most_used_tags/$', views.most_used_tags, name="most_used_tags"),
analytics/views.py
@@ -18,23 +18,6 @@ import calendar @@ -18,23 +18,6 @@ import calendar
18 from collections import OrderedDict 18 from collections import OrderedDict
19 19
20 20
21 -class GeneralView(generic.TemplateView):  
22 - template_name = "analytics/general.html"  
23 -  
24 - def dispatch(self, request, *args, **kwargs):  
25 -  
26 - if not request.user.is_staff:  
27 - return redirect('analytics:view_category_data')  
28 - return super(GeneralView, self).dispatch(request, *args, **kwargs)  
29 -  
30 -  
31 - def get_context_data(self, **kwargs):  
32 - context = {}  
33 -  
34 - context['months'] = [_('January'), _('February'), _('March'), _('April'), _('May'), _('June'), _('July'), _('August'),  
35 - _('September'), _('October'), _('November'), _('December')]  
36 -  
37 - return context  
38 21
39 22
40 23
@@ -94,9 +77,7 @@ Subject view that returns a list of the most used subjects &quot;&quot;&quot; @@ -94,9 +77,7 @@ Subject view that returns a list of the most used subjects &quot;&quot;&quot;
94 77
95 78
96 def most_accessed_subjects(request): 79 def most_accessed_subjects(request):
97 - data = {} #empty response  
98 80
99 - data = Log.objects.filter(resource = 'subject')  
100 subjects = get_log_count_of_resource(resource='subject') 81 subjects = get_log_count_of_resource(resource='subject')
101 #order the values of the dictionary by the count in descendent order 82 #order the values of the dictionary by the count in descendent order
102 subjects = sorted(subjects.values(), key = lambda x: x['count'], reverse=True ) 83 subjects = sorted(subjects.values(), key = lambda x: x['count'], reverse=True )
@@ -119,9 +100,7 @@ def get_log_count_of_resource(resource = &#39;&#39;): @@ -119,9 +100,7 @@ def get_log_count_of_resource(resource = &#39;&#39;):
119 100
120 101
121 def most_accessed_categories(request): 102 def most_accessed_categories(request):
122 - data = {}  
123 103
124 - data = Log.objects.filter(resource = 'category')  
125 categories = get_log_count_of_resource('category') 104 categories = get_log_count_of_resource('category')
126 105
127 106
@@ -214,5 +193,3 @@ def get_days_of_the_week(date): @@ -214,5 +193,3 @@ def get_days_of_the_week(date):
214 return days_set 193 return days_set
215 194
216 195
217 -class CategoryView(generic.TemplateView):  
218 - template_name = "analytics/category.html"  
dashboards/__init__.py 0 → 100644
dashboards/admin.py 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +from django.contrib import admin
  2 +
  3 +# Register your models here.
dashboards/apps.py 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +from django.apps import AppConfig
  2 +
  3 +
  4 +class DashboardsConfig(AppConfig):
  5 + name = 'dashboards'
dashboards/migrations/__init__.py 0 → 100644
dashboards/models.py 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +from django.db import models
  2 +
  3 +# Create your models here.
dashboards/static/dashboards/js/behavior.js 0 → 100644
@@ -0,0 +1,96 @@ @@ -0,0 +1,96 @@
  1 +
  2 +
  3 +
  4 +$(document).ready(function(){
  5 + selectors_options.init();
  6 +
  7 + //for month selector
  8 +
  9 + $('#month_selector').change(function(){
  10 + $.get('/analytics/amount_active_users_per_day', {month: $(this).val() }).done(function(data){
  11 + charts.month_heatmap(data, '#right-chart-body');
  12 +
  13 + });
  14 + });
  15 + //week date selector at the right-chart field
  16 + $('input.datepicker').datetimepicker({
  17 + format: 'L',
  18 + defaultDate: new Date(),
  19 + }).on('dp.change', function(ev){
  20 + $.get('/analytics/get_days_of_the_week_log', {date: ev.date._i}).done(function(data){
  21 + charts.month_heatmap(data, '#bottom-right-chart-body');
  22 + });
  23 +
  24 + });
  25 +
  26 +
  27 +
  28 +
  29 +});
  30 +
  31 +
  32 +
  33 +var selectors_options = {
  34 + init: function(){
  35 + selectors = $("div.selector");
  36 + selectors.click(function(e){
  37 + selectors_options.loadData(e.currentTarget);
  38 + });
  39 + },
  40 + loadData: function(e){
  41 + if (e){
  42 + opened = $(e).attr('opened');
  43 + if (typeof opened !== typeof undefined && opened !== false){
  44 + selectors_options.deleteChildren(e);
  45 + }else {
  46 + switch(e.attributes['data-url'].value){
  47 + case "subjects":
  48 + var url = "/analytics/most_accessed_subjects";
  49 + break;
  50 + case "categories":
  51 + var url = "/analytics/most_accessed_categories";
  52 + break;
  53 + case "resources":
  54 + var url = "/analytics/most_accessed_resources";
  55 + break;
  56 +
  57 + }
  58 +
  59 + }
  60 + }
  61 + if(url){
  62 + $.get(url, function(dataset){
  63 + return dataset;
  64 + }).done(function(data){
  65 + selectors_options.modifyElement(e, data);
  66 +
  67 + }).fail(function(error){
  68 + console.log("couldn't complete get request");
  69 + });
  70 + }
  71 +
  72 +
  73 + },
  74 + modifyElement: function(e, data){
  75 + var string_build = "";
  76 + string_build += '<ul class="most-accessed-list" style="display:none;">';
  77 +
  78 + data.forEach(function(datum){
  79 + string_build += '<li class="most-accessed-item">' +datum.name+ ' ' + datum.count+ '</li>';
  80 + });
  81 + string_build += "</ul>";
  82 +
  83 + $(e).after(string_build);
  84 + var new_elem = $(e).next();
  85 + new_elem.slideDown({easing: 'easeInOutSine'}, 5000);
  86 + $(e).attr("opened", true);
  87 +
  88 + },
  89 + deleteChildren: function(e){
  90 + var most_accessed_list = $(e).next();
  91 + $(most_accessed_list).slideUp({easing: 'easeInOutSine'}, 1200);
  92 + $(e).removeAttr("opened"); //remove attribute so it can call API again
  93 + },
  94 +};
  95 +
  96 +
dashboards/templates/dashboards/category.html 0 → 100644
@@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
  1 +{% extends 'base.html' %}
  2 +
  3 +{% load static i18n pagination %}
  4 +{% load django_bootstrap_breadcrumbs %}
  5 +{% block style %}
  6 + <link rel="stylesheet" type="text/css" href="{% static 'analytics/general.css' %}">
  7 +{% endblock style %}
  8 +
  9 +{% block javascript %}
  10 + <script type="text/javascript" src="{% static "analytics/js/charts.js" %}"></script>
  11 + <script type="text/javascript" src=" {% static "dashboards/js/behavior.js" %} "></script>
  12 +{% endblock javascript %}
  13 +
  14 +{% block breadcrumbs %}
  15 + {{ block.super }}
  16 +
  17 + {% trans 'Analytics Category' as category %}
  18 +
  19 + {% breadcrumb category 'dashboard:view_general' %}
  20 +{% endblock %}
  21 +
  22 +
  23 +{% block content %}
  24 + <section id="core-subjects-options-div">
  25 + <nav>
  26 + <ul class="core-subjects-options report-menu-choice">
  27 +
  28 + <li>
  29 + {% trans "Platform Report" %}
  30 + </li>
  31 + <a href=""><li class="active">
  32 + {% trans "Category Report" %}
  33 + </li></a>
  34 + <li>
  35 + {% trans "Subject Report" %}
  36 + </li>
  37 +
  38 + </ul>
  39 + </nav>
  40 + </section>
  41 +
  42 + <section id="general-report">
  43 + <header id="general-report-header">
  44 + <h3>{{category.name}} {% trans "Category Report" %}</h3>
  45 +
  46 + <ul id="report-header-options">
  47 + <li class="selected">
  48 + {% trans "Focus" %}
  49 + </li>
  50 + <li>
  51 + {% trans "Log" %}
  52 + </li>
  53 + </ul>
  54 + </header>
  55 +
  56 + <article class="report-body">
  57 + </article>
  58 + </section>
  59 +{% endblock content %}
0 \ No newline at end of file 60 \ No newline at end of file
dashboards/templates/dashboards/general.html 0 → 100644
@@ -0,0 +1,133 @@ @@ -0,0 +1,133 @@
  1 +{% extends 'base.html' %}
  2 +
  3 +{% load static i18n pagination %}
  4 +{% load django_bootstrap_breadcrumbs %}
  5 +{% block style %}
  6 + <link rel="stylesheet" type="text/css" href="{% static 'analytics/general.css' %}">
  7 +{% endblock style %}
  8 +
  9 +{% block javascript %}
  10 +
  11 + <script type="text/javascript" src="{% static "analytics/js/charts.js" %}"></script>
  12 + <script type="text/javascript" src=" {% static "dashboards/js/behavior.js" %} "></script>
  13 +{% endblock javascript %}
  14 +
  15 +{% block breadcrumbs %}
  16 + {{ block.super }}
  17 +
  18 + {% trans 'Dashboards General' as general %}
  19 +
  20 + {% breadcrumb general 'dashboard:view_general' %}
  21 +{% endblock %}
  22 +
  23 +
  24 +{% block content %}
  25 + <section id="core-subjects-options-div">
  26 + <nav>
  27 + <ul class="core-subjects-options report-menu-choice">
  28 +
  29 + <li class="active">
  30 + {% trans "Platform Report" %}
  31 + </li>
  32 + <a href=""><li>
  33 + {% trans "Category Report" %}
  34 + </li></a>
  35 + <li>
  36 + {% trans "Subject Report" %}
  37 + </li>
  38 +
  39 + </ul>
  40 + </nav>
  41 + </section>
  42 +
  43 + <section id="general-report">
  44 + <header id="general-report-header">
  45 + <h3>{% trans "Amadeus Report" %}</h3>
  46 +
  47 + <ul id="report-header-options">
  48 + <li class="selected">
  49 + {% trans "Focus" %}
  50 + </li>
  51 + <li>
  52 + {% trans "Log" %}
  53 + </li>
  54 + </ul>
  55 + </header>
  56 +
  57 + <article class="report-body">
  58 +
  59 + <section id="most-used-tags">
  60 + <header id="most-used-tags-header">
  61 + <h4 >
  62 + {% trans "most used tags" %}
  63 + </h4>
  64 + </header>
  65 + <div id="most-used-tags-body">
  66 +
  67 + </div>
  68 + </section>
  69 + <section class="bottom-section">
  70 + <div class="chart left-chart">
  71 +
  72 + <h4>{% trans "Most accessed " %}</h4>
  73 + <div id="left-data-selector">
  74 +
  75 +
  76 + <div class="selector" data-url="categories">
  77 + <p> {% trans "Most accessed categories" %} </p>
  78 + </div>
  79 +
  80 + <div class="selector" data-url="subjects">
  81 + <p> {% trans "Most accessed subjects" %} </p>
  82 + </div>
  83 +
  84 + <div class="selector" data-url="resources">
  85 + <p> {% trans "Most accessed resource" %} </p>
  86 + </div>
  87 +
  88 + </div>
  89 +
  90 + </div>
  91 + <div class="chart middle-chart">
  92 + <article>
  93 + <h4>{% trans "Most active users" %}</h4>
  94 + </article>
  95 +
  96 + </div>
  97 + <div class="chart right-chart">
  98 + <div id="month_selector_div">
  99 + <h4>{% trans "Amount of access in: " %}
  100 + <select id="month_selector">
  101 + {% for month in months %}
  102 + <option>{{month}}</option>
  103 + {% endfor %}
  104 +
  105 + </select>
  106 + </h4>
  107 + </div>
  108 +
  109 + <div id="right-chart-body">
  110 +
  111 + </div>
  112 +
  113 + <div class='input-group date'>
  114 + <label>{% trans "Select the begin of the week: " %}</label>
  115 + <input type='text' class="datepicker form-control" />
  116 + <span class="input-group-addon">
  117 + <span class="glyphicon glyphicon-calendar"></span>
  118 + </span>
  119 + </div>
  120 + <div id="bottom-right-chart-body">
  121 +
  122 + </div>
  123 + </div>
  124 + </section>
  125 +
  126 + </article>
  127 + </section>
  128 +
  129 + <script type="text/javascript">
  130 + </script>
  131 +
  132 +
  133 +{% endblock content %}
0 \ No newline at end of file 134 \ No newline at end of file
dashboards/tests.py 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +from django.test import TestCase
  2 +
  3 +# Create your tests here.
dashboards/urls.py 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +from django.conf.urls import url, include
  2 +from . import views
  3 +
  4 +
  5 +urlpatterns = [
  6 + url(r'^view/general/$', views.GeneralView.as_view(), name='view_general'),
  7 +
  8 +]
0 \ No newline at end of file 9 \ No newline at end of file
dashboards/views.py 0 → 100644
@@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
  1 +from django.shortcuts import render
  2 +
  3 +from django.views import generic
  4 +from django.db.models import Count
  5 +from django.core.urlresolvers import reverse_lazy
  6 +
  7 +from subjects.models import Tag, Subject
  8 +from topics.models import Resource
  9 +from users.models import User
  10 +from django.http import HttpResponse, JsonResponse
  11 +from log.models import Log
  12 +import operator
  13 +from django.utils.translation import ugettext_lazy as _
  14 +from django.shortcuts import render, get_object_or_404, redirect
  15 +
  16 +from datetime import date, timedelta, datetime
  17 +import calendar
  18 +from collections import OrderedDict
  19 +
  20 +
  21 +class GeneralView(generic.TemplateView):
  22 + template_name = "dashboards/general.html"
  23 +
  24 + def dispatch(self, request, *args, **kwargs):
  25 +
  26 + if not request.user.is_staff:
  27 + return redirect('analytics:view_category_data')
  28 + return super(GeneralView, self).dispatch(request, *args, **kwargs)
  29 +
  30 +
  31 + def get_context_data(self, **kwargs):
  32 + context = {}
  33 +
  34 + context['months'] = [_('January'), _('February'), _('March'), _('April'), _('May'), _('June'), _('July'), _('August'),
  35 + _('September'), _('October'), _('November'), _('December')]
  36 +
  37 + return context
  38 +
  39 +class CategoryView(generic.TemplateView):
  40 + template_name = "dashboards/category.html"
  41 +
  42 + def dispatch(self, request, *args, **kwargs):
  43 + return super(CategoryView, self).dispatch(request, *args, **kwargs)
  44 +
  45 + def get_context_data(self, **kwargs):
  46 + context = {}
  47 +
  48 + return context
0 \ No newline at end of file 49 \ No newline at end of file