101 lines
3.3 KiB
Ruby
101 lines
3.3 KiB
Ruby
require_relative '../../../helpers/carto/html_safe'
|
|
require_dependency 'carto/api/vizjson_presenter'
|
|
|
|
module Carto
|
|
module Admin
|
|
class VisualizationPublicMapAdapter
|
|
extend Forwardable
|
|
include Carto::HtmlSafe
|
|
GEOMETRY_MAPPING = {
|
|
'st_multipolygon' => 'polygon',
|
|
'st_polygon' => 'polygon',
|
|
'st_multilinestring' => 'line',
|
|
'st_linestring' => 'line',
|
|
'st_multipoint' => 'point',
|
|
'st_point' => 'point'
|
|
}
|
|
|
|
delegate [
|
|
:type_slide?, :derived?, :organization, :organization?, :id,
|
|
:password_protected?, :varnish_key, :related_tables, :password_valid?, :get_auth_tokens, :table, :name,
|
|
:overlays, :created_at, :updated_at, :description, :mapviews, :geometry_types, :privacy, :tags,
|
|
:surrogate_key, :has_password?, :total_mapviews, :is_viewable_by_user?, :is_accesible_by_user?,
|
|
:can_be_cached?, :is_privacy_private?, :source, :kind_raster?, :has_read_permission?, :has_write_permission?,
|
|
:open_in_editor?, :version, :kind, :public?, :public_with_link?, :user_table, :liked_by?
|
|
] => :visualization
|
|
|
|
attr_reader :visualization
|
|
|
|
def initialize(visualization, current_viewer, context)
|
|
@visualization = visualization
|
|
@current_viewer = current_viewer
|
|
@context = context
|
|
end
|
|
|
|
def to_vizjson(options = {})
|
|
Carto::Api::VizJSONPresenter.new(@visualization, $tables_metadata).to_vizjson(options)
|
|
end
|
|
|
|
def is_owner?(user)
|
|
@visualization.owner?(user)
|
|
end
|
|
|
|
def to_hash(options={})
|
|
# TODO: using an Api presenter here smells, refactor
|
|
presenter = Carto::Api::VisualizationPresenter.new(@visualization, @current_viewer, @context, options.merge(show_stats: false))
|
|
options.delete(:public_fields_only) === true ? presenter.to_public_poro : presenter.to_poro
|
|
end
|
|
|
|
def map
|
|
Carto::Admin::MapPublicMapAdapter.new(@visualization.map)
|
|
end
|
|
|
|
def user
|
|
Carto::Admin::UserPublicMapAdapter.new(@visualization.user)
|
|
end
|
|
|
|
# TODO: remove is_ prefixed methods from visualization
|
|
def private?
|
|
@visualization.private?
|
|
end
|
|
|
|
def related_canonical_visualizations
|
|
@visualization.related_canonical_visualizations.map { |rv|
|
|
Carto::Admin::VisualizationPublicMapAdapter.new(rv, @current_viewer, @context) if rv.public?
|
|
}.compact
|
|
end
|
|
|
|
def related_visualizations_geometry_types
|
|
related_canonical_visualizations.collect(&:geometry_types).flatten.uniq
|
|
end
|
|
|
|
def related_tables_geometry_types
|
|
related_tables.collect(&:geometry_types).flatten.uniq
|
|
end
|
|
|
|
def related_visualizations_simple_geometry_types
|
|
simplify_geometry_types(related_visualizations_geometry_types)
|
|
end
|
|
|
|
def related_tables_simple_geometry_types
|
|
simplify_geometry_types(related_tables_geometry_types)
|
|
end
|
|
|
|
def map_zoom
|
|
map.nil? ? nil : map.zoom
|
|
end
|
|
|
|
def display_name_or_name
|
|
@visualization.display_name.nil? ? @visualization.name : @visualization.display_name
|
|
end
|
|
|
|
private
|
|
|
|
def simplify_geometry_types(geometry_types)
|
|
geometry_types.map { |gt| GEOMETRY_MAPPING.fetch(gt.downcase, "unknown: #{gt}") }
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|