From 635393a274d67289d0bdaf8402d1b045869649ed Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 12 Jan 2015 13:00:23 -0500 Subject: [PATCH] group creation and deletion from outside ACP, #2588 --- public/language/en_GB/groups.json | 7 ++++++- public/src/client/groups/details.js | 29 ++++++++++++++++++++++++++++- public/src/client/groups/list.js | 19 ++++++++++++++++++- src/groups.js | 2 +- src/socket.io/groups.js | 11 +++++++++++ 5 files changed, 64 insertions(+), 4 deletions(-) diff --git a/public/language/en_GB/groups.json b/public/language/en_GB/groups.json index 1dafb41ed6..f7ccec33bc 100644 --- a/public/language/en_GB/groups.json +++ b/public/language/en_GB/groups.json @@ -2,6 +2,8 @@ "groups": "Groups", "view_group": "View Group", "owner": "Group Owner", + "new_group": "Create New Group", + "no_groups_found": "There are no groups to see", "details.title": "Group Details", "details.members": "Member List", @@ -11,5 +13,8 @@ "details.private": "Private Group", "details.public": "Public Group", - "details.owner_options": "Group Administration" + "details.owner_options": "Group Administration", + + "event.updated": "Group details have been updated", + "event.deleted": "The group \"%1\" has been deleted" } \ No newline at end of file diff --git a/public/src/client/groups/details.js b/public/src/client/groups/details.js index 0aacde97ce..d8d98a2edc 100644 --- a/public/src/client/groups/details.js +++ b/public/src/client/groups/details.js @@ -1,5 +1,5 @@ "use strict"; -/* globals define, socket, ajaxify, app */ +/* globals define, socket, ajaxify, app, bootbox */ define('forum/groups/details', ['iconSelect', 'vendor/colorpicker/colorpicker'], function(iconSelect) { var Details = {}; @@ -38,6 +38,10 @@ define('forum/groups/details', ['iconSelect', 'vendor/colorpicker/colorpicker'], Details.update(); break; + case 'delete': + Details.deleteGroup(); + break; + case 'join': // intentional fall-throughs! case 'leave': case 'accept': @@ -118,10 +122,33 @@ define('forum/groups/details', ['iconSelect', 'vendor/colorpicker/colorpicker'], } else { ajaxify.refresh(); } + + app.alertSuccess('[[groups:event.updated'); }); }); } }; + Details.deleteGroup = function() { + bootbox.confirm('Are you sure you want to delete the group: ' + ajaxify.variables.get('group_name'), function(confirm) { + if (confirm) { + bootbox.prompt('Please enter the name of this group in order to delete it:', function(response) { + if (response === ajaxify.variables.get('group_name')) { + socket.emit('groups.delete', { + groupName: ajaxify.variables.get('group_name') + }, function(err) { + if (!err) { + app.alertSuccess('[[groups:event.deleted, ' + ajaxify.variables.get('group_name') + ']]'); + ajaxify.go('groups'); + } else { + app.alertError(err.message); + } + }); + } + }); + } + }); + }; + return Details; }); \ No newline at end of file diff --git a/public/src/client/groups/list.js b/public/src/client/groups/list.js index e7daf195f1..03243d6822 100644 --- a/public/src/client/groups/list.js +++ b/public/src/client/groups/list.js @@ -1,5 +1,5 @@ "use strict"; -/* globals define, ajaxify, socket */ +/* globals app, define, ajaxify, socket, bootbox */ define('forum/groups/list', function() { var Groups = {}; @@ -20,6 +20,23 @@ define('forum/groups/list', function() { } }); }); + + // Group creation + $('button[data-action="new"]').on('click', function() { + bootbox.prompt('Group Name:', function(name) { + if (name && name.length) { + socket.emit('groups.create', { + name: name + }, function(err) { + if (!err) { + ajaxify.go('groups/' + name); + } else { + app.alertError(err.message); + } + }); + } + }); + }); }; return Groups; diff --git a/src/groups.js b/src/groups.js index 333b823396..19560ca14c 100644 --- a/src/groups.js +++ b/src/groups.js @@ -386,7 +386,7 @@ var async = require('async'), var groupData = { name: data.name, userTitle: data.name, - description: data.description, + description: data.description || '', deleted: '0', hidden: '0', system: system ? '1' : '0', diff --git a/src/socket.io/groups.js b/src/socket.io/groups.js index c517cbabb2..3f3718d97f 100644 --- a/src/socket.io/groups.js +++ b/src/socket.io/groups.js @@ -101,6 +101,17 @@ SocketGroups.update = function(socket, data, callback) { }); }; +SocketGroups.create = function(socket, data, callback) { + if(!data) { + return callback(new Error('[[error:invalid-data]]')); + } else if (socket.uid === 0) { + return callback(new Error('[[error:no-privileges]]')); + } + + data.ownerUid = socket.uid; + groups.create(data, callback); +}; + SocketGroups.delete = function(socket, data, callback) { if(!data) { return callback(new Error('[[error:invalid-data]]'));