diff --git a/app/assets/javascripts/admin/components/admin-user-field-item.js.es6 b/app/assets/javascripts/admin/components/admin-user-field-item.js.es6 index d10280daf..907f803ae 100644 --- a/app/assets/javascripts/admin/components/admin-user-field-item.js.es6 +++ b/app/assets/javascripts/admin/components/admin-user-field-item.js.es6 @@ -43,9 +43,12 @@ export default Ember.Component.extend(bufferedProperty('userField'), { if (this.get('userField.show_on_profile')) { ret.push(I18n.t('admin.user_fields.show_on_profile.enabled')); } + if (this.get('userField.show_on_user_card')) { + ret.push(I18n.t('admin.user_fields.show_on_user_card.enabled')); + } return ret.join(', '); - }.property('userField.editable', 'userField.required', 'userField.show_on_profile'), + }.property('userField.editable', 'userField.required', 'userField.show_on_profile', 'userField.show_on_user_card'), actions: { save() { @@ -57,6 +60,7 @@ export default Ember.Component.extend(bufferedProperty('userField'), { 'editable', 'required', 'show_on_profile', + 'show_on_user_card', 'options'); this.get('userField').save(attrs).then(function() { diff --git a/app/assets/javascripts/admin/templates/components/admin-user-field-item.hbs b/app/assets/javascripts/admin/templates/components/admin-user-field-item.hbs index 36fa8c3b8..c5620d84e 100644 --- a/app/assets/javascripts/admin/templates/components/admin-user-field-item.hbs +++ b/app/assets/javascripts/admin/templates/components/admin-user-field-item.hbs @@ -29,6 +29,10 @@ {{input type="checkbox" checked=buffered.show_on_profile}} {{i18n 'admin.user_fields.show_on_profile.title'}} {{/admin-form-row}} + {{#admin-form-row wrapLabel="true"}} + {{input type="checkbox" checked=buffered.show_on_user_card}} {{i18n 'admin.user_fields.show_on_user_card.title'}} + {{/admin-form-row}} + {{#admin-form-row}} {{d-button action="save" class="btn-primary" icon="check" label="admin.user_fields.save"}} {{d-button action="cancel" class="btn-danger" icon="times" label="admin.user_fields.cancel"}} diff --git a/app/assets/javascripts/discourse/controllers/user-card.js.es6 b/app/assets/javascripts/discourse/controllers/user-card.js.es6 index a78407f22..0c8f99549 100644 --- a/app/assets/javascripts/discourse/controllers/user-card.js.es6 +++ b/app/assets/javascripts/discourse/controllers/user-card.js.es6 @@ -1,5 +1,6 @@ import DiscourseURL from 'discourse/lib/url'; import { propertyNotEqual, setting } from 'discourse/lib/computed'; +import computed from 'ember-addons/ember-computed-decorators'; export default Ember.Controller.extend({ needs: ['topic', 'application'], @@ -26,6 +27,19 @@ export default Ember.Controller.extend({ showMoreBadges: Em.computed.gt('moreBadgesCount', 0), showDelete: Em.computed.and("viewingAdmin", "showName", "user.canBeDeleted"), + @computed('model.user_fields.@each.value') + publicUserFields() { + const siteUserFields = this.site.get('user_fields'); + if (!Ember.isEmpty(siteUserFields)) { + const userFields = this.get('user.user_fields'); + return siteUserFields.filterProperty('show_on_user_card', true).sortBy('position').map(field => { + Ember.set(field, 'dasherized_name', field.get('name').dasherize()); + const value = userFields ? userFields[field.get('id')] : null; + return Ember.isEmpty(value) ? null : Ember.Object.create({ value, field }); + }).compact(); + } + }, + moreBadgesCount: function() { return this.get('user.badge_count') - this.get('user.featured_user_badges.length'); }.property('user.badge_count', 'user.featured_user_badges.@each'), diff --git a/app/assets/javascripts/discourse/templates/user-card.hbs b/app/assets/javascripts/discourse/templates/user-card.hbs index 9b8bf40bb..ecbc84d12 100644 --- a/app/assets/javascripts/discourse/templates/user-card.hbs +++ b/app/assets/javascripts/discourse/templates/user-card.hbs @@ -65,6 +65,19 @@ {{/if}} + {{#if publicUserFields}} +
+ {{#each uf in publicUserFields}} + {{#if uf.value}} +
+ {{uf.field.name}}: + {{uf.value}} +
+ {{/if}} + {{/each}} +
+ {{/if}} + {{#if showBadges}}
{{#each ub in user.featured_user_badges}} diff --git a/app/controllers/admin/user_fields_controller.rb b/app/controllers/admin/user_fields_controller.rb index e6bf7b208..596b53e4e 100644 --- a/app/controllers/admin/user_fields_controller.rb +++ b/app/controllers/admin/user_fields_controller.rb @@ -1,7 +1,7 @@ class Admin::UserFieldsController < Admin::AdminController def self.columns - [:name, :field_type, :editable, :description, :required, :show_on_profile, :position] + [:name, :field_type, :editable, :description, :required, :show_on_profile, :show_on_user_card, :position] end def create diff --git a/app/models/user_field.rb b/app/models/user_field.rb index 7086f1e0e..a63007c9b 100644 --- a/app/models/user_field.rb +++ b/app/models/user_field.rb @@ -12,14 +12,15 @@ end # # Table name: user_fields # -# id :integer not null, primary key -# name :string not null -# field_type :string not null -# created_at :datetime -# updated_at :datetime -# editable :boolean default(FALSE), not null -# description :string not null -# required :boolean default(TRUE), not null -# show_on_profile :boolean default(FALSE), not null -# position :integer default(0) +# id :integer not null, primary key +# name :string not null +# field_type :string not null +# created_at :datetime +# updated_at :datetime +# editable :boolean default(FALSE), not null +# description :string not null +# required :boolean default(TRUE), not null +# show_on_profile :boolean default(FALSE), not null +# show_on_user_card :boolean default(FALSE), not null +# position :integer default(0) # diff --git a/app/serializers/user_field_serializer.rb b/app/serializers/user_field_serializer.rb index 7c0689806..22aef424f 100644 --- a/app/serializers/user_field_serializer.rb +++ b/app/serializers/user_field_serializer.rb @@ -6,6 +6,7 @@ class UserFieldSerializer < ApplicationSerializer :editable, :required, :show_on_profile, + :show_on_user_card, :position, :options diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml index c298f43e6..74d859adb 100644 --- a/config/locales/client.de.yml +++ b/config/locales/client.de.yml @@ -2443,6 +2443,10 @@ de: title: "Im öffentlichen Profil anzeigen?" enabled: "wird im Profil angezeigt" disabled: "wird im Profil nicht angezeigt" + show_on_user_card: + title: "Auf Benutzerkarte anzeigen?" + enabled: "wird auf Benutzerkarte angezeigt" + disabled: "wird auf Benutzerkarte nicht angezeigt" field_types: text: 'Textfeld' confirm: 'Bestätigung' diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 194b49a71..b5f27d3b7 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -2640,6 +2640,10 @@ en: title: "Show on public profile?" enabled: "shown on profile" disabled: "not shown on profile" + show_on_user_card: + title: "Show on user card?" + enabled: "shown on user card" + disabled: "not shown on user card" field_types: text: 'Text Field' diff --git a/db/migrate/20160408131959_add_show_on_user_card_to_user_fields.rb b/db/migrate/20160408131959_add_show_on_user_card_to_user_fields.rb new file mode 100644 index 000000000..9713abb4d --- /dev/null +++ b/db/migrate/20160408131959_add_show_on_user_card_to_user_fields.rb @@ -0,0 +1,5 @@ +class AddShowOnUserCardToUserFields < ActiveRecord::Migration + def change + add_column :user_fields, :show_on_user_card, :boolean, default: false, null: false + end +end diff --git a/script/import_scripts/ning.rb b/script/import_scripts/ning.rb index d5a81944b..99d81e2d9 100644 --- a/script/import_scripts/ning.rb +++ b/script/import_scripts/ning.rb @@ -26,7 +26,7 @@ class ImportScripts::Ning < ImportScripts::Base # Example of importing a custom profile field: # @interests_field = UserField.find_by_name("My interests") # unless @interests_field - # @interests_field = UserField.create(name: "My interests", description: "Do you like stuff?", field_type: "text", editable: true, required: false, show_on_profile: true) + # @interests_field = UserField.create(name: "My interests", description: "Do you like stuff?", field_type: "text", editable: true, required: false, show_on_profile: true, show_on_user_card: true) # end end