adding concept of group slugs, #2588. ping @barisusakli for downstream plugin changes

v1.18.x
Julian Lam 10 years ago
parent 6f140384e0
commit c026a64e8e

@ -1,5 +1,5 @@
"use strict"; "use strict";
/* globals app, define, ajaxify, socket, bootbox */ /* globals app, define, ajaxify, socket, bootbox, utils */
define('forum/groups/list', function() { define('forum/groups/list', function() {
var Groups = {}; var Groups = {};
@ -10,7 +10,7 @@ define('forum/groups/list', function() {
groupsEl.on('click', '.list-cover', function() { groupsEl.on('click', '.list-cover', function() {
var groupName = $(this).parents('[data-group]').attr('data-group'); var groupName = $(this).parents('[data-group]').attr('data-group');
ajaxify.go('groups/' + encodeURIComponent(groupName)); ajaxify.go('groups/' + utils.slugify(groupName));
}); });
// Group creation // Group creation
@ -21,7 +21,7 @@ define('forum/groups/list', function() {
name: name name: name
}, function(err) { }, function(err) {
if (!err) { if (!err) {
ajaxify.go('groups/' + encodeURIComponent(name)); ajaxify.go('groups/' + utils.slugify(name));
} else { } else {
app.alertError(err.message); app.alertError(err.message);
} }

@ -26,7 +26,7 @@ groupsController.details = function(req, res, next) {
async.parallel({ async.parallel({
group: function(next) { group: function(next) {
groups.get(req.params.name, { groups.getByGroupslug(req.params.slug, {
expand: true, expand: true,
uid: uid uid: uid
}, next); }, next);

@ -193,8 +193,10 @@ var async = require('async'),
}); });
} }
}, function (err, results) { }, function (err, results) {
if (err || !results.base) { if (err) {
return callback(err); return callback(err);
} else if (!results.base) {
return callback(new Error('[[error:no-group]]'));
} }
// Default image // Default image
@ -224,6 +226,18 @@ var async = require('async'),
}); });
}; };
Groups.getByGroupslug = function(slug, options, callback) {
db.getObjectField('groupslug:groupname', slug, function(err, groupName) {
if (err) {
return callback(err);
} else if (!groupName) {
return callback(new Error('[[error:no-group]]'));
}
Groups.get.call(Groups, groupName, options, callback);
});
};
Groups.getGroupFields = function(groupName, fields, callback) { Groups.getGroupFields = function(groupName, fields, callback) {
db.getObjectFields('group:' + groupName, fields, callback); db.getObjectFields('group:' + groupName, fields, callback);
}; };
@ -413,8 +427,10 @@ var async = require('async'),
return callback(new Error('[[error:group-already-exists]]')); return callback(new Error('[[error:group-already-exists]]'));
} }
var groupData = { var slug = utils.slugify(data.name),
groupData = {
name: data.name, name: data.name,
slug: slug,
userTitle: data.name, userTitle: data.name,
description: data.description || '', description: data.description || '',
deleted: '0', deleted: '0',
@ -432,6 +448,10 @@ var async = require('async'),
tasks.push(async.apply(db.setAdd, 'group:' + data.name + ':members', data.ownerUid)); tasks.push(async.apply(db.setAdd, 'group:' + data.name + ':members', data.ownerUid));
} }
if (!data.hidden) {
tasks.push(async.apply(db.setObjectField, 'groupslug:groupname', slug, data.name));
}
async.parallel(tasks, function(err) { async.parallel(tasks, function(err) {
if (!err) { if (!err) {
plugins.fireHook('action:group.create', groupData); plugins.fireHook('action:group.create', groupData);
@ -567,6 +587,7 @@ var async = require('async'),
async.apply(db.delete, 'group:' + groupName + ':members'), async.apply(db.delete, 'group:' + groupName + ':members'),
async.apply(db.delete, 'group:' + groupName + ':pending'), async.apply(db.delete, 'group:' + groupName + ':pending'),
async.apply(db.delete, 'group:' + groupName + ':owners'), async.apply(db.delete, 'group:' + groupName + ':owners'),
async.apply(db.deleteObjectField, 'groupslug:groupname', utils.slugify(groupName)),
function(next) { function(next) {
db.getSetMembers('groups', function(err, groups) { db.getSetMembers('groups', function(err, groups) {
if (err) { if (err) {
@ -578,7 +599,7 @@ var async = require('async'),
}); });
} }
], callback); ], callback);
}) });
}; };
Groups.join = function(groupName, uid, callback) { Groups.join = function(groupName, uid, callback) {

@ -93,7 +93,7 @@ function groupRoutes(app, middleware, controllers) {
var middlewares = [middleware.checkGlobalPrivacySettings]; var middlewares = [middleware.checkGlobalPrivacySettings];
setupPageRoute(app, '/groups', middleware, middlewares, controllers.groups.list); setupPageRoute(app, '/groups', middleware, middlewares, controllers.groups.list);
setupPageRoute(app, '/groups/:name', middleware, middlewares, controllers.groups.details); setupPageRoute(app, '/groups/:slug', middleware, middlewares, controllers.groups.details);
} }
function setupPageRoute(router, name, middleware, middlewares, controller) { function setupPageRoute(router, name, middleware, middlewares, controller) {

Loading…
Cancel
Save