mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-13 09:25:45 +01:00
fixed #2732 -- group creation now using language keys, and no longer succeeds if a group by the name of 'guest' is created.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
/*global define, templates, socket, ajaxify, app, admin, bootbox*/
|
/*global define, templates, socket, ajaxify, app, admin, bootbox, utils, config, translator */
|
||||||
|
|
||||||
define('admin/manage/groups', [
|
define('admin/manage/groups', [
|
||||||
'iconSelect',
|
'iconSelect',
|
||||||
@@ -50,19 +50,13 @@ define('admin/manage/groups', [
|
|||||||
|
|
||||||
socket.emit('admin.groups.create', submitObj, function(err) {
|
socket.emit('admin.groups.create', submitObj, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
switch (err) {
|
if (err.hasOwnProperty('message') && utils.hasLanguageKey(err.message)) {
|
||||||
case 'group-exists':
|
translator.translate(err.message, config.defaultLang, function(translated) {
|
||||||
errorText = '<strong>Please choose another name</strong><p>There seems to be a group with this name already.</p>';
|
createModalError.html(translated).removeClass('hide');
|
||||||
break;
|
});
|
||||||
case 'name-too-short':
|
} else {
|
||||||
errorText = '<strong>Please specify a group name</strong><p>A group name is required for administrative purposes.</p>';
|
createModalError.html('<strong>Uh-Oh</strong><p>There was a problem creating your group. Please try again later!</p>').removeClass('hide');
|
||||||
break;
|
|
||||||
default:
|
|
||||||
errorText = '<strong>Uh-Oh</strong><p>There was a problem creating your group. Please try again later!</p>';
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
createModalError.html(errorText).removeClass('hide');
|
|
||||||
} else {
|
} else {
|
||||||
createModalError.addClass('hide');
|
createModalError.addClass('hide');
|
||||||
createGroupName.val('');
|
createGroupName.val('');
|
||||||
|
|||||||
@@ -71,6 +71,7 @@
|
|||||||
trimTrailingDash: /-$/g,
|
trimTrailingDash: /-$/g,
|
||||||
trimLeadingDash: /^-/g,
|
trimLeadingDash: /^-/g,
|
||||||
isLatin: /^[\w]+$/,
|
isLatin: /^[\w]+$/,
|
||||||
|
languageKeyRegex: /\[\[[\w]+:.+\]\]/,
|
||||||
|
|
||||||
//http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
|
//http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
|
||||||
slugify: function(str) {
|
slugify: function(str) {
|
||||||
@@ -108,6 +109,10 @@
|
|||||||
return !isNaN(parseFloat(n)) && isFinite(n);
|
return !isNaN(parseFloat(n)) && isFinite(n);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
hasLanguageKey: function(input) {
|
||||||
|
return utils.languageKeyRegex.test(input);
|
||||||
|
},
|
||||||
|
|
||||||
// shallow objects merge
|
// shallow objects merge
|
||||||
merge: function() {
|
merge: function() {
|
||||||
var result = {}, obj, keys;
|
var result = {}, obj, keys;
|
||||||
|
|||||||
@@ -43,20 +43,14 @@ var async = require('async'),
|
|||||||
return groups;
|
return groups;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getEphemeralGroup: function(groupName, options, callback) {
|
getEphemeralGroup: function(groupName) {
|
||||||
Groups.exists(groupName, function(err, exists) {
|
return {
|
||||||
if (!err && exists) {
|
|
||||||
Groups.get.apply(null, arguments);
|
|
||||||
} else {
|
|
||||||
callback(null, {
|
|
||||||
name: groupName,
|
name: groupName,
|
||||||
description: '',
|
description: '',
|
||||||
deleted: '0',
|
deleted: '0',
|
||||||
hidden: '0',
|
hidden: '0',
|
||||||
system: '1'
|
system: '1'
|
||||||
});
|
};
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
removeEphemeralGroups: function(groups) {
|
removeEphemeralGroups: function(groups) {
|
||||||
var x = groups.length;
|
var x = groups.length;
|
||||||
@@ -95,6 +89,9 @@ var async = require('async'),
|
|||||||
};
|
};
|
||||||
|
|
||||||
Groups.get = function(groupName, options, callback) {
|
Groups.get = function(groupName, options, callback) {
|
||||||
|
if (!arguments[0]) {
|
||||||
|
console.log(new Error.stack);
|
||||||
|
}
|
||||||
var truncated = false,
|
var truncated = false,
|
||||||
numUsers;
|
numUsers;
|
||||||
|
|
||||||
@@ -103,7 +100,7 @@ var async = require('async'),
|
|||||||
if (ephemeralGroups.indexOf(groupName) === -1) {
|
if (ephemeralGroups.indexOf(groupName) === -1) {
|
||||||
db.getObject('group:' + groupName, next);
|
db.getObject('group:' + groupName, next);
|
||||||
} else {
|
} else {
|
||||||
internals.getEphemeralGroup(groupName, options, next);
|
next(null, internals.getEphemeralGroup(groupName));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
users: function (next) {
|
users: function (next) {
|
||||||
@@ -400,6 +397,11 @@ var async = require('async'),
|
|||||||
return utils.slugify(groupName);
|
return utils.slugify(groupName);
|
||||||
});
|
});
|
||||||
async.parallel([
|
async.parallel([
|
||||||
|
function(next) {
|
||||||
|
callback(null, slugs.map(function(slug) {
|
||||||
|
return ephemeralGroups.indexOf(slug) !== -1;
|
||||||
|
}));
|
||||||
|
},
|
||||||
async.apply(db.isObjectFields, 'groupslug:groupname', slugs),
|
async.apply(db.isObjectFields, 'groupslug:groupname', slugs),
|
||||||
async.apply(db.isSortedSetMembers, 'groups:createtime', name)
|
async.apply(db.isSortedSetMembers, 'groups:createtime', name)
|
||||||
], function(err, results) {
|
], function(err, results) {
|
||||||
@@ -407,17 +409,20 @@ var async = require('async'),
|
|||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(null, results.map(function(pair) {
|
callback(null, results.map(function(result) {
|
||||||
return pair[0] || pair[1];
|
return result[0] || result[1] || result[2];
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var slug = utils.slugify(name);
|
var slug = utils.slugify(name);
|
||||||
async.parallel([
|
async.parallel([
|
||||||
|
function(next) {
|
||||||
|
next(null, ephemeralGroups.indexOf(slug) !== -1);
|
||||||
|
},
|
||||||
async.apply(db.isObjectField, 'groupslug:groupname', slug),
|
async.apply(db.isObjectField, 'groupslug:groupname', slug),
|
||||||
async.apply(db.isSortedSetMember, 'groups:createtime', name)
|
async.apply(db.isSortedSetMember, 'groups:createtime', name)
|
||||||
], function(err, results) {
|
], function(err, results) {
|
||||||
callback(err, !err ? (results[0] || results[1]) : null);
|
callback(err, !err ? (results[0] || results[1] || results[2]) : null);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user