fix: missing re-assignment of site creators and modifiers when deleting an account

This commit is contained in:
Tobi Schäfer 2018-05-21 07:50:09 +02:00
parent 12df0060f7
commit 5ed3ad138f
2 changed files with 21 additions and 1 deletions

View file

@ -169,6 +169,7 @@ Site.remove = function() {
const id = this._id;
const dir = this.getStaticFile();
app.log('Removing site #' + id);
this.remove();
root.cache.sites = null;

View file

@ -82,6 +82,7 @@ User.remove = function() {
app.log('Removing data from account #' + id);
// Remove sites
this.ownerships.forEach(function() {
const owners = this.site.members.owners;
if (owners.size() < 2) {
@ -90,33 +91,48 @@ User.remove = function() {
}
});
// Re-assign site creators and modifiers
sql.retrieve('select id from site creator_id = $0', id);
sql.traverse(function() {
const site = Site.getById(this.id);
const creator = getAnotherOwner(site);
sql.execute('update site set creator_id = $0 where creator_id = $1', creator._id, id);
});
sql.execute('update site set modifier_id = creator_id where modifier_id = $0', id);
// Remove and re-assign memberships
sql.execute("delete from membership where name = '$0'", this.name);
sql.execute('update membership set modifier_id = creator_id where modifier_id = $0', id);
// Remove tags
sql.execute("delete from tag_hub where tagged_type = 'Story' and tagged_id in (select id from content where creator_id = $0)", id);
sql.execute("delete from tag_hub where tagged_type = 'Image' and tagged_id in (select id from image where creator_id = $0)", id);
sql.execute('delete from tag where id not in (select tag_id from tag_hub)');
// Remove and re-assign polls, choices and votes
let subQuery = 'select id from poll where creator_id';
sql.execute('delete from vote where choice_id in (select id from choice where poll_id in ($0 = $1))', subQuery, id);
sql.execute('delete from choice where poll_id in ($0 = $1)', subQuery, id);
sql.execute('delete from poll where creator_id = $0', id);
sql.execute('update poll set modifier_id = creator_id where modifier_id = $0', id);
// Remove and re-assign stories and comments
deleteMetadata('Story', 'content', id);
sql.execute('delete from content where creator_id = $0', id);
sql.execute('update content set modifier_id = creator_id where modifier_id = $0', id);
// Remove and re-assign files
sql.retrieve('select id from file where creator_id = $0', id);
sql.traverse(function() {
const file = File.getById(this.id);
app.log('Removing from file system: file #' + this.id);
app.log('Removing file #' + this.id + ' from file system');
file.getFile().remove();
});
deleteMetadata('File', 'file', id);
sql.execute('delete from file where creator_id = $0', id);
sql.execute('update file set modifier_id = creator_id where modifier_id = $0', id);
// Remove and re-assign images
sql.retrieve('select id from image where creator_id = $0', id);
sql.traverse(function() {
const image = Image.getById(this.id);
@ -127,6 +143,7 @@ User.remove = function() {
app.log('Assigning new creator: layout image #' + this.id);
sql.execute('update image set creator_id = $0 where creator_id = $1', creator._id, id);
} else {
app.log('Removing image #' + this.id + ' from file system')
image.getFile().remove();
}
});
@ -134,6 +151,7 @@ User.remove = function() {
sql.execute('delete from image where creator_id = $0', id);
sql.execute('update image set modifier_id = creator_id where modifier_id = $0', id);
// Remove and re-assign skins
sql.retrieve('select id from skin where creator_id = $0', id);
sql.traverse(function() {
// Instead of deleting, assign skins to another site owner
@ -144,6 +162,7 @@ User.remove = function() {
});
sql.execute('update skin set modifier_id = creator_id where modifier_id = $0', id);
// Remove and re-assign layouts
sql.retrieve('select id from layout where creator_id = $0', id);
sql.traverse(function() {
// Instead of deleting, assign layouts to another site owner