with YAML-defined defaults. Add admin page for editing global settings. Add "site_description" setting that would show as a paragraph on the frontpageclosed-social-glitch-2
@ -1,3 +1,8 @@ | |||||
//= require jquery | //= require jquery | ||||
//= require jquery_ujs | //= require jquery_ujs | ||||
//= require extras | //= require extras | ||||
//= require best_in_place | |||||
$(function () { | |||||
$(".best_in_place").best_in_place(); | |||||
}); |
@ -0,0 +1,25 @@ | |||||
# frozen_string_literal: true | |||||
class Admin::SettingsController < ApplicationController | |||||
before_action :require_admin! | |||||
layout 'admin' | |||||
def index | |||||
@settings = Setting.all_as_records | |||||
end | |||||
def update | |||||
@setting = Setting.where(var: params[:id]).first_or_initialize(var: params[:id]) | |||||
if @setting.value != params[:setting][:value] | |||||
@setting.value = params[:setting][:value] | |||||
@setting.save | |||||
end | |||||
respond_to do |format| | |||||
format.html { redirect_to admin_settings_path } | |||||
format.json { respond_with_bip(@setting) } | |||||
end | |||||
end | |||||
end |
@ -0,0 +1,10 @@ | |||||
# frozen_string_literal: true | |||||
class HashObject | |||||
def initialize(hash) | |||||
hash.each do |k, v| | |||||
instance_variable_set("@#{k}", v) | |||||
self.class.send(:define_method, k, proc { instance_variable_get("@#{k}") }) | |||||
end | |||||
end | |||||
end |
@ -0,0 +1,31 @@ | |||||
# frozen_string_literal: true | |||||
class Setting < RailsSettings::Base | |||||
source Rails.root.join('config/settings.yml') | |||||
namespace Rails.env | |||||
def to_param | |||||
var | |||||
end | |||||
class << self | |||||
def all_as_records | |||||
vars = thing_scoped | |||||
records = vars.map { |r| [r.var, r] }.to_h | |||||
default_settings.each do |key, default_value| | |||||
next if records.key?(key) || default_value.is_a?(Hash) | |||||
records[key] = Setting.new(var: key, value: default_value) | |||||
end | |||||
records | |||||
end | |||||
private | |||||
def default_settings | |||||
return {} unless RailsSettings::Default.enabled? | |||||
RailsSettings::Default.instance | |||||
end | |||||
end | |||||
end |
@ -0,0 +1,22 @@ | |||||
- content_for :page_title do | |||||
Site Settings | |||||
%table.table | |||||
%colgroup | |||||
%col{ width: '35%' }/ | |||||
%thead | |||||
%tr | |||||
%th Setting | |||||
%th Click to edit | |||||
%tbody | |||||
%tr | |||||
%td | |||||
%strong Site description | |||||
%br/ | |||||
Displayed as a paragraph on the frontpage and used as a meta tag. | |||||
%br/ | |||||
You can use HTML tags, in particular | |||||
%code= '<a>' | |||||
and | |||||
%code= '<em>' | |||||
%td= best_in_place @settings['site_description'], :value, as: :textarea, url: admin_setting_path(@settings['site_description']) |
@ -0,0 +1,23 @@ | |||||
# config/app.yml for rails-settings-cached | |||||
defaults: &defaults | |||||
site_description: '' | |||||
site_contact_username: '' | |||||
site_contact_email: '' | |||||
notification_emails: | |||||
follow: false | |||||
reblog: false | |||||
favourite: false | |||||
mention: false | |||||
follow_request: true | |||||
interactions: | |||||
must_be_follower: false | |||||
must_be_following: false | |||||
development: | |||||
<<: *defaults | |||||
test: | |||||
<<: *defaults | |||||
production: | |||||
<<: *defaults |
@ -0,0 +1,19 @@ | |||||
class MigrateSettings < ActiveRecord::Migration | |||||
def up | |||||
remove_index :settings, [:target_type, :target_id, :var] | |||||
rename_column :settings, :target_id, :thing_id | |||||
rename_column :settings, :target_type, :thing_type | |||||
change_column :settings, :thing_id, :integer, null: true, default: nil | |||||
change_column :settings, :thing_type, :string, null: true, default: nil | |||||
add_index :settings, [:thing_type, :thing_id, :var], unique: true | |||||
end | |||||
def down | |||||
remove_index :settings, [:thing_type, :thing_id, :var] | |||||
rename_column :settings, :thing_id, :target_id | |||||
rename_column :settings, :thing_type, :target_type | |||||
change_column :settings, :target_id, :integer, null: false | |||||
change_column :settings, :target_type, :string, null: false, default: '' | |||||
add_index :settings, [:target_type, :target_id, :var], unique: true | |||||
end | |||||
end |