1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-20 21:59:42 +02:00

global space admin re-worked

This commit is contained in:
Harvey Kandola 2017-10-03 09:50:38 -04:00
parent ba5988dca3
commit 620fe28b27
5 changed files with 95 additions and 15 deletions

View file

@ -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
}

View file

@ -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.send('onChangeOwner');
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);
});
});
}
}

View file

@ -1,4 +1,5 @@
{{#if folders}}
<div class="global-folder-settings">
<div class="form-header">
<div class="title">{{folders.length}} shared {{label}}</div>
@ -10,17 +11,41 @@
{{#link-to 'folder' folder.id folder.slug class="alt"}}{{folder.name}}{{/link-to}}
</div>
<div class="pull-right">
&nbsp;
<div id="delete-space-button-{{folder.id}}" class="round-button-mono" title="Delete" {{action "onShow" folder.id}}>
<i class="material-icons">delete</i>
</div>
</div>
<div class="clearfix" />
{{/each}}
</div>
</div>
<div class="dropdown-dialog delete-space-dialog">
<div class="content">
<p>Are you sure you want to delete this space and all associated documents?</p>
<div class="input-control">
<div class="tip">Please type the space name to confirm</div>
{{input type='text' id="delete-space-name" value=deleteSpace.name}}
</div>
</div>
<div class="actions">
<div class="flat-button" {{action 'onCancel'}}>
cancel
</div>
<div class="flat-button flat-red" {{action 'onDelete'}}>
delete
</div>
</div>
<div class="clearfix"></div>
</div>
{{else}}
<div class="global-folder-settings">
<div class="form-header">
<div class="title">{{folders.length}} shared {{label}}</div>
<div class="tip">There are no spaces to maintain</div>
</div>
</div>
{{/if}}

View file

@ -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;
}
}
}

View file

@ -86,7 +86,7 @@
{{#if permissions.spaceOwner}}
{{#dropdown-dialog target="space-delete-button" position="bottom right" button="Delete" color="flat-red" onAction=(action 'deleteSpace')}}
<p>Are you sure you want this space and all associated documents?</p>
<p>Are you sure you want to delete this space and all associated documents?</p>
<div class="input-control">
<div class="tip">Please type the space name to confirm</div>
{{input type='text' id="delete-space-name" value=deleteSpaceName}}