1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-08-09 07:25:23 +02:00

Refactor to ember-ajax

This commit is contained in:
zinyando 2016-06-09 16:10:50 +02:00
parent 41fd9b68a2
commit a2bf51d144
8 changed files with 387 additions and 818 deletions

View file

@ -1,11 +1,11 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
// //
// This software (Documize Community Edition) is licensed under // This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
// //
// You can operate outside the AGPL restrictions by purchasing // You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license // Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>. // by contacting <sales@documize.com>.
// //
// https://documize.com // https://documize.com
@ -14,51 +14,34 @@ import models from '../utils/model';
export default Ember.Service.extend({ export default Ember.Service.extend({
sessionService: Ember.inject.service('session'), sessionService: Ember.inject.service('session'),
ajax: Ember.inject.service(),
// Returns document model for specified document id. // Returns document model for specified document id.
getDocument(documentId) { getDocument(documentId) {
let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}`); let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ let doc = models.DocumentModel.create(response);
url: url, return doc;
type: 'GET',
success: function(response) {
let doc = models.DocumentModel.create(response);
resolve(doc);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// Returns all documents for specified folder. // Returns all documents for specified folder.
getAllByFolder(folderId) { getAllByFolder(folderId) {
let appMeta = this.get('sessionService.appMeta') let appMeta = this.get('sessionService.appMeta');
let url = appMeta.getUrl(`documents?folder=${folderId}`); let url = appMeta.getUrl(`documents?folder=${folderId}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ let documents = Ember.ArrayProxy.create({
url: url, content: Ember.A([])
type: 'GET',
success: function(response) {
let documents = Ember.ArrayProxy.create({
content: Ember.A([])
});
_.each(response, function(doc) {
let documentModel = models.DocumentModel.create(doc);
documents.pushObject(documentModel);
});
resolve(documents);
},
error: function(reason) {
reject(reason);
}
}); });
_.each(response, function(doc) {
let documentModel = models.DocumentModel.create(doc);
documents.pushObject(documentModel);
});
return documents;
}); });
}, },
@ -66,26 +49,17 @@ export default Ember.Service.extend({
getAllByTag(tag) { getAllByTag(tag) {
let url = this.get('sessionService').appMeta.getUrl(`documents?filter=tag&tag=${tag}`); let url = this.get('sessionService').appMeta.getUrl(`documents?filter=tag&tag=${tag}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ let documents = Ember.ArrayProxy.create({
url: url, content: Ember.A([])
type: 'GET',
success: function(response) {
let documents = Ember.ArrayProxy.create({
content: Ember.A([])
});
_.each(response, function(doc) {
let documentModel = models.DocumentModel.create(doc);
documents.pushObject(documentModel);
});
resolve(documents);
},
error: function(reason) {
reject(reason);
}
}); });
_.each(response, function(doc) {
let documentModel = models.DocumentModel.create(doc);
documents.pushObject(documentModel);
});
return documents;
}); });
}, },
@ -94,371 +68,218 @@ export default Ember.Service.extend({
let id = doc.get('id'); let id = doc.get('id');
let url = this.get('sessionService').appMeta.getUrl(`documents/${id}`); let url = this.get('sessionService').appMeta.getUrl(`documents/${id}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'PUT',
url: url, data: JSON.stringify(doc)
type: 'PUT', }).then((response) => {
data: JSON.stringify(doc), return response;
contentType: 'json',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
getBatchedPages: function(documentId, payload) { getBatchedPages: function(documentId, payload) {
var self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/batch");
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'POST',
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/batch"), data: payload
type: 'POST', }).then((pages) => {
data: payload, if (is.not.array(pages)) {
success: function(pages) { pages = [];
if (is.not.array(pages)) { }
pages = [];
}
resolve(pages); return pages;
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
changePageSequence: function(documentId, payload) { changePageSequence: function(documentId, payload) {
var self = this; var url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/sequence");
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url, {
$.ajax({ data: JSON.stringify(payload),
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/sequence"), contentType: 'json'
type: 'POST', }).then((response) => {
data: JSON.stringify(payload), return response;
contentType: 'json',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
changePageLevel(documentId, payload) { changePageLevel(documentId, payload) {
var self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/level");
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url, {
$.ajax({ data: JSON.stringify(payload),
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/level"), contentType: 'json'
type: 'POST', }).then((response) => {
data: JSON.stringify(payload), return response;
contentType: 'json',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
deleteDocument: function(documentId) { deleteDocument: function(documentId) {
var self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'DELETE'
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId), }).then((response) => {
type: 'DELETE', return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
updatePage: function(documentId, pageId, payload, skipRevision) { updatePage: function(documentId, pageId, payload, skipRevision) {
var self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + revision);
var revision = skipRevision ? "?r=true" : "?r=false"; var revision = skipRevision ? "?r=true" : "?r=false";
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'PUT',
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + revision), data: JSON.stringify(payload),
type: 'PUT', contentType: 'json'
data: JSON.stringify(payload), }).then((response) => {
contentType: 'json', return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// addPage inserts new page to an existing document. // addPage inserts new page to an existing document.
addPage: function(documentId, payload) { addPage: function(documentId, payload) {
var self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages");
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url, {
$.ajax({ data: JSON.stringify(payload),
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages"), contentType: 'json'
type: 'POST', }).then((response) => {
data: JSON.stringify(payload), return response;
contentType: 'json',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// Nukes multiple pages from the document. // Nukes multiple pages from the document.
deletePages: function(documentId, pageId, payload) { deletePages: function(documentId, pageId, payload) {
var self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url, {
$.ajax({ data: JSON.stringify(payload),
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId), contentType: 'json'
type: 'POST', }).then((response) => {
data: JSON.stringify(payload), return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// Nukes a single page from the document. // Nukes a single page from the document.
deletePage: function(documentId, pageId) { deletePage: function(documentId, pageId) {
var self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'DELETE'
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId), }).then((response) => {
type: 'DELETE', return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
getPageRevisions(documentId, pageId) { getPageRevisions(documentId, pageId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions");
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ return response;
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions"),
type: 'GET',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
getPageRevisionDiff(documentId, pageId, revisionId) { getPageRevisionDiff(documentId, pageId, revisionId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions/" + revisionId);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ dataType: 'text'
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions/" + revisionId), }).then((response) => {
type: 'GET', return response;
dataType: 'text',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
rollbackPage(documentId, pageId, revisionId) { rollbackPage(documentId, pageId, revisionId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions/" + revisionId);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url).then((response) => {
$.ajax({ return response;
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions/" + revisionId),
type: 'POST',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// document meta referes to number of views, edits, approvals, etc. // document meta referes to number of views, edits, approvals, etc.
getMeta(documentId) { getMeta(documentId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/meta`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ return response;
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/meta`),
type: 'GET',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// Returns all pages without the content // Returns all pages without the content
getTableOfContents(documentId) { getTableOfContents(documentId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages?content=0`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ let data = [];
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages?content=0`), _.each(response, function(obj) {
type: 'GET', data.pushObject(models.PageModel.create(obj));
success: function(response) {
let data = [];
_.each(response, function(obj) {
data.pushObject(models.PageModel.create(obj));
});
resolve(data);
},
error: function(reason) {
reject(reason);
}
}); });
return data;
}); });
}, },
// Returns all document pages with content // Returns all document pages with content
getPages(documentId) { getPages(documentId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ let pages = [];
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages`),
type: 'GET',
success: function(response) {
let pages = [];
_.each(response, function(page) { _.each(response, function(page) {
pages.pushObject(models.PageModel.create(page)); pages.pushObject(models.PageModel.create(page));
});
if (pages.length > 0) {
Ember.set(pages[0], 'firstPage', true);
}
resolve(pages);
},
error: function(reason) {
reject(reason);
}
}); });
if (pages.length > 0) {
Ember.set(pages[0], 'firstPage', true);
}
return pages;
}); });
}, },
// Returns document page with content // Returns document page with content
getPage(documentId, pageId) { getPage(documentId, pageId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages/${pageId}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ let page = models.PageModel.create(response);
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages/${pageId}`), return page;
type: 'GET',
success: function(response) {
let page = models.PageModel.create(response);
resolve(page);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// Returns document page meta object // Returns document page meta object
getPageMeta(documentId, pageId) { getPageMeta(documentId, pageId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages/${pageId}/meta`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ let meta = models.PageMetaModel.create(response);
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages/${pageId}/meta`), return meta;
type: 'GET',
success: function(response) {
let meta = models.PageMetaModel.create(response);
resolve(meta);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// document attachments without the actual content // document attachments without the actual content
getAttachments(documentId) { getAttachments(documentId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/attachments`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ let data = [];
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/attachments`), _.each(response, function(obj) {
type: 'GET', data.pushObject(models.AttachmentModel.create(obj));
success: function(response) {
let data = [];
_.each(response, function(obj) {
data.pushObject(models.AttachmentModel.create(obj));
});
resolve(data);
},
error: function(reason) {
reject(reason);
}
}); });
return data;
}); });
}, },
// nuke an attachment // nuke an attachment
deleteAttachment(documentId, attachmentId) { deleteAttachment(documentId, attachmentId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/attachments/${attachmentId}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'DELETE'
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/attachments/${attachmentId}`), }).then((response) => {
type: 'DELETE', return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
}); });

View file

@ -1,11 +1,11 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
// //
// This software (Documize Community Edition) is licensed under // This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
// //
// You can operate outside the AGPL restrictions by purchasing // You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license // Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>. // by contacting <sales@documize.com>.
// //
// https://documize.com // https://documize.com
@ -15,6 +15,7 @@ import BaseService from '../services/base';
export default BaseService.extend({ export default BaseService.extend({
sessionService: Ember.inject.service('session'), sessionService: Ember.inject.service('session'),
ajax: Ember.inject.service(),
// selected folder // selected folder
currentFolder: null, currentFolder: null,
@ -25,40 +26,22 @@ export default BaseService.extend({
let appMeta = this.get('sessionService.appMeta'); let appMeta = this.get('sessionService.appMeta');
let url = appMeta.getUrl(`folders`); let url = appMeta.getUrl(`folders`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url, {
$.ajax({ data: JSON.stringify(folder)
url: url, }).then((folder)=>{
type: 'POST', let folderModel = models.FolderModel.create(folder);
data: JSON.stringify(folder), return folderModel;
contentType: 'json',
success: function(folder) {
let folderModel = models.FolderModel.create(folder);
resolve(folderModel);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// Returns folder model for specified folder id. // Returns folder model for specified folder id.
getFolder(id) { getFolder(id) {
let appMeta = this.get('sessionService.appMeta') let appMeta = this.get('sessionService.appMeta');
let url = appMeta.getUrl(`folders/${id}`); let url = appMeta.getUrl(`folders/${id}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response)=>{
$.ajax({ let folder = models.FolderModel.create(response);
url: url, return folder;
type: 'GET',
success: function(response) {
let folder = models.FolderModel.create(response);
resolve(folder);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
@ -80,57 +63,31 @@ export default BaseService.extend({
let id = folder.get('id'); let id = folder.get('id');
let url = this.get('sessionService').appMeta.getUrl(`folders/${id}`); let url = this.get('sessionService').appMeta.getUrl(`folders/${id}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'PUT',
url: url, data: JSON.stringify(folder)
type: 'PUT', }).then((response)=>{
data: JSON.stringify(folder), return response;
contentType: 'json',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
remove: function(folderId, moveToId) { remove: function(folderId, moveToId) {
var self = this; var url = this.get('sessionService').appMeta.getUrl('folders/' + folderId + "/move/" + moveToId);
var url = self.get('sessionService').appMeta.getUrl('folders/' + folderId + "/move/" + moveToId);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'DELETE'
url: url, }).then((response)=>{
type: 'DELETE', return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
onboard: function(folderId, payload) { onboard: function(folderId, payload) {
var self = this; var url = this.get('sessionService').appMeta.getUrl('public/share/' + folderId);
var url = self.get('sessionService').appMeta.getUrl('public/share/' + folderId);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url, {
$.ajax({ data: payload
url: url, }).then((response)=>{
type: "POST", return response;
data: payload,
contentType: "application/json",
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
@ -138,107 +95,65 @@ export default BaseService.extend({
getProtectedFolderInfo: function() { getProtectedFolderInfo: function() {
var url = this.get('sessionService').appMeta.getUrl('folders?filter=viewers'); var url = this.get('sessionService').appMeta.getUrl('folders?filter=viewers');
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response)=>{
$.ajax({ let data = [];
url: url, _.each(response, function(obj) {
type: 'GET', data.pushObject(models.ProtectedFolderParticipant.create(obj));
success: function(response) {
let data = [];
_.each(response, function(obj) {
data.pushObject(models.ProtectedFolderParticipant.create(obj));
});
resolve(data);
},
error: function(reason) {
reject(reason);
}
}); });
return data;
}); });
}, },
// reloads and caches folders. // reloads and caches folders.
reload() { reload() {
let appMeta = this.get('sessionService.appMeta') let appMeta = this.get('sessionService.appMeta');
let url = appMeta.getUrl(`folders`); let url = appMeta.getUrl(`folders`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response)=>{
$.ajax({ let data = [];
url: url, _.each(response, function(obj) {
type: 'GET', data.pushObject(models.FolderModel.create(obj));
success: function(response) {
let data = [];
_.each(response, function(obj) {
data.pushObject(models.FolderModel.create(obj));
});
resolve(data);
},
error: function(reason) {
reject(reason);
}
}); });
return data;
}); });
}, },
// so who can see/edit this folder? // so who can see/edit this folder?
getPermissions(folderId) { getPermissions(folderId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`folders/${folderId}/permissions`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response)=>{
$.ajax({ let data = [];
url: self.get('sessionService').appMeta.getUrl(`folders/${folderId}/permissions`), _.each(response, function(obj) {
type: 'GET', data.pushObject(models.FolderPermissionModel.create(obj));
success: function(response) {
let data = [];
_.each(response, function(obj) {
data.pushObject(models.FolderPermissionModel.create(obj));
});
resolve(data);
},
error: function(reason) {
reject(reason);
}
}); });
return data;
}); });
}, },
// persist folder permissions // persist folder permissions
savePermissions(folderId, payload) { savePermissions(folderId, payload) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`folders/${folderId}/permissions`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'PUT',
url: self.get('sessionService').appMeta.getUrl(`folders/${folderId}/permissions`), data: JSON.stringify(payload)
type: 'PUT', }).then((response) => {
contentType: 'json', return response;
data: JSON.stringify(payload),
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// share this folder with new users! // share this folder with new users!
share(folderId, invitation) { share(folderId, invitation) {
let self = this; let url = this.get('sessionService').appMeta.getUrl(`folders/${folderId}/invitation`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url, {
$.ajax({ data: JSON.stringify(invitation)
url: self.get('sessionService').appMeta.getUrl(`folders/${folderId}/invitation`), }).then((response) => {
type: 'POST', return response;
contentType: 'json',
data: JSON.stringify(invitation),
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
@ -258,43 +173,38 @@ export default BaseService.extend({
} }
let url = this.get('sessionService').appMeta.getUrl('users/' + userId + "/permissions"); let url = this.get('sessionService').appMeta.getUrl('users/' + userId + "/permissions");
let self = this;
$.ajax({ return this.get('ajax').request(url).then((folderPermissions) => {
url: url, // safety check
type: 'GET', this.set('canEditCurrentFolder', false);
success: function(folderPermissions) {
// safety check
self.set('canEditCurrentFolder', false);
if (folderPermissions.length === 0) { if (folderPermissions.length === 0) {
return; return;
}
let result = [];
let folderId = folder.get('id');
folderPermissions.forEach(function(item) {
if (item.folderId === folderId) {
result.push(item);
}
});
let canEdit = false;
result.forEach(function(permission) {
if (permission.userId === userId) {
canEdit = permission.canEdit;
} }
let result = []; if (permission.userId === "" && !canEdit) {
let folderId = folder.get('id'); canEdit = permission.canEdit;
}
folderPermissions.forEach(function(item) { });
if (item.folderId === folderId) { Ember.run(() => {
result.push(item); this.set('canEditCurrentFolder', canEdit && this.get('sessionService').authenticated);
} });
});
let canEdit = false;
result.forEach(function(permission) {
if (permission.userId === userId) {
canEdit = permission.canEdit;
}
if (permission.userId === "" && !canEdit) {
canEdit = permission.canEdit;
}
});
Ember.run(() => {
self.set('canEditCurrentFolder', canEdit && self.get('sessionService').authenticated);
});
}
}); });
}, },
}); });

View file

@ -1,11 +1,11 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
// //
// This software (Documize Community Edition) is licensed under // This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
// //
// You can operate outside the AGPL restrictions by purchasing // You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license // Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>. // by contacting <sales@documize.com>.
// //
// https://documize.com // https://documize.com
@ -14,23 +14,15 @@ import models from '../utils/model';
export default Ember.Service.extend({ export default Ember.Service.extend({
sessionService: Ember.inject.service('session'), sessionService: Ember.inject.service('session'),
ajax: Ember.inject.service(),
// Returns attributes for specified org id. // Returns attributes for specified org id.
getOrg(id) { getOrg(id) {
let url = this.get('sessionService').appMeta.getUrl(`organizations/${id}`); let url = this.get('sessionService').appMeta.getUrl(`organizations/${id}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) =>{
$.ajax({ let org = models.OrganizationModel.create(response);
url: url, return org;
type: 'GET',
success: function(response) {
let org = models.OrganizationModel.create(response);
resolve(org);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
@ -43,19 +35,11 @@ export default Ember.Service.extend({
this.get('sessionService').get('appMeta').setSafe('message', org.message); this.get('sessionService').get('appMeta').setSafe('message', org.message);
this.get('sessionService').get('appMeta').setSafe('title', org.title); this.get('sessionService').get('appMeta').setSafe('title', org.title);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'PUT',
url: url, data: JSON.stringify(org)
type: 'PUT', }).then((response) => {
data: JSON.stringify(org), return response;
contentType: 'json',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
} }
}); });

View file

@ -1,11 +1,11 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
// //
// This software (Documize Community Edition) is licensed under // This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
// //
// You can operate outside the AGPL restrictions by purchasing // You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license // Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>. // by contacting <sales@documize.com>.
// //
// https://documize.com // https://documize.com
@ -13,22 +13,14 @@ import Ember from 'ember';
export default Ember.Service.extend({ export default Ember.Service.extend({
sessionService: Ember.inject.service('session'), sessionService: Ember.inject.service('session'),
ajax: Ember.inject.service(),
// getUsers returns all users for organization. // getUsers returns all users for organization.
find(keywords) { find(keywords) {
let url = this.get('sessionService').appMeta.getUrl("search?keywords=" + encodeURIComponent(keywords)); let url = this.get('sessionService').appMeta.getUrl("search?keywords=" + encodeURIComponent(keywords));
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response) => {
$.ajax({ return response;
url: url,
type: 'GET',
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
}); });

View file

@ -1,11 +1,11 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
// //
// This software (Documize Community Edition) is licensed under // This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
// //
// You can operate outside the AGPL restrictions by purchasing // You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license // Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>. // by contacting <sales@documize.com>.
// //
// https://documize.com // https://documize.com
@ -15,26 +15,21 @@ import BaseService from '../services/base';
export default BaseService.extend({ export default BaseService.extend({
sessionService: Ember.inject.service('session'), sessionService: Ember.inject.service('session'),
ajax: Ember.inject.service(),
// Returns all available sections. // Returns all available sections.
getAll() { getAll() {
let url = this.get('sessionService').appMeta.getUrl(`sections`); let url = this.get('sessionService').appMeta.getUrl(`sections`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url,{
$.ajax({ method: 'GET'
url: url, }).then((response)=>{
type: 'GET', let data = [];
success: function(response) { _.each(response, function(obj) {
let data = []; data.pushObject(models.SectionModel.create(obj));
_.each(response, function(obj) {
data.pushObject(models.SectionModel.create(obj));
});
resolve(data);
},
error: function(reason) {
reject(reason);
}
}); });
return data;
}); });
}, },
@ -46,19 +41,10 @@ export default BaseService.extend({
let endpoint = `sections?documentID=${documentId}&section=${section}&method=${method}`; let endpoint = `sections?documentID=${documentId}&section=${section}&method=${method}`;
let url = this.get('sessionService').appMeta.getUrl(endpoint); let url = this.get('sessionService').appMeta.getUrl(endpoint);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url, {
$.ajax({ data: JSON.stringify(data)
url: url, }).then((response)=>{
type: 'POST', return response;
data: JSON.stringify(data),
contentType: "application/json",
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
@ -66,26 +52,16 @@ export default BaseService.extend({
refresh(documentId) { refresh(documentId) {
let url = this.get('sessionService').appMeta.getUrl(`sections/refresh?documentID=${documentId}`); let url = this.get('sessionService').appMeta.getUrl(`sections/refresh?documentID=${documentId}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response)=>{
$.ajax({ let pages = [];
url: url,
type: 'GET',
success: function(response) {
// resolve(response);
let pages = [];
if (is.not.null(response) && is.array(response) && response.length > 0) { if (is.not.null(response) && is.array(response) && response.length > 0) {
_.each(response, function(page) { _.each(response, function(page) {
pages.pushObject(models.PageModel.create(page)); pages.pushObject(models.PageModel.create(page));
}); });
} }
resolve(pages); return pages;
},
error: function(reason) {
reject(reason);
}
});
}); });
} }
}); });

View file

@ -24,6 +24,7 @@ export default Ember.Service.extend({
authenticated: false, authenticated: false,
folderPermissions: null, folderPermissions: null,
currentFolder: null, currentFolder: null,
ajax: Ember.inject.service(),
isAdmin: function() { isAdmin: function() {
if (this.authenticated && is.not.null(this.user) && this.user.id !== "") { if (this.authenticated && is.not.null(this.user) && this.user.id !== "") {
@ -50,68 +51,48 @@ export default Ember.Service.extend({
// Authentication // Authentication
login: function(credentials) { login: function(credentials) {
var self = this; let url = this.appMeta.getUrl('public/authenticate');
var url = self.appMeta.getUrl('public/authenticate');
let domain = netUtil.getSubdomain(); let domain = netUtil.getSubdomain();
this.clearSession(); this.clearSession();
return new Ember.RSVP.Promise(function(resolve, reject) { if (is.empty(credentials.email) || is.empty(credentials.password)) {
if (is.empty(credentials.email) || is.empty(credentials.password)) { return Ember.RSVP.reject("invalid");
reject("invalid"); }
return;
}
var encoded = encodingUtil.Base64.encode(domain + ":" + credentials.email + ":" + credentials.password); var encoded = encodingUtil.Base64.encode(domain + ":" + credentials.email + ":" + credentials.password);
var header = { var headers = {
'Authorization': 'Basic ' + encoded 'Authorization': 'Basic ' + encoded
}; };
$.ajax({ return this.get('ajax').post(url, {
url: url, headers
type: 'POST', }).then((response)=>{
headers: header, this.setSession(response.token, models.UserModel.create(response.user));
success: function(response) { this.get('ready', true);
self.setSession(response.token, models.UserModel.create(response.user)); return response;
self.get('ready', true);
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// SSO in the form of 'domain:email:password' // SSO in the form of 'domain:email:password'
sso: function(credentials) { sso: function(credentials) {
var self = this; let url = this.appMeta.getUrl('public/authenticate');
var url = self.appMeta.getUrl('public/authenticate');
this.clearSession(); this.clearSession();
return new Ember.RSVP.Promise(function(resolve, reject) { if (is.empty(credentials.email) || is.empty(credentials.password)) {
if (is.empty(credentials.email) || is.empty(credentials.password)) { return Ember.RSVP.reject("invalid");
reject("invalid"); }
return;
}
var header = { var headers = {
'Authorization': 'Basic ' + credentials 'Authorization': 'Basic ' + credentials
}; };
$.ajax({ return this.get('ajax').post(url, {
url: url, headers
type: 'POST', }).then((response)=>{
headers: header, this.setSession(response.token, models.UserModel.create(response.user));
success: function(response) { this.get('ready', true);
self.setSession(response.token, models.UserModel.create(response.user)); resolve(response);
self.get('ready', true);
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
@ -192,51 +173,35 @@ export default Ember.Service.extend({
// this.set('popupBlocked', false); // this.set('popupBlocked', false);
// } // }
return new Ember.RSVP.Promise(function(resolve) { let url = this.get('appMeta').getUrl("public/meta");
$.ajax({
url: self.get('appMeta').getUrl("public/meta"),
type: 'GET',
contentType: 'json',
success: function(response) {
self.get('appMeta').set('orgId', response.orgId);
self.get('appMeta').setSafe('title', response.title);
self.get('appMeta').set('version', response.version);
self.get('appMeta').setSafe('message', response.message);
self.get('appMeta').set('allowAnonymousAccess', response.allowAnonymousAccess);
let token = self.getSessionItem('token'); return this.get('ajax').request(url)
.then((response) => {
this.get('appMeta').set('orgId', response.orgId);
this.get('appMeta').setSafe('title', response.title);
this.get('appMeta').set('version', response.version);
this.get('appMeta').setSafe('message', response.message);
this.get('appMeta').set('allowAnonymousAccess', response.allowAnonymousAccess);
if (is.not.undefined(token)) { let token = this.getSessionItem('token');
// We now validate current token
let tokenCheckUrl = self.get('appMeta').getUrl(`public/validate?token=${token}`);
$.ajax({ if (is.not.undefined(token)) {
url: tokenCheckUrl, // We now validate current token
type: 'GET', let tokenCheckUrl = this.get('appMeta').getUrl(`public/validate?token=${token}`);
contentType: 'json',
success: function(user) { return this.get('ajax').request(tokenCheckUrl, {
self.setSession(token, models.UserModel.create(user)); method: 'GET',
self.set('ready', true); contentType: 'json'
resolve(); }).then((response) => {
}, this.setSession(token, models.UserModel.create(user));
error: function(reason) { this.set('ready', true);
if (reason.status === 401 || reason.status === 403) { }).catch((reason) => {
localStorage.clear();
window.location.href = "/auth/login";
}
}
});
} else {
self.set('ready', true);
resolve();
}
},
error: function(reason) {
if (reason.status === 401 || reason.status === 403) { if (reason.status === 401 || reason.status === 403) {
window.location.href = "https://documize.com"; localStorage.clear();
window.location.href = "/auth/login";
} }
} });
}); }
}); });
} }
}); });

View file

@ -1,11 +1,11 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
// //
// This software (Documize Community Edition) is licensed under // This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
// //
// You can operate outside the AGPL restrictions by purchasing // You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license // Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>. // by contacting <sales@documize.com>.
// //
// https://documize.com // https://documize.com
@ -14,85 +14,55 @@ import models from '../utils/model';
export default Ember.Service.extend({ export default Ember.Service.extend({
sessionService: Ember.inject.service('session'), sessionService: Ember.inject.service('session'),
ajax: Ember.inject.service(),
importStockTemplate: function(folderId, templateId) { importStockTemplate: function(folderId, templateId) {
let self = this;
return new Ember.RSVP.Promise(function(resolve, reject) { let url = this.get('sessionService').appMeta.getUrl("templates/" + templateId + "/folder/" + folderId + "?type=stock");
$.ajax({
url: self.get('sessionService').appMeta.getUrl("templates/" + templateId + "/folder/" + folderId + "?type=stock"), return this.get('ajax').post(url).then((response)=>{
type: 'POST', return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
importSavedTemplate: function(folderId, templateId) { importSavedTemplate: function(folderId, templateId) {
let self = this; let url = this.get('sessionService').appMeta.getUrl("templates/" + templateId + "/folder/" + folderId + "?type=saved");
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url).then((doc)=>{
$.ajax({ let docModel = models.DocumentModel.create(doc);
url: self.get('sessionService').appMeta.getUrl("templates/" + templateId + "/folder/" + folderId + "?type=saved"), return docModel;
type: 'POST',
success: function(doc) {
let docModel = models.DocumentModel.create(doc);
resolve(docModel);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
getSavedTemplates() { getSavedTemplates() {
let self = this; let url = this.get('sessionService').appMeta.getUrl("templates");
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ type: 'GET'
url: self.get('sessionService').appMeta.getUrl("templates"), }).then((response) => {
type: 'GET', if (is.not.array(response)) {
success: function(response) { response = [];
if (is.not.array(response)) { }
response = []; let templates = Ember.ArrayProxy.create({
} content: Ember.A([])
let templates = Ember.ArrayProxy.create({
content: Ember.A([])
});
_.each(response, function(template) {
let templateModel = models.TemplateModel.create(template);
templates.pushObject(templateModel);
});
resolve(templates);
},
error: function(reason) {
reject(reason);
}
}); });
_.each(response, function(template) {
let templateModel = models.TemplateModel.create(template);
templates.pushObject(templateModel);
});
return templates;
}); });
}, },
getStockTemplates() { getStockTemplates() {
let self = this; let url = this.get('sessionService').appMeta.getUrl("templates/stock");
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ type: 'GET'
url: self.get('sessionService').appMeta.getUrl("templates/stock"), }).then((response) => {
type: 'GET', return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
} }
}); });

View file

@ -1,11 +1,11 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
// //
// This software (Documize Community Edition) is licensed under // This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
// //
// You can operate outside the AGPL restrictions by purchasing // You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license // Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>. // by contacting <sales@documize.com>.
// //
// https://documize.com // https://documize.com
@ -33,17 +33,10 @@ export default Ember.Service.extend({
getUser(userId) { getUser(userId) {
let url = this.get('sessionService').appMeta.getUrl(`users/${userId}`); let url = this.get('sessionService').appMeta.getUrl(`users/${userId}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ type: 'GET'
url: url, }).then((response) => {
type: 'GET', return models.UserModel.create(response);
success: function(response) {
resolve(models.UserModel.create(response));
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
@ -62,22 +55,13 @@ export default Ember.Service.extend({
getFolderUsers(folderId) { getFolderUsers(folderId) {
let url = this.get('sessionService').appMeta.getUrl(`users/folder/${folderId}`); let url = this.get('sessionService').appMeta.getUrl(`users/folder/${folderId}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url).then((response)=>{
$.ajax({ let data = [];
url: url, _.each(response, function(obj) {
type: 'GET', data.pushObject(models.UserModel.create(obj));
success: function(response) {
let data = [];
_.each(response, function(obj) {
data.pushObject(models.UserModel.create(obj));
});
resolve(data);
},
error: function(reason) {
reject(reason);
}
}); });
return data;
}); });
}, },
@ -97,18 +81,10 @@ export default Ember.Service.extend({
updatePassword(userId, password) { updatePassword(userId, password) {
let url = this.get('sessionService').appMeta.getUrl(`users/${userId}/password`); let url = this.get('sessionService').appMeta.getUrl(`users/${userId}/password`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').post(url, {
$.ajax({ data: password
url: url, }).then((response)=>{
type: 'POST', return response;
data: password,
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
@ -116,46 +92,30 @@ export default Ember.Service.extend({
remove(userId) { remove(userId) {
let url = this.get('sessionService').appMeta.getUrl(`users/${userId}`); let url = this.get('sessionService').appMeta.getUrl(`users/${userId}`);
return new Ember.RSVP.Promise(function(resolve, reject) { return this.get('ajax').request(url, {
$.ajax({ method: 'DELETE'
url: url, }).then((response) => {
type: 'DELETE', return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
// Request password reset. // Request password reset.
forgotPassword(email) { forgotPassword(email) {
var url = this.get('sessionService').appMeta.getUrl('public/forgot'); let url = this.get('sessionService').appMeta.getUrl('public/forgot');
return new Ember.RSVP.Promise(function(resolve, reject) { if (is.empty(email)) {
if (is.empty(email)) { reject("invalid");
reject("invalid"); return;
return; }
}
var data = JSON.stringify({ let data = JSON.stringify({
Email: email Email: email
}); });
$.ajax({ return this.request('ajax').post(url, {
url: url, data: data
type: 'POST', }).then((response)=>{
dataType: 'json', return response;
data: data,
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
}, },
@ -163,23 +123,14 @@ export default Ember.Service.extend({
resetPassword(token, password) { resetPassword(token, password) {
var url = this.get('sessionService').appMeta.getUrl('public/reset/' + token); var url = this.get('sessionService').appMeta.getUrl('public/reset/' + token);
return new Ember.RSVP.Promise(function(resolve, reject) { if (is.empty(token) || is.empty(password)) {
if (is.empty(token) || is.empty(password)) { return Ember.RSVP.reject("invalid");
reject("invalid"); }
return;
}
$.ajax({ return this.request('ajax').post(url, {
url: url, data: password
type: 'POST', }).then((response)=>{
data: password, return response;
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}); });
} }
}); });