mirror of
https://github.com/flarum/framework.git
synced 2024-12-02 23:23:52 +08:00
Add user group badges
This commit is contained in:
parent
447cf1bcb1
commit
7906bbd986
|
@ -25,7 +25,7 @@ export default class PostHeaderUser extends Component {
|
||||||
avatar(user),
|
avatar(user),
|
||||||
username(user)
|
username(user)
|
||||||
]),
|
]),
|
||||||
m('ul.badges', listItems(user.badges().toArray()))
|
m('ul.badges', listItems(user.badges().toArray().reverse()))
|
||||||
] : [
|
] : [
|
||||||
avatar(),
|
avatar(),
|
||||||
username()
|
username()
|
||||||
|
|
|
@ -3,6 +3,9 @@ import Model from 'flarum/model';
|
||||||
class Group extends Model {}
|
class Group extends Model {}
|
||||||
|
|
||||||
Group.prototype.id = Model.prop('id');
|
Group.prototype.id = Model.prop('id');
|
||||||
Group.prototype.name = Model.prop('name');
|
Group.prototype.nameSingular = Model.prop('nameSingular');
|
||||||
|
Group.prototype.namePlural = Model.prop('namePlural');
|
||||||
|
Group.prototype.color = Model.prop('color');
|
||||||
|
Group.prototype.icon = Model.prop('icon');
|
||||||
|
|
||||||
export default Group;
|
export default Group;
|
||||||
|
|
|
@ -2,6 +2,7 @@ import Model from 'flarum/model'
|
||||||
import stringToColor from 'flarum/utils/string-to-color';
|
import stringToColor from 'flarum/utils/string-to-color';
|
||||||
import ItemList from 'flarum/utils/item-list';
|
import ItemList from 'flarum/utils/item-list';
|
||||||
import computed from 'flarum/utils/computed';
|
import computed from 'flarum/utils/computed';
|
||||||
|
import Badge from 'flarum/components/badge';
|
||||||
|
|
||||||
class User extends Model {}
|
class User extends Model {}
|
||||||
|
|
||||||
|
@ -48,6 +49,22 @@ User.prototype.color = computed('username', 'avatarUrl', 'avatarColor', function
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
User.prototype.badges = () => new ItemList();
|
User.prototype.badges = function() {
|
||||||
|
var items = new ItemList();
|
||||||
|
|
||||||
|
this.groups().forEach(group => {
|
||||||
|
if (group.id() != 3) {
|
||||||
|
items.add('group'+group.id(),
|
||||||
|
Badge.component({
|
||||||
|
label: group.nameSingular(),
|
||||||
|
icon: group.icon(),
|
||||||
|
style: {backgroundColor: group.color()}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
export default User;
|
export default User;
|
||||||
|
|
|
@ -191,7 +191,7 @@
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
& .badges {
|
& h3 .badges {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@
|
||||||
.post-user {
|
.post-user {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
& .badges {
|
& h3 .badges {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -7px;
|
top: -7px;
|
||||||
left: 5px;
|
left: 5px;
|
||||||
|
@ -381,7 +381,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.post-user {
|
.post-user {
|
||||||
& .badges {
|
& h3 .badges {
|
||||||
float: left;
|
float: left;
|
||||||
margin-left: -85px;
|
margin-left: -85px;
|
||||||
margin-top: -3px;
|
margin-top: -3px;
|
||||||
|
|
|
@ -12,13 +12,13 @@
|
||||||
width: @size;
|
width: @size;
|
||||||
height: @size;
|
height: @size;
|
||||||
border-radius: @size / 2;
|
border-radius: @size / 2;
|
||||||
line-height: @size - 4px;
|
line-height: @size - 5px;
|
||||||
&, & .fa {
|
&, & .fa {
|
||||||
font-size: 0.6 * @size;
|
font-size: 0.56 * @size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.badge {
|
.badge {
|
||||||
.badge-size(23px);
|
.badge-size(25px);
|
||||||
border: 2px solid @fl-body-bg;
|
border: 2px solid @fl-body-bg;
|
||||||
background: @fl-body-muted-color;
|
background: @fl-body-muted-color;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|
|
@ -3,30 +3,31 @@
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
class CreateGroupsTable extends Migration {
|
class CreateGroupsTable extends Migration
|
||||||
|
{
|
||||||
/**
|
/**
|
||||||
* Run the migrations.
|
* Run the migrations.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::create('groups', function(Blueprint $table)
|
Schema::create('groups', function (Blueprint $table) {
|
||||||
{
|
$table->increments('id');
|
||||||
$table->increments('id');
|
$table->string('name_singular');
|
||||||
$table->string('name');
|
$table->string('name_plural');
|
||||||
});
|
$table->string('color')->nullable();
|
||||||
}
|
$table->string('icon')->nullable();
|
||||||
|
});
|
||||||
/**
|
}
|
||||||
* Reverse the migrations.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function down()
|
|
||||||
{
|
|
||||||
Schema::drop('groups');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::drop('groups');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ class ShowAction extends SerializeResourceAction
|
||||||
*/
|
*/
|
||||||
public static $include = [
|
public static $include = [
|
||||||
'user' => true,
|
'user' => true,
|
||||||
|
'user.groups' => true,
|
||||||
'editUser' => true,
|
'editUser' => true,
|
||||||
'hideUser' => true,
|
'hideUser' => true,
|
||||||
'discussion' => false
|
'discussion' => false
|
||||||
|
|
|
@ -18,8 +18,11 @@ class GroupSerializer extends BaseSerializer
|
||||||
protected function attributes($group)
|
protected function attributes($group)
|
||||||
{
|
{
|
||||||
$attributes = [
|
$attributes = [
|
||||||
'id' => (int) $group->id,
|
'id' => (int) $group->id,
|
||||||
'name' => $group->name
|
'nameSingular' => $group->name_singular,
|
||||||
|
'namePlural' => $group->name_plural,
|
||||||
|
'color' => $group->color,
|
||||||
|
'icon' => $group->icon,
|
||||||
];
|
];
|
||||||
|
|
||||||
return $this->extendAttributes($group, $attributes);
|
return $this->extendAttributes($group, $attributes);
|
||||||
|
|
|
@ -24,4 +24,9 @@ class UserBasicSerializer extends BaseSerializer
|
||||||
|
|
||||||
return $this->extendAttributes($user, $attributes);
|
return $this->extendAttributes($user, $attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function groups()
|
||||||
|
{
|
||||||
|
return $this->hasMany('Flarum\Api\Serializers\GroupSerializer');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,9 +56,4 @@ class UserSerializer extends UserBasicSerializer
|
||||||
|
|
||||||
return $this->extendAttributes($user, $attributes);
|
return $this->extendAttributes($user, $attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function groups()
|
|
||||||
{
|
|
||||||
return $this->hasMany('Flarum\Api\Serializers\GroupSerializer');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,9 +15,19 @@ class GroupsTableSeeder extends Seeder {
|
||||||
Group::unguard();
|
Group::unguard();
|
||||||
Group::truncate();
|
Group::truncate();
|
||||||
|
|
||||||
$groups = ['Administrator', 'Guest', 'Member', 'Moderator', 'Staff'];
|
$groups = [
|
||||||
|
['Admin', 'Admins', '#B72A2A', 'wrench'],
|
||||||
|
['Guest', 'Guests', null, null],
|
||||||
|
['Member', 'Members', null, null],
|
||||||
|
['Mod', 'Mods', '#80349E', 'bolt']
|
||||||
|
];
|
||||||
foreach ($groups as $group) {
|
foreach ($groups as $group) {
|
||||||
Group::create(['name' => $group]);
|
Group::create([
|
||||||
|
'name_singular' => $group[0],
|
||||||
|
'name_plural' => $group[1],
|
||||||
|
'color' => $group[2],
|
||||||
|
'icon' => $group[3]
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user