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 1 # encoding: UTF-8
2 2  
3 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 48 end
32 49 end
... ...