Skip to content

Commit

Permalink
Merge branch '151-show-hide-geolocated-elements-from-the-map-as-an-ad…
Browse files Browse the repository at this point in the history
…min' into 'main'

Resolve "Show/Hide geolocated elements from the map as an admin"

See merge request decidim/decidim-module-geo!140
  • Loading branch information
Hadrien Froger committed Oct 16, 2024
2 parents 3a88521 + 722505b commit adb2a51
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 19 deletions.
22 changes: 9 additions & 13 deletions app/cells/decidim/geo/content_blocks/geo_maps_cell.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,7 @@ def insert_map
not_geolocated: ActionController::Base.helpers.asset_pack_path("media/images/not-geolocated.svg")
},
filters: (@options[:filters] || []).concat([{ timeFilter: { time: "active" } }]),
map_config: {
lat: geo_config[:latitude],
lng: geo_config[:longitude],
tile_layer: geo_config[:tile],
zoom: geo_config[:zoom],
},
map_config: map_config,
active_manifests: ::Decidim::Geo.registry.active_manifests(&:keys),
is_index: index?
}.with_indifferent_access
Expand Down Expand Up @@ -149,17 +144,18 @@ def current_component?
current_component.present?
end

def geo_config
def map_config
{
latitude: model.try(:latitude).nil? ? geo_config_default.latitude : model.latitude,
longitude: model.try(:longitude).nil? ? geo_config_default.longitude : model.longitude,
tile: Decidim::Geo::GeoConfig.geo_config_default.tile,
zoom: Decidim::Geo::GeoConfig.geo_config_default.zoom,
lat: model.try(:latitude).nil? ? config.latitude : model.latitude,
lng: model.try(:longitude).nil? ? config.longitude : model.longitude,
tile_layer: config.tile,
zoom: config.zoom,
force_geo_filter: config.default_geoencoded_filter
}.to_h
end

def geo_config_default
Decidim::Geo::GeoConfig.geo_config_default
def config
@config ||= Decidim::Geo::GeoConfig.geo_config_default
end
end
end
Expand Down
3 changes: 2 additions & 1 deletion app/commands/decidim/geo/admin/update_geo_config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ def attributes
zoom: form.zoom,
tile: form.tile,
only_assemblies: form.only_assemblies,
only_processes: form.only_processes
only_processes: form.only_processes,
default_geoencoded_filter: form.default_geoencoded_filter
}
end
end
Expand Down
3 changes: 2 additions & 1 deletion app/forms/decidim/geo/admin/geo_config_form.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ class GeoConfigForm < Form
attribute :tile, String
attribute :only_assemblies, Boolean
attribute :only_processes, Boolean

attribute :default_geoencoded_filter, Integer

alias organization current_organization
end
end
Expand Down
5 changes: 3 additions & 2 deletions app/models/decidim/geo/geo_config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@ module Geo
# The data store for geo configuration default.
class GeoConfig < ApplicationRecord
self.table_name = "decidim_geo_configs"

enum default_geoencoded_filter: { force_geoencoded: 0, no_force_geoencoded: 1 }
validates :longitude, :latitude, :zoom, presence: true

def self.geo_config_default
Decidim::Geo::GeoConfig
.first_or_create(latitude: 0,
longitude: 0,
zoom: 13,
tile: tile_layer_default)
tile: tile_layer_default,
default_geoencoded_filter: 1)
end

def self.tile_layer_default
Expand Down
2 changes: 2 additions & 0 deletions app/packs/src/decidim/geo/ui/FilterModal.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,8 @@ class FilterModal {
);
}
geoFields(points) {
const {map_config: mapConfig} = this.config();
if(mapConfig?.force_geo_filter === "force_geoencoded") return;
const i18n = this.i18n();
const i18nPrefix = "decidim_geo.filters";

Expand Down
17 changes: 17 additions & 0 deletions app/views/decidim/geo/admin/geo_configs/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,21 @@
</div>
</div>
</div>
<div class="card-divider">
<h2 class="card-title">
<%= t("title", scope: "decidim.geo.admin.geo_configs.default_filter") %>
</h2>
</div>
<div class="card-section">
<div class="row">
<p > <%= t("help_text", scope: "decidim.geo.admin.geo_configs.default_filter") %></p>
</div>
<div class="row">
<div class="columns xlarge-6">
<%= form.select :default_geoencoded_filter, options_for_select(Decidim::Geo::GeoConfig::default_geoencoded_filters.map do |key, value|
[t(key, scope: "decidim.geo.admin.geo_configs.default_filter.geoencoded_filter.fields"), value]
end, form.object.default_geoencoded_filter), label: t("label", scope: "decidim.geo.admin.geo_configs.default_filter.geoencoded_filter") %>
</div>
</div>
</div>
</div>
13 changes: 12 additions & 1 deletion config/locales/decidim-geo.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,20 @@ en:
admin:
geo_configs:
map_config_title: Map Configurations
spaces_config_title: Participatory Spaces Configurations
spaces_config_title: Configurations for Participatory Spaces
only_assemblies: Display only assemblies in Assemblies
only_processes: Display only processes in Processes

default_filter:
title: Available points
help_text: |
Configure the available points for Decidim Geo. This configuration applies to all the platform.
geoencoded_filter:
label: Filter points by location
fields:
force_geoencoded: "Only points in the map"
no_force_geoencoded: "All points"
default_geoencoded_filter: Filter
index:
title: Configurations
save: Save
Expand Down
5 changes: 5 additions & 0 deletions db/migrate/20241014122841_add_geo_config_default_filters.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddGeoConfigDefaultFilters < ActiveRecord::Migration[6.1]
def change
add_column :decidim_geo_configs, :default_geoencoded_filter, :integer, default: 0
end
end
6 changes: 5 additions & 1 deletion lib/decidim/geo/filters/geo_query.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ def initialize(organization, current_user, params, locale)

def results
query = Decidim::Geo::Index.all
query = query.geolocated if geolocated? || config.force_geoencoded?
return query.indexed if graphql_params.empty?

query = query.indexed if only_indexed?
query = query.geolocated if geolocated?
query = query.virtual if virtual?
# Filter on scopes
unless scope_ids_params.empty?
Expand Down Expand Up @@ -83,6 +83,10 @@ def results

private

def config
@config ||= Decidim::Geo::GeoConfig.geo_config_default
end

def active_manifests_names
@active_manifests_names ||= ::Decidim::Geo.registry.active_manifests(&:keys)
end
Expand Down

0 comments on commit adb2a51

Please sign in to comment.