Skip to content

Commit 6c8e9f2

Browse files
committed
Configurable editable geometry types and geojson upload on issue map
Signed-off-by: Ko Nagase <[email protected]>
1 parent d13349a commit 6c8e9f2

File tree

7 files changed

+64
-22
lines changed

7 files changed

+64
-22
lines changed

app/helpers/gtt_map_helper.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
module GttMapHelper
44

5-
def map_form_field(form, map, field: :geojson, bounds: nil, edit_mode: nil)
5+
def map_form_field(form, map, field: :geojson, bounds: nil, edit_mode: nil, upload: true)
66
safe_join [
77
form.hidden_field(field, id: 'geom'),
8-
map_tag(map: map, bounds: bounds, edit: edit_mode)
8+
map_tag(map: map, bounds: bounds, edit: edit_mode, upload: upload)
99
]
1010
end
1111

1212
def map_tag(map: nil, layers: map&.layers,
1313
geom: map.json, bounds: map.bounds,
14-
edit: nil, popup: nil)
14+
edit: nil, popup: nil, upload: true)
1515

1616
data = {
1717
geom: geom.is_a?(String) ? geom : geom.to_json
@@ -27,6 +27,7 @@ def map_tag(map: nil, layers: map&.layers,
2727

2828
data[:edit] = edit if edit
2929
data[:popup] = popup if popup
30+
data[:upload] = upload
3031

3132
uid = "ol-" + rand(36**8).to_s(36)
3233

app/views/redmine_gtt/hooks/_view_issues_form_details_top.html.erb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
((issue.new_record? && User.current.allowed_to?(:add_issues, issue.project)) ||
33
User.current.allowed_to?(:edit_issues, issue.project))
44
%>
5-
<%= map_form_field form, issue.map, bounds: issue.project.map.bounds, edit_mode: 'Point LineString Polygon' %>
5+
<%= map_form_field form, issue.map, bounds: issue.project.map.bounds,
6+
edit_mode: Setting.plugin_redmine_gtt['editable_geometry_types_on_issue_map'].join(' '),
7+
upload: Setting.plugin_redmine_gtt['enable_geojson_upload_on_issue_map'] == "true" %>
68
<% end %>
79

app/views/settings/gtt/_settings.html.erb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,27 @@
5858
</p>
5959
</div>
6060

61+
<div class="box tabular settings">
62+
<h3><%= l(:select_edit_geometry_settings) %></h3>
63+
64+
<p>
65+
<%= content_tag(:label, l(:label_editable_geometry_types_on_issue_map)) %>
66+
<!-- <%= hidden_field_tag('settings[editable_geometry_types_on_issue_map][]', '') %> -->
67+
<% ["Point", "LineString", "Polygon"].each do |g| %>
68+
<label class="block">
69+
<% value = @settings['editable_geometry_types_on_issue_map'].present? ? @settings['editable_geometry_types_on_issue_map'].include?(g) : false %>
70+
<%= check_box_tag('settings[editable_geometry_types_on_issue_map][]', g, value, id: nil) %>
71+
<%= l_or_humanize(g.downcase, prefix: 'label_gtt_')%>
72+
</label>
73+
<% end %>
74+
</p>
75+
76+
<p>
77+
<%= content_tag(:label, l(:label_enable_geojson_upload_on_issue_map)) %>
78+
<%= check_box_tag 'settings[enable_geojson_upload_on_issue_map]', true, @settings[:enable_geojson_upload_on_issue_map] %>
79+
</p>
80+
</div>
81+
6182
<div class="box tabular settings">
6283
<h3><%= l(:select_default_geocoder_settings) %></h3>
6384

config/locales/en.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,16 @@ en:
5858
# gtt_settings_geocoder_district_field_name: "District field name"
5959
# gtt_park_search_field_name: "Park search field name"
6060

61+
label_gtt_point: "Point"
62+
label_gtt_linestring: "LineString"
63+
label_gtt_polygon: "Polygon"
64+
label_editable_geometry_types_on_issue_map: "Editable geometry types on issue map"
65+
label_enable_geojson_upload_on_issue_map: "Enable GeoJSON upload on issue map"
66+
6167
select_default_tracker_icon: "Select default tracker icon:"
6268
select_default_status_color: "Select default status color:"
6369
select_default_map_settings: "Set default map settings:"
70+
select_edit_geometry_settings: "Set edit geometry settings:"
6471
select_default_geocoder_settings: "Set Geocoder settings:"
6572

6673
# text_osm_url_sample: For example https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png

config/locales/ja.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,16 @@ ja:
5858
# gtt_settings_geocoder_district_field_name: "区フィールド名"
5959
# gtt_park_search_field_name: "公園検索フィールド名"
6060

61+
label_gtt_point: "ポイント"
62+
label_gtt_linestring: "ライン"
63+
label_gtt_polygon: "ポリゴン"
64+
label_editable_geometry_types_on_issue_map: "チケット地図上で編集可能なジオメトリ種別"
65+
label_enable_geojson_upload_on_issue_map: "チケット地図上でGeoJSONアップロードを有効化"
66+
6167
select_default_tracker_icon: "トラッカーアイコンを選択:"
6268
select_default_status_color: "ステータス色を選択:"
6369
select_default_map_settings: "地図の初期値を設定:"
70+
select_edit_geometry_settings: "ジオメトリ編集時の設定:"
6471
select_default_geocoder_settings: "ジオコーダの設定:"
6572

6673
# text_osm_url_sample: "例: https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png"

init.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
'default_map_zoom_level' => 13,
2424
'default_map_maxzoom_level' => 19,
2525
'default_map_fit_maxzoom_level' => 17,
26-
'default_geocoder_options' => '{}'
26+
'default_geocoder_options' => '{}',
27+
'editable_geometry_types_on_issue_map' => ["Point"],
28+
'enable_geojson_upload_on_issue_map' => false
2729
},
2830
partial: 'settings/gtt/settings'
2931
)

src/components/gtt-client.ts

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -380,24 +380,26 @@ export class GttClient {
380380
})
381381

382382
// Upload button
383-
editbar.addControl(new Button({
384-
html: '<i class="gtt-icon-book" ></i>',
385-
title: 'Upload GeoJSON',
386-
handleClick: () => {
387-
const data = prompt("Please paste a GeoJSON geometry here")
388-
if (data !== null) {
389-
const features = new GeoJSON().readFeatures(
390-
JSON.parse(data), {
391-
featureProjection: 'EPSG:3857'
392-
}
393-
)
394-
this.vector.getSource().clear()
395-
this.vector.getSource().addFeatures(features)
396-
this.updateForm(features)
397-
this.zoomToExtent()
383+
if (this.contents.upload === "true") {
384+
editbar.addControl(new Button({
385+
html: '<i class="gtt-icon-book" ></i>',
386+
title: 'Upload GeoJSON',
387+
handleClick: () => {
388+
const data = prompt("Please paste a GeoJSON geometry here")
389+
if (data !== null) {
390+
const features = new GeoJSON().readFeatures(
391+
JSON.parse(data), {
392+
featureProjection: 'EPSG:3857'
393+
}
394+
)
395+
this.vector.getSource().clear()
396+
this.vector.getSource().addFeatures(features)
397+
this.updateForm(features)
398+
this.zoomToExtent()
399+
}
398400
}
399-
}
400-
}))
401+
}))
402+
}
401403
}
402404

403405
setPopover() {

0 commit comments

Comments
 (0)