Feature #6984 » 6984-enable-to-reorder-project-menu.patch
| app/assets/stylesheets/application.css | ||
|---|---|---|
| 444 | 444 |
.query-columns select {
|
| 445 | 445 |
min-width:150px; |
| 446 | 446 |
} |
| 447 |
.menu-items label {
|
|
| 448 |
display:block; |
|
| 449 |
} |
|
| 450 |
.menu-items select {
|
|
| 451 |
min-width: 200px; |
|
| 452 |
} |
|
| 447 | 453 | |
| 448 | 454 |
.query-totals {text-align:right; margin-top:-2.3em;}
|
| 449 | 455 |
.query-totals>span:not(:first-child) {margin-left:0.6em;}
|
| app/views/settings/_projects.html.erb | ||
|---|---|---|
| 39 | 39 |
</p> |
| 40 | 40 |
</fieldset> |
| 41 | 41 | |
| 42 |
<fieldset class="box"> |
|
| 43 |
<legend><%= l(:setting_project_menu_order) %></legend> |
|
| 44 |
<div id="list-definition"> |
|
| 45 |
<% menu_order_tag_id = "project_menu_order" %> |
|
| 46 |
<% project_menu_items = menu_items(:project_menu) %> |
|
| 47 |
<div> |
|
| 48 |
<div class="menu-items"> |
|
| 49 |
<%= label_tag menu_order_tag_id, l(:label_menu_order) %> |
|
| 50 |
<%= select_tag "settings[#{menu_order_tag_id}]",
|
|
| 51 |
options_for_select(project_menu_items.map {|m| [m.caption, m.name]}),
|
|
| 52 |
:id => menu_order_tag_id, |
|
| 53 |
:multiple => true, :size => project_menu_items.count %> |
|
| 54 |
</div> |
|
| 55 |
<div class="buttons"> |
|
| 56 |
<input type="button" value="⇈" onclick="moveOptionTop(this.form.<%= menu_order_tag_id %>);" /> |
|
| 57 |
<input type="button" value="↑" onclick="moveOptionUp(this.form.<%= menu_order_tag_id %>);" /> |
|
| 58 |
<input type="button" value="↓" onclick="moveOptionDown(this.form.<%= menu_order_tag_id %>);" /> |
|
| 59 |
<input type="button" value="⇊" onclick="moveOptionBottom(this.form.<%= menu_order_tag_id %>);" /> |
|
| 60 |
</div> |
|
| 61 |
<%= javascript_tag do %> |
|
| 62 |
$(document).ready(function(){
|
|
| 63 |
$('.menu-items').closest('form').submit(function(){
|
|
| 64 |
$('#<%= menu_order_tag_id %> option:not(:disabled)').prop('selected', true);
|
|
| 65 |
}); |
|
| 66 |
}); |
|
| 67 |
<% end %> |
|
| 68 |
</div> |
|
| 69 |
</div> |
|
| 70 |
</fieldset> |
|
| 71 | ||
| 42 | 72 | |
| 43 | 73 |
<%= submit_tag l(:button_save) %> |
| 44 | 74 |
<% end %> |
| config/locales/en.yml | ||
|---|---|---|
| 516 | 516 |
setting_timelog_accept_future_dates: Accept time logs on future dates |
| 517 | 517 |
setting_show_status_changes_in_mail_subject: Show status changes in issue mail notifications subject |
| 518 | 518 |
setting_project_list_defaults: Projects list defaults |
| 519 |
setting_project_menu_order: Project menu order |
|
| 520 |
label_menu_order: order |
|
| 519 | 521 |
setting_twofa: Two-factor authentication |
| 520 | 522 | |
| 521 | 523 |
permission_add_project: Create project |
| config/locales/ja.yml | ||
|---|---|---|
| 1299 | 1299 |
label_display_type: 表示形式 |
| 1300 | 1300 |
label_display_type_list: リスト |
| 1301 | 1301 |
label_display_type_board: ボード |
| 1302 |
setting_project_menu_order: プロジェクトメニューの並び順 |
|
| 1303 |
label_menu_order: 順序 |
|
| 1302 | 1304 |
label_my_bookmarks: My bookmarks |
| 1303 | 1305 |
label_import_time_entries: 作業時間のインポート |
| 1304 | 1306 |
field_toolbar_language_options: ツールバーのコードハイライトボタンで使用する言語 |
| config/settings.yml | ||
|---|---|---|
| 344 | 344 |
default: 1 |
| 345 | 345 |
show_status_changes_in_mail_subject: |
| 346 | 346 |
default: 1 |
| 347 |
project_menu_order: |
|
| 348 |
serialized: true |
|
| 349 |
default: |
|
| 350 |
- new_object |
|
| 351 |
- overview |
|
| 352 |
- activity |
|
| 353 |
- roadmap |
|
| 354 |
- issues |
|
| 355 |
- new_issue |
|
| 356 |
- time_entries |
|
| 357 |
- gantt |
|
| 358 |
- calendar |
|
| 359 |
- news |
|
| 360 |
- documents |
|
| 361 |
- wiki |
|
| 362 |
- boards |
|
| 363 |
- files |
|
| 364 |
- repository |
|
| 365 |
- settings |
|
| lib/redmine/menu_manager.rb | ||
|---|---|---|
| 193 | 193 | |
| 194 | 194 |
def menu_items_for(menu, project=nil) |
| 195 | 195 |
items = [] |
| 196 |
Redmine::MenuManager.items(menu).root.children.each do |node|
|
|
| 196 |
menu_items(menu).each do |node|
|
|
| 197 | 197 |
if node.allowed?(User.current, project) |
| 198 | 198 |
if block_given? |
| 199 | 199 |
yield node |
| ... | ... | |
| 205 | 205 |
return block_given? ? nil : items |
| 206 | 206 |
end |
| 207 | 207 | |
| 208 |
def menu_items(menu) |
|
| 209 |
items = Redmine::MenuManager.items(menu).root.children |
|
| 210 |
if Setting.available_settings.include?("#{menu.to_s}_order")
|
|
| 211 |
items.sort_by.with_index do |menu_item, i| |
|
| 212 |
(Setting.send("#{menu.to_s}_order") || []).index { |menu_name| menu_item.name.to_s == menu_name.to_s } || i
|
|
| 213 |
end |
|
| 214 |
else |
|
| 215 |
items |
|
| 216 |
end |
|
| 217 |
end |
|
| 218 | ||
| 208 | 219 |
def extract_node_details(node, project=nil) |
| 209 | 220 |
item = node |
| 210 | 221 |
url = |
| test/unit/lib/redmine/menu_manager/menu_helper_test.rb | ||
|---|---|---|
| 381 | 381 |
items = menu_items_for(menu_name, Project.find(1)) |
| 382 | 382 |
assert_equal 1, items.size |
| 383 | 383 |
end |
| 384 | ||
| 385 |
def test_menu_items_should_return_orderd_items_when_project_menu_is_ordered |
|
| 386 |
Redmine::MenuManager.items(:project_menu).root.children.clear |
|
| 387 |
Redmine::MenuManager.map :project_menu do |menu| |
|
| 388 |
menu.push(:project_menu_1, '/', {})
|
|
| 389 |
menu.push(:project_menu_2, '/', {})
|
|
| 390 |
menu.push(:project_menu_3, '/', {})
|
|
| 391 |
end |
|
| 392 |
Redmine::MenuManager.map :other_menu do |menu| |
|
| 393 |
menu.push(:other_menu_1, '/', {})
|
|
| 394 |
menu.push(:other_menu_2, '/', {})
|
|
| 395 |
menu.push(:other_menu_3, '/', {})
|
|
| 396 |
end |
|
| 397 | ||
| 398 |
with_settings :project_menu_order => [:project_menu_3, :project_menu_1, :project_menu_2] do |
|
| 399 |
project_menu_items = menu_items(:project_menu) |
|
| 400 |
assert_equal 3, project_menu_items.size |
|
| 401 |
assert_equal [:project_menu_3, :project_menu_1, :project_menu_2], project_menu_items.map(&:name) |
|
| 402 | ||
| 403 |
other_menu_items = menu_items(:other_menu) |
|
| 404 |
assert_equal 3, other_menu_items.size |
|
| 405 |
assert_equal [:other_menu_1, :other_menu_2, :other_menu_3], other_menu_items.map(&:name) |
|
| 406 |
end |
|
| 407 |
end |
|
| 384 | 408 |
end |
| test/unit/setting_test.rb | ||
|---|---|---|
| 149 | 149 |
def test_default_text_formatting_for_new_installations_is_common_mark |
| 150 | 150 |
assert_equal 'common_mark', Setting.text_formatting |
| 151 | 151 |
end |
| 152 | ||
| 153 |
def test_project_menu_order_should_return_project_menu_names |
|
| 154 |
assert_equal %w(new_object overview activity roadmap issues new_issue time_entries gantt calendar news documents wiki boards files repository settings), Setting.project_menu_order |
|
| 155 |
end |
|
| 152 | 156 |
end |