diff --git a/ccm-cms-types-decisiontree/web/templates/ccm-cms-types-decisiontree/form-handler.jsp b/ccm-cms-types-decisiontree/web/templates/ccm-cms-types-decisiontree/form-handler.jsp new file mode 100644 index 000000000..dba8b7485 --- /dev/null +++ b/ccm-cms-types-decisiontree/web/templates/ccm-cms-types-decisiontree/form-handler.jsp @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + String sectionOID = request.getParameter(DecisionTree.PARAM_SECTION_OID); + DecisionTreeSection section = new DecisionTreeSection(OID.valueOf(sectionOID)); + DecisionTree tree = section.getTree(); + + String parameterName = section.getParameterName(); + String selectedOption = request.getParameter(parameterName); + String returnURL = request.getParameter("return_url"); + + Enumeration parameterNames = request.getParameterNames(); + String parameters = ""; + while (parameterNames.hasMoreElements()) { + String name = (String) parameterNames.nextElement(); + + if (DecisionTree.preserveParameter(name)) { + if (!"".equals(parameters)) + parameters += "&"; + parameters += URLEncoder.encode(name) + "=" + URLEncoder.encode(request.getParameter(name)); + } + } + + if (request.getParameter("cancel") != null) { + String cancelURL = tree.getCancelURL(); + if (cancelURL == null || "".equals(cancelURL)) { + + + + +

Error: No cancel URL has been defined for the decision tree.

+ + + + + } else { + throw new RedirectSignal(cancelURL, false); + } + } else { + // Find out which option has been selected. + DecisionTreeOptionTargetCollection targets = tree.getTargets(); + targets.addEqualsFilter("matchOption.treeSection.id", section.getID()); + targets.addEqualsFilter("matchOption.value", selectedOption); + + if (targets.next()) { //XXX this is false + DecisionTreeOptionTarget target = targets.getTarget(); + String targetURL = target.getTargetURL(); + if (targetURL == null || "".equals(targetURL)) { + targetURL = returnURL + "?" + + DecisionTree.PARAM_SECTION_ID + "=" + target.getTargetSection().getID(); + } + + if (!"".equals(parameters)) { + if (targetURL.contains("?")) + targetURL += "&"; + else + targetURL += "?"; + targetURL += parameters; + } + + targets.close(); + throw new RedirectSignal(targetURL, false); + } else { + + + + +

Error: No target has been defined for the selected option.

+ + + + + } + + targets.close(); + } + +
diff --git a/ccm-cms-types-decisiontree/web/templates/ccm-cms-types-decisiontree/forms.js b/ccm-cms-types-decisiontree/web/templates/ccm-cms-types-decisiontree/forms.js new file mode 100644 index 000000000..500d6c09e --- /dev/null +++ b/ccm-cms-types-decisiontree/web/templates/ccm-cms-types-decisiontree/forms.js @@ -0,0 +1,19 @@ +function validate(form) { + valid = false; + hasOptions = false; + for (i = 0; i < form.elements.length; i++) { + if (form.elements[i].type == "radio") { + hasOptions = true; + if (form.elements[i].checked) { + valid = true; + break; + } + } + } + + if (hasOptions && !valid) { + alert("Please select an option."); + return false; + } else + return true; +}