|
require File.join(File.dirname(__FILE__), '..', 'app', 'models', 'share_visibility') |
|
require File.join(File.dirname(__FILE__), '..', 'app', 'models', 'contact') |
|
require File.join(File.dirname(__FILE__), '..', 'app', 'models', 'user') |
|
require File.join(File.dirname(__FILE__), '..', 'app', 'models', 'profile') |
|
require File.join(File.dirname(__FILE__), '..', 'app', 'models', 'person') |
|
|
|
class ShareVisibilityConverter |
|
RECENT = 2 # number of weeks to do in the migration |
|
def self.copy_hidden_share_visibilities_to_users(only_recent = false) |
|
query = ShareVisibility.where(:hidden => true).includes(:contact => :user) |
|
query = query.where('share_visibilities.updated_at > ?', RECENT.weeks.ago) if only_recent |
|
count = query.count |
|
puts "Updating #{count} records in batches of 1000..." |
|
|
|
batch_count = 1 |
|
query.find_in_batches do |visibilities| |
|
puts "Updating batch ##{batch_count} of #{(count/1000)+1}..." |
|
batch_count += 1 |
|
visibilities.each do |visibility| |
|
type = visibility.shareable_type |
|
id = visibility.shareable_id.to_s |
|
u = visibility.contact.user |
|
u.hidden_shareables ||= {} |
|
u.hidden_shareables[type] ||= [] |
|
u.hidden_shareables[type] << id unless u.hidden_shareables[type].include?(id) |
|
u.save!(:validate => false) |
|
end |
|
end |
|
end |
|
end |