Commit cbff7bbaf9792b7c222e7b93180f3c26e82e8e86

Authored by Hugo Melo
1 parent 19fcea5d

Adapt ranking to export for each profile being gamified

Showing 1 changed file with 42 additions and 25 deletions   Show diff stats
script/export_ranking.rb
1 # encoding: UTF-8 1 # encoding: UTF-8
2 2
3 require 'csv' 3 require 'csv'
4 -CSV.open( "ranking_gamification.csv", 'w' ) do |csv|  
5 - categories = [:article_author, :comment_author, :comment_article_author, :vote_voteable_author, :vote_voter, :follower, :followed_article_author]  
6 - categories_labels = ['autor do artigo', 'autor do comentário', 'comentário recebido no meu artigo', 'voto em meu conteúdo', 'voto realizado', 'seguir artigo', 'autor de artigo seguido']  
7 - quantities_labels = ['quantidade de votos realizados', 'quantidade de amigos', 'votos positivos recebidos', 'votos negativos recebidos', 'quantidade de artigos', 'quantidade de comentários realizados', 'quantidade de comentários recebidos', 'quatidade de vezes que eu segui', 'quantidade de vezes que meus artigos foram seguidos']  
8 4
9 - csv << ['identifier', 'name', 'score'] + categories_labels + quantities_labels  
10 - amount = Person.count  
11 - count = 0  
12 - Person.find_each do |person|  
13 - count += 1  
14 - gamification_categories = categories.map{ |c| GamificationPlugin::PointsCategorization.for_type(c).first}  
15 - categories_values = gamification_categories.map{|c| person.score_points(:category => c.id.to_s).sum(:num_points)}  
16 - person_articles = Article.where(:author_id => person.id)  
17 - puts "Exporting '#{person.identifier}' #{count}/#{amount}" 5 +profile_ids = GamificationPlugin::PointsCategorization.select(:profile_id).group(:profile_id).map(&:profile_id)
  6 +profile_ids.each do |profile_id|
  7 + profile = Profile.where(id: profile_id).first
  8 + if profile.nil?
  9 + profile_name = 'generic'
  10 + else
  11 + profile_name = profile.name
  12 + end
  13 +
  14 + puts "Creating spreadsheet for #{profile_name}"
  15 +
  16 + CSV.open( "ranking_gamification_for_#{profile_name}.csv", 'w' ) do |csv|
  17 + categories = [:article_author, :comment_author, :comment_article_author, :vote_voteable_author, :vote_voter, :follower, :followed_article_author]
  18 + categories_labels = ['autor do artigo', 'autor do comentário', 'comentário recebido no meu artigo', 'voto em meu conteúdo', 'voto realizado', 'seguir artigo', 'autor de artigo seguido']
  19 + quantities_labels = ['quantidade de votos realizados', 'quantidade de amigos', 'votos positivos recebidos', 'votos negativos recebidos', 'quantidade de artigos', 'quantidade de comentários realizados', 'quantidade de comentários recebidos', 'quatidade de vezes que eu segui', 'quantidade de vezes que meus artigos foram seguidos']
  20 +
  21 + csv << ['identifier', 'name', 'score'] + categories_labels + quantities_labels
  22 + amount = Person.count
  23 + count = 0
  24 + Person.find_each do |person|
  25 + count += 1
  26 + gamification_categories = categories.map{ |c| GamificationPlugin::PointsCategorization.for_type(c).where(profile_id: profile_id).first}
  27 + categories_values = gamification_categories.map{|c| person.score_points(:category => c.id.to_s).sum(:num_points)}
  28 + if (profile.nil?)
  29 + person_articles = Article.where(:author_id => person.id)
  30 + else
  31 + person_articles = profile.articles.where(:author_id => person.id)
  32 + end
  33 + puts "Exporting '#{person.identifier}' #{count}/#{amount}"
18 34
19 - quantities_values = [  
20 - Vote.for_voter(person).count,  
21 - person.friends.count,  
22 - person.comments.joins(:votes).where('vote > 0').count + person_articles.joins(:votes).where('vote > 0').count,  
23 - person.comments.joins(:votes).where('vote < 0').count + person_articles.joins(:votes).where('vote < 0').count,  
24 - person_articles.text_articles.count,  
25 - person.comments.count,  
26 - Comment.where(:source_id => person_articles).count,  
27 - person.following_articles.count,  
28 - ArticleFollower.where(:article_id => person_articles).count  
29 - ]  
30 - csv << [person.identifier, person.name, person.points] + categories_values + quantities_values 35 + quantities_values = [
  36 + Vote.for_voter(person).count,
  37 + person.friends.count,
  38 + person.comments.where(:source_id => person_articles).joins(:votes).where('vote > 0').count + person_articles.joins(:votes).where('vote > 0').count,
  39 + person.comments.where(:source_id => person_articles).joins(:votes).where('vote < 0').count + person_articles.joins(:votes).where('vote < 0').count,
  40 + person_articles.text_articles.count,
  41 + person.comments.where(source_id: person_articles).count,
  42 + Comment.where(:source_id => person_articles).count,
  43 + (person.following_articles & person.article_followers.where(article_id: person_articles)).count,
  44 + ArticleFollower.where(:article_id => person_articles).count
  45 + ]
  46 + csv << [person.identifier, person.name, person.points] + categories_values + quantities_values
  47 + end
31 end 48 end
32 end 49 end