Improve custom menu items integration for better performance
This commit is contained in:
parent
3b6bbee8b5
commit
dbbadbefaf
@ -1,6 +1,11 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
2.0.18
|
||||
++++++
|
||||
|
||||
- Performance improvement (#36)
|
||||
|
||||
2.0.17
|
||||
++++++
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
module AdditionalsMenuHelper
|
||||
def additionals_top_menu_setup
|
||||
return unless User.current.try(:hrm_user_type_id).nil?
|
||||
return if Additionals::REDMINE_HRM_SUPPORT
|
||||
|
||||
if Additionals.setting?(:remove_mypage)
|
||||
Redmine::MenuManager.map(:top_menu).delete(:my_page) if Redmine::MenuManager.map(:top_menu).exists?(:my_page)
|
||||
@ -51,19 +51,43 @@ module AdditionalsMenuHelper
|
||||
Redmine::MenuManager.map(:top_menu).push(menu_name, item[:url], menu_options)
|
||||
end
|
||||
|
||||
def additionals_custom_top_menu_item(num, user_roles)
|
||||
menu_name = 'custom_menu' + num.to_s
|
||||
item = {
|
||||
url: Additionals.settings[menu_name + '_url'],
|
||||
name: Additionals.settings[menu_name + '_name'],
|
||||
title: Additionals.settings[menu_name + '_title'],
|
||||
roles: Additionals.settings[menu_name + '_roles']
|
||||
}
|
||||
if item[:name].blank? || item[:url].blank? || item[:roles].nil?
|
||||
Redmine::MenuManager.map(:top_menu).delete(menu_name.to_sym) if Redmine::MenuManager.map(:top_menu).exists?(menu_name.to_sym)
|
||||
return
|
||||
def render_custom_top_menu_item
|
||||
items = additionals_build_custom_items
|
||||
return if items.empty?
|
||||
|
||||
user_roles = Role.givable
|
||||
.joins(:members).where(members: { user_id: User.current.id })
|
||||
.joins(members: :project).where(projects: { status: Project::STATUS_ACTIVE })
|
||||
.distinct
|
||||
.reorder(nil)
|
||||
.pluck(:id)
|
||||
|
||||
items.each do |item|
|
||||
additionals_custom_top_menu_item(item, user_roles)
|
||||
end
|
||||
end
|
||||
|
||||
def additionals_build_custom_items
|
||||
items = []
|
||||
Additionals::MAX_CUSTOM_MENU_ITEMS.times do |num|
|
||||
menu_name = "custom_menu#{num}"
|
||||
item = { menu_name: menu_name.to_sym,
|
||||
url: Additionals.settings[menu_name + '_url'],
|
||||
name: Additionals.settings[menu_name + '_name'],
|
||||
title: Additionals.settings[menu_name + '_title'],
|
||||
roles: Additionals.settings[menu_name + '_roles'] }
|
||||
|
||||
if item[:name].present? && item[:url].present? && item[:roles].present?
|
||||
items << item
|
||||
elsif Redmine::MenuManager.map(:top_menu).exists?(item[:menu_name])
|
||||
Redmine::MenuManager.map(:top_menu).delete(item[:menu_name])
|
||||
end
|
||||
end
|
||||
|
||||
items
|
||||
end
|
||||
|
||||
def additionals_custom_top_menu_item(item, user_roles)
|
||||
show_entry = false
|
||||
item[:roles].each do |role|
|
||||
if user_roles.empty? && role.to_i == Role::BUILTIN_ANONYMOUS
|
||||
@ -77,7 +101,7 @@ module AdditionalsMenuHelper
|
||||
end
|
||||
|
||||
user_roles.each do |user_role|
|
||||
if role.to_i == user_role.id.to_i
|
||||
if role.to_i == user_role
|
||||
show_entry = true
|
||||
break
|
||||
end
|
||||
@ -86,9 +110,9 @@ module AdditionalsMenuHelper
|
||||
end
|
||||
|
||||
if show_entry
|
||||
handle_top_menu_item(menu_name, item)
|
||||
elsif Redmine::MenuManager.map(:top_menu).exists?(menu_name.to_sym)
|
||||
Redmine::MenuManager.map(:top_menu).delete(menu_name.to_sym)
|
||||
handle_top_menu_item(item[:menu_name], item)
|
||||
elsif Redmine::MenuManager.map(:top_menu).exists?(item[:menu_name])
|
||||
Redmine::MenuManager.map(:top_menu).delete(item[:menu_name])
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -5,7 +5,5 @@
|
||||
= javascript_include_tag('noreferrer', plugin: 'additionals')
|
||||
= additionals_library_load(:font_awesome)
|
||||
= stylesheet_link_tag 'additionals', plugin: 'additionals'
|
||||
- if User.current.try(:hrm_user_type_id).nil?
|
||||
- user_roles = User.current.memberships.includes(:project).collect(&:roles).flatten.uniq
|
||||
- Additionals::MAX_CUSTOM_MENU_ITEMS.times do |i|
|
||||
- additionals_custom_top_menu_item(i, user_roles)
|
||||
- unless Additionals::REDMINE_HRM_SUPPORT
|
||||
- render_custom_top_menu_item
|
||||
|
@ -3,6 +3,7 @@ module Additionals
|
||||
SELECT2_INIT_ENTRIES = 20
|
||||
|
||||
LIST_SEPARATOR = ' » '.html_safe # rubocop:disable Rails/OutputSafety
|
||||
REDMINE_HRM_SUPPORT = Redmine::Plugin.installed?('redmine_hrm') ? true : false
|
||||
|
||||
class << self
|
||||
def setup
|
||||
|
@ -37,18 +37,16 @@ module Additionals
|
||||
end
|
||||
|
||||
def additionals_settings_tabs
|
||||
tabs = []
|
||||
tabs << { name: 'general', partial: 'additionals/settings/general', label: :label_general }
|
||||
tabs << { name: 'content', partial: 'additionals/settings/overview', label: :label_overview_page }
|
||||
tabs << { name: 'wiki', partial: 'additionals/settings/wiki', label: :label_wiki }
|
||||
tabs << { name: 'macros', partial: 'additionals/settings/macros', label: :label_macro_plural }
|
||||
tabs << { name: 'rules', partial: 'additionals/settings/issues', label: :label_issue_plural }
|
||||
tabs << { name: 'projects', partial: 'additionals/settings/projects', label: :label_project_plural }
|
||||
tabs << { name: 'users', partial: 'additionals/settings/users', label: :label_user_plural }
|
||||
if User.current.try(:hrm_user_type_id).nil?
|
||||
tabs << { name: 'menu', partial: 'additionals/settings/menu', label: :label_settings_menu }
|
||||
end
|
||||
tabs << { name: 'web', partial: 'additionals/settings/web_apis', label: :label_web_apis }
|
||||
tabs = [{ name: 'general', partial: 'additionals/settings/general', label: :label_general },
|
||||
{ name: 'content', partial: 'additionals/settings/overview', label: :label_overview_page },
|
||||
{ name: 'wiki', partial: 'additionals/settings/wiki', label: :label_wiki },
|
||||
{ name: 'macros', partial: 'additionals/settings/macros', label: :label_macro_plural },
|
||||
{ name: 'rules', partial: 'additionals/settings/issues', label: :label_issue_plural },
|
||||
{ name: 'projects', partial: 'additionals/settings/projects', label: :label_project_plural },
|
||||
{ name: 'users', partial: 'additionals/settings/users', label: :label_user_plural },
|
||||
{ name: 'web', partial: 'additionals/settings/web_apis', label: :label_web_apis }]
|
||||
|
||||
tabs << { name: 'menu', partial: 'additionals/settings/menu', label: :label_settings_menu } unless Additionals::REDMINE_HRM_SUPPORT
|
||||
|
||||
tabs
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user