Commit 95ff85075d89caf65aad1e4c48b2f4c436fd7c5f

Authored by Leandro Santos
2 parents 19fcea5d 7ed01ae9

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
... ...