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

custom handler: request new service added

parent 1dd2713d
......@@ -4,8 +4,9 @@
"portal_type_fields": "release_fieldlist",
"initial_query": {"include_docs": true, "limit":[0,1]},
"form": true,
"view": "FOO",
"view": "web_view",
"property_dict": {
"always_render": true,
"initial_query_url_identifier": "_id",
"dynamic_children": [0],
"requires_authentication": true,
......@@ -16,31 +17,29 @@
{
"position": "center",
"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",
"fieldlist": [
{"field": "title", "overrides": {"properties": {"required": true, "editable":false}}},
{"field": "version", "overrides": {"properties": {"required": true, "editable":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":"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"}]}}
{"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}},
{"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": "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}}
]
},
{
"position": "right",
"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}}}
]
"fieldlist": []
},
{
"position": "center",
"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 @@
},
"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": "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 @@
"portal_type_source": "Software Release",
"portal_type_title": "release",
"portal_type_fields": "release_fieldlist",
"portal_type_mapper": "release_list",
"initial_query": {"include_docs": true, "limit":[0,8]},
"form": true,
"view": "FOO",
......
......@@ -2,12 +2,13 @@
"portal_type_source": "Software Product",
"portal_type_title": "software",
"portal_type_fields": "software_fieldlist",
"portal_type_mapper": "software_list",
"initial_query": {"include_docs": true, "limit":[0,8]},
"form": true,
"view": "FOO",
"view": "web_view",
"property_dict": {
"link": true,
"link_identifier": "id",
"link_identifier": "_relative_url",
"dynamic_children": [0],
"pagination": {
"class_list": "responsive",
......
......@@ -26,7 +26,94 @@
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} response Object object passed on to next element
**/
......@@ -466,6 +553,17 @@
.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
* @method install
......@@ -887,7 +985,7 @@
if (props.link) {
label = true;
obj.href = item[props.link_source] ||
("#" + core + "/" + item[props.link_identifier || "id"]);
"#" + core + "/" + window.encodeURIComponent(item[props.link_identifier || "id"]);
if (props.link_external) {
obj.external = true;
}
......@@ -2777,7 +2875,9 @@
// make sure value is set correctly
if (input_config.logic && setter) {
setter_list = input_config.logic.setters;
if (input_config.logic.skip === undefined) {
input_config.logic.skip = true;
}
if (setter_list) {
for (l = 0; l < setter_list.length; l += 1) {
input_config.logic[setter_list[l]] = spec.data[setter];
......@@ -3981,7 +4081,7 @@
"label",
{
"className": label_class_list + " translate" +
((star && mask_set === undefined) ? " required_label " : " ") +
((star) ? " required_label " : " ") +
((label === undefined || config.logic.text === "") ?
" ui-hidden-accessible" : "")
},
......@@ -4022,11 +4122,11 @@
if (config.direct.checked) {
active = "on";
}
if (config.logic.disabled) {
if (config.attributes.disabled) {
disabled = " ui-disabled";
mask_set = true;
}
if (config.logic.readonly) {
if (config.attributes.readonly) {
readonly = " ui-readonly";
mask_set = true;
}
......@@ -4632,32 +4732,20 @@
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 (config.gadget.state.force_formdata && property !== "identifier") {
formData.append(property.replace(replace, ""), value);
} else {
// overwrite portal_type if forced
if (property !== "identifier") {
obj[property.replace(replace, "")] = value;
} else {
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 @@
app.store({
"response": [obj],
"pass": {
"form_data": formData,
"type": config.gadget.state.type,
"reply": true,
"validate_type": validate_portal_type_fields,
......@@ -6186,6 +6275,8 @@
}
}
// if we have form_data we continue
if (pass.form_data === undefined) {
// loop over item and create a JIO record
for (i = 0; i < pass.items.length; i += 1) {
record = pass.items[i];
......@@ -6223,6 +6314,30 @@
})
.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)
.then(function (response) {
......
......@@ -802,6 +802,8 @@
},
"release_dict": {
"text_dict": {
"instance_title": "Instance Title",
"software_release": "Software Release",
"request": "Request",
"cancel": "Reset",
"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