mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-01-31 19:02:59 +01:00
fix bugs, add force option to overwrite destination
This commit is contained in:
parent
93fcab0461
commit
52a99eb9e5
3 changed files with 60 additions and 24 deletions
|
@ -553,38 +553,40 @@ exports.deletePad = function(padID, callback)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
copyPad(sourceID, destinationID) copies a pad
|
copyPad(sourceID, destinationID[, force=false]) copies a pad. If force is true,
|
||||||
|
the destination will be overwritten if it exists.
|
||||||
|
|
||||||
Example returns:
|
Example returns:
|
||||||
|
|
||||||
{code: 0, message:"ok", data: null}
|
{code: 0, message:"ok", data: {padID: destinationID}}
|
||||||
{code: 1, message:"padID does not exist", data: null}
|
{code: 1, message:"padID does not exist", data: null}
|
||||||
*/
|
*/
|
||||||
exports.copyPad = function(sourceID, destinationID, callback)
|
exports.copyPad = function(sourceID, destinationID, force, callback)
|
||||||
{
|
{
|
||||||
getPadSafe(sourceID, true, function(err, pad)
|
getPadSafe(sourceID, true, function(err, pad)
|
||||||
{
|
{
|
||||||
if(ERR(err, callback)) return;
|
if(ERR(err, callback)) return;
|
||||||
|
|
||||||
pad.copy(destinationID, callback);
|
pad.copy(destinationID, force, callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
movePad(padID, newID) moves a pad
|
movePad(sourceID, destinationID[, force=false]) moves a pad. If force is true,
|
||||||
|
the destination will be overwritten if it exists.
|
||||||
|
|
||||||
Example returns:
|
Example returns:
|
||||||
|
|
||||||
{code: 0, message:"ok", data: null}
|
{code: 0, message:"ok", data: {padID: destinationID}}
|
||||||
{code: 1, message:"padID does not exist", data: null}
|
{code: 1, message:"padID does not exist", data: null}
|
||||||
*/
|
*/
|
||||||
exports.movePad = function(padID, newID, callback)
|
exports.movePad = function(sourceID, destinationID, force, callback)
|
||||||
{
|
{
|
||||||
getPadSafe(padID, true, function(err, pad)
|
getPadSafe(sourceID, true, function(err, pad)
|
||||||
{
|
{
|
||||||
if(ERR(err, callback)) return;
|
if(ERR(err, callback)) return;
|
||||||
|
|
||||||
pad.copy(newID, function(err) {
|
pad.copy(destinationID, force, function(err) {
|
||||||
if(ERR(err, callback)) return;
|
if(ERR(err, callback)) return;
|
||||||
pad.remove(callback);
|
pad.remove(callback);
|
||||||
});
|
});
|
||||||
|
|
|
@ -406,10 +406,20 @@ Pad.prototype.init = function init(text, callback) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Pad.prototype.copy = function copy(destinationID, callback) {
|
Pad.prototype.copy = function copy(destinationID, force, callback) {
|
||||||
var sourceID = this.id;
|
var sourceID = this.id;
|
||||||
var _this = this;
|
var _this = this;
|
||||||
|
|
||||||
|
// make force optional
|
||||||
|
if (typeof force == "function") {
|
||||||
|
callback = force;
|
||||||
|
force = false;
|
||||||
|
}
|
||||||
|
else if (force == undefined || force.toLowerCase() != "true") {
|
||||||
|
force = false;
|
||||||
|
}
|
||||||
|
else force = true;
|
||||||
|
|
||||||
//kick everyone from this pad
|
//kick everyone from this pad
|
||||||
// TODO: this presents a message on the client saying that the pad was 'deleted'. Fix this?
|
// TODO: this presents a message on the client saying that the pad was 'deleted'. Fix this?
|
||||||
padMessageHandler.kickSessionsFromPad(sourceID);
|
padMessageHandler.kickSessionsFromPad(sourceID);
|
||||||
|
@ -430,7 +440,8 @@ Pad.prototype.copy = function copy(destinationID, callback) {
|
||||||
//group does not exist
|
//group does not exist
|
||||||
if(exists == false)
|
if(exists == false)
|
||||||
{
|
{
|
||||||
callback(new customError("groupID does not exist","apierror"));
|
callback(new customError("groupID does not exist for destinationID","apierror"));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
//everything is fine, continue
|
//everything is fine, continue
|
||||||
else
|
else
|
||||||
|
@ -439,30 +450,49 @@ Pad.prototype.copy = function copy(destinationID, callback) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
callback();
|
else
|
||||||
|
callback();
|
||||||
},
|
},
|
||||||
// if the pad exists, we should abort.
|
// if the pad exists, we should abort, unless forced.
|
||||||
function(callback)
|
function(callback)
|
||||||
{
|
{
|
||||||
|
console.log("destinationID", destinationID, force);
|
||||||
padManager.doesPadExists(destinationID, function (err, exists)
|
padManager.doesPadExists(destinationID, function (err, exists)
|
||||||
{
|
{
|
||||||
if(ERR(err, callback)) return;
|
if(ERR(err, callback)) return;
|
||||||
|
|
||||||
if(exists == true)
|
if(exists == true)
|
||||||
{
|
{
|
||||||
callback(new customError("new padID already exists","apierror"));
|
if (!force)
|
||||||
|
{
|
||||||
|
console.log("erroring out without force");
|
||||||
|
callback(new customError("destinationID already exists","apierror"));
|
||||||
|
console.log("erroring out without force - after");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else // exists and forcing
|
||||||
|
{
|
||||||
|
padManager.getPad(destinationID, function(err, pad) {
|
||||||
|
if (ERR(err, callback)) return;
|
||||||
|
pad.remove(callback);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//everything is fine, continue
|
else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
db.get("pad:"+sourceID, function(err, pad) {
|
callback();
|
||||||
db.set("pad:"+destinationID, pad);
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
//delete all relations
|
// copy the 'pad' entry
|
||||||
|
function(callback)
|
||||||
|
{
|
||||||
|
db.get("pad:"+sourceID, function(err, pad) {
|
||||||
|
db.set("pad:"+destinationID, pad);
|
||||||
|
});
|
||||||
|
callback();
|
||||||
|
},
|
||||||
|
//copy all relations
|
||||||
function(callback)
|
function(callback)
|
||||||
{
|
{
|
||||||
async.parallel([
|
async.parallel([
|
||||||
|
@ -474,6 +504,7 @@ Pad.prototype.copy = function copy(destinationID, callback) {
|
||||||
for(var i=0;i<=chatHead;i++)
|
for(var i=0;i<=chatHead;i++)
|
||||||
{
|
{
|
||||||
db.get("pad:"+sourceID+":chat:"+i, function (err, chat) {
|
db.get("pad:"+sourceID+":chat:"+i, function (err, chat) {
|
||||||
|
if (ERR(err, callback)) return;
|
||||||
db.set("pad:"+destinationID+":chat:"+i, chat);
|
db.set("pad:"+destinationID+":chat:"+i, chat);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -484,10 +515,12 @@ Pad.prototype.copy = function copy(destinationID, callback) {
|
||||||
function(callback)
|
function(callback)
|
||||||
{
|
{
|
||||||
var revHead = _this.head;
|
var revHead = _this.head;
|
||||||
|
//console.log(revHead);
|
||||||
for(var i=0;i<=revHead;i++)
|
for(var i=0;i<=revHead;i++)
|
||||||
{
|
{
|
||||||
db.get("pad:"+sourceID+":revs:"+i, function (err, rev) {
|
db.get("pad:"+sourceID+":revs:"+i, function (err, rev) {
|
||||||
|
//console.log("HERE");
|
||||||
|
|
||||||
if (ERR(err, callback)) return;
|
if (ERR(err, callback)) return;
|
||||||
db.set("pad:"+destinationID+":revs:"+i, rev);
|
db.set("pad:"+destinationID+":revs:"+i, rev);
|
||||||
});
|
});
|
||||||
|
@ -502,6 +535,7 @@ Pad.prototype.copy = function copy(destinationID, callback) {
|
||||||
|
|
||||||
authorIDs.forEach(function (authorID)
|
authorIDs.forEach(function (authorID)
|
||||||
{
|
{
|
||||||
|
console.log("authors");
|
||||||
authorManager.addPad(authorID, destinationID);
|
authorManager.addPad(authorID, destinationID);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -240,8 +240,8 @@ var version =
|
||||||
, "getRevisionChangeset" : ["padID", "rev"]
|
, "getRevisionChangeset" : ["padID", "rev"]
|
||||||
, "getLastEdited" : ["padID"]
|
, "getLastEdited" : ["padID"]
|
||||||
, "deletePad" : ["padID"]
|
, "deletePad" : ["padID"]
|
||||||
, "copyPad" : ["sourceID", "destinationID"]
|
, "copyPad" : ["sourceID", "destinationID", "force"]
|
||||||
, "movePad" : ["sourceID", "destinationID"]
|
, "movePad" : ["sourceID", "destinationID", "force"]
|
||||||
, "getReadOnlyID" : ["padID"]
|
, "getReadOnlyID" : ["padID"]
|
||||||
, "setPublicStatus" : ["padID", "publicStatus"]
|
, "setPublicStatus" : ["padID", "publicStatus"]
|
||||||
, "getPublicStatus" : ["padID"]
|
, "getPublicStatus" : ["padID"]
|
||||||
|
|
Loading…
Reference in a new issue