mirror of https://gitee.com/bigwinds/arangodb
improved way of importing and exporting aql queries
This commit is contained in:
parent
777decd050
commit
ed1942c8d0
|
@ -340,14 +340,53 @@ controller.put('/foxx/move/:key', function(req, res) {
|
|||
*
|
||||
*/
|
||||
|
||||
controller.post("/query/upload/:user", function(req, res) {
|
||||
var user = req.params("user");
|
||||
var response, queries, userColl, storedQueries, queriesToSave;
|
||||
|
||||
queries = req.body();
|
||||
userColl = db._users.byExample({"user": user}).toArray()[0];
|
||||
storedQueries = userColl.extra.queries;
|
||||
queriesToSave = [];
|
||||
|
||||
underscore.each(queries, function(newq) {
|
||||
var toBeStored = true;
|
||||
underscore.each(storedQueries, function(stored) {
|
||||
if (stored.name === newq.name) {
|
||||
toBeStored = false;
|
||||
}
|
||||
});
|
||||
if (toBeStored === true) {
|
||||
queriesToSave.push(newq);
|
||||
}
|
||||
});
|
||||
|
||||
queriesToSave = queriesToSave.concat(storedQueries);
|
||||
|
||||
var toUpdate = {
|
||||
extra: {
|
||||
queries: queriesToSave
|
||||
}
|
||||
}
|
||||
|
||||
var result = db._users.update(userColl, toUpdate, true);
|
||||
res.json(result);
|
||||
}).summary("Upload user queries")
|
||||
.notes("This function uploads all given user queries");
|
||||
|
||||
/** Download stored queries
|
||||
*
|
||||
* Download and export all queries from the given username.
|
||||
*
|
||||
*/
|
||||
|
||||
controller.get("/query/download/:user", function(req, res) {
|
||||
var user = req.params("user");
|
||||
|
||||
var result = db._users.byExample({"user": user}).toArray()[0];
|
||||
|
||||
res.set("Content-Type", "application/json");
|
||||
res.set("Content-Disposition", "attachment; filename=queries.json");
|
||||
res.json({"extra": result.extra});
|
||||
res.json(result.extra.queries);
|
||||
|
||||
}).summary("Download all user queries")
|
||||
.notes("This function downloads all user queries from the given user");
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*jslint indent: 2, nomen: true, maxlen: 100, vars: true, white: true, plusplus: true, stupid: true*/
|
||||
/*global require, exports, Backbone, activeUser, window, ArangoQuery, $, data, _ */
|
||||
/*global require, exports, Backbone, activeUser, window, ArangoQuery, $, data, _, arangoHelper*/
|
||||
(function() {
|
||||
"use strict";
|
||||
|
||||
|
@ -116,97 +116,30 @@
|
|||
return returnValue3;
|
||||
},
|
||||
|
||||
saveImportQueries: function(file) {
|
||||
saveImportQueries: function(file, callback) {
|
||||
|
||||
if (this.activeUser === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var queries = [];
|
||||
this.each(function(query) {
|
||||
queries.push({
|
||||
value: query.attributes.value,
|
||||
name: query.attributes.name
|
||||
});
|
||||
});
|
||||
|
||||
var self = this,
|
||||
returnValue1 = false,
|
||||
returnValue2 = false,
|
||||
returnValue3 = false;
|
||||
|
||||
var oldQueries = this.currentExtra;
|
||||
|
||||
window.progressView.show("Fetching documents...");
|
||||
$.ajax({
|
||||
cache: false,
|
||||
type: "PATCH",
|
||||
type: "POST",
|
||||
async: false,
|
||||
url: "/_api/user/" + this.activeUser,
|
||||
url: "query/upload/" + this.activeUser,
|
||||
data: file,
|
||||
contentType: "application/json",
|
||||
processData: false,
|
||||
success: function() {
|
||||
returnValue1 = true;
|
||||
window.progressView.hide();
|
||||
callback();
|
||||
},
|
||||
error: function() {
|
||||
returnValue1 = false;
|
||||
window.progressView.hide();
|
||||
arangoHelper.arangoError("Query error", "queries could not be imported");
|
||||
}
|
||||
});
|
||||
|
||||
this.fetch({
|
||||
async: false,
|
||||
success: function() {
|
||||
}});
|
||||
|
||||
var newQueries = self.currentExtra;
|
||||
|
||||
var nameTaken = false;
|
||||
|
||||
_.each(oldQueries.queries, function(query) {
|
||||
|
||||
_.each(newQueries.queries, function(newQuery) {
|
||||
if (newQuery.name === query.name) {
|
||||
nameTaken = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (nameTaken === false) {
|
||||
newQueries.queries.push({
|
||||
name: query.name,
|
||||
value: query.value
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
cache: false,
|
||||
type: "PATCH",
|
||||
async: false,
|
||||
url: "/_api/user/" + this.activeUser,
|
||||
data: JSON.stringify({
|
||||
extra: newQueries
|
||||
}),
|
||||
contentType: "application/json",
|
||||
processData: false,
|
||||
success: function() {
|
||||
returnValue2 = true;
|
||||
},
|
||||
error: function() {
|
||||
returnValue2 = false;
|
||||
}
|
||||
});
|
||||
|
||||
this.fetch({
|
||||
async: false
|
||||
});
|
||||
|
||||
if (returnValue1 === true && returnValue2 === true) {
|
||||
returnValue3 = true;
|
||||
}
|
||||
else {
|
||||
returnValue3 = false;
|
||||
}
|
||||
return returnValue3;
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -293,15 +293,17 @@
|
|||
importCustomQueries: function () {
|
||||
var result, self = this;
|
||||
if (this.allowUpload === true) {
|
||||
result = self.collection.saveImportQueries(self.file);
|
||||
|
||||
if (result === true) {
|
||||
var callback = function() {
|
||||
this.collection.fetch({async: false});
|
||||
this.updateLocalQueries();
|
||||
this.renderSelectboxes();
|
||||
this.updateTable();
|
||||
$('#customs-switch').click();
|
||||
self.allowUpload = false;
|
||||
}
|
||||
$('#customs-switch').click();
|
||||
};
|
||||
|
||||
self.collection.saveImportQueries(self.file, callback.bind(this));
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -319,6 +321,11 @@
|
|||
$.ajax("whoAmI", {async:false}).done(
|
||||
function(data) {
|
||||
name = data.name;
|
||||
|
||||
if (name === null) {
|
||||
name = "root";
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
window.open(encodeURI("query/download/" + name));
|
||||
|
|
Loading…
Reference in New Issue