Merge pull request #4152 from thorbenegberts/user_card_custom_fields

FEATURE: add user custom fields to user card
This commit is contained in:
Régis Hanol 2016-04-08 15:19:48 +02:00
commit ab11cea5b9
11 changed files with 63 additions and 13 deletions

View file

@ -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() {

View file

@ -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"}}

View file

@ -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'),

View file

@ -65,6 +65,19 @@
</div>
{{/if}}
{{#if publicUserFields}}
<div class="public-user-fields">
{{#each uf in publicUserFields}}
{{#if uf.value}}
<div class="public-user-field {{uf.field.dasherized_name}}">
<span class="user-field-name">{{uf.field.name}}:</span>
<span class="user-field-value">{{uf.value}}</span>
</div>
{{/if}}
{{/each}}
</div>
{{/if}}
{{#if showBadges}}
<div class="badge-section">
{{#each ub in user.featured_user_badges}}

View file

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

View file

@ -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)
#

View file

@ -6,6 +6,7 @@ class UserFieldSerializer < ApplicationSerializer
:editable,
:required,
:show_on_profile,
:show_on_user_card,
:position,
:options

View file

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

View file

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

View file

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

View file

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