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 | |