Commit 95ff85075d89caf65aad1e4c48b2f4c436fd7c5f
Exists in
master
and in
1 other branch
Merge branch 'working1' into 'master'
Adapt ranking to export for each profile being gamified See merge request !9
Showing
1 changed file
with
44 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 | + next if profile_name != 'Conferencia' | |
15 | + puts "Creating spreadsheet for #{profile_name}" | |
16 | + | |
17 | + CSV.open( "ranking_gamification_for_#{profile_name}.csv", 'w' ) do |csv| | |
18 | + categories = [:article_author, :comment_author, :comment_article_author, :vote_voteable_author, :vote_voter, :follower, :followed_article_author] | |
19 | + 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'] | |
20 | + 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'] | |
21 | + | |
22 | + csv << ['identifier', 'name', 'score'] + categories_labels + quantities_labels | |
23 | + amount = Person.count | |
24 | + count = 0 | |
25 | + Person.find_each do |person| | |
26 | + count += 1 | |
27 | + gamification_categories = categories.map{ |c| GamificationPlugin::PointsCategorization.for_type(c).where(profile_id: profile_id).first} | |
28 | + categories_values = gamification_categories.map{|c| person.score_points(:category => c.id.to_s).sum(:num_points)} | |
29 | + if (profile.nil?) | |
30 | + person_articles = Article.where(:author_id => person.id) | |
31 | + else | |
32 | + person_articles = profile.articles.where(:author_id => person.id) | |
33 | + end | |
34 | + puts "Exporting '#{person.identifier}' #{count}/#{amount}" | |
18 | 35 | |
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 | |
36 | + quantities_values = [ | |
37 | + Vote.for_voter(person).count, | |
38 | + person.friends.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.comments.where(:source_id => person_articles).joins(:votes).where('vote < 0').count + person_articles.joins(:votes).where('vote < 0').count, | |
41 | + person_articles.count, | |
42 | + person.comments.where(source_id: person_articles).count, | |
43 | + Comment.where(:source_id => person_articles).count, | |
44 | + (person.following_articles & person.article_followers.where(article_id: person_articles)).count, | |
45 | + ArticleFollower.where(:article_id => person_articles).count | |
46 | + ] | |
47 | + csv << [person.identifier, person.name, person.points] + categories_values + quantities_values | |
48 | + break if count > 200 | |
49 | + end | |
31 | 50 | end |
32 | 51 | end | ... | ... |