Skip to content

Commit 68f3b40

Browse files
authored
Merge pull request #111 from gtt-project/feature/configurable-issue-geometry-edit
Configurable editable geometry types and geojson upload on issue map
2 parents dcc9a67 + 6c8e9f2 commit 68f3b40

File tree

7 files changed

+92
-50
lines changed

7 files changed

+92
-50
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: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ en:
2222
label_gtt_settings: GTT
2323
label_gtt_settings_headline: GTT Settings
2424

25-
gtt_label_geometry: "API Key"
26-
gtt_text_settings_help: "Enter the API key. Leave empty if no key is required."
27-
gtt_text_settings_geometry_example: "2747491302261fbc47967ba62621af22"
25+
# gtt_label_geometry: "API Key"
26+
# gtt_text_settings_help: "Enter the API key. Leave empty if no key is required."
27+
# gtt_text_settings_geometry_example: "2747491302261fbc47967ba62621af22"
2828

2929
label_gtt: "GTT"
3030
label_gtt_bbox_filter: Location
@@ -48,19 +48,26 @@ en:
4848
gtt_settings_general_maxzoom_level: "Default map maximum zoom level"
4949
gtt_settings_general_fit_maxzoom_level: "Default map fit maximum zoom level"
5050

51-
gtt_settings_map_url: "API Service URL"
52-
gtt_settings_map_apikey: "API Key"
53-
gtt_settings_map_maxzoom_level: "Maximum map zoom level"
51+
# gtt_settings_map_url: "API Service URL"
52+
# gtt_settings_map_apikey: "API Key"
53+
# gtt_settings_map_maxzoom_level: "Maximum map zoom level"
5454

55-
gtt_settings_geocoder_url: "API Service URL"
56-
gtt_settings_geocoder_apikey: "API Key"
57-
gtt_settings_geocoder_address_field_name: "Address field name"
58-
gtt_settings_geocoder_district_field_name: "District field name"
59-
gtt_park_search_field_name: "Park search field name"
55+
# gtt_settings_geocoder_url: "API Service URL"
56+
# gtt_settings_geocoder_apikey: "API Key"
57+
# gtt_settings_geocoder_address_field_name: "Address field name"
58+
# gtt_settings_geocoder_district_field_name: "District field name"
59+
# gtt_park_search_field_name: "Park search field name"
60+
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"
6066

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

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

config/locales/ja.yml

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ ja:
1616
label_project_map: "プロジェクト 地図"
1717
label_user_map: "ユーザ 地図"
1818
label_name: タイトル
19-
label_nearby: "近く(緯度,軽度)"
19+
label_nearby: "近く(緯度,経度)"
2020
label_type: タイプ
2121
label_config: 構成
2222
label_gtt_settings: GTT
2323
label_gtt_settings_headline: GTTの設定
2424

25-
gtt_label_geometry: "APIキー"
26-
gtt_text_settings_help: "APIキーを入力してください。キーが不要の場合は空白にしてください。"
27-
gtt_text_settings_geometry_example: "2747491302261fbc47967ba62621af22"
25+
# gtt_label_geometry: "APIキー"
26+
# gtt_text_settings_help: "APIキーを入力してください。キーが不要の場合は空白にしてください。"
27+
# gtt_text_settings_geometry_example: "2747491302261fbc47967ba62621af22"
2828

2929
label_gtt: "GTT"
3030
label_gtt_bbox_filter: 場所
@@ -33,9 +33,9 @@ ja:
3333
label_gtt_tile_source: タイルソース
3434
label_gtt_tile_source_new: 新しいタイルソース
3535
label_gtt_tile_source_plural: タイルソース
36-
label_parameters: パラメーター
36+
label_parameters: パラメータ
3737
label_tab_general: "一般"
38-
label_tab_geocoder: "ジオコーダー"
38+
label_tab_geocoder: "ジオコーダ"
3939
label_tab_map: "タイルソース"
4040

4141
geocoder_options: "ジオコーダのオプション"
@@ -48,19 +48,26 @@ ja:
4848
gtt_settings_general_maxzoom_level: "既定の最大地図ズームレベル"
4949
gtt_settings_general_fit_maxzoom_level: "フィット時最大地図ズームレベル"
5050

51-
gtt_settings_map_url: "地図APIサービスのURL"
52-
gtt_settings_map_apikey: "地図APIキー"
53-
gtt_settings_map_maxzoom_level: "最大地図ズームレベル"
51+
# gtt_settings_map_url: "地図APIサービスのURL"
52+
# gtt_settings_map_apikey: "地図APIキー"
53+
# gtt_settings_map_maxzoom_level: "最大地図ズームレベル"
5454

55-
gtt_settings_geocoder_url: "ジオコーダAPIサービスのURL"
56-
gtt_settings_geocoder_apikey: "ジオコーダAPIキー"
57-
gtt_settings_geocoder_address_field_name: "住所フィールド名"
58-
gtt_settings_geocoder_district_field_name: "区フィールド名"
59-
gtt_park_search_field_name: "公園検索フィールド名"
55+
# gtt_settings_geocoder_url: "ジオコーダAPIサービスのURL"
56+
# gtt_settings_geocoder_apikey: "ジオコーダAPIキー"
57+
# gtt_settings_geocoder_address_field_name: "住所フィールド名"
58+
# gtt_settings_geocoder_district_field_name: "区フィールド名"
59+
# gtt_park_search_field_name: "公園検索フィールド名"
6060

61-
select_default_tracker_icon: "レポートの分野アイコンを選択:"
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+
67+
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

66-
text_osm_url_sample: "例: https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png"
73+
# 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)