1
0
Fork 0

improved way of importing and exporting aql queries

This commit is contained in:
Heiko Kernbach 2014-08-19 17:08:27 +02:00
parent 777decd050
commit ed1942c8d0
3 changed files with 61 additions and 82 deletions

View File

@ -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");

View File

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

View File

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