mirror of
https://github.com/manyfold3d/manyfold.git
synced 2026-10-22 11:42:19 -05:00
82 lines
2.7 KiB
Ruby
82 lines
2.7 KiB
Ruby
class SettingsController < ApplicationController
|
|
before_action :get_user
|
|
before_action :check_owner_permission
|
|
|
|
def show
|
|
end
|
|
|
|
def update
|
|
# Save personal settings
|
|
update_pagination_settings(params[:pagination])
|
|
update_renderer_settings(params[:renderer])
|
|
update_tag_cloud_settings(params[:tag_cloud])
|
|
@user.save!
|
|
# Save site-wide settings if user is an admin
|
|
if current_user.admin?
|
|
update_folder_settings(params[:folders])
|
|
update_tagging_settings(params[:model_tags])
|
|
end
|
|
redirect_to user_settings_path(@user)
|
|
end
|
|
|
|
private
|
|
|
|
def update_pagination_settings(settings)
|
|
return unless settings
|
|
@user.pagination_settings = {
|
|
"models" => settings[:models] == "1",
|
|
"creators" => settings[:creators] == "1",
|
|
"collections" => settings[:collections] == "1",
|
|
"per_page" => settings[:per_page].to_i
|
|
}
|
|
end
|
|
|
|
def update_tag_cloud_settings(settings)
|
|
return unless settings
|
|
@user.tag_cloud_settings = {
|
|
"threshold" => settings[:threshold].to_i,
|
|
"heatmap" => settings[:heatmap] == "1",
|
|
"keypair" => settings[:keypair] == "1",
|
|
"sorting" => settings[:sorting],
|
|
"hide_unrelated" => settings[:hide_unrelated] == "1"
|
|
}
|
|
end
|
|
|
|
def update_renderer_settings(settings)
|
|
return unless settings
|
|
@user.renderer_settings = {
|
|
"grid_width" => settings[:grid_width].to_i,
|
|
"grid_depth" => settings[:grid_width].to_i, # Store width in both for now. See #834
|
|
"show_grid" => settings[:show_grid] == "1",
|
|
"enable_pan_zoom" => settings[:enable_pan_zoom] == "1",
|
|
"background_colour" => settings[:background_colour],
|
|
"object_colour" => settings[:object_colour],
|
|
"render_style" => settings[:render_style]
|
|
}
|
|
end
|
|
|
|
def update_folder_settings(settings)
|
|
return unless settings
|
|
SiteSettings.model_path_template = settings[:model_path_template].gsub(/^\//, "") # Remove leading slashes
|
|
SiteSettings.parse_metadata_from_path = settings[:parse_metadata_from_path]
|
|
SiteSettings.safe_folder_names = settings[:safe_folder_names]
|
|
end
|
|
|
|
def update_tagging_settings(settings)
|
|
return unless settings
|
|
SiteSettings.model_tags_filter_stop_words = settings[:filter_stop_words] == "1"
|
|
SiteSettings.model_tags_tag_model_directory_name = settings[:tag_model_directory_name] == "1"
|
|
SiteSettings.model_tags_stop_words_locale = settings[:stop_words_locale]
|
|
SiteSettings.model_tags_custom_stop_words = settings[:custom_stop_words].split
|
|
SiteSettings.model_tags_auto_tag_new = settings[:auto_tag_new]
|
|
end
|
|
|
|
def get_user
|
|
@user = User.find_by(username: params[:user_id])
|
|
end
|
|
|
|
def check_owner_permission
|
|
render plain: "401 Unauthorized", status: :unauthorized unless @user == current_user || current_user.admin?
|
|
end
|
|
end
|