diff --git a/src/metabase/models/user.clj b/src/metabase/models/user.clj index 0bdf224f2e951f231e5a50881d860160635e28c5..35a54fb0bd877ab3520747880c25bc6ecd599ca8 100644 --- a/src/metabase/models/user.clj +++ b/src/metabase/models/user.clj @@ -13,6 +13,7 @@ :refer [PermissionsGroupMembership]] [metabase.models.serialization :as serdes] [metabase.models.session :refer [Session]] + [metabase.models.setting :refer [defsetting]] [metabase.plugins.classloader :as classloader] [metabase.public-settings :as public-settings] [metabase.public-settings.premium-features :as premium-features] @@ -401,3 +402,12 @@ (doseq [group-id to-add] (t2/insert! PermissionsGroupMembership {:user_id user-id, :group_id group-id})))) true)) + +;;; ## ---------------------------------------- USER SETTINGS ---------------------------------------- + +;; NB: Settings are also defined where they're used, such as in metabase.events.view-log + +(defsetting last-acknowledged-version + (deferred-tru "The last version for which a user dismissed the 'What's new?' modal.") + :user-local :only + :type :string) diff --git a/test/metabase/models/user_test.clj b/test/metabase/models/user_test.clj index eced72cd8910dcccaf87e84715040330b0422b80..51a286fff7c39ebec074a82fcce1bf0dc05dd7e4 100644 --- a/test/metabase/models/user_test.clj +++ b/test/metabase/models/user_test.clj @@ -15,6 +15,7 @@ [metabase.models.permissions-group :as perms-group] [metabase.models.permissions-test :as perms-test] [metabase.models.serialization :as serdes] + [metabase.models.setting :as setting] [metabase.models.user :as user] [metabase.public-settings.premium-features-test :as premium-features-test] [metabase.test :as mt] @@ -511,3 +512,15 @@ (is (u.password/verify-password plaintext-password (salt) new-hashed-password))))))))) + +(deftest has-a-last-acknowledged-version + (testing "last-acknowledged-version can be read and set" + (mt/with-test-user :rasta + (try + (is (nil? (setting/get :last-acknowledged-version))) + (setting/set! :last-acknowledged-version "47") + (is (= "47" (setting/get :last-acknowledged-version))) + ;; Ensure it's saved on the user, not globally: + (is (= "47" (:last-acknowledged-version (t2/select-one-fn :settings User :id (mt/user->id :rasta))))) + (finally + (setting/set! :last-acknowledged-version nil))))))