diff --git a/about.json b/about.json index 2f28751..ab2f1fd 100644 --- a/about.json +++ b/about.json @@ -1,13 +1,15 @@ { - "name": "TODO", + "name": "Discourse Automatic Timezone", "component": true, - "authors": "Discourse", - "about_url": "TODO: Put your theme's public repo or Meta topic URL here", - "license_url": "TODO: Put your theme's LICENSE URL here", - "learn_more": "TODO", + "authors": "Chapoi", + "about_url": "", + "license_url": "", + "learn_more": "", "theme_version": "0.0.1", "minimum_discourse_version": null, "maximum_discourse_version": null, - "assets": {}, + "assets": { + "user_custom_fields": ["manually_set_timezone", "last_detected_timezone"] + }, "modifiers": {} } diff --git a/javascripts/discourse/api-initializers/automatic-timezone.js b/javascripts/discourse/api-initializers/automatic-timezone.js new file mode 100644 index 0000000..97de2d7 --- /dev/null +++ b/javascripts/discourse/api-initializers/automatic-timezone.js @@ -0,0 +1,29 @@ +import { apiInitializer } from "discourse/lib/api"; + +export default apiInitializer("1.14.0", (api) => { + const currentUser = api.getCurrentUser(); + if (!currentUser) { + return; + } + + const browserTimezone = moment.tz.guess(); + const lastDetectedTimezone = currentUser.timezone; + const wasManuallySet = + currentUser.custom_fields?.manually_set_timezone === "true"; + + if (!wasManuallySet || browserTimezone !== lastDetectedTimezone) { + currentUser.set("timezone", browserTimezone); + currentUser.set("custom_fields.manually_set_timezone", "false"); + try { + currentUser.save(); + } catch { + currentUser.set("timezone", lastDetectedTimezone); + } + } + + api.registerUserProfileBeforeSaveCallback((userModel) => { + if (userModel.timezone !== browserTimezone) { + userModel.set("custom_fields.manually_set_timezone", "true"); + } + }); +}); diff --git a/javascripts/discourse/api-initializers/todo.js b/javascripts/discourse/api-initializers/todo.js deleted file mode 100644 index b78f8da..0000000 --- a/javascripts/discourse/api-initializers/todo.js +++ /dev/null @@ -1,5 +0,0 @@ -import { apiInitializer } from "discourse/lib/api"; - -export default apiInitializer("1.8.0", (/* api */) => { - // console.log("hello world from api initializer!"); -}); diff --git a/locales/en.yml b/locales/en.yml index 3387fc6..d81d126 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -1,5 +1,3 @@ en: theme_metadata: - description: "TODO" - settings: - example_setting: "A description of a setting." \ No newline at end of file + description: "Automatically sets the user's timezone based on the current browser timezone" \ No newline at end of file