cartodb/app/models/visualization/table_blender.rb
2020-06-15 10:58:47 +08:00

48 lines
1.3 KiB
Ruby

require_dependency 'map/copier'
module CartoDB
module Visualization
class TableBlender
def initialize(user, tables=[])
@user = user
@tables = tables
end
def blend
raise "Viewer users can't blend tables" if user.viewer
maps = tables.map(&:map)
copier = CartoDB::Map::Copier.new
destination_map = copier.new_map_from(maps.first)
destination_map.save
if @user.builder_enabled?
base_layer = Carto::LayerFactory.build_default_base_layer(@user)
destination_map.layers << base_layer
if base_layer.supports_labels_layer?
destination_map.layers << Carto::LayerFactory.build_default_labels_layer(base_layer)
end
else
copier.copy_base_layer(maps.first, destination_map)
end
maps.each { |map| copier.copy_data_layers(map, destination_map, user) }
destination_map.user_id = user.id
destination_map.save
destination_map
end
def blended_privacy
return Carto::Visualization::PRIVACY_PRIVATE if tables.any?(&:private?)
return Carto::Visualization::PRIVACY_LINK if tables.any?(&:public_with_link_only?)
Carto::Visualization::PRIVACY_PUBLIC
end
private
attr_reader :tables, :user
end
end
end