From ca1221e9f37a6df13fdcb8744825a4657b289065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Wed, 15 Mar 2023 11:40:47 +0700 Subject: [PATCH] Refactor admin settings, add all service settings --- .../form_elements/fieldset_component.html.erb | 13 +++++ .../form_elements/fieldset_component.rb | 11 +++++ .../settings/registrations_controller.rb | 20 +------- .../admin/settings/services_controller.rb | 28 ++++++++++- app/controllers/admin/settings_controller.rb | 24 +++++++++ app/views/admin/settings/_errors.html.erb | 7 +++ .../settings/registrations/index.html.erb | 11 ++--- .../settings/services/_discourse.html.erb | 17 +++++++ .../settings/services/_ejabberd.html.erb | 22 +++++++++ .../admin/settings/services/_gitea.html.erb | 17 +++++++ .../admin/settings/services/_lndhub.html.erb | 40 +++++++++++++++ .../settings/services/_mastodon.html.erb | 17 +++++++ .../settings/services/_mediawiki.html.erb | 17 +++++++ .../admin/settings/services/_nostr.html.erb | 10 ++++ .../admin/settings/services/index.html.erb | 46 +++++++---------- app/views/icons/_x.html.erb | 2 +- .../shared/_admin_sidenav_settings.html.erb | 3 ++ .../_admin_sidenav_settings_services.html.erb | 49 +++++++++++++++++++ 18 files changed, 296 insertions(+), 58 deletions(-) create mode 100644 app/components/form_elements/fieldset_component.html.erb create mode 100644 app/components/form_elements/fieldset_component.rb create mode 100644 app/views/admin/settings/_errors.html.erb create mode 100644 app/views/admin/settings/services/_discourse.html.erb create mode 100644 app/views/admin/settings/services/_ejabberd.html.erb create mode 100644 app/views/admin/settings/services/_gitea.html.erb create mode 100644 app/views/admin/settings/services/_lndhub.html.erb create mode 100644 app/views/admin/settings/services/_mastodon.html.erb create mode 100644 app/views/admin/settings/services/_mediawiki.html.erb create mode 100644 app/views/admin/settings/services/_nostr.html.erb create mode 100644 app/views/shared/_admin_sidenav_settings_services.html.erb diff --git a/app/components/form_elements/fieldset_component.html.erb b/app/components/form_elements/fieldset_component.html.erb new file mode 100644 index 0000000..4d82a56 --- /dev/null +++ b/app/components/form_elements/fieldset_component.html.erb @@ -0,0 +1,13 @@ +<%= tag.public_send(@tag, class: "mb-6 last:mb-0") do %> + +<% end %> diff --git a/app/components/form_elements/fieldset_component.rb b/app/components/form_elements/fieldset_component.rb new file mode 100644 index 0000000..04871cf --- /dev/null +++ b/app/components/form_elements/fieldset_component.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module FormElements + class FieldsetComponent < ViewComponent::Base + def initialize(tag: "div", title:, description: nil) + @tag = tag + @title = title + @descripton = description + end + end +end diff --git a/app/controllers/admin/settings/registrations_controller.rb b/app/controllers/admin/settings/registrations_controller.rb index 3f2019e..976a570 100644 --- a/app/controllers/admin/settings/registrations_controller.rb +++ b/app/controllers/admin/settings/registrations_controller.rb @@ -4,25 +4,7 @@ class Admin::Settings::RegistrationsController < Admin::SettingsController end def create - @errors = ActiveModel::Errors.new(Setting.new) - - setting_params.keys.each do |key| - next if setting_params[key].nil? - - setting = Setting.new(var: key) - setting.value = setting_params[key].strip - unless setting.valid? - @errors.merge!(setting.errors) - end - end - - if @errors.any? - render :index - end - - setting_params.keys.each do |key| - Setting.send("#{key}=", setting_params[key].strip) unless setting_params[key].nil? - end + update_settings redirect_to admin_settings_registrations_path, flash: { success: "Settings saved" diff --git a/app/controllers/admin/settings/services_controller.rb b/app/controllers/admin/settings/services_controller.rb index ebdad4e..85ea77d 100644 --- a/app/controllers/admin/settings/services_controller.rb +++ b/app/controllers/admin/settings/services_controller.rb @@ -1,9 +1,35 @@ class Admin::Settings::ServicesController < Admin::SettingsController def index + @service = params[:s] + + if @service.blank? + redirect_to admin_settings_services_path(params: { s: "discourse" }) + end end - def update + def create + service = params.require(:service) + + update_settings + + redirect_to admin_settings_services_path(params: { s: service }), flash: { + success: "Settings saved" + } + end + + def setting_params + params.require(:setting).permit( + :discourse_enabled, + :ejabberd_enabled, + :gitea_enabled, + :lndhub_enabled, + :lndhub_admin_enabled, + :lndhub_keysend_enabled, + :mastodon_enabled, + :mediawiki_enabled, + :nostr_enabled, + ) end end diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb index 8353f9b..9c08229 100644 --- a/app/controllers/admin/settings_controller.rb +++ b/app/controllers/admin/settings_controller.rb @@ -4,6 +4,30 @@ class Admin::SettingsController < Admin::BaseController def index end + def update_settings + @errors = ActiveModel::Errors.new(Setting.new) + changed_keys = [] + + setting_params.keys.each do |key| + next if setting_params[key].nil? || + (Setting.send(key).to_s == setting_params[key].strip) + changed_keys.push(key) + setting = Setting.new(var: key) + setting.value = setting_params[key].strip + unless setting.valid? + @errors.merge!(setting.errors) + end + end + + if @errors.any? + render :index and return + end + + changed_keys.each do |key| + Setting.send("#{key}=", setting_params[key].strip) + end + end + private def set_current_section diff --git a/app/views/admin/settings/_errors.html.erb b/app/views/admin/settings/_errors.html.erb new file mode 100644 index 0000000..84bd2a6 --- /dev/null +++ b/app/views/admin/settings/_errors.html.erb @@ -0,0 +1,7 @@ +
+ +
diff --git a/app/views/admin/settings/registrations/index.html.erb b/app/views/admin/settings/registrations/index.html.erb index 68e1827..90b67af 100644 --- a/app/views/admin/settings/registrations/index.html.erb +++ b/app/views/admin/settings/registrations/index.html.erb @@ -4,14 +4,9 @@ <%= form_for(Setting.new, url: admin_settings_registrations_path) do |f| %>

Registrations

+ <% if @errors && @errors.any? %> -
-
    - <% @errors.full_messages.each do |msg| %> -
  • <%= msg %>
  • - <% end %> -
-
+ <%= render partial: "admin/settings/errors", locals: { errors: @errors } %> <% end %>
-

+

<%= f.submit 'Save', class: "btn-md btn-blue w-full md:w-auto" %>

diff --git a/app/views/admin/settings/services/_discourse.html.erb b/app/views/admin/settings/services/_discourse.html.erb new file mode 100644 index 0000000..633fa7b --- /dev/null +++ b/app/views/admin/settings/services/_discourse.html.erb @@ -0,0 +1,17 @@ +

Discourse

+ +<% if Setting.discourse_enabled? %> + <%= render FormElements::FieldsetComponent.new(title: "Public URL") do %> + <%= f.text_field :discourse_public_url, + value: Setting.discourse_public_url, + class: "w-full", disabled: true %> + <% end %> +<% end %> diff --git a/app/views/admin/settings/services/_ejabberd.html.erb b/app/views/admin/settings/services/_ejabberd.html.erb new file mode 100644 index 0000000..93c5ff3 --- /dev/null +++ b/app/views/admin/settings/services/_ejabberd.html.erb @@ -0,0 +1,22 @@ +

ejabberd (XMPP)

+ +<% if Setting.ejabberd_enabled? %> + <%= render FormElements::FieldsetComponent.new(title: "API URL") do %> + <%= f.text_field :ejabberd_api_url, + value: Setting.ejabberd_api_url, + class: "w-full", disabled: true %> + <% end %> + <%= render FormElements::FieldsetComponent.new(title: "Admin URL") do %> + <%= f.text_field :ejabberd_admin_url, + value: Setting.ejabberd_admin_url, + class: "w-full", disabled: true %> + <% end %> +<% end %> diff --git a/app/views/admin/settings/services/_gitea.html.erb b/app/views/admin/settings/services/_gitea.html.erb new file mode 100644 index 0000000..964185e --- /dev/null +++ b/app/views/admin/settings/services/_gitea.html.erb @@ -0,0 +1,17 @@ +

Gitea

+ +<% if Setting.gitea_enabled? %> + <%= render FormElements::FieldsetComponent.new(title: "Public URL") do %> + <%= f.text_field :gitea_public_url, + value: Setting.gitea_public_url, + class: "w-full", disabled: true %> + <% end %> +<% end %> diff --git a/app/views/admin/settings/services/_lndhub.html.erb b/app/views/admin/settings/services/_lndhub.html.erb new file mode 100644 index 0000000..f65d0c3 --- /dev/null +++ b/app/views/admin/settings/services/_lndhub.html.erb @@ -0,0 +1,40 @@ +

Lightning Network

+ diff --git a/app/views/admin/settings/services/_mastodon.html.erb b/app/views/admin/settings/services/_mastodon.html.erb new file mode 100644 index 0000000..d9dfdeb --- /dev/null +++ b/app/views/admin/settings/services/_mastodon.html.erb @@ -0,0 +1,17 @@ +

Mastodon

+ +<% if Setting.mastodon_enabled? %> + <%= render FormElements::FieldsetComponent.new(title: "Public URL") do %> + <%= f.text_field :mastodon_public_url, + value: Setting.mastodon_public_url, + class: "w-full", disabled: true %> + <% end %> +<% end %> diff --git a/app/views/admin/settings/services/_mediawiki.html.erb b/app/views/admin/settings/services/_mediawiki.html.erb new file mode 100644 index 0000000..cc032c1 --- /dev/null +++ b/app/views/admin/settings/services/_mediawiki.html.erb @@ -0,0 +1,17 @@ +

MediaWiki

+ +<% if Setting.mediawiki_enabled? %> + <%= render FormElements::FieldsetComponent.new(title: "Public URL") do %> + <%= f.text_field :mediawiki_public_url, + value: Setting.mediawiki_public_url, + class: "w-full", disabled: true %> + <% end %> +<% end %> diff --git a/app/views/admin/settings/services/_nostr.html.erb b/app/views/admin/settings/services/_nostr.html.erb new file mode 100644 index 0000000..664d089 --- /dev/null +++ b/app/views/admin/settings/services/_nostr.html.erb @@ -0,0 +1,10 @@ +

Nostr

+ diff --git a/app/views/admin/settings/services/index.html.erb b/app/views/admin/settings/services/index.html.erb index e512cce..58360dd 100644 --- a/app/views/admin/settings/services/index.html.erb +++ b/app/views/admin/settings/services/index.html.erb @@ -1,35 +1,23 @@ <%= render HeaderComponent.new(title: "Settings") %> <%= render MainWithSidenavComponent.new(sidenav_partial: 'shared/admin_sidenav_settings') do %> -
-

Lightning Network

- <%= form_for(Setting.new, url: admin_settings_services_path) do |f| %> - <% if @errors && @errors.any? %> -
-
    - <% @errors.full_messages.each do |msg| %> -
  • <%= msg %>
  • - <% end %> -
-
- <% end %> + <%= form_for(Setting.new, url: admin_settings_services_path) do |f| %> + <%= hidden_field_tag :service, @service %> - + <% if @errors && @errors.any? %> +
+ <%= render partial: "admin/settings/errors", locals: { errors: @errors } %> +
<% end %> -
+ +
+ <%= render partial: @service, locals: { f: f } %> +
+ +
+

+ <%= f.submit 'Save', class: "btn-md btn-blue w-full md:w-auto" %> +

+
+ <% end %> <% end %> diff --git a/app/views/icons/_x.html.erb b/app/views/icons/_x.html.erb index 7d5875c..d85f208 100644 --- a/app/views/icons/_x.html.erb +++ b/app/views/icons/_x.html.erb @@ -1 +1 @@ - \ No newline at end of file + diff --git a/app/views/shared/_admin_sidenav_settings.html.erb b/app/views/shared/_admin_sidenav_settings.html.erb index d675242..387cd9b 100644 --- a/app/views/shared/_admin_sidenav_settings.html.erb +++ b/app/views/shared/_admin_sidenav_settings.html.erb @@ -6,6 +6,9 @@ name: "Services", path: admin_settings_services_path, icon: "grid", active: current_page?(admin_settings_services_path) ) %> +<% if current_page?(admin_settings_services_path) %> + <%= render partial: "shared/admin_sidenav_settings_services" %> +<% end %> <%= render SidenavLinkComponent.new( name: "Security", path: "#", icon: "shield", disabled: true ) %> diff --git a/app/views/shared/_admin_sidenav_settings_services.html.erb b/app/views/shared/_admin_sidenav_settings_services.html.erb new file mode 100644 index 0000000..c897b6d --- /dev/null +++ b/app/views/shared/_admin_sidenav_settings_services.html.erb @@ -0,0 +1,49 @@ +<%= render SidenavLinkComponent.new( + level: 2, + name: "Discourse", + path: admin_settings_services_path(params: { s: "discourse" }), + icon: Setting.discourse_enabled? ? "check" : "x", + active: current_page?(admin_settings_services_path(params: { s: "discourse" })), +) %> +<%= render SidenavLinkComponent.new( + level: 2, + name: "ejabberd", + path: admin_settings_services_path(params: { s: "ejabberd" }), + icon: Setting.ejabberd_enabled? ? "check" : "x", + active: current_page?(admin_settings_services_path(params: { s: "ejabberd" })), +) %> +<%= render SidenavLinkComponent.new( + level: 2, + name: "Gitea", + path: admin_settings_services_path(params: { s: "gitea" }), + icon: Setting.gitea_enabled? ? "check" : "x", + active: current_page?(admin_settings_services_path(params: { s: "gitea" })), +) %> +<%= render SidenavLinkComponent.new( + level: 2, + name: "LNDHub", + path: admin_settings_services_path(params: { s: "lndhub" }), + icon: Setting.lndhub_enabled? ? "check" : "x", + active: current_page?(admin_settings_services_path(params: { s: "lndhub" })), +) %> +<%= render SidenavLinkComponent.new( + level: 2, + name: "Mastodon", + path: admin_settings_services_path(params: { s: "mastodon" }), + icon: Setting.mastodon_enabled? ? "check" : "x", + active: current_page?(admin_settings_services_path(params: { s: "mastodon" })), +) %> +<%= render SidenavLinkComponent.new( + level: 2, + name: "MediaWiki", + path: admin_settings_services_path(params: { s: "mediawiki" }), + icon: Setting.mediawiki_enabled? ? "check" : "x", + active: current_page?(admin_settings_services_path(params: { s: "mediawiki" })), +) %> +<%= render SidenavLinkComponent.new( + level: 2, + name: "Nostr", + path: admin_settings_services_path(params: { s: "nostr" }), + icon: Setting.nostr_enabled? ? "check" : "x", + active: current_page?(admin_settings_services_path(params: { s: "nostr" })), +) %>