Commit df2c26ed authored by Sven Franck's avatar Sven Franck

new storage.save method running all hacks inside hateoasstorage

parent d0ac9f8f
...@@ -1055,6 +1055,45 @@ ...@@ -1055,6 +1055,45 @@
**/ **/
map.actions = { map.actions = {
/**
* Generate a new object
* @method install
* @param {object} obj Action Object
**/
"new": function (obj) {
storage.save(obj);
},
/**
* Add a server
* @method submit
* @param {object} obj Action Object
**/
"update_configuration": function (obj) {
storage.add(obj);
},
/**
* add a service
* @method install
* @param {object} obj Action Object
**/
"instantiate": function (obj) {
obj.gadget.state.create_new = true;
obj.gadget.state.force_formdata = true;
obj.gadget.state.url_pointer = "request";
storage.add(obj);
},
/**
* Add a user to the storage
* @method submit
* @param {object} obj Action Object
**/
"add": function (obj) {
storage.add(obj);
},
/** /**
* Start a software instance * Start a software instance
* @method start_instance * @method start_instance
...@@ -1308,6 +1347,89 @@ ...@@ -1308,6 +1347,89 @@
}); });
}, },
/**
* Create an installation = new service object
* @method install
* @param {object} obj Action Object
**/
"install": function (obj) {
// force new portal type and POST (create new record)
obj.gadget.state.force_type = "Service";
obj.gadget.state.create_new = true;
storage.add(obj);
},
/**
* Destroy an installation = service object
* @method destroy
* @param {object} obj Action Object
**/
"destroy": function (obj) {
storage.remove(obj);
},
/**
* Start a software instance
* @method start_instance
* @param {object} obj Action Object
**/
"update_ticket": function (obj) {
var element = obj.element, formData, valid, replace, property, value, id,
decode, store;
id = obj.state.fragment_list[1];
formData = new FormData();
store = app.storage_dict;
valid = storage.validate(obj.gadget);
decode = /^[^\/]*%2[^\/]*$/.test(id);
if (valid === undefined) {
util.loader("", "validation_dict.general", "ban-circle");
// form is valid and not "spam"
} else {
replace = obj.gadget.id + "_";
for (property in valid) {
if (valid.hasOwnProperty(property)) {
value = valid[property];
// prepare to store
// TODO: add id to captcha fields missing it...
if (property !== "undefined") {
if (property !== "identifier") {
formData.append(property.replace(replace, ""), value);
}
}
}
}
util.loader("", "status_dict.updating");
store.items.get({"_id": window.decodeURIComponent(obj.state.fragment_list[1])},{"_view": "web_view"})
.then(function(response) {
return jIO.util.ajax({
"url": util.parse(response).data._actions.update.href,
"type": "POST",
"data": formData,
"xhrFields": {
"withCredentials": true
}
});
})
.then(function (answer) {
util.loader("", "status_dict.success", "check");
$.mobile.changePage("#services");
})
.fail(function(error) {
util.error(error);
if (util.parse(error.target).responseText === "" && id && obj.state.callback) {
$.mobile.changePage(obj.state.callback.replace("__id__", decode ? id : window.encodeURIComponent(id)));
}
});
}
},
// ==============================================================
/** /**
* Look up single value from dict * Look up single value from dict
* @method translateLookup * @method translateLookup
...@@ -1572,153 +1694,6 @@ ...@@ -1572,153 +1694,6 @@
.fail(util.error); .fail(util.error);
}, },
/**
* Create an installation = new service object
* @method install
* @param {object} obj Action Object
**/
"install": function (obj) {
// force new portal type and POST (create new record)
obj.gadget.state.force_type = "Service";
obj.gadget.state.create_new = true;
storage.add(obj);
},
/**
* Destroy an installation = service object
* @method destroy
* @param {object} obj Action Object
**/
"destroy": function (obj) {
storage.remove(obj);
},
/**
* Add a user to the storage
* @method submit
* @param {object} obj Action Object
**/
"add": function (obj) {
storage.add(obj);
},
/**
* Add a server
* @method submit
* @param {object} obj Action Object
**/
"add_server": function (obj) {
obj.gadget.state.create_new = true;
obj.gadget.state.force_formdata = true;
obj.gadget.state.url_pointer = "request_computer";
storage.add(obj);
},
/**
* Add a server
* @method submit
* @param {object} obj Action Object
**/
"add_ticket": function (obj) {
obj.gadget.state.create_new = true;
obj.gadget.state.force_formdata = true;
obj.gadget.state.url_pointer = "request_ticket";
storage.add(obj);
},
/**
* Start a software instance
* @method start_instance
* @param {object} obj Action Object
**/
"update_ticket": function (obj) {
var element = obj.element, formData, valid, replace, property, value, id,
decode, store;
id = obj.state.fragment_list[1];
formData = new FormData();
store = app.storage_dict;
valid = storage.validate(obj.gadget);
decode = /^[^\/]*%2[^\/]*$/.test(id);
if (valid === undefined) {
util.loader("", "validation_dict.general", "ban-circle");
// form is valid and not "spam"
} else {
replace = obj.gadget.id + "_";
for (property in valid) {
if (valid.hasOwnProperty(property)) {
value = valid[property];
// prepare to store
// TODO: add id to captcha fields missing it...
if (property !== "undefined") {
if (property !== "identifier") {
formData.append(property.replace(replace, ""), value);
}
}
}
}
util.loader("", "status_dict.updating");
store.items.get({"_id": window.decodeURIComponent(obj.state.fragment_list[1])},{"_view": "web_view"})
.then(function(response) {
return jIO.util.ajax({
"url": util.parse(response).data._actions.update.href,
"type": "POST",
"data": formData,
"xhrFields": {
"withCredentials": true
}
});
})
.then(function (answer) {
util.loader("", "status_dict.success", "check");
$.mobile.changePage("#services");
})
.fail(function(error) {
util.error(error);
if (util.parse(error.target).responseText === "" && id && obj.state.callback) {
$.mobile.changePage(obj.state.callback.replace("__id__", decode ? id : window.encodeURIComponent(id)));
}
});
}
},
/**
* Add a server
* @method submit
* @param {object} obj Action Object
**/
"update_configuration": function (obj) {
storage.add(obj);
},
/**
* add a service
* @method install
* @param {object} obj Action Object
**/
"instantiate": function (obj) {
obj.gadget.state.create_new = true;
obj.gadget.state.force_formdata = true;
obj.gadget.state.url_pointer = "request";
storage.add(obj);
},
/**
* Instantiate a software instance
* @method install
* @param {object} obj Action Object
**/
"add_network": function (obj) {
obj.gadget.state.create_new = true;
obj.gadget.state.force_formdata = true;
obj.gadget.state.url_pointer = "request_computer_network";
storage.add(obj);
},
/** /**
* Show jumps popup * Show jumps popup
* @method jump * @method jump
...@@ -5563,17 +5538,51 @@ ...@@ -5563,17 +5538,51 @@
// generate storage object // generate storage object
storage = {}; storage = {};
/**
* Generate a new object
* @method newStore
* @param {object} obj Action object
*/
storage.save = function (obj) {
var form, data, valid, prefix, decode, id, answer, goto, type;
form = document.getElementById(obj.id);
type = obj.state.url_pointer[obj.element.getAttribute("data-action")];
prefix = obj.id + "_";
valid = storage.validate(obj);
data = storage.parseForm(valid, prefix, true);
RSVP.resolve(
app.storage_dict.items.post(data, {"call": type})
)
.then(function (response) {
if (obj.state.callback) {
answer = util.parse(response);
id = answer.id;
decode = /^[^\/]*%2[^\/]*$/.test(id);
goto = decode ? id : window.encodeURIComponent(id);
$.mobile.changePage(obj.state.callback.replace("__id__", goto));
}
}).fail(util.error);
};
/** /**
* Make a formData object and replace prefixes * Make a formData object and replace prefixes
* @method parseForm * @method parseForm
* @param {object} obj Form to parse * @param {object} obj Form to parse
* @param {string} clean id of the form * @param {string} clean id of the form
* @param {boolean} plain Whether to return formData or normal data (true)
* @return {object} FormData object * @return {object} FormData object
*/ */
storage.parseForm = function (obj, clean) { storage.parseForm = function (obj, clean, plain) {
var formData, property, value; var container, property, value;
formData = new FormData(); if (plain) {
container = {};
} else {
container = new FormData();
}
for (property in obj) { for (property in obj) {
if (obj.hasOwnProperty(property)) { if (obj.hasOwnProperty(property)) {
...@@ -5583,12 +5592,16 @@ ...@@ -5583,12 +5592,16 @@
case "identifier": case "identifier":
break; break;
default: default:
formData.append(property.replace(clean, ""), value); if (plain) {
container[property.replace(clean, "")] = value;
} else {
container.append(property.replace(clean, ""), value);
}
break; break;
} }
} }
} }
return formData; return container;
}; };
/** /**
...@@ -7065,9 +7078,9 @@ ...@@ -7065,9 +7078,9 @@
// (pass.state.selected) : undefined; // (pass.state.selected) : undefined;
// if a callback is provided, set it on state // if a callback is provided, set it on state
if (pass.config.property_dict.submit_to) {
pass.state.callback = pass.config.property_dict.submit_to; pass.state.callback = pass.config.property_dict.submit_to;
} pass.state.url_pointer = pass.config.property_dict.url_pointer;
// tuck to gadget // tuck to gadget
// WARNING: this should use data(), it is BAD practice to store like this // WARNING: this should use data(), it is BAD practice to store like this
...@@ -7366,48 +7379,48 @@ ...@@ -7366,48 +7379,48 @@
// store // store
promises[i] = store[method || "post"](obj, hacked_view || {}) promises[i] = store[method || "post"](obj, hacked_view || {})
.then(function (answer) { .then(function (answer) {
console.log("OUT")
console.log(answer)
return answer; return answer;
}) })
.fail(util.error); .fail(util.error);
} }
} else { } else {
// do it again, Sam... console.log("SHOULD BE REDUNDANT")
promises[0] = jIO.util.ajax({
"url": app.storage_dict.items.dict.url, // // do it again, Sam...
"type": "GET", // promises[0] = jIO.util.ajax({
"xhrFields": { // "url": app.storage_dict.property_dict.items.storage_list[0].url,
"withCredentials": true // "type": "GET",
} // "xhrFields": {
}) // "withCredentials": true
.then(function(response) { // }
return jIO.util.ajax({ // })
"url": util.parse(response.target.responseText)._links.me.href, // .then(function(response) {
"xhrFields": { // return jIO.util.ajax({
"withCredentials": true // "url": util.parse(response.target.responseText)._links.me.href,
} // "xhrFields": {
}); // "withCredentials": true
}) // }
.then(function (answer) { // });
return jIO.util.ajax({ // })
"url": util.parse(answer.target.responseText)._actions[pass.fetch].href, // .then(function (answer) {
"type": "POST", // return jIO.util.ajax({
"data": pass.form_data, // "url": util.parse(answer.target.responseText)._actions[pass.fetch].href,
"xhrFields": { // "type": "POST",
"withCredentials": true // "data": pass.form_data,
} // "xhrFields": {
}); // "withCredentials": true
}) // }
.then(function (erp5_response) { // });
header = erp5_response.target.getResponseHeader("Location"); // })
return RSVP.resolve({ // .then(function (erp5_response) {
"status": 200, // header = erp5_response.target.getResponseHeader("Location");
"foo": "bar", // return RSVP.resolve({
"location": header // "status": 200,
}); // "foo": "bar",
}) // "location": header
.fail(util.error); // });
// })
// .fail(util.error);
} }
return RSVP.all(promises) return RSVP.all(promises)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment