diff --git a/app/assets/javascripts/discourse/controllers/user.js.es6 b/app/assets/javascripts/discourse/controllers/user.js.es6 index 60fd3fc06..419e6f8a2 100644 --- a/app/assets/javascripts/discourse/controllers/user.js.es6 +++ b/app/assets/javascripts/discourse/controllers/user.js.es6 @@ -14,12 +14,6 @@ export default ObjectController.extend(CanCheckEmails, { collapsedInfo: Em.computed.not('indexStream'), - websiteName: function() { - var website = this.get('model.website'); - if (Em.isEmpty(website)) { return; } - return website.split("/")[2]; - }.property('model.website'), - linkWebsite: Em.computed.not('model.isBasic'), removeNoFollow: function() { diff --git a/app/assets/javascripts/discourse/models/user.js.es6 b/app/assets/javascripts/discourse/models/user.js.es6 index bcc84e85e..279073957 100644 --- a/app/assets/javascripts/discourse/models/user.js.es6 +++ b/app/assets/javascripts/discourse/models/user.js.es6 @@ -56,7 +56,7 @@ const User = RestModel.extend({ /** This user's profile background(in CSS). - @property websiteName + @property profileBackground @type {String} **/ profileBackground: function() { diff --git a/app/assets/javascripts/discourse/templates/user/user.hbs b/app/assets/javascripts/discourse/templates/user/user.hbs index a21b59dd9..7ba76ca75 100644 --- a/app/assets/javascripts/discourse/templates/user/user.hbs +++ b/app/assets/javascripts/discourse/templates/user/user.hbs @@ -63,12 +63,12 @@ {{/if}}

{{#if model.location}}{{fa-icon "map-marker"}} {{model.location}}{{/if}} - {{#if websiteName}} + {{#if model.website_name}} {{fa-icon "globe"}} {{#if linkWebsite}} - {{websiteName}} + {{model.website_name}} {{else}} - {{websiteName}} + {{model.website_name}} {{/if}} {{/if}}

diff --git a/app/serializers/user_serializer.rb b/app/serializers/user_serializer.rb index fc35edd2c..dd5132504 100644 --- a/app/serializers/user_serializer.rb +++ b/app/serializers/user_serializer.rb @@ -40,6 +40,7 @@ class UserSerializer < BasicUserSerializer :bio_cooked, :created_at, :website, + :website_name, :profile_background, :card_background, :location, @@ -133,6 +134,26 @@ class UserSerializer < BasicUserSerializer object.user_profile.website end + def website_name + website_host = URI(website.to_s).host rescue nil + discourse_host = Discourse.current_hostname + return if website_host.nil? + if website_host == discourse_host + # example.com == example.com + website_host + URI(website.to_s).path + elsif (website_host.split('.').length == discourse_host.split('.').length) && discourse_host.split('.').length > 2 + # www.example.com == forum.example.com + website_host.split('.')[1..-1].join('.') == discourse_host.split('.')[1..-1].join('.') ? website_host + URI(website.to_s).path : website_host + else + # example.com == forum.example.com + discourse_host.ends_with?("." << website_host) ? website_host + URI(website.to_s).path : website_host + end + end + + def include_website_name + website.present? + end + def card_image_badge_id object.user_profile.card_image_badge.try(:id) end diff --git a/spec/serializers/user_serializer_spec.rb b/spec/serializers/user_serializer_spec.rb index 0f9acf7dc..43e5689a3 100644 --- a/spec/serializers/user_serializer_spec.rb +++ b/spec/serializers/user_serializer_spec.rb @@ -66,11 +66,28 @@ describe UserSerializer do context "with filled out website" do before do - user.user_profile.website = 'http://example.com' + user.user_profile.website = 'http://example.com/user' end it "has a website" do - expect(json[:website]).to eq 'http://example.com' + expect(json[:website]).to eq 'http://example.com/user' + end + + context "has a website name" do + it "returns website host name when instance domain is not same as website domain" do + Discourse.stubs(:current_hostname).returns('discourse.org') + expect(json[:website_name]).to eq 'example.com' + end + + it "returns complete website path when instance domain is same as website domain" do + Discourse.stubs(:current_hostname).returns('example.com') + expect(json[:website_name]).to eq 'example.com/user' + end + + it "returns complete website path when website domain is parent of instance domain" do + Discourse.stubs(:current_hostname).returns('forums.example.com') + expect(json[:website_name]).to eq 'example.com/user' + end end end