forked from Gitlink/forgeplus
109 lines
3.1 KiB
Ruby
109 lines
3.1 KiB
Ruby
class SettingsController < ApplicationController
|
|
def show
|
|
@old_projects_url = nil
|
|
get_navbar
|
|
get_add_menu
|
|
get_common_menu
|
|
get_sub_competitions
|
|
get_personal_menu
|
|
get_third_party
|
|
get_third_party_new
|
|
get_top_system_notification
|
|
end
|
|
|
|
private
|
|
def get_navbar
|
|
@navbar = default_laboratory.navbar
|
|
if User.current.logged?
|
|
pernal_index = {"name"=>"个人主页", "link"=>get_site_url("url", "#{Rails.application.config_for(:configuration)['platform_url']}/current_user"), "hidden"=>false}
|
|
@navbar << pernal_index
|
|
end
|
|
end
|
|
|
|
def get_add_menu
|
|
@add = []
|
|
Site.add.select(:id, :name, :url, :key).to_a.map(&:serializable_hash).each do |site|
|
|
hash = {}
|
|
site.each {|k, v|
|
|
hash.merge!("#{k}": get_site_url(k, v))
|
|
}
|
|
@add << hash
|
|
end
|
|
end
|
|
|
|
def get_sub_competitions
|
|
@sub_competitions = []
|
|
Site.competition.pluck(:key).uniq.each do |key|
|
|
hash = {"identifier": "#{key.to_s}"}
|
|
hash.merge!("list": Site.competition.where(key: key).select(:id, :name, :url, :key).to_a.map(&:serializable_hash))
|
|
@sub_competitions << hash
|
|
end
|
|
end
|
|
|
|
def get_common_menu
|
|
@common = {}
|
|
Site.common.select(:url, :key).each do |site|
|
|
next if site["url"].to_s.include?("current_user") && !User.current.logged?
|
|
@common.merge!("#{site["key"]}": append_http(reset_site_url(site["url"])))
|
|
end
|
|
end
|
|
|
|
def get_personal_menu
|
|
@personal = []
|
|
if User.current.logged?
|
|
Site.personal.select(:id, :name, :url, :key).to_a.map(&:serializable_hash).each do |site|
|
|
hash = {}
|
|
site.each {|k, v|
|
|
hash.merge!("#{k}": get_site_url(k, v))
|
|
}
|
|
@personal << hash
|
|
end
|
|
end
|
|
end
|
|
|
|
def get_third_party
|
|
@third_party = []
|
|
@third_party << {
|
|
name: 'educoder',
|
|
url: EducoderOauth.oauth_url
|
|
}
|
|
end
|
|
|
|
def get_third_party_new
|
|
@third_party_new = []
|
|
@third_party_new << {
|
|
name: 'educoder',
|
|
url: EducoderOauth.oauth_url,
|
|
method: 'get'
|
|
}
|
|
platform_url = Rails.application.config_for(:configuration)['platform_url']
|
|
config = Rails.application.config_for(:configuration)
|
|
(config.dig("oauth").keys - ["educoder", "wechat"]).each do |provider|
|
|
@third_party_new << {
|
|
name: provider,
|
|
url: "#{platform_url}/auth/#{provider}",
|
|
method: 'get'
|
|
}
|
|
end
|
|
end
|
|
|
|
def get_top_system_notification
|
|
@top_system_notification = SystemNotification.is_top.first
|
|
end
|
|
|
|
def get_site_url(key, value)
|
|
key.to_s === "url" ? append_http(reset_site_url(value)) : reset_site_url(value)
|
|
end
|
|
|
|
def reset_site_url(url)
|
|
return url unless url.to_s.include?("current_user")
|
|
|
|
split_arr = url.split('current_user')
|
|
split_arr.length > 1 ? split_arr.join(current_user&.login) : (split_arr << current_user&.login).join('')
|
|
end
|
|
|
|
def append_http(url)
|
|
url.to_s.start_with?("http") ? url : [request.protocol, request.host_with_port, url].join('')
|
|
end
|
|
end
|