diff --git a/app/controllers/accounts/profiles_controller.rb b/app/controllers/accounts/profiles_controller.rb
index faebfc5ea..1a20e06fd 100644
--- a/app/controllers/accounts/profiles_controller.rb
+++ b/app/controllers/accounts/profiles_controller.rb
@@ -25,7 +25,7 @@ def set_user
end
def user_params
- params.require(:user).permit(:email, :full_name)
+ params.require(:user).permit(:email, :full_name, :time_zone)
end
def after_update_url
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index d9b5f0424..98471625b 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -2,6 +2,7 @@
class ApplicationController < ActionController::Base
before_action :prepare_meta_tags, if: -> { request.format.html? }
+ before_action :set_time_zone
include StoreLocation
@@ -56,4 +57,9 @@ def #{s}!(redirect_url: nil)
end
RUBY_EVAL
end
+
+ private
+ def set_time_zone
+ Time.zone = current_user.time_zone if current_user&.time_zone&.present?
+ end
end
diff --git a/app/views/accounts/profiles/show.html.erb b/app/views/accounts/profiles/show.html.erb
index f21ed9439..3e2a50cd7 100644
--- a/app/views/accounts/profiles/show.html.erb
+++ b/app/views/accounts/profiles/show.html.erb
@@ -9,6 +9,12 @@
<%= t(".section.email.description") %>
+
+ <%= t(".section.time_zone.title") %>
+
+
+ <%= t(".section.time_zone.description") %>
+
<%= form_with(model: @user, url: account_profile_path, html: {method: :put}, local: true) do |f| %>
@@ -17,6 +23,11 @@
<%= f.email_field :email, id: "user_email", autofocus: true, required: "required", class: "form-control", class_for_error: "is-invalid" %>
<%= f.error_message :email, class: "invalid-feedback" %>
+
+ <%= f.label :time_zone %>
+ <%= f.select :time_zone, ActiveSupport::TimeZone::MAPPING.sort, {}, id: "user_time_zone", autofocus: true, required: "required", class: "form-control", class_for_error: "is-invalid" %>
+ <%= f.error_message :time_zone, class: "invalid-feedback" %>
+
<%= f.submit t(".submit"), class: "btn btn-block btn-primary" %>
<% end %>
diff --git a/config/locales/views/accounts/profiles/en.yml b/config/locales/views/accounts/profiles/en.yml
index e43859d3f..47aaa1e1c 100644
--- a/config/locales/views/accounts/profiles/en.yml
+++ b/config/locales/views/accounts/profiles/en.yml
@@ -9,3 +9,6 @@ en:
email:
title: "Email"
description: "After a successful email update, you should use new email on next log in."
+ time_zone:
+ title: "Time zone"
+ description: "After a successful time zone update, the time will be shown in correct time zone"
\ No newline at end of file
diff --git a/config/locales/views/accounts/profiles/zh-CN.yml b/config/locales/views/accounts/profiles/zh-CN.yml
index b315a7a73..b6eb074d6 100644
--- a/config/locales/views/accounts/profiles/zh-CN.yml
+++ b/config/locales/views/accounts/profiles/zh-CN.yml
@@ -9,3 +9,6 @@ zh-CN:
email:
title: "邮箱"
description: "这些信息会影响到下一次登录,并且不能和其他用户的重复"
+ time_zone:
+ title: "时区"
+ description: "这个选项会影响显示的时间的时区"
diff --git a/db/migrate/20190809022738_add_user_time_zone.rb b/db/migrate/20190809022738_add_user_time_zone.rb
new file mode 100644
index 000000000..ca85d0f7c
--- /dev/null
+++ b/db/migrate/20190809022738_add_user_time_zone.rb
@@ -0,0 +1,5 @@
+class AddUserTimeZone < ActiveRecord::Migration[6.0]
+ def change
+ add_column :users, :time_zone, :string
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 45668e3c9..6131ab09e 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2019_03_02_174954) do
+ActiveRecord::Schema.define(version: 2019_08_09_022738) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -43,6 +43,7 @@
t.integer "invitations_count", default: 0
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
+ t.string "time_zone"
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["invitation_token"], name: "index_users_on_invitation_token", unique: true