From ed1942c8d06fa9338837e29e320dc464a4630456 Mon Sep 17 00:00:00 2001 From: Heiko Kernbach Date: Tue, 19 Aug 2014 17:08:27 +0200 Subject: [PATCH] improved way of importing and exporting aql queries --- js/apps/system/aardvark/aardvark.js | 43 +++++++++- .../frontend/js/collections/arangoQueries.js | 85 ++----------------- .../aardvark/frontend/js/views/queryView.js | 15 +++- 3 files changed, 61 insertions(+), 82 deletions(-) diff --git a/js/apps/system/aardvark/aardvark.js b/js/apps/system/aardvark/aardvark.js index d24b08aa42..a4863cb222 100644 --- a/js/apps/system/aardvark/aardvark.js +++ b/js/apps/system/aardvark/aardvark.js @@ -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"); diff --git a/js/apps/system/aardvark/frontend/js/collections/arangoQueries.js b/js/apps/system/aardvark/frontend/js/collections/arangoQueries.js index eafc0ed004..9ee5a01c81 100644 --- a/js/apps/system/aardvark/frontend/js/collections/arangoQueries.js +++ b/js/apps/system/aardvark/frontend/js/collections/arangoQueries.js @@ -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; } }); diff --git a/js/apps/system/aardvark/frontend/js/views/queryView.js b/js/apps/system/aardvark/frontend/js/views/queryView.js index 06d483c65f..cbf8521173 100644 --- a/js/apps/system/aardvark/frontend/js/views/queryView.js +++ b/js/apps/system/aardvark/frontend/js/views/queryView.js @@ -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));