mirror of
https://github.com/codeninjasllc/discourse.git
synced 2025-03-14 17:10:54 -04:00
Work in progress: Groups Page
This commit is contained in:
parent
325c2dfaea
commit
3b1ef6ebc9
10 changed files with 64 additions and 29 deletions
app
assets/javascripts/discourse
lib
models
routes
templates/group
controllers
|
@ -83,12 +83,13 @@ $.fn.autocomplete = function(options) {
|
||||||
};
|
};
|
||||||
|
|
||||||
var addInputSelectedItem = function(item) {
|
var addInputSelectedItem = function(item) {
|
||||||
var transformed;
|
var transformed,
|
||||||
|
transformedItem = item;
|
||||||
|
|
||||||
if (options.transformComplete) { transformed = options.transformComplete(item); }
|
if (options.transformComplete) { transformedItem = options.transformComplete(transformedItem); }
|
||||||
// dump what we have in single mode, just in case
|
// dump what we have in single mode, just in case
|
||||||
if (options.single) { inputSelectedItems = []; }
|
if (options.single) { inputSelectedItems = []; }
|
||||||
if (!_.isArray(transformed)) { transformed = [transformed || item]; }
|
if (!_.isArray(transformedItem)) { transformed = [transformedItem || item]; }
|
||||||
|
|
||||||
var divs = transformed.map(function(itm) {
|
var divs = transformed.map(function(itm) {
|
||||||
var d = $("<div class='item'><span>" + itm + "<a class='remove' href='#'><i class='fa fa-times'></i></a></span></div>");
|
var d = $("<div class='item'><span>" + itm + "<a class='remove' href='#'><i class='fa fa-times'></i></a></span></div>");
|
||||||
|
@ -106,7 +107,7 @@ $.fn.autocomplete = function(options) {
|
||||||
|
|
||||||
$(divs).find('a').click(function() {
|
$(divs).find('a').click(function() {
|
||||||
closeAutocomplete();
|
closeAutocomplete();
|
||||||
inputSelectedItems.splice($.inArray(item, inputSelectedItems), 1);
|
inputSelectedItems.splice($.inArray(transformedItem, inputSelectedItems), 1);
|
||||||
$(this).parent().parent().remove();
|
$(this).parent().parent().remove();
|
||||||
if (options.single) {
|
if (options.single) {
|
||||||
me.show();
|
me.show();
|
||||||
|
|
|
@ -31,15 +31,18 @@ Discourse.Group = Discourse.Model.extend({
|
||||||
}
|
}
|
||||||
}.property('user_count'),
|
}.property('user_count'),
|
||||||
|
|
||||||
|
// TODO: Refactor so adminGroups doesn't store the groups inside itself either.
|
||||||
|
findMembers: function() {
|
||||||
|
return Discourse.ajax('/groups/' + this.get('name') + '/members').then(function(result) {
|
||||||
|
return result.map(function(u) { return Discourse.User.create(u) });
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
loadUsers: function() {
|
loadUsers: function() {
|
||||||
var id = this.get('id');
|
var id = this.get('id');
|
||||||
if(id && !this.get('loadedUsers')) {
|
if(id && !this.get('loadedUsers')) {
|
||||||
var self = this;
|
var self = this;
|
||||||
return Discourse.ajax('/admin/groups/' + this.get('id') + '/users').then(function(payload){
|
return this.findMembers().then(function(users) {
|
||||||
var users = Em.A();
|
|
||||||
_.each(payload,function(user){
|
|
||||||
users.addObject(Discourse.User.create(user));
|
|
||||||
});
|
|
||||||
self.set('users', users);
|
self.set('users', users);
|
||||||
self.set('loadedUsers', true);
|
self.set('loadedUsers', true);
|
||||||
return self;
|
return self;
|
||||||
|
@ -48,16 +51,21 @@ Discourse.Group = Discourse.Model.extend({
|
||||||
return Ember.RSVP.resolve(this);
|
return Ember.RSVP.resolve(this);
|
||||||
},
|
},
|
||||||
|
|
||||||
usernames: function() {
|
usernames: function(key, value) {
|
||||||
var users = this.get('users');
|
var users = this.get('users');
|
||||||
var usernames = "";
|
if (arguments.length > 1) {
|
||||||
if(users) {
|
this.set('_usernames', value);
|
||||||
usernames = _.map(users, function(user){
|
} else {
|
||||||
return user.get('username');
|
var usernames = "";
|
||||||
}).join(',');
|
if(users) {
|
||||||
|
usernames = users.map(function(user) {
|
||||||
|
return user.get('username');
|
||||||
|
}).join(',');
|
||||||
|
}
|
||||||
|
this.set('_usernames', usernames);
|
||||||
}
|
}
|
||||||
return usernames;
|
return this.get('_usernames');
|
||||||
}.property('users'),
|
}.property('users.@each.username'),
|
||||||
|
|
||||||
destroy: function(){
|
destroy: function(){
|
||||||
if(!this.id) return;
|
if(!this.id) return;
|
||||||
|
@ -133,6 +141,12 @@ Discourse.Group.reopenClass({
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
find: function(name) {
|
||||||
|
return Discourse.ajax("/groups/" + name + ".json").then(function(g) {
|
||||||
|
return Discourse.Group.create(g.basic_group);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
aliasLevelOptions: function() {
|
aliasLevelOptions: function() {
|
||||||
return aliasLevelOptions;
|
return aliasLevelOptions;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ Discourse.Route.buildRoutes(function() {
|
||||||
this.route(homepage, { path: '/' });
|
this.route(homepage, { path: '/' });
|
||||||
});
|
});
|
||||||
|
|
||||||
this.resource('group', { path: '/groups/:groupname' }, function() {
|
this.resource('group', { path: '/groups/:name' }, function() {
|
||||||
this.route('members');
|
this.route('members');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
Discourse.GroupIndexRoute = Discourse.Route.extend({
|
Discourse.GroupIndexRoute = Discourse.Route.extend({
|
||||||
|
|
||||||
model: function() {
|
model: function() {
|
||||||
console.log('group index');
|
return this.modelFor('group');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
Discourse.GroupMembersRoute = Discourse.Route.extend({
|
||||||
|
model: function() {
|
||||||
|
return this.modelFor('group');
|
||||||
|
},
|
||||||
|
|
||||||
|
afterModel: function(model) {
|
||||||
|
var self = this;
|
||||||
|
return model.findMembers().then(function(result) {
|
||||||
|
self.set('_members', result);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
setupController: function(controller) {
|
||||||
|
controller.set('model', this.get('_members'));
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Discourse.GroupRoute = Discourse.Route.extend({
|
Discourse.GroupRoute = Discourse.Route.extend({
|
||||||
|
|
||||||
model: function() {
|
model: function(params) {
|
||||||
return Discourse.Group.create();
|
return Discourse.Group.find(params.name);
|
||||||
},
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
GROUP INDEX
|
GROUP INDEX
|
||||||
|
{{name}}
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
LIST GROUP MEMBERS
|
{{#each model}}
|
||||||
|
{{username}}
|
||||||
|
{{/each}}
|
||||||
|
|
|
@ -9,11 +9,6 @@ class Admin::GroupsController < Admin::AdminController
|
||||||
render json: success_json
|
render json: success_json
|
||||||
end
|
end
|
||||||
|
|
||||||
def users
|
|
||||||
group = Group.find(params[:group_id].to_i)
|
|
||||||
render_serialized(group.users.order('username_lower asc').limit(200).to_a, BasicUserSerializer)
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
def update
|
||||||
group = Group.find(params[:id].to_i)
|
group = Group.find(params[:id].to_i)
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
class GroupsController < ApplicationController
|
class GroupsController < ApplicationController
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
group = Group.where(name: params.require(:id)).first
|
||||||
|
guardian.ensure_can_see!(group)
|
||||||
|
render_serialized(group, BasicGroupSerializer)
|
||||||
end
|
end
|
||||||
|
|
||||||
def members
|
def members
|
||||||
|
group = Group.where(name: params.require(:group_id)).first
|
||||||
|
guardian.ensure_can_see!(group)
|
||||||
|
render_serialized(group.users.order('username_lower asc').limit(200).to_a, BasicUserSerializer)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue