Skip to content
Snippets Groups Projects
Commit eb7a8a54 authored by Giovanne Marcelo's avatar Giovanne Marcelo
Browse files

Fix complaints counter, the destroy option and statistics

parent 87d842ca
No related branches found
No related tags found
No related merge requests found
......@@ -35,8 +35,18 @@ $(document).ready(function(){
var data_users = dataUsers(teachers,curators,admins);
}
if(document.getElementById("lcomplaints") != null) {
var charts = ["colections","users","learning_objects","accesses"];
false_user = document.getElementById("lcomplaints").value;
agressive_user = document.getElementById("lcomplaints_false").value;
offensive_object = document.getElementById("lcomplaints_offensive").value;
violates_copyright = document.getElementById("lcomplaints_violates").value;
var data_complaints = dataComplaints(false_user,agressive_user,offensive_object,violates_copyright);
}
var charts = ["colections","users","learning_objects","accesses","complaints"];
for(i=0;i<charts.length;i++) {
if ( document.getElementById(charts[i]) ) {
......@@ -58,6 +68,10 @@ $(document).ready(function(){
new Chart(ctx).Line(data_accesses,line_options);
var accesses_chart = new Chart(ctx).Line(data_accesses);
break;
case "complaints":
new Chart(ctx).Pie(data_complaints,pie_options);
var complaints_chart = new Chart(ctx).Pie(data_complaints);
break;
default: null;
break;
......
//confurações dos gráficos de linha
//mais infos: www.chartjs.org/docs/
//var visual = document.getElementById("object").value;
//alert(visual);
function dataComplaints(false_user,agressive_user,offensive_object,violates_copyright) {
var data = [
{
value: false_user,
color:"#68F000",
highlight: "#a9ff67",
label: "Usuários Falsos"
},
{
value: agressive_user,
color: "#F55858",
highlight: "#FC8787",
label: "Usuários Ofensivos/Agressivos"
},
{
value: offensive_object,
color: "#F9D60A",
highlight: "#fbe357",
label: "Objetos contém conteúdo Ofensivo/Abusivo"
},
{
value: violates_copyright,
color: "#46BFBD",
highlight: "#5AD3D1",
label: "Objeto viola direitos Autorais"
},
];
return data;
}
var pie_options = {
//Boolean - Whether we should show a stroke on each segment
segmentShowStroke : true,
//String - The colour of each segment stroke
segmentStrokeColor : "#fff",
//Number - The width of each segment stroke
segmentStrokeWidth : 2,
//Number - The percentage of the chart that we cut out of the middle
percentageInnerCutout : 0, // This is 0 for Pie charts
//Number - Amount of animation steps
animationSteps : 100,
//String - Animation easing effect
animationEasing : "easeOutBounce",
//Boolean - Whether we animate the rotation of the Doughnut
animateRotate : true,
//Boolean - Whether we animate scaling the Doughnut from the centre
animateScale : false,
//String - A legend template
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li><span style=\"background-color:<%=segments[i].fillColor%>\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>"
};
......@@ -3,9 +3,31 @@ class Management::ComplaintsController < ManagementController
before_action :set_complaint, only: :destroy
def index
@complaints = Complaint.includes(:complaint_reason, :complaintable, :user)
@date = params[:period]
@date_limit = case @date.to_i
when 1 then
Date.today
when 2 then
Date.yesterday
when 3 then
1.week.ago
when 4 then
1.month.ago
when 5 then
6.month.ago
when 7 then
1.year.ago
else
10.year.ago
end
@complaints = Complaint.all
@complaints_in_period = @complaints.select{ |complaint| complaint.created_at >= @date_limit}
@complaints_objs = @complaints_in_period.uniq{|x| x.complaintable.name}.size
end
def destroy
Complaint.destroy @complaint
......
class Management::StatisticsController < ManagementController
include RepositoriesProxy
#before_action :set_statistics
before_action :set_statistics
before_action :authenticate_user!, except: [:index, :show, :like]
#inicialização, primeira query
@@flag = 0
def index
#a cada novo login atualiza as estatísticas
if @@flag == 0 || @@user != current_user
@@user = current_user
set_statistics
@@flag = 1
end
set_statistics
@n_users = @@n_users
@n_collections = @@n_collections
@n_non_visualised = @@n_non_visualised
@n_learning_objects = @@n_learning_objects
@n_complaints == @@n_complaints
@total_accesses= User.sum("sign_in_count")
end
......@@ -30,43 +25,51 @@ class Management::StatisticsController < ManagementController
end
def accesses
#usar o logstash e kibana
#enquanto isso, uso o sign_in_count do ActiveRecord
@total_accesses= User.sum("sign_in_count")
end
def collections
if @@flag == 0 || @@user != current_user
@@user = current_user
set_statistics
@@flag = 1
end
@n_collections = @@n_collections || []
end
def learning_objects
if @@flag == 0 || @@user != current_user
@@user = current_user
@@flag = 1
set_statistics
end
@n_learning_objects = @@n_learning_objects
@most_visualised = @@most_visualised
@n_non_visualised = @@n_non_visualised
end
def complaints
@complaints = Complaint.all
@n_complaints = @@n_complaints
@complaints_objs = @@complaints_objs
@complaints_per_message = @@complaints_per_message
end
def set_statistics
@@n_users = User.count
@@n_collections = Collection.all.size
@@n_learning_objects = LearningObject.all.size
@@n_non_visualised = LearningObject.where(views_count: 0).size
@@most_visualised = LearningObject.order(:views_count)
@@n_views = LearningObject.sum(:views_count)
Rails.cache.fetch("cache/management_statistics", expires_in: 1.hours) do
@complaints = Complaint.all
@@n_users = User.count
@@n_collections = Collection.all.size
@@n_learning_objects = LearningObject.all.size
@@n_non_visualised = LearningObject.where(views_count: 0).size
@@most_visualised = LearningObject.order(:views_count)
@@n_views = LearningObject.sum(:views_count)
@@n_complaints = Complaint.all.size
@@complaints_per_message = Hash.new(0)
@@complaints_objs = Hash.new(0)
@complaints.map{ |complaint| complaint.reason }.each do |message|
@@complaints_per_message[message] += 1
end
@complaints.map{ |complaint| complaint.complaintable }.each do |object|
@@complaints_objs[object] += 1
end
end
end
def views
......
<h1 class="ls-title-intro ls-ico-stats">Denúncias</h1>
<div class="ls-box-filter">
......@@ -11,12 +13,13 @@
<div class="ls-custom-select">
<select name="period" id="select_period" class="ls-select">
<option>Hoje</option>
<option>Ontem</option>
<option>Última semana</option>
<option>Últimos 30 dias</option>
<option>Últimos 6 meses</option>
<option>Últimos 12 meses</option>
<option value=6>Últimos 12 meses</option>
<option value=1>Hoje</option>
<option value=2>Ontem</option>
<option value=3>Última semana</option>
<option value=4>Últimos 30 dias</option>
<option value=5>Últimos 6 meses</option>
</select>
</div>
</label>
......@@ -27,6 +30,7 @@
</div>
<h2 class="ls-title-4">Relatório de Denúncias</h2>
<div class="row">
......@@ -46,8 +50,7 @@
<h6 class="ls-title-4">Total de denúncias</h6>
</div>
<div class="ls-box-body">
<strong>80</strong>
<small>spam</small>
<strong><%= @complaints_in_period.size %></strong>
</div>
</div>
</div>
......@@ -55,66 +58,88 @@
<div class="col-sm-12 col-lg-7">
<div class="ls-box">
<div class="ls-box-head">
<h6 class="ls-title-4">Percentual comparado ao último mês</h6>
<h6 class="ls-title-4">Total de objetos denunciados</h6>
</div>
<div class="ls-box-body">
<div class="col-lg-offset-3 col-lg-3 col-xs-6">
<strong class="ls-color-theme" data-prefix="%">-3,60</strong>
<small>usuário falso</small>
</div>
<div class="col-lg-3 col-xs-6">
<strong class="ls-color-danger" data-prefix="%">+0,90</strong>
<small>direitos autorais</small>
</div>
<div class="col-lg-3 col-xs-6">
<strong class="ls-color-danger" data-prefix="%">+32</strong>
<small>conteúdo ofensivo</small>
</div>
<strong class="ls-color-theme"><%= @complaints_objs %></strong>
</div>
</div>
</div>
</div>
<div class="ls-tabs-container" id="awesome-tab-content">
<div id="infoAll" class="ls-tab-content" role="tabpanel" style="display: block;">
<% @complaints.each do |complaint| %>
<% (@complaints.sort{|x,y| x.created_at <=> y.created_at}.reverse.uniq{ |x| x.complaintable.name}).each do |complaint| %>
<% if Date.parse(complaint.created_at.to_s) >= @date_limit %>
<div class="ls-list">
<header class="ls-list-header">
<div class="ls-list-title col-md-9">
<strong><%= complaint.complaintable.name %></strong>
<small><%= complaint.reason %></small>
<% if !complaint.description.blank? %>
<p><%= complaint.description %></p>
<% end %>
</div>
<div class="ls-list-title col-md-9">
<strong><%= complaint.complaintable.name %></strong>
<small><%= @complaints.select{ |x| x.complaintable.name == complaint.complaintable.name}.map{|x| x.reason }.each_with_object(Hash.new(0)){ |frequency,message| message[frequency] += 1 }.sort_by{ |k,v| v }.reverse.each{|x| x}.map{ |k,v| "#{k}(#{v})"}.join(",")%></small>
<div data-ls-module="collapse" data-target="#<%= complaint.complaintable.name.tr('^A-Za-z0-9', '') %>" class="ls-collapse ">
<a href="#" class="ls-collapse-header"><h5 class="ls-collapse-title"><strong>Descrições</strong></h5></a>
<div class="ls-collapse-body" id="<%= complaint.complaintable.name.tr('^A-Za-z0-9', '') %>">
<% @complaints.sort {|left, right| left.description.length <=> right.description.length}.reverse.select{ |x| x.complaintable.name == complaint.complaintable.name }.each do |complaint_description| %>
<table class="ls-table ls-no-hover ls-table-striped">
<thead>
<tr>
<th><%= complaint_description.user.name %>(<%= complaint_description.description %>)</th>
</tr>
</thead>
<tbody>
<tr>
<td class="hidden-xs"><%= complaint_description.description %></td>
</tr>
</tbody>
</table>
<%end%>
</div>
</div>
</div>
<div class="col-md-3 ls-txt-right">
<div data-ls-module="dropdown" class="ls-dropdown ls-pos-right">
<a href="#" class="ls-btn-primary" aria-expanded="false" role="combobox">Administrar</a>
<ul class="ls-dropdown-nav" aria-hidden="true">
<li><a href="#" role="option" title="Funcionalidade em desenvolvimento!">Suspender conteúdo</a></li>
<li>
<%= link_to 'Ignorar denúncia', management_complaint_path(id: complaint.id), {method: :delete, data: {confirm: 'Tem certeza que deseja ignorar esta denúncia?'}, title: 'Ignorar denúncia', class: 'ls-btn ls-btn-sm', role: 'option'} %>
<% @complaints.select{ |x| x.complaintable.name == complaint.complaintable.name }.each do |complaint_ignore| %>
<%= link_to 'Ignorar denúncia de ' + complaint_ignore.user.name , management_complaint_path(id: complaint_ignore.id), {method: :delete, data: {confirm: 'Tem certeza que deseja ignorar esta denúncia?'}, title: 'Ignorar denúncia', class: 'ls-btn ls-btn-sm', role: 'option'} %>
<% end %>
</li>
</ul>
</div>
</div>
</header>
<div class="ls-list-content ">
<div class="col-xs-12 col-md-6">
<span class="ls-list-label">Denunciado por</span>
<strong><%= complaint.user.name unless complaint.user.nil?%></strong>
<div data-ls-module="collapse" data-target="#<%= complaint.complaintable.name.tr('^A-Za-z0-9', '') + "complaint"%>" class="ls-collapse ">
<a href="#" class="ls-collapse-header"><strong class="ls-collapse-title">Denunciado por</strong></a>
<div class="ls-collapse-body" id="<%= complaint.complaintable.name.tr('^A-Za-z0-9', '') + "complaint" %>">
<% @complaints.select{ |x| x.complaintable.name == complaint.complaintable.name}.map{|x| x.user }.each do |user| %>
<table class="ls-table ls-no-hover ls-table-striped">
<tbody>
<tr>
<td><a href="#"><%= user.name %></a></td>
</tr>
</tbody>
</table>
<%end%>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6">
<span class="ls-list-label">Data</span>
<span class="ls-list-label">Data da última denúncia</span>
<strong><%= complaint.created_at %></strong>
</div>
</div>
</div>
</div>
<% end %>
<% end %>
</div>
</div>
......
<ol class="ls-breadcrumb">
<li><%= link_to "Início", management_root_path %></li>
<li><%= link_to "Estatísticas", management_statistics_path %></li>
<li> Usuários </li>
</ol>
<body>
<div class="ls-box ls-board-box">
<header class="ls-info-header">
<h2 class="ls-title-3">Denúncias</h2>
<p class="ls-float-right ls-float-none-xs ls-small-info">Apurado em <strong><%= Date.today.to_s %></strong></p>
</header>
<div id="sending-stats" class="row">
<div class="col-sm-6 col-md-12">
<div class="ls-box">
<h6 class="ls-title-6">Total</h6>
<strong class="ls-color-theme"><%=@n_complaints%></strong>
</div>
</div>
<% @complaints.map{|x| x.reason}.uniq.each do |message| %>
<div class="col-sm-6 col-md-3">
<div class="ls-box">
<h6 class="ls-title-4"><%= message %></h6>
<strong class="ls-color-theme"><%= @complaints_per_message[message] %></strong>
</div>
</div>
<% end %>
</div>
</div>
<input type="hidden" id="lcomplaints" value="<%= @complaints_per_message["Usuário falso"] %>"/>
<input type="hidden" id="lcomplaints_false" value="<%= @complaints_per_message["Usuário ofensivo/agressivo"] %>"/>
<input type="hidden" id="lcomplaints_offensive" value="<%= @complaints_per_message["Objeto contém conteúdo ofensivo/abusivo"] %>"/>
<input type="hidden" id="lcomplaints_violates" value="<%= @complaints_per_message["Objeto viola direitos autorais"] %>"/>
<div align="right" >
</div>
<div>
<div style="float: left; margin-left: 85px; margin-top: 100px">
<canvas id="complaints" width="700" height="600"></canvas>
</div>
</div>
<div style="margin-left: 900px">
<h3><th><b>10 Mais denunciados </b></th></h3><br>
<div class="row learning-object-columns">
<% @complaints_objs.sort_by{|name,frequency| frequency }.reverse.first(10).each do |object| %>
<li><%= link_to object[0].name + '->' + object[1].to_s + ' denúncia(s)' , learning_object_path(object[0].id) %></li><BR>
<%end %>
</div>
</div>
</body>
......@@ -51,7 +51,7 @@
<div style="margin-left: 900px">
<h3><th><b> 10 mais visualisados </b></th></h3><br>
<div class="row learning-object-columns">
<% @most_visualised.each do |most| %>
<% @most_visualised.first(10).each do |most| %>
<%#= render_learning_object("vertical", most) %>
<li><%= link_to most["name"], learning_object_path(most["id"]) %></li><BR>
<% end %>
......
......@@ -11,6 +11,7 @@
<li><%= link_to "Coleções", collections_management_statistics_path, class: 'ls-submenu-item' %></li>
<li><%= link_to "Objetos", learning_objects_management_statistics_path, class: 'ls-submenu-item' %></li>
<li><%= link_to "Acessos", accesses_management_statistics_path, class: 'ls-submenu-item' %></li>
<li><%= link_to "Denúncias", complaints_management_statistics_path, class: 'ls-submenu-item' %></li>
</ul>
</li>
<li><%= link_to "Instituições", management_institutions_path, class: 'ls-submenu-item' %></li>
......@@ -25,7 +26,7 @@
<li><%= link_to "Denúncias", management_complaints_path, class: 'ls-ico-bullhorn' %>
<li>
</ul>
<li> <%= link_to "Voltar ao Portal", root_path %> </li>
......
......@@ -25,6 +25,7 @@ Rails.application.routes.draw do
get :collections
get :accesses
get :learning_objects
get :complaints
end
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment