Commit cbff7bbaf9792b7c222e7b93180f3c26e82e8e86
1 parent
19fcea5d
Exists in
master
and in
1 other branch
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 | ... | ... |