Commit 971be979 authored by Sven Franck's avatar Sven Franck

custom handler: request new service added

parent 1dd2713d
...@@ -4,8 +4,9 @@ ...@@ -4,8 +4,9 @@
"portal_type_fields": "release_fieldlist", "portal_type_fields": "release_fieldlist",
"initial_query": {"include_docs": true, "limit":[0,1]}, "initial_query": {"include_docs": true, "limit":[0,1]},
"form": true, "form": true,
"view": "FOO", "view": "web_view",
"property_dict": { "property_dict": {
"always_render": true,
"initial_query_url_identifier": "_id", "initial_query_url_identifier": "_id",
"dynamic_children": [0], "dynamic_children": [0],
"requires_authentication": true, "requires_authentication": true,
...@@ -16,31 +17,29 @@ ...@@ -16,31 +17,29 @@
{ {
"position": "center", "position": "center",
"fieldlist": [ "fieldlist": [
{"type": "input", "direct": {"disabled": true, "className":"progress_notifier", "name": "status", "id": "status", "value": "Preparing instance..."}, "attributes": {"data-i18n":"[value]portal_type_dict.release_dict.text_dict.prepare_instance"}} {"type": "input", "direct": {"disabled": true, "className":"progress_notifier", "name": "status", "id": "status", "value": "Preparing instance..."}, "attributes": {"data-i18n":"[value]portal_type_dict.release_dict.text_dict.prepare_instance", "disabled": "disabled"}}
] ]
}, },
{ {
"position": "left", "position": "left",
"fieldlist": [ "fieldlist": [
{"field": "title", "overrides": {"properties": {"required": true, "editable":false}}}, {"type": "input", "direct": {"id":"software_release_show", "className": "required"}, "attributes": {"data-enhanced": "true", "type": "text", "readonly": "readonly"}, "logic": {"setValue": "_relative_url", "label": "Software Release", "label_i18n": "portal_type_dict.release_dict.text_dict.software_release", "skip":false}},
{"field": "version", "overrides": {"properties": {"required": true, "editable":false}}}, {"type": "input", "direct": {"name": "software_release", "id":"software_release", "className": "required"}, "attributes": {"data-enhanced": "true", "type": "hidden"}, "logic": {"setValue": "_relative_url", "skip":false}},
{"type": "input", "direct": {"name": "install_release_id", "id": "install_release_id", "className": "required"}, "attributes": {"data-enhanced":"true", "type":"text", "readonly": "readonly"}, "logic":{"setValue": "instance_", "label":"Instance ID", "label_i18n":"portal_type_dict.release_dict.text_dict.instance_id"}}, {"type": "input", "direct": {"name": "software_title", "id": "software_title", "className": "required"}, "attributes": {"data-enhanced": true, "type": "text"}, "logic": {"label": "Instance Title", "setValue": "instance_", "label_i18n": "portal_type_dict.release_dict.text_dict.instance_title", "skip": false}}
{"type":"select", "direct":{"name": "install_release_reference_computer", "id": "install_release_reference_computer","className": "required"},"attributes": {"data-enhanced": "true"},"logic": {"label":"Request for Computer", "label_i18n":"portal_type_dict.release_dict.text_dict.instance_server", "options":[{"value":"", "text": "", "selected": "true"}, {"value": "Cortana", "text": "Cortana"},{"value": "Prof. Simon Wright", "text": "Prof. Simon Wright"},{"value": "HAL", "text": "HAL"},{"value": "Computer", "text": "Computer"},{"value": "Lawnmower", "text": "Lawnmower"}]}}
] ]
}, },
{ {
"position": "right", "position": "right",
"fieldlist": [ "fieldlist": []
{"field": "image_url"},
{"field": "image_type", "overrides": {"widget": {"hidden":true}}},
{"field": "image_url", "overrides": {"type": "StringField", "widget": {"hidden": true}}},
{"field": "detail_description", "overrides": {"properties": {"required": true, "editable":false}}}
]
}, },
{ {
"position": "center", "position": "center",
"fieldlist": [ "fieldlist": [
{"type": "textarea", "direct": {"name": "install_release_xml_recipe", "id": "install_release_xml_recipe", "className": "required", "value": "<?xml version='1.0' encoding='utf-8'?>\n<instance>\n</instance>"}, "attributes": {"data-enhanced":"true"}, "logic": {"label":"Instance Configuration", "label_i18n":"portal_type_dict.release_dict.text_dict.instance_recipe"}} {"type": "textarea", "direct": {"name": "instance_xml", "id": "instance_xml", "className": "required", "value": "<?xml version='1.0' encoding='utf-8'?>\n<instance>\n</instance>"}, "attributes": {"data-enhanced":"true"}, "logic": {"label":"Instance Configuration", "label_i18n":"portal_type_dict.release_dict.text_dict.instance_recipe"}},
{"type": "input", "direct": {"name": "sla_xml", "id": "sla_xml", "className": "required", "value": "<?xml version='1.0' encoding='utf-8'?>\n<instance>\n</instance>"}, "attributes": {"data-enhanced":"true", "type": "hidden"}, "logic": {}},
{"type": "input", "direct": {"name": "shared", "id": "shared", "className": "required", "value": 0}, "attributes": {"data-enhanced":"true", "type": "hidden"}, "logic": {}},
{"type": "input", "direct": {"name": "state", "id": "state", "className": "required", "value": "started"}, "attributes": {"data-enhanced": "true", "type": "hidden"}, "logic": {}},
{"type": "input", "direct": {"name": "software_type", "id": "software_type", "className": "required", "value": "started"}, "attributes": {"data-enhanced": "true", "type": "hidden"}, "logic": {}}
] ]
} }
], ],
...@@ -64,7 +63,7 @@ ...@@ -64,7 +63,7 @@
}, },
"children": [ "children": [
{"type": "input", "direct": {"value": "Reset", "className": "translate"}, "attributes": {"type": "reset", "data-i18n":"[value]portal_type_dict.release_dict.text_dict.cancel"}}, {"type": "input", "direct": {"value": "Reset", "className": "translate"}, "attributes": {"type": "reset", "data-i18n":"[value]portal_type_dict.release_dict.text_dict.cancel"}},
{"type": "input", "direct": {"value": "Request", "className": "action translate"}, "attributes": {"type": "submit", "data-action":"install", "data-i18n":"[value]portal_type_dict.release_dict.text_dict.request", "data-theme": "slapos-black"}} {"type": "input", "direct": {"value": "Request", "className": "action translate"}, "attributes": {"type": "submit", "data-action":"instantiate", "data-i18n":"[value]portal_type_dict.release_dict.text_dict.request", "data-theme": "slapos-black"}}
] ]
}] }]
} }
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
"portal_type_source": "Software Release", "portal_type_source": "Software Release",
"portal_type_title": "release", "portal_type_title": "release",
"portal_type_fields": "release_fieldlist", "portal_type_fields": "release_fieldlist",
"portal_type_mapper": "release_list",
"initial_query": {"include_docs": true, "limit":[0,8]}, "initial_query": {"include_docs": true, "limit":[0,8]},
"form": true, "form": true,
"view": "FOO", "view": "FOO",
......
...@@ -2,12 +2,13 @@ ...@@ -2,12 +2,13 @@
"portal_type_source": "Software Product", "portal_type_source": "Software Product",
"portal_type_title": "software", "portal_type_title": "software",
"portal_type_fields": "software_fieldlist", "portal_type_fields": "software_fieldlist",
"portal_type_mapper": "software_list",
"initial_query": {"include_docs": true, "limit":[0,8]}, "initial_query": {"include_docs": true, "limit":[0,8]},
"form": true, "form": true,
"view": "FOO", "view": "web_view",
"property_dict": { "property_dict": {
"link": true, "link": true,
"link_identifier": "id", "link_identifier": "_relative_url",
"dynamic_children": [0], "dynamic_children": [0],
"pagination": { "pagination": {
"class_list": "responsive", "class_list": "responsive",
......
...@@ -26,7 +26,94 @@ ...@@ -26,7 +26,94 @@
map.handlers = { map.handlers = {
/** /**
* @method subscriptions * @method release_list
* @param {object} reply Object received from previous chain element
* @param {object} response Object object passed on to next element
**/
"release_list": function (reply) {
var config, property, query, fetch, href, pass = reply.pass;
if (storage) {
// access storage
fetch = reply.pass.value || reply.pass.state.query.force;
return storage.items.get({"_id": fetch})
.then(function(answer) {
query = util.parse(answer).data._links.slapos_jump._query;
if (pass.config.initial_query === undefined) {
pass.config.initial_query = {};
}
pass.config.initial_query.query = query;
pass.config.initial_query.skip_type = true;
pass.preserve_lookup = reply.pass.value;
// set a flag to now run allDocs
pass.force_allDocs = true;
// pass hacked query back into chain
if (reply.response) {
return {
"response": util.parse(reply.response),
"pass": pass
};
}
return {
"pass": pass
}
}).fail(util.error);
}
return (reply);
},
/**
* @method software_list
* @param {object} reply Object received from previous chain element
* @param {object} response Object object passed on to next element
**/
"software_list": function (reply) {
var config, property, query, props, pass = reply.pass;
if (storage) {
config = {
"url": storage.items.dict.url,
"type": "GET",
"data": JSON.stringify({"_id":""})
};
// access storage
return jIO.util.ajax(config)
.then(function(response) {
query = util.parse(response.target.responseText)._links.slapos_jump._query;
if (pass.config.initial_query === undefined) {
pass.config.initial_query = {};
}
pass.config.initial_query.query = query;
pass.config.initial_query.skip_type = true;
pass.preserve_lookup = reply.pass.value;
// set a flag to now run allDocs
pass.force_allDocs = true;
// pass hacked query back into chain
if (reply.response) {
return {
"response": util.parse(reply.response),
"pass": pass
};
}
return {
"pass": pass
}
})
.fail(util.error);
}
return (reply);
},
/**
* @method subscription_details
* @param {object} reply Object received from previous chain element * @param {object} reply Object received from previous chain element
* @param {object} response Object object passed on to next element * @param {object} response Object object passed on to next element
**/ **/
...@@ -466,6 +553,17 @@ ...@@ -466,6 +553,17 @@
.fail(util.error); .fail(util.error);
}, },
/**
* Instantiate a software instance
* @method install
* @param {object} obj Action Object
**/
"instantiate": function (obj) {
obj.gadget.state.create_new = true;
obj.gadget.state.force_formdata = true;
storage.add(obj);
},
/** /**
* Create an installation = new service object * Create an installation = new service object
* @method install * @method install
...@@ -887,7 +985,7 @@ ...@@ -887,7 +985,7 @@
if (props.link) { if (props.link) {
label = true; label = true;
obj.href = item[props.link_source] || obj.href = item[props.link_source] ||
("#" + core + "/" + item[props.link_identifier || "id"]); "#" + core + "/" + window.encodeURIComponent(item[props.link_identifier || "id"]);
if (props.link_external) { if (props.link_external) {
obj.external = true; obj.external = true;
} }
...@@ -2777,7 +2875,9 @@ ...@@ -2777,7 +2875,9 @@
// make sure value is set correctly // make sure value is set correctly
if (input_config.logic && setter) { if (input_config.logic && setter) {
setter_list = input_config.logic.setters; setter_list = input_config.logic.setters;
if (input_config.logic.skip === undefined) {
input_config.logic.skip = true; input_config.logic.skip = true;
}
if (setter_list) { if (setter_list) {
for (l = 0; l < setter_list.length; l += 1) { for (l = 0; l < setter_list.length; l += 1) {
input_config.logic[setter_list[l]] = spec.data[setter]; input_config.logic[setter_list[l]] = spec.data[setter];
...@@ -3981,7 +4081,7 @@ ...@@ -3981,7 +4081,7 @@
"label", "label",
{ {
"className": label_class_list + " translate" + "className": label_class_list + " translate" +
((star && mask_set === undefined) ? " required_label " : " ") + ((star) ? " required_label " : " ") +
((label === undefined || config.logic.text === "") ? ((label === undefined || config.logic.text === "") ?
" ui-hidden-accessible" : "") " ui-hidden-accessible" : "")
}, },
...@@ -4022,11 +4122,11 @@ ...@@ -4022,11 +4122,11 @@
if (config.direct.checked) { if (config.direct.checked) {
active = "on"; active = "on";
} }
if (config.logic.disabled) { if (config.attributes.disabled) {
disabled = " ui-disabled"; disabled = " ui-disabled";
mask_set = true; mask_set = true;
} }
if (config.logic.readonly) { if (config.attributes.readonly) {
readonly = " ui-readonly"; readonly = " ui-readonly";
mask_set = true; mask_set = true;
} }
...@@ -4632,32 +4732,20 @@ ...@@ -4632,32 +4732,20 @@
for (property in valid) { for (property in valid) {
if (valid.hasOwnProperty(property)) { if (valid.hasOwnProperty(property)) {
value = valid[property]; value = valid[property];
// prepare to store // prepare to store
// TODO: add id to captcha fields missing it... // TODO: add id to captcha fields missing it...
if (property !== "undefined") { if (property !== "undefined") {
if (config.gadget.state.force_formdata && property !== "identifier") {
formData.append(property.replace(replace, ""), value);
} else {
// overwrite portal_type if forced // overwrite portal_type if forced
if (property !== "identifier") { if (property !== "identifier") {
obj[property.replace(replace, "")] = value; obj[property.replace(replace, "")] = value;
} else { } else {
obj[property] = value; obj[property] = value;
} }
// if (config.gadget.state.force_type
// && property !== "identifier") {
// obj[
// property.replace(property.split("_")[0],
// config.gadget.state.force_type.toLowerCase())
// ] = value;
// } else {
// obj[property] = value;
// }
} }
}
// prepare for form submit
// NOTE: formData can post CORS!
// formData.append(property.replace(replace, ""), value);
} }
} }
...@@ -4673,6 +4761,7 @@ ...@@ -4673,6 +4761,7 @@
app.store({ app.store({
"response": [obj], "response": [obj],
"pass": { "pass": {
"form_data": formData,
"type": config.gadget.state.type, "type": config.gadget.state.type,
"reply": true, "reply": true,
"validate_type": validate_portal_type_fields, "validate_type": validate_portal_type_fields,
...@@ -6186,6 +6275,8 @@ ...@@ -6186,6 +6275,8 @@
} }
} }
// if we have form_data we continue
if (pass.form_data === undefined) {
// loop over item and create a JIO record // loop over item and create a JIO record
for (i = 0; i < pass.items.length; i += 1) { for (i = 0; i < pass.items.length; i += 1) {
record = pass.items[i]; record = pass.items[i];
...@@ -6223,6 +6314,30 @@ ...@@ -6223,6 +6314,30 @@
}) })
.fail(util.error); .fail(util.error);
} }
} else {
// do it again, Sam...
promises[i] = jIO.util.ajax({
"url": storage.items.dict.url,
"type": "GET",
"data": JSON.stringify({"_id":""})
})
.then(function(response) {
return jIO.util.ajax({
"url": util.parse(response.target.responseText)._links.me.href
});
})
.then(function (answer) {
return jIO.util.ajax({
"url": util.parse(answer.target.responseText)._actions.request.href,
"type": "POST",
"data": pass.form_data
});
})
.then(function (foo) {
return foo;
})
.fail(util.error);
}
return RSVP.all(promises) return RSVP.all(promises)
.then(function (response) { .then(function (response) {
......
...@@ -802,6 +802,8 @@ ...@@ -802,6 +802,8 @@
}, },
"release_dict": { "release_dict": {
"text_dict": { "text_dict": {
"instance_title": "Instance Title",
"software_release": "Software Release",
"request": "Request", "request": "Request",
"cancel": "Reset", "cancel": "Reset",
"prepare_instance": "Preparing instance...", "prepare_instance": "Preparing instance...",
......
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