From df246c79b67b1b8841ee0061ba5423b80d457b5b Mon Sep 17 00:00:00 2001
From: Arpit Jalan <arpit@techapj.com>
Date: Tue, 21 Mar 2017 15:41:03 +0530
Subject: [PATCH] FEATURE: add user profile fields in user list export

---
 app/jobs/regular/export_csv_file.rb | 9 +++++----
 spec/jobs/export_csv_file_spec.rb   | 4 +++-
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/app/jobs/regular/export_csv_file.rb b/app/jobs/regular/export_csv_file.rb
index b5bc3035453..336c0bfdcc6 100644
--- a/app/jobs/regular/export_csv_file.rb
+++ b/app/jobs/regular/export_csv_file.rb
@@ -12,6 +12,7 @@ module Jobs
       user_archive:   ['topic_title','category','sub_category','is_pm','post','like_count','reply_count','url','created_at'],
       user_list:      ['id','name','username','email','title','created_at','last_seen_at','last_posted_at','last_emailed_at','trust_level','approved','suspended_at','suspended_till','blocked','active','admin','moderator','ip_address'],
       user_stats:     ['topics_entered','posts_read_count','time_read','topic_count','post_count','likes_given','likes_received'],
+      user_profile:   ['location','website','views'],
       user_sso:       ['external_id','external_email', 'external_username', 'external_name', 'external_avatar_url'],
       staff_action:   ['staff_user','action','subject','created_at','details', 'context'],
       screened_email: ['email','action','match_count','last_match_at','created_at','ip_address'],
@@ -79,7 +80,7 @@ module Jobs
 
       if SiteSetting.enable_sso
         # SSO enabled
-        User.where(condition).includes(:user_stat, :single_sign_on_record, :groups).find_each do |user|
+        User.where(condition).includes(:user_profile, :user_stat, :single_sign_on_record, :groups).find_each do |user|
           user_info_array = get_base_user_array(user)
           user_info_array = add_single_sign_on(user, user_info_array)
           user_info_array = add_custom_fields(user, user_info_array, user_field_ids)
@@ -88,7 +89,7 @@ module Jobs
         end
       else
         # SSO disabled
-        User.where(condition).includes(:user_stat, :groups).find_each do |user|
+        User.where(condition).includes(:user_profile, :user_stat, :groups).find_each do |user|
           user_info_array = get_base_user_array(user)
           user_info_array = add_custom_fields(user, user_info_array, user_field_ids)
           user_info_array = add_group_names(user, user_info_array)
@@ -152,7 +153,7 @@ module Jobs
 
     def get_header
       if @entity == 'user_list'
-        header_array = HEADER_ATTRS_FOR['user_list'] + HEADER_ATTRS_FOR['user_stats']
+        header_array = HEADER_ATTRS_FOR['user_list'] + HEADER_ATTRS_FOR['user_stats'] + HEADER_ATTRS_FOR['user_profile']
         header_array.concat(HEADER_ATTRS_FOR['user_sso']) if SiteSetting.enable_sso
         user_custom_fields = UserField.all
         if user_custom_fields.present?
@@ -180,7 +181,7 @@ module Jobs
 
       def get_base_user_array(user)
         user_array = []
-        user_array.push(user.id,escape_comma(user.name),user.username,user.email,escape_comma(user.title),user.created_at,user.last_seen_at,user.last_posted_at,user.last_emailed_at,user.trust_level,user.approved,user.suspended_at,user.suspended_till,user.blocked,user.active,user.admin,user.moderator,user.ip_address,user.user_stat.topics_entered,user.user_stat.posts_read_count,user.user_stat.time_read,user.user_stat.topic_count,user.user_stat.post_count,user.user_stat.likes_given,user.user_stat.likes_received)
+        user_array.push(user.id,escape_comma(user.name),user.username,user.email,escape_comma(user.title),user.created_at,user.last_seen_at,user.last_posted_at,user.last_emailed_at,user.trust_level,user.approved,user.suspended_at,user.suspended_till,user.blocked,user.active,user.admin,user.moderator,user.ip_address,user.user_stat.topics_entered,user.user_stat.posts_read_count,user.user_stat.time_read,user.user_stat.topic_count,user.user_stat.post_count,user.user_stat.likes_given,user.user_stat.likes_received,escape_comma(user.user_profile.location),user.user_profile.website,user.user_profile.views)
       end
 
       def add_single_sign_on(user, user_info_array)
diff --git a/spec/jobs/export_csv_file_spec.rb b/spec/jobs/export_csv_file_spec.rb
index 2f89d34aaf6..de188be2728 100644
--- a/spec/jobs/export_csv_file_spec.rb
+++ b/spec/jobs/export_csv_file_spec.rb
@@ -9,7 +9,7 @@ describe Jobs::ExportCsvFile do
   end
 
   let :user_list_header do
-    ['id','name','username','email','title','created_at','last_seen_at','last_posted_at','last_emailed_at','trust_level','approved','suspended_at','suspended_till','blocked','active','admin','moderator','ip_address','topics_entered','posts_read_count','time_read','topic_count','post_count','likes_given','likes_received','external_id','external_email', 'external_username', 'external_name', 'external_avatar_url']
+    ['id','name','username','email','title','created_at','last_seen_at','last_posted_at','last_emailed_at','trust_level','approved','suspended_at','suspended_till','blocked','active','admin','moderator','ip_address','topics_entered','posts_read_count','time_read','topic_count','post_count','likes_given','likes_received','location','website','views','external_id','external_email', 'external_username', 'external_name', 'external_avatar_url']
   end
 
   let :user_list_export do
@@ -23,10 +23,12 @@ describe Jobs::ExportCsvFile do
   it 'exports sso data' do
     SiteSetting.enable_sso = true
     user = Fabricate(:user)
+    user.user_profile.update_column(:location, "La La Land")
     user.create_single_sign_on_record(external_id: "123", last_payload: "xxx", external_email: 'test@test.com')
 
     user = to_hash(user_list_export.find{|u| u[0].to_i == user.id})
 
+    expect(user["location"]).to eq("La La Land")
     expect(user["external_id"]).to eq("123")
     expect(user["external_email"]).to eq("test@test.com")
   end