|
|
|
@ -124,6 +124,14 @@ namespace :carto do
|
|
|
|
|
puts "Finished. Total: #{total}. Errors: #{errors}"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
module LayersRake
|
|
|
|
|
def self.update_layer(layer, options, persisted)
|
|
|
|
|
layer.options = options
|
|
|
|
|
layer.user.viewer = false # To avoid validation issues
|
|
|
|
|
layer.save! if persisted
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
desc "Syncs all layers with the configuration from app_config"
|
|
|
|
|
task sync_basemaps_from_app_config: :environment do
|
|
|
|
|
include Carto::MapcappedVisualizationUpdater
|
|
|
|
@ -155,23 +163,23 @@ namespace :carto do
|
|
|
|
|
next unless visualization.user
|
|
|
|
|
begin
|
|
|
|
|
success = update_visualization_and_mapcap(visualization) do |vis, persisted|
|
|
|
|
|
# Find visualization tiled base layers
|
|
|
|
|
base_layers = vis.layers.select(&:tiled?)
|
|
|
|
|
next true unless base_layers.count.between?(1, 2) # Other kind of basemaps (e.g: plain color), skip
|
|
|
|
|
bottom_layer, labels_layer = base_layers.sort_by(&:order)
|
|
|
|
|
|
|
|
|
|
# Find basemap in configuration
|
|
|
|
|
class_name = bottom_layer.options['className']
|
|
|
|
|
attributes = basemaps_by_class_name[class_name]
|
|
|
|
|
next true unless attributes # Unknown basemap class: do nothing (e.g: custom basemap)
|
|
|
|
|
|
|
|
|
|
bottom_layer.options = attributes.except('default')
|
|
|
|
|
bottom_layer.user.viewer = false # To avoid validation issues
|
|
|
|
|
bottom_layer.save! if persisted
|
|
|
|
|
# Update bottom layer
|
|
|
|
|
LayersRake.update_layer(bottom_layer, attributes.except('default'), persisted)
|
|
|
|
|
|
|
|
|
|
# Update top layer (if present)
|
|
|
|
|
if labels_layer && attributes['labels']
|
|
|
|
|
default_labels_layer = Carto::LayerFactory.build_default_labels_layer(bottom_layer)
|
|
|
|
|
labels_layer.options = default_labels_layer.options
|
|
|
|
|
labels_layer.user.viewer = false # To avoid validation issues
|
|
|
|
|
labels_layer.save! if persisted
|
|
|
|
|
LayersRake.update_layer(labels_layer, default_labels_layer.options, persisted)
|
|
|
|
|
elsif labels_layer
|
|
|
|
|
STDERR.puts "WARN: Visualization #{vis.id} has label but basemap class #{class_name} does not"
|
|
|
|
|
elsif attributes['labels']
|
|
|
|
|