Feature #1233 » adds_default_page.patch
app/controllers/account_controller.rb | ||
---|---|---|
201 | 201 |
set_autologin_cookie(user) |
202 | 202 |
end |
203 | 203 |
call_hook(:controller_account_success_authentication_after, {:user => user }) |
204 |
redirect_back_or_default :controller => 'my', :action => 'page' |
|
204 |
if user.default_page == "top" |
|
205 |
redirect_back_or_default :controller => 'welcome' |
|
206 |
elsif user.default_page == "my_page" |
|
207 |
redirect_back_or_default :controller => 'my', :action => 'page' |
|
208 |
elsif user.default_page == "my_project" |
|
209 |
redirect_back_or_default :controller => 'projects', :action => 'show', :id => user.default_project_id |
|
210 |
else |
|
211 |
redirect_back_or_default :controller => 'my', :action => 'page' |
|
212 |
end |
|
205 | 213 |
end |
206 | 214 | |
207 | 215 |
def set_autologin_cookie(user) |
app/controllers/application_controller.rb | ||
---|---|---|
259 | 259 |
end |
260 | 260 |
end |
261 | 261 | |
262 |
def back_url |
|
263 |
params[:back_url] || request.env['HTTP_REFERER'] |
|
264 |
end |
|
265 | ||
266 | 262 |
def redirect_back_or_default(default) |
267 | 263 |
back_url = CGI.unescape(params[:back_url].to_s) |
268 | 264 |
if !back_url.blank? |
app/helpers/application_helper.rb | ||
---|---|---|
967 | 967 |
end |
968 | 968 | |
969 | 969 |
def back_url_hidden_field_tag |
970 |
back_url = params[:back_url] || request.env['HTTP_REFERER']
|
|
970 |
back_url = params[:back_url] |
|
971 | 971 |
back_url = CGI.unescape(back_url.to_s) |
972 | 972 |
hidden_field_tag('back_url', CGI.escape(back_url), :id => nil) unless back_url.blank? |
973 | 973 |
end |
app/helpers/users_helper.rb | ||
---|---|---|
39 | 39 |
user.valid_notification_options.collect {|o| [l(o.last), o.first]} |
40 | 40 |
end |
41 | 41 | |
42 |
def user_default_page_options(user) |
|
43 |
user.valid_default_page_options.collect {|o| [l(o.last), o.first]} |
|
44 |
end |
|
45 | ||
42 | 46 |
def change_status_link(user) |
43 | 47 |
url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil} |
44 | 48 |
app/models/user.rb | ||
---|---|---|
44 | 44 |
['none', :label_user_mail_option_none] |
45 | 45 |
] |
46 | 46 | |
47 |
DEFAULT_PAGE_OPTIONS = [ |
|
48 |
['top', :label_user_default_page_option_top], |
|
49 |
['my_page', :label_user_default_page_option_my_page], |
|
50 |
['my_project', :label_user_default_page_option_my_project] |
|
51 |
] |
|
52 | ||
47 | 53 |
has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)}, |
48 | 54 |
:after_remove => Proc.new {|user, group| group.user_removed(user)} |
49 | 55 |
has_many :changesets, :dependent => :nullify |
... | ... | |
78 | 84 |
validates_length_of :mail, :maximum => MAIL_LENGTH_LIMIT, :allow_nil => true |
79 | 85 |
validates_confirmation_of :password, :allow_nil => true |
80 | 86 |
validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true |
87 |
validates_inclusion_of :default_page, :in => DEFAULT_PAGE_OPTIONS.collect(&:first), :allow_blank => true |
|
81 | 88 |
validate :validate_password_length |
82 | 89 | |
83 | 90 |
before_create :set_mail_notification |
... | ... | |
314 | 321 |
self.class.valid_notification_options(self) |
315 | 322 |
end |
316 | 323 | |
324 |
def valid_default_page_options |
|
325 |
self.class.valid_default_page_options(self) |
|
326 |
end |
|
327 | ||
317 | 328 |
# Only users that belong to more than 1 project can select projects for which they are notified |
318 | 329 |
def self.valid_notification_options(user=nil) |
319 | 330 |
# Note that @user.membership.size would fail since AR ignores |
... | ... | |
325 | 336 |
end |
326 | 337 |
end |
327 | 338 | |
339 |
def self.valid_default_page_options(user=nil) |
|
340 |
if user.projects.count == 0 |
|
341 |
DEFAULT_PAGE_OPTIONS.reject {|option| option.first == 'my_project'} |
|
342 |
else |
|
343 |
DEFAULT_PAGE_OPTIONS |
|
344 |
end |
|
345 |
end |
|
346 | ||
328 | 347 |
# Find a user account by matching the exact login and then a case-insensitive |
329 | 348 |
# version. Exact matches will be given priority. |
330 | 349 |
def self.find_by_login(login) |
... | ... | |
500 | 519 |
'language', |
501 | 520 |
'custom_field_values', |
502 | 521 |
'custom_fields', |
503 |
'identity_url' |
|
522 |
'identity_url', |
|
523 |
'default_page', |
|
524 |
'default_project_id' |
|
504 | 525 | |
505 | 526 |
safe_attributes 'status', |
506 | 527 |
'auth_source_id', |
app/views/my/account.html.erb | ||
---|---|---|
27 | 27 |
<%= call_hook(:view_my_account, :user => @user, :form => f) %> |
28 | 28 |
</fieldset> |
29 | 29 | |
30 |
<fieldset class="box"> |
|
31 |
<legend><%=l(:label_my_default_page)%></legend> |
|
32 |
<%= render :partial => 'users/default_page' %> |
|
33 |
</fieldset> |
|
34 | ||
30 | 35 |
<%= submit_tag l(:button_save) %> |
31 | 36 |
</div> |
32 | 37 |
app/views/users/_default_page.erb | ||
---|---|---|
1 |
<p> |
|
2 |
<%= label_tag "user_default_page", l(:description_user_default_page), :class => "hidden-for-sighted" %> |
|
3 |
<%= select_tag 'user[default_page]', options_for_select(user_default_page_options(@user), @user.default_page), |
|
4 |
:onchange => 'if (this.value == "my_project") {Element.show("default-projects")} else {Element.hide("default-projects")}' %> |
|
5 |
</p> |
|
6 |
<% if @user.projects.count > 0 %> |
|
7 |
<% content_tag 'div', :id => 'default-projects', :style => (@user.default_page == 'my_project' ? '' : 'display:none;') do %> |
|
8 |
<p> |
|
9 |
<%= select_tag 'user[default_project_id]', options_for_select(project_tree_options_for_select(@user.projects, :selected => @user.projects.select{|p| p.id == @user.default_project_id})) %> |
|
10 |
</p> |
|
11 |
<% end %> |
|
12 |
<% end %> |
config/locales/en.yml | ||
---|---|---|
518 | 518 |
label_my_account: My account |
519 | 519 |
label_my_projects: My projects |
520 | 520 |
label_my_page_block: My page block |
521 |
label_my_default_page: My default page |
|
521 | 522 |
label_administration: Administration |
522 | 523 |
label_login: Sign in |
523 | 524 |
label_logout: Sign out |
... | ... | |
776 | 777 |
label_theme: Theme |
777 | 778 |
label_default: Default |
778 | 779 |
label_search_titles_only: Search titles only |
780 |
label_user_default_page_option_top: "Top" |
|
781 |
label_user_default_page_option_my_page: "My page" |
|
782 |
label_user_default_page_option_my_project: "My project" |
|
779 | 783 |
label_user_mail_option_all: "For any event on all my projects" |
780 | 784 |
label_user_mail_option_selected: "For any event on the selected projects only..." |
781 | 785 |
label_user_mail_option_none: "No events" |
... | ... | |
1018 | 1022 |
description_query_sort_criteria_attribute: Sort attribute |
1019 | 1023 |
description_query_sort_criteria_direction: Sort direction |
1020 | 1024 |
description_user_mail_notification: Mail notification settings |
1025 |
description_user_default_page: Default page settings |
|
1021 | 1026 |
description_available_columns: Available Columns |
1022 | 1027 |
description_selected_columns: Selected Columns |
1023 | 1028 |
description_all_columns: All Columns |
config/locales/ja.yml | ||
---|---|---|
526 | 526 |
label_my_account: 個人設定 |
527 | 527 |
label_my_projects: マイプロジェクト |
528 | 528 |
label_my_page_block: マイページパーツ |
529 |
label_my_default_page: ログイン後のページ |
|
529 | 530 |
label_administration: 管理 |
530 | 531 |
label_login: ログイン |
531 | 532 |
label_logout: ログアウト |
... | ... | |
777 | 778 |
label_theme: テーマ |
778 | 779 |
label_default: 既定 |
779 | 780 |
label_search_titles_only: タイトルのみ |
781 |
label_user_default_page_option_top: "トップページ" |
|
782 |
label_user_default_page_option_my_page: "マイページ" |
|
783 |
label_user_default_page_option_my_project: "参加しているプロジェクト" |
|
780 | 784 |
label_user_mail_option_all: "参加しているプロジェクトのすべての通知" |
781 | 785 |
label_user_mail_option_selected: "選択したプロジェクトのすべての通知..." |
782 | 786 |
label_user_mail_option_none: "通知しない" |
... | ... | |
1015 | 1019 |
description_project_scope: 検索範囲 |
1016 | 1020 |
description_filter: Filter |
1017 | 1021 |
description_user_mail_notification: メール通知の設定 |
1022 |
description_user_default_page: ログイン後のページの設定 |
|
1018 | 1023 |
description_date_from: 開始日 |
1019 | 1024 |
description_message_content: 内容 |
1020 | 1025 |
description_available_columns: 利用できる項目 |
db/migrate/20120509070818_add_users_default_page.rb | ||
---|---|---|
1 |
class AddUsersDefaultPage < ActiveRecord::Migration |
|
2 |
def self.up |
|
3 |
add_column :users, :default_page, :string, :default => "top" |
|
4 |
add_column :users, :default_project_id, :integer, :default => 0 |
|
5 |
end |
|
6 | ||
7 |
def self.down |
|
8 |
remove_column :users, :default_page |
|
9 |
remove_column :users, :default_project_id |
|
10 |
end |
|
11 |
end |