diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a0914606..124591fe 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -23,7 +23,8 @@ def set_settings sentry_dsn: ENV.fetch('PHOTONIA_FE_SENTRY_DSN', ''), sentry_sample_rate: ENV.fetch('PHOTONIA_FE_SENTRY_SAMPLE_RATE', 0.1).to_f, site_name: Setting.site_name, - site_description: Setting.site_description + site_description: Setting.site_description, + site_tracking_code: Setting.site_tracking_code }.to_json end diff --git a/app/graphql/types/admin_settings_type.rb b/app/graphql/types/admin_settings_type.rb index b7c6c23c..571ac202 100644 --- a/app/graphql/types/admin_settings_type.rb +++ b/app/graphql/types/admin_settings_type.rb @@ -6,5 +6,6 @@ class AdminSettingsType < Types::BaseObject description 'Admin Settings' field :site_name, String, null: false field :site_description, String, null: false + field :site_tracking_code, String, null: false end end diff --git a/app/graphql/types/mutation_type.rb b/app/graphql/types/mutation_type.rb index 2250f9ae..8a0d3cbc 100644 --- a/app/graphql/types/mutation_type.rb +++ b/app/graphql/types/mutation_type.rb @@ -65,6 +65,7 @@ class MutationType < GraphQL::Schema::Object description 'Update admin settings' argument :site_name, String, 'Site name', required: true argument :site_description, String, 'Site description', required: true + argument :site_tracking_code, String, 'Site tracking code', required: true end def add_photos_to_album(album_id:, photo_ids:) @@ -166,10 +167,11 @@ def update_user_settings(email:, timezone:) user end - def update_admin_settings(site_name:, site_description:) + def update_admin_settings(site_name:, site_description:, site_tracking_code:) context[:authorize].call(Setting, :update?) Setting.site_name = site_name Setting.site_description = site_description + Setting.site_tracking_code = site_tracking_code Setting end end diff --git a/app/javascript/users/admin-settings.vue b/app/javascript/users/admin-settings.vue index 40340acf..3f9df847 100644 --- a/app/javascript/users/admin-settings.vue +++ b/app/javascript/users/admin-settings.vue @@ -40,6 +40,22 @@ +
+
+ +
+
+
+
+ +
+
+
+

@@ -85,6 +101,7 @@ useTitle("Admin Settings"); const newSiteName = ref(null); const newSiteDescription = ref(null); +const newSiteTrackingCode = ref(""); const showReloadButton = ref(false); const ADMIN_SETTINGS_QUERY = gql` @@ -92,6 +109,7 @@ const ADMIN_SETTINGS_QUERY = gql` adminSettings { siteName siteDescription + siteTrackingCode } } `; @@ -110,6 +128,12 @@ const siteDescription = computed({ newSiteDescription.value = value; }, }); +const siteTrackingCode = computed({ + get: () => result.value?.adminSettings.siteTrackingCode, + set: (value) => { + newSiteTrackingCode.value = value; + }, +}); const { mutate: submit, @@ -117,13 +141,19 @@ const { onError, } = useMutation( gql` - mutation ($siteName: String!, $siteDescription: String!) { + mutation ( + $siteName: String! + $siteDescription: String! + $siteTrackingCode: String! + ) { updateAdminSettings( siteName: $siteName siteDescription: $siteDescription + siteTrackingCode: $siteTrackingCode ) { siteName siteDescription + siteTrackingCode } } `, @@ -131,6 +161,7 @@ const { variables: { siteName: newSiteName.value || siteName.value, siteDescription: newSiteDescription.value || siteDescription.value, + siteTrackingCode: newSiteTrackingCode.value, }, update: (cache, { data }) => { cache.writeQuery({ @@ -140,7 +171,7 @@ const { }, }); }, - }) + }), ); onDone(({ data }) => { diff --git a/app/models/setting.rb b/app/models/setting.rb index b51ae397..764b08f1 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -25,6 +25,5 @@ class Setting < RailsSettings::Base field :site_name, default: "Photonia", type: :string field :site_description, default: "Photonia is a photo sharing site.", type: :string - - field :tracking_code, default: ENV['PHOTONIA_TRACKING_CODE'], type: :string + field :site_tracking_code, default: ENV['PHOTONIA_TRACKING_CODE'] || "", type: :string end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index af8e2261..0422e9a6 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -13,7 +13,7 @@ - <%= ENV['PHOTONIA_TRACKING_CODE']&.html_safe %> + <%= Setting.site_tracking_code.html_safe %> <%= yield(:autodiscovery_link) %>