mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: Add timezone to core user_options (#8380)
* Add timezone to user_options table * Also migrate existing timezone values from UserCustomField, which is where the discourse-calendar plugin is storing them * Allow user to change their core timezone from Profile * Auto guess & set timezone on login & invite accept & signup * Serialize user_options.timezone for group members. this is so discourse-group-timezones can access the core user timezone, as it is being removed in discourse-calendar. * Annotate user_option with timezone * Validate timezone values
This commit is contained in:
@@ -269,7 +269,7 @@ class GroupsController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
users = users.select('users.*, group_users.created_at as added_at')
|
||||
users = users.joins(:user_option).select('users.*, user_options.timezone, group_users.created_at as added_at')
|
||||
|
||||
members = users
|
||||
.order('NOT group_users.owner')
|
||||
|
||||
@@ -40,7 +40,7 @@ class InvitesController < ApplicationController
|
||||
|
||||
def perform_accept_invitation
|
||||
params.require(:id)
|
||||
params.permit(:username, :name, :password, user_custom_fields: {})
|
||||
params.permit(:username, :name, :password, :timezone, user_custom_fields: {})
|
||||
invite = Invite.find_by(invite_key: params[:id])
|
||||
|
||||
if invite.present?
|
||||
@@ -48,6 +48,7 @@ class InvitesController < ApplicationController
|
||||
user = invite.redeem(username: params[:username], name: params[:name], password: params[:password], user_custom_fields: params[:user_custom_fields], ip_address: request.remote_ip)
|
||||
if user.present?
|
||||
log_on_user(user) if user.active?
|
||||
user.update_timezone_if_missing(params[:timezone])
|
||||
post_process_invite(user)
|
||||
end
|
||||
|
||||
|
||||
@@ -540,6 +540,7 @@ class SessionController < ApplicationController
|
||||
|
||||
def login(user)
|
||||
session.delete(ACTIVATE_USER_KEY)
|
||||
user.update_timezone_if_missing(params[:timezone])
|
||||
log_on_user(user)
|
||||
|
||||
if payload = cookies.delete(:sso_payload)
|
||||
|
||||
@@ -128,7 +128,7 @@ class UsersController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
json_result(user, serializer: UserSerializer, additional_errors: [:user_profile]) do |u|
|
||||
json_result(user, serializer: UserSerializer, additional_errors: [:user_profile, :user_option]) do |u|
|
||||
updater = UserUpdater.new(current_user, user)
|
||||
updater.update(attributes.permit!)
|
||||
end
|
||||
@@ -387,7 +387,7 @@ class UsersController < ApplicationController
|
||||
|
||||
params[:locale] ||= I18n.locale unless current_user
|
||||
|
||||
new_user_params = user_params
|
||||
new_user_params = user_params.except(:timezone)
|
||||
user = User.unstage(new_user_params)
|
||||
user = User.new(new_user_params) if user.nil?
|
||||
|
||||
@@ -435,6 +435,7 @@ class UsersController < ApplicationController
|
||||
if user.save
|
||||
authentication.finish
|
||||
activation.finish
|
||||
user.update_timezone_if_missing(params[:timezone])
|
||||
|
||||
secure_session[HONEYPOT_KEY] = nil
|
||||
secure_session[CHALLENGE_KEY] = nil
|
||||
|
||||
Reference in New Issue
Block a user