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