FEATURE: Add bio to group page.

This commit is contained in:
Guo Xiang Tan 2016-12-05 16:18:24 +08:00
parent 0441ae3e95
commit adb7fcb6b3
13 changed files with 94 additions and 24 deletions

View File

@ -11,6 +11,11 @@
{{#if model.id}} {{#if model.id}}
{{#unless model.automatic}} {{#unless model.automatic}}
<div>
<label for="bio">{{i18n 'group.bio'}}</label>
{{d-editor value=model.bio_raw}}
</div>
{{#if model.hasOwners}} {{#if model.hasOwners}}
<div> <div>
<label for='owner-list'>{{i18n 'admin.groups.group_owners'}}</label> <label for='owner-list'>{{i18n 'admin.groups.group_owners'}}</label>

View File

@ -114,6 +114,7 @@ const Group = Discourse.Model.extend({
flair_url: this.get('flair_url'), flair_url: this.get('flair_url'),
flair_bg_color: this.get('flairBackgroundHexColor'), flair_bg_color: this.get('flairBackgroundHexColor'),
flair_color: this.get('flairHexColor'), flair_color: this.get('flairHexColor'),
bio_raw: this.get('bio_raw')
}; };
}, },

View File

@ -13,6 +13,7 @@
</div> </div>
<div class='pull-left group-outlet'> <div class='pull-left group-outlet'>
<div class='group-details-container'>
<div class='group-details'> <div class='group-details'>
<span> <span>
<h1 class='group-header'> <h1 class='group-header'>
@ -36,6 +37,13 @@
{{/if}} {{/if}}
</div> </div>
{{#if model.bio_cooked}}
<div class='group-bio'>
<p>{{{model.bio_cooked}}}</p>
</div>
{{/if}}
</div>
<div class='user-main'> <div class='user-main'>
{{outlet}} {{outlet}}
</div> </div>

View File

@ -1,5 +1,8 @@
{{#d-modal-body title="group.edit.title" class="edit-group groups"}} {{#d-modal-body title="group.edit.title" class="edit-group groups"}}
<form class="form-horizontal"> <form class="form-horizontal">
<label for='bio'>{{i18n 'group.bio'}}</label>
{{d-editor value=model.bio_raw class="edit-group-bio"}}
{{group-flair-inputs model=model}} {{group-flair-inputs model=model}}
</form> </form>
{{/d-modal-body}} {{/d-modal-body}}

View File

@ -3,6 +3,11 @@
font-weight: normal; font-weight: normal;
} }
.group-details-container {
background: rgba(204, 204, 204, 0.2);
padding: 20px;
}
table.group-members { table.group-members {
width: 100%; width: 100%;
@ -55,7 +60,11 @@ table.group-members {
margin-left: 5px; margin-left: 5px;
} }
.form-horizontal { .groups.edit-group .form-horizontal {
textarea {
width: 99%;
}
label { label {
font-weight: bold; font-weight: bold;
} }

View File

@ -169,7 +169,12 @@ class GroupsController < ApplicationController
private private
def group_params def group_params
params.require(:group).permit(:flair_url, :flair_bg_color, :flair_color) params.require(:group).permit(
:flair_url,
:flair_bg_color,
:flair_color,
:bio_raw
)
end end
def find_group(param_name) def find_group(param_name)

View File

@ -13,6 +13,7 @@ class Group < ActiveRecord::Base
has_and_belongs_to_many :web_hooks has_and_belongs_to_many :web_hooks
before_save :downcase_incoming_email before_save :downcase_incoming_email
before_save :cook_bio
after_save :destroy_deletions after_save :destroy_deletions
after_save :automatic_group_membership after_save :automatic_group_membership
@ -83,6 +84,12 @@ class Group < ActiveRecord::Base
self.incoming_email = (incoming_email || "").strip.downcase.presence self.incoming_email = (incoming_email || "").strip.downcase.presence
end end
def cook_bio
if !self.bio_raw.blank?
self.bio_cooked = PrettyText.cook(self.bio_raw)
end
end
def incoming_email_validator def incoming_email_validator
return if self.automatic || self.incoming_email.blank? return if self.automatic || self.incoming_email.blank?

View File

@ -14,9 +14,25 @@ class BasicGroupSerializer < ApplicationSerializer
:has_messages, :has_messages,
:flair_url, :flair_url,
:flair_bg_color, :flair_bg_color,
:flair_color :flair_color,
:bio_raw,
:bio_cooked
def include_incoming_email? def include_incoming_email?
scope.is_staff? staff?
end
def include_has_messsages
staff?
end
def include_bio_raw
staff?
end
private
def staff?
@staff ||= scope.is_staff?
end end
end end

View File

@ -1849,6 +1849,7 @@ en:
edit: edit:
title: 'Edit Group' title: 'Edit Group'
name: "Name" name: "Name"
bio: "About Group"
name_placeholder: "Group name, no spaces, same as username rule" name_placeholder: "Group name, no spaces, same as username rule"
flair_url: "Avatar Flair Image" flair_url: "Avatar Flair Image"
flair_url_placeholder: "(Optional) Image URL or Font Awesome class" flair_url_placeholder: "(Optional) Image URL or Font Awesome class"

View File

@ -0,0 +1,6 @@
class AddBioToGroups < ActiveRecord::Migration
def change
add_column :groups, :bio_raw, :text
add_column :groups, :bio_cooked, :text
end
end

View File

@ -46,7 +46,8 @@ describe "Groups" do
xhr :put, "/groups/#{group.id}", { group: { xhr :put, "/groups/#{group.id}", { group: {
flair_bg_color: 'FFF', flair_bg_color: 'FFF',
flair_color: 'BBB', flair_color: 'BBB',
flair_url: 'fa-adjust' flair_url: 'fa-adjust',
bio_raw: 'testing'
} } } }
expect(response).to be_success expect(response).to be_success
@ -56,6 +57,7 @@ describe "Groups" do
expect(group.flair_bg_color).to eq('FFF') expect(group.flair_bg_color).to eq('FFF')
expect(group.flair_color).to eq('BBB') expect(group.flair_color).to eq('BBB')
expect(group.flair_url).to eq('fa-adjust') expect(group.flair_url).to eq('fa-adjust')
expect(group.bio_raw).to eq('testing')
end end
end end

View File

@ -322,7 +322,6 @@ describe Group do
expect(Group.desired_trust_level_groups(2).sort).to eq [10,11,12] expect(Group.desired_trust_level_groups(2).sort).to eq [10,11,12]
end end
it "correctly handles trust level changes" do it "correctly handles trust level changes" do
user = Fabricate(:user, trust_level: 2) user = Fabricate(:user, trust_level: 2)
Group.user_trust_level_change!(user.id, 2) Group.user_trust_level_change!(user.id, 2)
@ -369,4 +368,11 @@ describe Group do
expect(u3.reload.trust_level).to eq(3) expect(u3.reload.trust_level).to eq(3)
end end
it 'should cook the bio' do
group = Fabricate(:group)
group.update_attributes!(bio_raw: 'This is a group for :unicorn: lovers')
expect(group.bio_cooked).to include("unicorn.png")
end
end end

View File

@ -46,5 +46,6 @@ test("Admin Browsing Groups", () => {
andThen(() => { andThen(() => {
ok(find('.group-flair-inputs').length === 1, 'it should display avatar flair inputs'); ok(find('.group-flair-inputs').length === 1, 'it should display avatar flair inputs');
ok(find('.edit-group-bio').length === 1, 'it should display group bio input');
}); });
}); });