mirror of
https://github.com/documize/community.git
synced 2025-07-19 13:19:43 +02:00
space related bug fixesx
This commit is contained in:
parent
f2794a9836
commit
c77b384215
10 changed files with 675 additions and 655 deletions
|
@ -97,6 +97,7 @@ func (h *Handler) Add(w http.ResponseWriter, r *http.Request) {
|
||||||
sp.OrgID = ctx.OrgID
|
sp.OrgID = ctx.OrgID
|
||||||
sp.Type = space.ScopePrivate
|
sp.Type = space.ScopePrivate
|
||||||
sp.UserID = ctx.UserID
|
sp.UserID = ctx.UserID
|
||||||
|
sp.Type = space.ScopePrivate
|
||||||
|
|
||||||
err = h.Store.Space.Add(ctx, sp)
|
err = h.Store.Space.Add(ctx, sp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -268,6 +269,25 @@ func (h *Handler) Add(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update space to reflect it's type (public/protected/private)
|
||||||
|
toClone, err := h.Store.Space.Get(ctx, model.CloneID)
|
||||||
|
if err != nil {
|
||||||
|
ctx.Transaction.Rollback()
|
||||||
|
response.WriteServerError(w, method, err)
|
||||||
|
h.Runtime.Log.Error(method, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
sp.Type = toClone.Type
|
||||||
|
|
||||||
|
err = h.Store.Space.Update(ctx, sp)
|
||||||
|
if err != nil {
|
||||||
|
ctx.Transaction.Rollback()
|
||||||
|
response.WriteServerError(w, method, err)
|
||||||
|
h.Runtime.Log.Error(method, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.Transaction.Commit()
|
ctx.Transaction.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +320,7 @@ func (h *Handler) Get(w http.ResponseWriter, r *http.Request) {
|
||||||
response.WriteJSON(w, sp)
|
response.WriteJSON(w, sp)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAlGetViewablel returns spaces the user can see.
|
// GetViewable returns spaces the user can see.
|
||||||
func (h *Handler) GetViewable(w http.ResponseWriter, r *http.Request) {
|
func (h *Handler) GetViewable(w http.ResponseWriter, r *http.Request) {
|
||||||
method := "space.GetViewable"
|
method := "space.GetViewable"
|
||||||
ctx := domain.GetRequestContext(r)
|
ctx := domain.GetRequestContext(r)
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
package mysql
|
package mysql
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -72,7 +73,7 @@ func (s Scope) PublicSpaces(ctx domain.RequestContext, orgID string) (sp []space
|
||||||
// GetViewable returns spaces that the user can see.
|
// GetViewable returns spaces that the user can see.
|
||||||
// Also handles which spaces can be seen by anonymous users.
|
// Also handles which spaces can be seen by anonymous users.
|
||||||
func (s Scope) GetViewable(ctx domain.RequestContext) (sp []space.Space, err error) {
|
func (s Scope) GetViewable(ctx domain.RequestContext) (sp []space.Space, err error) {
|
||||||
sql := `
|
q := `
|
||||||
SELECT id,refid,label as name,orgid,userid,type,created,revised FROM label
|
SELECT id,refid,label as name,orgid,userid,type,created,revised FROM label
|
||||||
WHERE orgid=?
|
WHERE orgid=?
|
||||||
AND refid IN (SELECT refid FROM permission WHERE orgid=? AND location='space' AND refid IN (
|
AND refid IN (SELECT refid FROM permission WHERE orgid=? AND location='space' AND refid IN (
|
||||||
|
@ -82,7 +83,7 @@ func (s Scope) GetViewable(ctx domain.RequestContext) (sp []space.Space, err err
|
||||||
))
|
))
|
||||||
ORDER BY name`
|
ORDER BY name`
|
||||||
|
|
||||||
err = s.Runtime.Db.Select(&sp, sql,
|
err = s.Runtime.Db.Select(&sp, q,
|
||||||
ctx.OrgID,
|
ctx.OrgID,
|
||||||
ctx.OrgID,
|
ctx.OrgID,
|
||||||
ctx.OrgID,
|
ctx.OrgID,
|
||||||
|
@ -90,6 +91,10 @@ func (s Scope) GetViewable(ctx domain.RequestContext) (sp []space.Space, err err
|
||||||
ctx.OrgID,
|
ctx.OrgID,
|
||||||
ctx.UserID)
|
ctx.UserID)
|
||||||
|
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
err = nil
|
||||||
|
sp = []space.Space{}
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = errors.Wrap(err, fmt.Sprintf("failed space.GetViewable org %s", ctx.OrgID))
|
err = errors.Wrap(err, fmt.Sprintf("failed space.GetViewable org %s", ctx.OrgID))
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,6 +163,11 @@ func (s Scope) GetSpaceUsers(ctx domain.RequestContext, spaceID string) (u []use
|
||||||
|
|
||||||
// GetUsersForSpaces returns users with access to specified spaces.
|
// GetUsersForSpaces returns users with access to specified spaces.
|
||||||
func (s Scope) GetUsersForSpaces(ctx domain.RequestContext, spaces []string) (u []user.User, err error) {
|
func (s Scope) GetUsersForSpaces(ctx domain.RequestContext, spaces []string) (u []user.User, err error) {
|
||||||
|
if len(spaces) == 0 {
|
||||||
|
u = []user.User{}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
query, args, err := sqlx.In(`
|
query, args, err := sqlx.In(`
|
||||||
SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.created, u.revised, u.global,
|
SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.created, u.revised, u.global,
|
||||||
a.active, a.users AS viewusers, a.editor, a.admin
|
a.active, a.users AS viewusers, a.editor, a.admin
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -31,7 +31,6 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, {
|
||||||
|
|
||||||
didReceiveAttrs() {
|
didReceiveAttrs() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
|
|
||||||
this.loadBlocks();
|
this.loadBlocks();
|
||||||
|
|
||||||
Ember.run.schedule('afterRender', () => {
|
Ember.run.schedule('afterRender', () => {
|
||||||
|
@ -44,13 +43,11 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, {
|
||||||
|
|
||||||
didRender() {
|
didRender() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
|
|
||||||
this.contentLinkHandler();
|
this.contentLinkHandler();
|
||||||
},
|
},
|
||||||
|
|
||||||
didInsertElement() {
|
didInsertElement() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
|
|
||||||
this.setupAddWizard();
|
this.setupAddWizard();
|
||||||
|
|
||||||
let self = this;
|
let self = this;
|
||||||
|
@ -61,9 +58,8 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, {
|
||||||
|
|
||||||
willDestroyElement() {
|
willDestroyElement() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
|
|
||||||
$('.start-section:not(.start-section-empty-state)').off('.hoverIntent');
|
$('.start-section:not(.start-section-empty-state)').off('.hoverIntent');
|
||||||
|
|
||||||
this.destroyTooltips();
|
this.destroyTooltips();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -112,7 +108,7 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, {
|
||||||
// out
|
// out
|
||||||
$(this).find('.start-button').velocity("transition.slideUpOut", {duration: 300});
|
$(this).find('.start-button').velocity("transition.slideUpOut", {duration: 300});
|
||||||
} });
|
} });
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
addSection(model) {
|
addSection(model) {
|
||||||
|
@ -261,7 +257,7 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, {
|
||||||
this.set('toEdit', '');
|
this.set('toEdit', '');
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setupAddWizard();
|
this.setupAddWizard();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -298,8 +294,8 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, {
|
||||||
const promise = this.addSection(model);
|
const promise = this.addSection(model);
|
||||||
promise.then((id) => {
|
promise.then((id) => {
|
||||||
this.set('pageId', id);
|
this.set('pageId', id);
|
||||||
|
|
||||||
this.setupAddWizard();
|
this.setupAddWizard();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -311,6 +307,6 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, {
|
||||||
});
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -100,6 +100,16 @@ export default Ember.Component.extend(NotifierMixin, {
|
||||||
permission.get('documentMove') || permission.get('documentCopy') || permission.get('documentTemplate'));
|
permission.get('documentMove') || permission.get('documentCopy') || permission.get('documentTemplate'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// see if more than oen user is granted access to space (excluding everyone)
|
||||||
|
let roleCount = 0;
|
||||||
|
permissions.forEach((permission) => {
|
||||||
|
if (permission.get('userId') !== "0" &&
|
||||||
|
(permission.get('spaceView') || permission.get('documentAdd') || permission.get('documentEdit') || permission.get('documentDelete') ||
|
||||||
|
permission.get('documentMove') || permission.get('documentCopy') || permission.get('documentTemplate'))) {
|
||||||
|
roleCount += 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.get('folderService').savePermissions(folder.get('id'), payload).then(() => {
|
this.get('folderService').savePermissions(folder.get('id'), payload).then(() => {
|
||||||
this.showNotification('Saved permissions');
|
this.showNotification('Saved permissions');
|
||||||
});
|
});
|
||||||
|
@ -108,7 +118,7 @@ export default Ember.Component.extend(NotifierMixin, {
|
||||||
folder.markAsPublic();
|
folder.markAsPublic();
|
||||||
this.showNotification('Marked space as public');
|
this.showNotification('Marked space as public');
|
||||||
} else {
|
} else {
|
||||||
if (permissions.length > 1) {
|
if (roleCount > 1) {
|
||||||
folder.markAsRestricted();
|
folder.markAsRestricted();
|
||||||
this.showNotification('Marked space as protected');
|
this.showNotification('Marked space as protected');
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -41,10 +41,10 @@ export default Ember.Component.extend(TooltipMixin, NotifierMixin, AuthMixin, {
|
||||||
publicFolders.pushObject(folder);
|
publicFolders.pushObject(folder);
|
||||||
}
|
}
|
||||||
if (folder.get('folderType') === constants.FolderType.Private) {
|
if (folder.get('folderType') === constants.FolderType.Private) {
|
||||||
protectedFolders.pushObject(folder);
|
privateFolders.pushObject(folder);
|
||||||
}
|
}
|
||||||
if (folder.get('folderType') === constants.FolderType.Protected) {
|
if (folder.get('folderType') === constants.FolderType.Protected) {
|
||||||
privateFolders.pushObject(folder);
|
protectedFolders.pushObject(folder);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -32,23 +32,6 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, {
|
||||||
this.set('links', data.links);
|
this.set('links', data.links);
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
|
|
||||||
// this.get('documentService').getDocument(this.get('documentId')).then((document) => {
|
|
||||||
// this.set('document', document);
|
|
||||||
|
|
||||||
// this.get('folderService').getAll().then((folders) => {
|
|
||||||
// this.set('folders', folders);
|
|
||||||
|
|
||||||
// this.get('folderService').getFolder(this.get('folderId')).then((folder) => {
|
|
||||||
// this.set('folder', folder);
|
|
||||||
|
|
||||||
// this.get('folderService').setCurrentFolder(folder).then(() => {
|
|
||||||
// this.set('permissions', this.get('folderService').get('permissions'));
|
|
||||||
// resolve();
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,13 @@
|
||||||
// https://documize.com
|
// https://documize.com
|
||||||
|
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
import NotifierMixin from '../../../mixins/notifier';
|
||||||
|
|
||||||
const {
|
const {
|
||||||
inject: { service }
|
inject: { service }
|
||||||
} = Ember;
|
} = Ember;
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend(NotifierMixin, {
|
||||||
documentService: service('document'),
|
documentService: service('document'),
|
||||||
folderService: service('folder'),
|
folderService: service('folder'),
|
||||||
localStorage: service('localStorage'),
|
localStorage: service('localStorage'),
|
||||||
|
|
|
@ -336,7 +336,7 @@ export default Ember.Service.extend({
|
||||||
let doc = this.get('store').normalize('document', response.document);
|
let doc = this.get('store').normalize('document', response.document);
|
||||||
doc = this.get('store').push(doc);
|
doc = this.get('store').push(doc);
|
||||||
|
|
||||||
let perms = this.get('store').normalize('space-permission', response);
|
let perms = this.get('store').normalize('space-permission', response.permissions);
|
||||||
perms= this.get('store').push(perms);
|
perms= this.get('store').push(perms);
|
||||||
this.get('folderService').set('permissions', perms);
|
this.get('folderService').set('permissions', perms);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue