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
|
||||||
//= 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
|
Loading…
Reference in new issue