From 620fe28b275a0c24d7e4ef0766500d6a521fbb87 Mon Sep 17 00:00:00 2001 From: Harvey Kandola Date: Tue, 3 Oct 2017 09:50:38 -0400 Subject: [PATCH] global space admin re-worked --- domain/document/mysql/store.go | 6 +- gui/app/pods/customize/folders/controller.js | 71 ++++++++++++++++--- gui/app/pods/customize/folders/template.hbs | 27 ++++++- gui/app/styles/view/page-customize.scss | 4 +- .../components/folder/space-toolbar.hbs | 2 +- 5 files changed, 95 insertions(+), 15 deletions(-) diff --git a/domain/document/mysql/store.go b/domain/document/mysql/store.go index 5741492f..4870a9e9 100644 --- a/domain/document/mysql/store.go +++ b/domain/document/mysql/store.go @@ -284,18 +284,18 @@ func (s Scope) Delete(ctx domain.RequestContext, documentID string) (rows int64, // Remove document pages, revisions, attachments, updates the search subsystem. func (s Scope) DeleteBySpace(ctx domain.RequestContext, spaceID string) (rows int64, err error) { b := mysql.BaseQuery{} - rows, err = b.DeleteWhere(ctx.Transaction, fmt.Sprintf("DELETE from page WHERE labelid=\"%s\" AND orgid=\"%s\"", spaceID, ctx.OrgID)) + rows, err = b.DeleteWhere(ctx.Transaction, fmt.Sprintf("DELETE from page WHERE documentid IN (SELECT refid FROM document WHERE labelid=\"%s\" AND orgid=\"%s\")", spaceID, ctx.OrgID)) if err != nil { return } - _, err = b.DeleteWhere(ctx.Transaction, fmt.Sprintf("DELETE from revision WHERE labelid=\"%s\" AND orgid=\"%s\"", spaceID, ctx.OrgID)) + _, err = b.DeleteWhere(ctx.Transaction, fmt.Sprintf("DELETE from revision WHERE documentid IN (SELECT refid FROM document WHERE labelid=\"%s\" AND orgid=\"%s\")", spaceID, ctx.OrgID)) if err != nil { return } - _, err = b.DeleteWhere(ctx.Transaction, fmt.Sprintf("DELETE from attachment WHERE labelid=\"%s\" AND orgid=\"%s\"", spaceID, ctx.OrgID)) + _, err = b.DeleteWhere(ctx.Transaction, fmt.Sprintf("DELETE from attachment WHERE documentid IN (SELECT refid FROM document WHERE labelid=\"%s\" AND orgid=\"%s\")", spaceID, ctx.OrgID)) if err != nil { return } diff --git a/gui/app/pods/customize/folders/controller.js b/gui/app/pods/customize/folders/controller.js index 5358513f..c7e010ef 100644 --- a/gui/app/pods/customize/folders/controller.js +++ b/gui/app/pods/customize/folders/controller.js @@ -11,10 +11,16 @@ import Ember from 'ember'; import NotifierMixin from '../../../mixins/notifier'; +import DropdownMixin from '../../../mixins/dropdown'; -export default Ember.Controller.extend(NotifierMixin, { +export default Ember.Controller.extend(NotifierMixin, DropdownMixin, { folderService: Ember.inject.service('folder'), folders: [], + dropdown: null, + deleteSpace: { + id: '', + name: '' + }, label: function () { switch (this.get('folders').length) { @@ -25,16 +31,65 @@ export default Ember.Controller.extend(NotifierMixin, { } }.property('folders'), + + willDestroyElement() { + this.destroyDropdown(); + }, + actions: { - changeOwner: function (folderId, userId) { - this.get('folderService').getFolder(folderId).then((folder) => { - folder.set('userId', userId); + onShow(spaceId) { + this.set('deleteSpace.id', spaceId); + this.set('deleteSpace.name', ''); + $(".delete-space-dialog").css("display", "block"); + $('#delete-space-name').removeClass('error'); - this.get('folderService').save(folder).then(() => { - this.showNotification("Changed"); + let drop = new Drop({ + target: $("#delete-space-button-" + spaceId)[0], + content: $(".delete-space-dialog")[0], + classes: 'drop-theme-basic', + position: "bottom right", + openOn: "always", + tetherOptions: { + offset: "5px 0", + targetOffset: "10px 0" + }, + remove: false + }); + + this.set('dropdown', drop); + }, + + onCancel() { + this.closeDropdown(); + }, + + onDelete() { + let deleteSpace = this.get('deleteSpace'); + let spaceId = deleteSpace.id; + let spaceNameTyped = deleteSpace.name; + let space = this.get('folders').findBy('id', spaceId); + let spaceName = space.get('name'); + + if (spaceNameTyped !== spaceName || spaceNameTyped === '' || spaceName === '') { + $('#delete-space-name').addClass('error').focus(); + return; + } + + this.closeDropdown(); + + this.get('folderService').delete(spaceId).then(() => { /* jshint ignore:line */ + this.set('deleteSpace.id', ''); + this.set('deleteSpace.name', ''); + this.showNotification("Deleted"); + + this.get('folderService').adminList().then((folders) => { + let nonPrivateFolders = folders.rejectBy('folderType', 2); + if (is.empty(nonPrivateFolders) || is.null(folders) || is.undefined(folders)) { + nonPrivateFolders = []; + } + + this.set('folders', nonPrivateFolders); }); - - this.send('onChangeOwner'); }); } } diff --git a/gui/app/pods/customize/folders/template.hbs b/gui/app/pods/customize/folders/template.hbs index 8a72de7d..4814219b 100644 --- a/gui/app/pods/customize/folders/template.hbs +++ b/gui/app/pods/customize/folders/template.hbs @@ -1,4 +1,5 @@ {{#if folders}} +
{{folders.length}} shared {{label}}
@@ -10,17 +11,41 @@ {{#link-to 'folder' folder.id folder.slug class="alt"}}{{folder.name}}{{/link-to}}
-   +
+ delete +
{{/each}}
+ + + {{else}} +
{{folders.length}} shared {{label}}
There are no spaces to maintain
+ {{/if}} \ No newline at end of file diff --git a/gui/app/styles/view/page-customize.scss b/gui/app/styles/view/page-customize.scss index 508f43eb..930bfc38 100644 --- a/gui/app/styles/view/page-customize.scss +++ b/gui/app/styles/view/page-customize.scss @@ -86,13 +86,13 @@ } } - .edit-user-dialog, .delete-user-dialog { + .edit-user-dialog, .delete-user-dialog, .delete-space-dialog { display: none; } .manage-space-list { > .space { - margin: 10px 0; + margin: 20px 0; } } } diff --git a/gui/app/templates/components/folder/space-toolbar.hbs b/gui/app/templates/components/folder/space-toolbar.hbs index a6069ddb..35b44095 100644 --- a/gui/app/templates/components/folder/space-toolbar.hbs +++ b/gui/app/templates/components/folder/space-toolbar.hbs @@ -86,7 +86,7 @@ {{#if permissions.spaceOwner}} {{#dropdown-dialog target="space-delete-button" position="bottom right" button="Delete" color="flat-red" onAction=(action 'deleteSpace')}} -

Are you sure you want this space and all associated documents?

+

Are you sure you want to delete this space and all associated documents?

Please type the space name to confirm
{{input type='text' id="delete-space-name" value=deleteSpaceName}}