refactor(api): deprecated groups update socket in favour of API lib

v1.18.x
Julian Lam 4 years ago
parent e640a41a78
commit 1cd2689cf6

@ -6,8 +6,9 @@ define('admin/manage/group', [
'translator',
'categorySelector',
'groupSearch',
'slugify',
'api',
], function (memberList, iconSelect, translator, categorySelector, groupSearch, api) {
], function (memberList, iconSelect, translator, categorySelector, groupSearch, slugify, api) {
var Groups = {};
Groups.init = function () {
@ -68,27 +69,20 @@ define('admin/manage/group', [
});
$('#save').on('click', function () {
socket.emit('admin.groups.update', {
groupName: groupName,
values: {
name: $('#change-group-name').val(),
userTitle: changeGroupUserTitle.val(),
description: $('#change-group-desc').val(),
icon: groupIcon.attr('value'),
labelColor: changeGroupLabelColor.val(),
textColor: changeGroupTextColor.val(),
userTitleEnabled: $('#group-userTitleEnabled').is(':checked'),
private: $('#group-private').is(':checked'),
hidden: $('#group-hidden').is(':checked'),
memberPostCids: $('#memberPostCids').val(),
disableJoinRequests: $('#group-disableJoinRequests').is(':checked'),
disableLeave: $('#group-disableLeave').is(':checked'),
},
}, function (err) {
if (err) {
return app.alertError(err.message);
}
api.put(`/groups/${slugify(groupName)}`, {
name: $('#change-group-name').val(),
userTitle: changeGroupUserTitle.val(),
description: $('#change-group-desc').val(),
icon: groupIcon.attr('value'),
labelColor: changeGroupLabelColor.val(),
textColor: changeGroupTextColor.val(),
userTitleEnabled: $('#group-userTitleEnabled').is(':checked'),
private: $('#group-private').is(':checked'),
hidden: $('#group-hidden').is(':checked'),
memberPostCids: $('#memberPostCids').val(),
disableJoinRequests: $('#group-disableJoinRequests').is(':checked'),
disableLeave: $('#group-disableLeave').is(':checked'),
}).then(() => {
var newName = $('#change-group-name').val();
// If the group name changed, change url
@ -97,7 +91,7 @@ define('admin/manage/group', [
}
app.alertSuccess('[[admin/manage/groups:edit.save-success]]');
});
}).catch(app.alertError);
return false;
});
};

@ -203,14 +203,7 @@ define('forum/groups/details', [
}
});
socket.emit('groups.update', {
groupName: groupName,
values: settings,
}, function (err) {
if (err) {
return app.alertError(err.message);
}
api.put(`/groups/${slugify(groupName)}`, settings).then(() => {
if (settings.name) {
var pathname = window.location.pathname;
pathname = pathname.substr(1, pathname.lastIndexOf('/'));
@ -220,7 +213,7 @@ define('forum/groups/details', [
}
app.alertSuccess('[[groups:event.updated]]');
});
}).catch(app.alertError);
}
};

@ -33,6 +33,16 @@ groupsAPI.create = async function (caller, data) {
return groupData;
};
groupsAPI.update = async function (caller, data) {
const groupName = await groups.getGroupNameByGroupSlug(data.slug);
await isOwner(caller, groupName);
delete data.slug;
await groups.update(groupName, data);
return await groups.getGroupData(data.name || groupName);
};
groupsAPI.delete = async function (caller, data) {
const groupName = await groups.getGroupNameByGroupSlug(data.slug);
await isOwner(caller, groupName);

@ -15,6 +15,14 @@ Groups.create = async (req, res) => {
helpers.formatApiResponse(200, res, groupObj);
};
Groups.update = async (req, res) => {
const groupObj = await api.groups.update(req, {
...req.body,
slug: req.params.slug,
});
helpers.formatApiResponse(200, res, groupObj);
};
Groups.delete = async (req, res) => {
await api.groups.delete(req, req.params);
helpers.formatApiResponse(200, res);

@ -24,6 +24,13 @@ module.exports = function (Groups) {
values: values,
}));
// Case some values as bool (if not boolean already)
['userTitleEnabled', 'private', 'hidden', 'disableJoinRequests', 'disableLeave'].forEach((prop) => {
if (values.hasOwnProperty(prop) && typeof values[prop] !== 'boolean') {
values[prop] = !!parseInt(values[prop], 10);
}
});
const payload = {
description: values.description || '',
icon: values.icon || '',

@ -12,6 +12,7 @@ module.exports = function () {
setupApiRoute(router, 'post', '/', [...middlewares, middleware.checkRequired.bind(null, ['name'])], controllers.write.groups.create);
setupApiRoute(router, 'head', '/:slug', [middleware.assert.group], controllers.write.groups.exists);
setupApiRoute(router, 'put', '/:slug', [...middlewares, middleware.assert.group], controllers.write.groups.update);
setupApiRoute(router, 'delete', '/:slug', [...middlewares, middleware.assert.group], controllers.write.groups.delete);
setupApiRoute(router, 'put', '/:slug/membership/:uid', [...middlewares, middleware.assert.group], controllers.write.groups.join);
setupApiRoute(router, 'delete', '/:slug/membership/:uid', [...middlewares, middleware.assert.group], controllers.write.groups.leave);

@ -43,9 +43,12 @@ Groups.leave = async function (socket, data) {
};
Groups.update = async function (socket, data) {
sockets.warnDeprecated(socket, 'PUT /api/v3/groups/:slug');
if (!data) {
throw new Error('[[error:invalid-data]]');
}
await groups.update(data.groupName, data.values);
const slug = await groups.getGroupField(data.groupName, 'slug');
await api.groups.update(socket, { slug, ...data.values });
// await groups.update(data.groupName, data.values);
};

@ -186,8 +186,12 @@ SocketGroups.rejectInvite = async (socket, data) => {
};
SocketGroups.update = async (socket, data) => {
sockets.warnDeprecated(socket, 'PUT /api/v3/groups/:slug');
await isOwner(socket, data);
await groups.update(data.groupName, data.values);
const slug = await groups.getGroupField(data.groupName, 'slug');
await api.groups.update(socket, { slug, ...data.values });
// await groups.update(data.groupName, data.values);
};

Loading…
Cancel
Save