Initial commit
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
require 'carto/api/vizjson3_presenter'
|
||||
require 'carto/api/layer_presenter'
|
||||
|
||||
require_dependency 'carto/tracking/events'
|
||||
require_dependency 'carto/visualization_migrator'
|
||||
|
||||
module Carto
|
||||
module Builder
|
||||
class VisualizationsController < BuilderController
|
||||
include VisualizationsControllerHelper
|
||||
include Carto::VisualizationMigrator
|
||||
|
||||
ssl_required :show
|
||||
|
||||
before_filter :load_derived_visualization,
|
||||
:redirect_to_editor_if_forced,
|
||||
:auto_migrate_visualization_if_possible, only: :show
|
||||
before_filter :authors_only
|
||||
before_filter :editable_visualizations_only, :load_carto_viewer, only: :show
|
||||
|
||||
# TODO: remove this when analysis logic lives in the backend
|
||||
before_filter :ensure_source_analyses, unless: :has_analyses?
|
||||
|
||||
after_filter :update_user_last_activity,
|
||||
:track_builder_visit, only: :show
|
||||
|
||||
layout 'application_builder'
|
||||
|
||||
def show
|
||||
@visualization_data = Carto::Api::VisualizationPresenter.new(@visualization, current_viewer, self).to_poro
|
||||
@layers_data = @visualization.layers.map do |l|
|
||||
Carto::Api::LayerPresenter.new(l, with_style_properties: true).to_poro(migrate_builder_infowindows: true)
|
||||
end
|
||||
@vizjson = generate_anonymous_map_vizjson3(@visualization)
|
||||
@state = @visualization.state.json
|
||||
@analyses_data = @visualization.analyses.map { |a| Carto::Api::AnalysisPresenter.new(a).to_poro }
|
||||
@basemaps = current_viewer.basemaps
|
||||
@overlays_data = @visualization.overlays.map do |overlay|
|
||||
Carto::Api::OverlayPresenter.new(overlay).to_poro
|
||||
end
|
||||
latest_mapcap = @visualization.latest_mapcap
|
||||
@mapcaps_data = latest_mapcap ? [Carto::Api::MapcapPresenter.new(latest_mapcap).to_poro] : []
|
||||
@google_maps_qs = @visualization.user.google_maps_query_string
|
||||
|
||||
@builder_notifications = notifications(:builder)
|
||||
@dashboard_notifications = notifications(:dashboard)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_carto_viewer
|
||||
@carto_viewer = current_viewer && Carto::User.where(id: current_viewer.id).first
|
||||
end
|
||||
|
||||
def notifications(category)
|
||||
@carto_viewer ? @carto_viewer.notifications_for_category(category) : {}
|
||||
end
|
||||
|
||||
def redirect_to_editor_if_forced
|
||||
if !current_user.builder_enabled? || @visualization.open_in_editor?
|
||||
redirect_to CartoDB.url(self, 'public_visualizations_show_map', params: { id: params[:id] },
|
||||
user: current_user)
|
||||
end
|
||||
end
|
||||
|
||||
def load_derived_visualization
|
||||
@visualization = load_visualization_from_id_or_name(params[:id])
|
||||
render_404 unless @visualization && @visualization.derived?
|
||||
end
|
||||
|
||||
def authors_only
|
||||
unauthorized unless !current_user.nil? && @visualization.writable_by?(current_user)
|
||||
end
|
||||
|
||||
def editable_visualizations_only
|
||||
render_404 unless @visualization.editable?
|
||||
end
|
||||
|
||||
def has_analyses?
|
||||
@visualization.analyses.any?
|
||||
end
|
||||
|
||||
def ensure_source_analyses
|
||||
@visualization.add_source_analyses
|
||||
@visualization.reload
|
||||
end
|
||||
|
||||
def unauthorized
|
||||
redirect_to CartoDB.url(self, 'builder_visualization_public_embed',
|
||||
params: { visualization_id: request.params[:id] })
|
||||
end
|
||||
|
||||
def track_builder_visit
|
||||
current_viewer_id = current_viewer.id
|
||||
Carto::Tracking::Events::VisitedPrivatePage.new(current_viewer_id,
|
||||
user_id: current_viewer_id,
|
||||
page: 'builder').report
|
||||
end
|
||||
|
||||
def auto_migrate_visualization_if_possible
|
||||
if version_needs_migration?(@visualization.version, 3) && @visualization.can_be_automatically_migrated_to_v3?
|
||||
@visualization.version = 3
|
||||
@visualization.save
|
||||
migrate_visualization_to_v3(@visualization)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user