From 6135028e2b03883bd3122790ca86a299f7984ca0 Mon Sep 17 00:00:00 2001
From: Giovanne Marcelo <gms15@inf.ufpr.br>
Date: Tue, 23 Feb 2016 00:04:23 -0300
Subject: [PATCH] Fixing complaints statistics

---
 app/assets/javascripts/management.js          | 21 +++++--
 .../javascripts/management/complaints.js      | 55 +++++++++----------
 .../management/statistics_controller.rb       |  2 +-
 .../management/statistics/complaints.html.erb | 14 +++--
 4 files changed, 52 insertions(+), 40 deletions(-)

diff --git a/app/assets/javascripts/management.js b/app/assets/javascripts/management.js
index 47fb7677..d6599d4f 100644
--- a/app/assets/javascripts/management.js
+++ b/app/assets/javascripts/management.js
@@ -19,8 +19,14 @@
 //= require locastyle
 //= require turbolinks
 //= require_tree ./management
+
+
 var teachers, curators, admins;
 var visualised,non_visualised;
+var n_complaints;
+var complaints = [];
+var complaints_names = [];
+
 $(document).ready(function(){
   if (document.getElementById("lobject") !== null) {
     visualised = document.getElementById("lobject").value;
@@ -35,13 +41,16 @@ $(document).ready(function(){
     var data_users = dataUsers(teachers,curators,admins);
   }
 
-  if(document.getElementById("lcomplaints") != null) {
+  if(document.getElementById("n_complaints") != null) {
+
+    n_complaints = document.getElementById("n_complaints").value;
+
+    for (i = 0; i < n_complaints; i++) {
+      complaints[i] = document.getElementById("complaints[" + i + "]").value;
+      complaints_names[i] = document.getElementById("complaints_names[" + i + "]").value;
+    }
 
-    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 data_complaints = dataComplaints(complaints, complaints_names, n_complaints);
   }
 
   if (document.getElementById("lcollection") !== null) {
diff --git a/app/assets/javascripts/management/complaints.js b/app/assets/javascripts/management/complaints.js
index c86edd81..987961ae 100644
--- a/app/assets/javascripts/management/complaints.js
+++ b/app/assets/javascripts/management/complaints.js
@@ -3,38 +3,37 @@
 //confurações dos gráficos de linha
 //mais infos: www.chartjs.org/docs/
 
+function increase_brightness(hex, percent){
+    // strip the leading # if it's there
+    hex = hex.replace(/^\s*#|\s*$/g, '');
+
+    // convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`
+    if(hex.length == 3){
+        hex = hex.replace(/(.)/g, '$1$1');
+    }
+
+    var r = parseInt(hex.substr(0, 2), 16),
+        g = parseInt(hex.substr(2, 2), 16),
+        b = parseInt(hex.substr(4, 2), 16);
+
+    return '#' +
+       ((0|(1<<8) + r + (256 - r) * percent / 100).toString(16)).substr(1) +
+       ((0|(1<<8) + g + (256 - g) * percent / 100).toString(16)).substr(1) +
+       ((0|(1<<8) + b + (256 - b) * percent / 100).toString(16)).substr(1);
+}
 
 
 //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"
-      },
-
-    ];
+function dataComplaints(complaints,complaints_names, n) {
+
+  var data = [];
+
+  for(i = 0; i < n; i++) {
+    var color = "#"+((1<<24)*Math.random()|0).toString(16);
+    var color_highlight = increase_brightness(color,20);
+    data[i] = {value: complaints[i], color: color, highlight: color_highlight, label: complaints_names[i]};
+  }
   return data;
 }
 
diff --git a/app/controllers/management/statistics_controller.rb b/app/controllers/management/statistics_controller.rb
index 09e45aa0..8695e54f 100644
--- a/app/controllers/management/statistics_controller.rb
+++ b/app/controllers/management/statistics_controller.rb
@@ -39,7 +39,7 @@ class Management::StatisticsController < ManagementController
     @complaints = Complaint.all
     @n_complaints = Complaint.count
     @complaints_objs = @complaints.map{|complaint| complaint.complaintable.name}.inject(Hash.new(0)) { |h,e| h[e] += 1; h }
-    @complaints_per_message = Complaint.group(:complaint_reason_id).count
+    @complaints_per_message = Complaint.group(:complaint_reason).count.reduce({}){ |hash, (k, v)| hash.merge( k.reason => v )  }
   end
 
 end
diff --git a/app/views/management/statistics/complaints.html.erb b/app/views/management/statistics/complaints.html.erb
index 5542a969..cff40f44 100644
--- a/app/views/management/statistics/complaints.html.erb
+++ b/app/views/management/statistics/complaints.html.erb
@@ -27,7 +27,7 @@
     <div class="col-sm-6 col-md-6">
       <div class="ls-box">
         <h6 class="ls-title-4"><%= complaint.reason %></h6>
-          <strong class="ls-color-theme"><%= @complaints_per_message[complaint.complaint_reason_id] %></strong>
+          <strong class="ls-color-theme"><%= @complaints_per_message[complaint.reason] %></strong>
       </div>
     </div>
 
@@ -37,10 +37,14 @@
 </div>
 </div>
 
-<input type="hidden" id="lcomplaints" value="<%= @complaints_per_message[1] %>"/>
-<input type="hidden" id="lcomplaints_false" value="<%= @complaints_per_message[2] %>"/>
-<input type="hidden" id="lcomplaints_offensive" value="<%= @complaints_per_message[3] %>"/>
-<input type="hidden" id="lcomplaints_violates" value="<%= @complaints_per_message[4] %>"/>
+
+<input type="hidden" id=<%= "n_complaints" %> value="<%= @complaints_per_message.keys.size %>"/>
+<% @complaints.each_with_index do |complaint,i| %>
+  <input type="hidden" id=<%= "complaints[#{i}]" %> value="<%= @complaints_per_message[complaint.reason] %>"/>
+  <input type="hidden" id=<%= "complaints_names[#{i}]" %> value="<%= complaint.reason %>"/>
+<% end %>
+
+
 
 <div align="right" >
 </div>
-- 
GitLab