diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 1bc0e20..67a76d6 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -1,14 +1,18 @@ +require 'calefaction/settings' + class AdminController < ApplicationController + def index end def update if params[:settings].is_a? Hash - params[:settings].each do |key, value| - AdminSetting.set(key, value) - end + Calefaction::Settings.update(params[:settings]) + flash.now[:notice] = 'Admin settings updated.' + else + # TODO: can we make a better error message for this? + flash.now[:alert] = 'Something is wrong with the settings you submitted.' end - flash.now[:notice] = 'Admin settings updated.' render 'index' end end diff --git a/app/helpers/admin_helper.rb b/app/helpers/admin_helper.rb index 38ce4fa..f50a07b 100644 --- a/app/helpers/admin_helper.rb +++ b/app/helpers/admin_helper.rb @@ -1,9 +1,18 @@ module AdminHelper - SETTINGS = [ - {:key => 'site_name', :label => 'Site name'}, - {:key => 'corp_name', :label => 'Corporation name'}, - {:key => 'corp_id', :label => 'Corporation ID', :size => 10}, - {:key => 'description', :label => 'Welcome message', :textarea => true}, - {:key => 'copyright', :label => 'Copyright'}, - ] + + def setting_tag(setting) + key = "settings[#{setting[:key]}]" + value = AdminSetting.get(setting[:key]) + + case setting[:type] + when :string + text_field_tag(key, value, size: '40') + when :integer + text_field_tag(key, value, size: '10') + when :markup + text_area_tag(key, value, size: '60x5') + when :boolean + check_box_tag(key, '1', value == 't') + end + end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5d0da96..608fc59 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -3,13 +3,13 @@ require 'calefaction/version' module ApplicationHelper def get_title(title = '') - base = AdminSetting.get('site_name') + base = AdminSetting.get(:site_name) title.empty? ? base : "#{title} : #{base}" end def corp_logo_tag - corp_id = AdminSetting.get('corp_id') - corp_name = AdminSetting.get('corp_name') + corp_id = AdminSetting.get(:corp_id) + corp_name = AdminSetting.get(:corp_name) image_tag("https://image.eveonline.com/Corporation/#{corp_id}_256.png", id: 'corp-logo', title: corp_name, alt: "#{corp_name} Logo") end diff --git a/app/models/admin_setting.rb b/app/models/admin_setting.rb index 934b804..ec9e25b 100644 --- a/app/models/admin_setting.rb +++ b/app/models/admin_setting.rb @@ -1,6 +1,15 @@ class AdminSetting < ActiveRecord::Base + def self.to_bool(value) + value == 't' + end + + def self.from_bool(value) + value ? 't' : 'f' + end + def self.add(key, value) + value = self.from_bool(value) if value == true || value == false self.create(key: key, value: value) end @@ -13,10 +22,18 @@ class AdminSetting < ActiveRecord::Base setting.value end + def self.get_bool(key) + self.to_bool(self.get(key)) + end + def self.set(key, value) existing = self.get(key) return if existing.nil? || existing == value self.find_by(key: key).update(value: value) Rails.cache.write("admin_setting/#{key}", value) end + + def self.set_bool(key, value) + self.set(key, self.from_bool(value)) + end end diff --git a/app/models/user.rb b/app/models/user.rb index cab51c1..ea08488 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,6 +2,8 @@ require 'eaal' class User < ActiveRecord::Base has_secure_password + alias_attribute :admin?, :is_admin + alias_attribute :corp?, :is_corp def char_names ensure_api_user diff --git a/app/views/admin/index.html.erb b/app/views/admin/index.html.erb index 4134a7a..0d76d62 100644 --- a/app/views/admin/index.html.erb +++ b/app/views/admin/index.html.erb @@ -4,14 +4,10 @@ <%= form_tag do %> - <% AdminHelper::SETTINGS.each do |s| %> + <% Calefaction::Settings::SETTINGS.each do |s| %> - <% if s[:textarea] %> - - <% else %> - - <% end %> + <% end %> diff --git a/app/views/shared/_footer.html.erb b/app/views/shared/_footer.html.erb index a3281e1..9f20cd2 100644 --- a/app/views/shared/_footer.html.erb +++ b/app/views/shared/_footer.html.erb @@ -1,6 +1,6 @@
<%= label_tag("settings[#{s[:key]}]", s[:label]) %><%= text_area_tag("settings[#{s[:key]}]", AdminSetting.get(s[:key]), size: "60x5") %><%= text_field_tag("settings[#{s[:key]}]", AdminSetting.get(s[:key]), size: s[:size] || 40) %><%= setting_tag s %>