diff options
author | John McLear <john@mclear.co.uk> | 2012-09-18 15:36:19 -0700 |
---|---|---|
committer | John McLear <john@mclear.co.uk> | 2012-09-18 15:36:19 -0700 |
commit | 0883043eb99e00f9495c56bc78330f79ee55a8c7 (patch) | |
tree | 779f1be111adfbb9bb5705309cdffef0b730f839 | |
parent | f81a11022980e4fb1d84a290de42d97500e24548 (diff) | |
parent | f8f002adc0ec152b15d67bca9b5288d6b46196e1 (diff) | |
download | etherpad-lite-0883043eb99e00f9495c56bc78330f79ee55a8c7.zip |
Merge pull request #1014 from marcelklehr/feature/list-all-groups
Add listAllGroups API endpoint
-rw-r--r-- | doc/api/http_api.md | 4 | ||||
-rw-r--r-- | doc/database.md | 3 | ||||
-rw-r--r-- | src/node/db/API.js | 1 | ||||
-rw-r--r-- | src/node/db/GroupManager.js | 70 | ||||
-rw-r--r-- | src/node/handler/APIHandler.js | 1 |
5 files changed, 78 insertions, 1 deletions
diff --git a/doc/api/http_api.md b/doc/api/http_api.md index 058a2ba6..3afab498 100644 --- a/doc/api/http_api.md +++ b/doc/api/http_api.md @@ -135,6 +135,10 @@ Pads can belong to a group. The padID of grouppads is starting with a groupID li * `{code: 1, message:"pad does already exist", data: null}` * `{code: 1, message:"groupID does not exist", data: null}` +* **listAllGroups()** lists all existing groups<br><br>*Example returns:* + * `{code: 0, message:"ok", data: {groupIDs: ["g.mKjkmnAbSMtCt8eL", "g.3ADWx6sbGuAiUmCy"]}}` + * `{code: 0, message:"ok", data: {groupIDs: []}}` + ### Author These authors are bound to the attributes the users choose (color and name). diff --git a/doc/database.md b/doc/database.md index 2e06e206..de3e9f54 100644 --- a/doc/database.md +++ b/doc/database.md @@ -2,6 +2,9 @@ ## Keys and their values +### groups +A list of all existing groups (a JSON object with groupIDs as keys and `1` as values). + ### pad:$PADID Saves all informations about pads diff --git a/src/node/db/API.js b/src/node/db/API.js index c5caae0b..4979e8c6 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -35,6 +35,7 @@ var cleanText = require("./Pad").cleanText; /**GROUP FUNCTIONS*****/ /**********************/ +exports.listAllGroups = groupManager.listAllGroups; exports.createGroup = groupManager.createGroup; exports.createGroupIfNotExistsFor = groupManager.createGroupIfNotExistsFor; exports.deleteGroup = groupManager.deleteGroup; diff --git a/src/node/db/GroupManager.js b/src/node/db/GroupManager.js index bd19507f..81b0cb9e 100644 --- a/src/node/db/GroupManager.js +++ b/src/node/db/GroupManager.js @@ -26,6 +26,24 @@ var db = require("./DB").db; var async = require("async"); var padManager = require("./PadManager"); var sessionManager = require("./SessionManager"); + +exports.listAllGroups = function(callback) { + db.get("groups", function (err, groups) { + if(ERR(err, callback)) return; + + // there are no groups + if(groups == null) { + callback(null, {groupIDs: []}); + return; + } + + var groupIDs = []; + for ( var groupID in groups ) { + groupIDs.push(groupID); + } + callback(null, {groupIDs: groupIDs}); + }); +} exports.deleteGroup = function(groupID, callback) { @@ -105,6 +123,39 @@ exports.deleteGroup = function(groupID, callback) db.remove("group2sessions:" + groupID); db.remove("group:" + groupID); callback(); + }, + //unlist the group + function(callback) + { + exports.listAllGroups(function(err, groups) { + if(ERR(err, callback)) return; + groups = groups? groups.groupIDs : []; + + // it's not listed + if(groups.indexOf(groupID) == -1) { + callback(); + return; + } + + groups.splice(groups.indexOf(groupID), 1); + + // store empty groupe list + if(groups.length == 0) { + db.set("groups", {}); + callback(); + return; + } + + // regenerate group list + var newGroups = {}; + async.forEach(groups, function(group, cb) { + newGroups[group] = 1; + cb(); + },function() { + db.set("groups", newGroups); + callback(); + }); + }); } ], function(err) { @@ -130,7 +181,24 @@ exports.createGroup = function(callback) //create the group db.set("group:" + groupID, {pads: {}}); - callback(null, {groupID: groupID}); + + //list the group + exports.listAllGroups(function(err, groups) { + if(ERR(err, callback)) return; + groups = groups? groups.groupIDs : []; + + groups.push(groupID); + + // regenerate group list + var newGroups = {}; + async.forEach(groups, function(group, cb) { + newGroups[group] = 1; + cb(); + },function() { + db.set("groups", newGroups); + callback(null, {groupID: groupID}); + }); + }); } exports.createGroupIfNotExistsFor = function(groupMapper, callback) diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.js index 2af7afef..f99762ce 100644 --- a/src/node/handler/APIHandler.js +++ b/src/node/handler/APIHandler.js @@ -101,6 +101,7 @@ var version = , "getAuthorName" : ["authorID"] , "padUsers" : ["padID"] , "sendClientsMessage" : ["padID", "msg"] + , "listAllGroups" : [] } }; |