with YAML-defined defaults. Add admin page for editing global settings. Add "site_description" setting that would show as a paragraph on the frontpageth-downstream
parent
f622f4e137
commit
7e7c2bbb0f
@ -1,3 +1,8 @@
|
||||
//= require jquery
|
||||
//= require jquery_ujs
|
||||
//= 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
|
Loading…
Reference in new issue