diff --git a/app/controllers/public/account_controller.rb b/app/controllers/public/account_controller.rb index ce5cad1..b4b80a9 100644 --- a/app/controllers/public/account_controller.rb +++ b/app/controllers/public/account_controller.rb @@ -438,7 +438,7 @@ class AccountController < ApplicationController end def go_to_signup_initial_page - check_redirection_options(user, user.environment.redirection_after_signup, user.url) + check_redirection_options user, user.environment.redirection_after_signup, user.url, signup: true end def redirect_if_logged_in @@ -458,8 +458,11 @@ class AccountController < ApplicationController protected - def check_redirection_options(user, condition, default) - case condition + def check_redirection_options user, condition, default, options={} + if options[:signup] and target = session.delete(:after_signup_redirect_to) + redirect_to target + else + case condition when 'keep_on_same_page' redirect_back_or_default(user.admin_url) when 'site_homepage' @@ -472,8 +475,11 @@ class AccountController < ApplicationController redirect_to user.admin_url when 'welcome_page' redirect_to :controller => :home, :action => :welcome, :template_id => (user.template && user.template.id) - else - redirect_back_or_default(default) + when 'custom_url' + if (url = user.custom_url_redirection).present? then redirect_to url else redirect_back_or_default default end + else + redirect_back_or_default(default) + end end end diff --git a/app/models/environment.rb b/app/models/environment.rb index 1a1d9d8..e5d8109 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -168,7 +168,8 @@ class Environment < ActiveRecord::Base 'site_homepage' => _('Redirects the user to the environment homepage.'), 'user_profile_page' => _('Redirects the user to his profile page.'), 'user_homepage' => _('Redirects the user to his homepage.'), - 'user_control_panel' => _('Redirects the user to his control panel.') + 'user_control_panel' => _('Redirects the user to his control panel.'), + 'custom_url' => _('Specify the URL to redirect to:'), } end validates_inclusion_of :redirection_after_login, :in => Environment.login_redirection_options.keys, :allow_nil => true diff --git a/app/models/profile.rb b/app/models/profile.rb index 7c5a0e9..bef9208 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -3,7 +3,9 @@ # which by default is the one returned by Environment:default. class Profile < ActiveRecord::Base - attr_accessible :name, :identifier, :public_profile, :nickname, :custom_footer, :custom_header, :address, :zip_code, :contact_phone, :image_builder, :description, :closed, :template_id, :environment, :lat, :lng, :is_template, :fields_privacy, :preferred_domain_id, :category_ids, :country, :city, :state, :national_region_code, :email, :contact_email, :redirect_l10n, :notification_time, :redirection_after_login, :email_suggestions, :allow_members_to_invite, :invite_friends_only, :secret + attr_accessible :name, :identifier, :public_profile, :nickname, :custom_footer, :custom_header, :address, :zip_code, :contact_phone, :image_builder, :description, :closed, :template_id, :environment, :lat, :lng, :is_template, :fields_privacy, :preferred_domain_id, :category_ids, :country, :city, :state, :national_region_code, :email, :contact_email, :redirect_l10n, :notification_time, + :redirection_after_login, :custom_url_redirection, + :email_suggestions, :allow_members_to_invite, :invite_friends_only, :secret # use for internationalizable human type names in search facets # reimplement on subclasses @@ -1023,6 +1025,7 @@ private :generate_url, :url_options def preferred_login_redirection redirection_after_login.blank? ? environment.redirection_after_login : redirection_after_login end + settings_items :custom_url_redirection, type: String, default: nil def remove_from_suggestion_list(person) suggestion = person.suggested_profiles.find_by_suggestion_id self.id diff --git a/app/views/profile_editor/_redirection_after_login.html.erb b/app/views/profile_editor/_redirection_after_login.html.erb new file mode 100644 index 0000000..5e63dc4 --- /dev/null +++ b/app/views/profile_editor/_redirection_after_login.html.erb @@ -0,0 +1,9 @@ +<% content_for :head do %> + <%= javascript_include_tag 'redirection_after_login' %> +<% end %> + +

<%= _('Page to redirect after login') %>

+<%= f.select :redirection_after_login, Environment.login_redirection_options.map{ |key,value| [value,key] }, selected: @profile.preferred_login_redirection %> + +<%= f.text_field :custom_url_redirection %> + diff --git a/app/views/profile_editor/edit.html.erb b/app/views/profile_editor/edit.html.erb index daeb8cd..af5475d 100644 --- a/app/views/profile_editor/edit.html.erb +++ b/app/views/profile_editor/edit.html.erb @@ -44,8 +44,7 @@ <% end %> <% if environment.enabled?('allow_change_of_redirection_after_login') %> -

<%= _('Page to redirect after login') %>

- <%= select 'profile_data', 'redirection_after_login', Environment.login_redirection_options.map{|key,value|[value,key]}, { :selected => @profile.preferred_login_redirection} %> + <%= render 'redirection_after_login', f: f %> <% end %>

<%= _('Translations') %>

diff --git a/public/javascripts/redirection_after_login.js b/public/javascripts/redirection_after_login.js new file mode 100644 index 0000000..2155688 --- /dev/null +++ b/public/javascripts/redirection_after_login.js @@ -0,0 +1,24 @@ +redirection_after_login = { + + view: { + select: function() { + return $('#profile_data_redirection_after_login') + }, + customUrl: function() { + return $('#profile_data_custom_url_redirection') + }, + }, + + toggleCustomUrl: function() { + var view = redirection_after_login.view + var formGroup = view.customUrl().parents('.form-group') + formGroup.toggle(view.select().val() == 'custom_url') + }, + +}; + +$(document).ready(function() { + redirection_after_login.toggleCustomUrl() + $(redirection_after_login.view.select()).on('change keyup', redirection_after_login.toggleCustomUrl) +}) + -- libgit2 0.21.2