1 31 32 package org.opencms.frontend.templateone.form; 33 34 import org.opencms.configuration.CmsConfigurationException; 35 import org.opencms.file.CmsFile; 36 import org.opencms.file.CmsObject; 37 import org.opencms.i18n.CmsMessages; 38 import org.opencms.jsp.CmsJspActionElement; 39 import org.opencms.util.CmsMacroResolver; 40 import org.opencms.util.CmsStringUtil; 41 import org.opencms.xml.content.CmsXmlContent; 42 import org.opencms.xml.content.CmsXmlContentFactory; 43 import org.opencms.xml.types.CmsXmlHtmlValue; 44 import org.opencms.xml.types.I_CmsXmlContentValue; 45 46 import java.util.ArrayList ; 47 import java.util.HashMap ; 48 import java.util.List ; 49 import java.util.Locale ; 50 import java.util.Map ; 51 import java.util.StringTokenizer ; 52 53 import javax.servlet.http.HttpServletRequest ; 54 55 68 public class CmsForm { 69 70 71 public static final String MAILTYPE_HTML = "html"; 72 73 74 public static final String MAILTYPE_TEXT = "text"; 75 76 77 public static final String NODE_CAPTCHA = "FormCaptcha"; 78 79 80 public static final String NODE_CONFIRMATIONMAILCHECKBOXLABEL = "ConfirmationCheckboxLabel"; 81 82 83 public static final String NODE_CONFIRMATIONMAILENABLED = "ConfirmationMailEnabled"; 84 85 86 public static final String NODE_CONFIRMATIONMAILFIELD = "ConfirmationField"; 87 88 89 public static final String NODE_CONFIRMATIONMAILOPTIONAL = "ConfirmationMailOptional"; 90 91 92 public static final String NODE_CONFIRMATIONMAILSUBJECT = "ConfirmationMailSubject"; 93 94 95 public static final String NODE_CONFIRMATIONMAILTEXT = "ConfirmationMailText"; 96 97 98 public static final String NODE_EMAIL = "Email"; 99 100 101 public static final String NODE_FIELDDEFAULTVALUE = "FieldDefault"; 102 103 104 public static final String NODE_FIELDERRORMESSAGE = "FieldErrorMessage"; 105 106 107 public static final String NODE_FIELDITEM = "FieldItem"; 108 109 110 public static final String NODE_FIELDLABEL = "FieldLabel"; 111 112 113 public static final String NODE_FIELDMANDATORY = "FieldMandatory"; 114 115 116 public static final String NODE_FIELDTYPE = "FieldType"; 117 118 119 public static final String NODE_FIELDVALIDATION = "FieldValidation"; 120 121 122 public static final String NODE_FORMATTRIBUTES = "FormAttributes"; 123 124 125 public static final String NODE_FORMCHECKTEXT = "CheckText"; 126 127 128 public static final String NODE_FORMCONFIRMATION = "FormConfirmation"; 129 130 131 public static final String NODE_FORMFIELDATTRIBUTES = "FormFieldAttributes"; 132 133 134 public static final String NODE_FORMTEXT = "FormText"; 135 136 137 public static final String NODE_INPUTFIELD = "InputField"; 138 139 140 public static final String NODE_ITEMDESCRIPTION = "ItemDescription"; 141 142 143 public static final String NODE_ITEMSELECTED = "ItemSelected"; 144 145 146 public static final String NODE_ITEMVALUE = "ItemValue"; 147 148 149 public static final String NODE_MAILBCC = "MailBCC"; 150 151 152 public static final String NODE_MAILCC = "MailCC"; 153 154 155 public static final String NODE_MAILFROM = "MailFrom"; 156 157 158 public static final String NODE_MAILSUBJECT = "MailSubject"; 159 160 161 public static final String NODE_MAILTEXT = "MailText"; 162 163 164 public static final String NODE_MAILTO = "MailTo"; 165 166 167 public static final String NODE_MAILTYPE = "MailType"; 168 169 170 public static final String NODE_OPTIONALCONFIGURATION = "OptionalFormConfiguration"; 171 172 173 public static final String NODE_OPTIONALCONFIRMATION = "OptionalConfirmationMail"; 174 175 176 public static final String NODE_SHOWCHECK = "ShowCheck"; 177 178 179 public static final String NODE_TARGET_URI = "TargetUri"; 180 181 182 public static final String PARAM_SENDCONFIRMATION = "sendconfirmation"; 183 184 185 private static final String TYPE_NAME = "emailform"; 186 187 private CmsCaptchaField m_captchaField; 188 189 private List m_configurationErrors; 190 private String m_confirmationMailCheckboxLabel; 191 private boolean m_confirmationMailEnabled; 192 private int m_confirmationMailField; 193 private boolean m_confirmationMailOptional; 194 private String m_confirmationMailSubject; 195 private String m_confirmationMailText; 196 197 private String m_confirmationMailTextPlain; 198 199 200 private List m_fields; 201 202 203 private Map m_fieldsByName; 204 private String m_formAction; 205 private String m_formAttributes; 206 private String m_formCheckText; 207 private String m_formConfirmationText; 208 private String m_formFieldAttributes; 209 210 private String m_formText; 211 212 private boolean m_hasMandatoryFields; 213 private String m_mailBCC; 214 private String m_mailCC; 215 private String m_mailFrom; 216 private String m_mailSubject; 217 private String m_mailSubjectPrefix; 218 private String m_mailText; 219 private String m_mailTextPlain; 220 private String m_mailTo; 221 222 private String m_mailType; 223 224 private boolean m_showCheck; 225 private String m_targetUri; 226 227 228 public static final String NODE_CAPTCHA_PRESET = "Preset"; 229 230 231 public static final String NODE_CAPTCHA_CHARACTERS = "Characters"; 232 233 241 public CmsForm(CmsJspActionElement jsp, CmsMessages messages, boolean initial) 242 throws Exception { 243 244 init(jsp, messages, initial, null, null); 245 } 246 247 258 public CmsForm(CmsJspActionElement jsp, CmsMessages messages, boolean initial, String formConfigUri, String formAction) 259 throws Exception { 260 261 init(jsp, messages, initial, formConfigUri, formAction); 262 } 263 264 269 public static String getStaticType() { 270 return TYPE_NAME; 271 } 272 273 278 public boolean captchaFieldIsOnCheckPage() { 279 return getShowCheck(); 280 } 281 282 287 public boolean captchaFieldIsOnInputPage() { 288 return !getShowCheck(); 289 } 290 291 296 public CmsCaptchaField getCaptchaField() { 297 298 return m_captchaField; 299 } 300 301 306 public List getConfigurationErrors() { 307 308 return m_configurationErrors; 309 } 310 311 316 public String getConfirmationMailCheckboxLabel() { 317 318 return m_confirmationMailCheckboxLabel; 319 } 320 321 326 public int getConfirmationMailField() { 327 328 return m_confirmationMailField; 329 } 330 331 336 public String getConfirmationMailSubject() { 337 338 return m_confirmationMailSubject; 339 } 340 341 346 public String getConfirmationMailText() { 347 348 return m_confirmationMailText; 349 } 350 351 356 public String getConfirmationMailTextPlain() { 357 358 return m_confirmationMailTextPlain; 359 } 360 361 366 public List getFields() { 367 368 return m_fields; 369 } 370 371 377 public String getFieldStringValueByName(String fieldName) { 378 379 I_CmsField field = (I_CmsField)m_fieldsByName.get(fieldName); 380 if (field != null) { 381 382 String fieldValue = field.getValue(); 383 return (fieldValue != null) ? fieldValue.trim() : ""; 384 } 385 386 return ""; 387 } 388 389 394 public String getFormAttributes() { 395 396 return m_formAttributes; 397 } 398 399 404 public String getFormCheckText() { 405 406 return m_formCheckText; 407 } 408 409 414 public String getFormConfirmationText() { 415 416 return m_formConfirmationText; 417 } 418 419 424 public String getFormFieldAttributes() { 425 426 return m_formFieldAttributes; 427 } 428 429 434 public String getFormText() { 435 436 return m_formText; 437 } 438 439 444 public String getMailBCC() { 445 446 return m_mailBCC; 447 } 448 449 454 public String getMailCC() { 455 456 return m_mailCC; 457 } 458 459 464 public String getMailFrom() { 465 466 return m_mailFrom; 467 } 468 469 474 public String getMailSubject() { 475 476 return m_mailSubject; 477 } 478 479 484 public String getMailSubjectPrefix() { 485 486 return m_mailSubjectPrefix; 487 } 488 489 494 public String getMailText() { 495 496 return m_mailText; 497 } 498 499 504 public String getMailTextPlain() { 505 506 return m_mailTextPlain; 507 } 508 509 514 public String getMailTo() { 515 516 return m_mailTo; 517 } 518 519 524 public String getMailType() { 525 526 return m_mailType; 527 } 528 529 534 public boolean getShowCheck() { 535 536 return m_showCheck; 537 } 538 539 547 public String getTargetUri() { 548 return m_targetUri; 549 } 550 551 556 public boolean hasCaptchaField() { 557 return m_captchaField != null; 558 } 559 560 565 public boolean hasConfigurationErrors() { 566 567 return m_configurationErrors.size() > 0; 568 } 569 570 575 public boolean hasMandatoryFields() { 576 577 return m_hasMandatoryFields; 578 } 579 580 588 public boolean hasTargetUri() { 589 return CmsStringUtil.isNotEmpty(m_targetUri); 590 } 591 592 603 public void init(CmsJspActionElement jsp, CmsMessages messages, boolean initial, String formConfigUri, String formAction) 604 throws Exception { 605 606 if (CmsStringUtil.isEmpty(formConfigUri)) { 608 formConfigUri = jsp.getRequestContext().getUri(); 609 } 610 CmsFile file = jsp.getCmsObject().readFile(formConfigUri); 611 CmsXmlContent content = CmsXmlContentFactory.unmarshal(jsp.getCmsObject(), file); 612 613 Locale locale = jsp.getRequestContext().getLocale(); 615 616 initMembers(); 618 619 m_formAction = formAction; 620 m_fields = new ArrayList (); 621 m_fieldsByName = new HashMap (); 622 623 initFormGlobalConfiguration(content, jsp.getCmsObject(), locale, messages); 625 626 initInputFields(content, jsp, locale, messages, initial); 628 629 initCaptchaField(jsp, content, locale, initial); 631 632 if (captchaFieldIsOnInputPage() && m_captchaField != null) { 634 addField(m_captchaField); 635 } 636 } 637 638 643 public boolean isCheckPageSubmitted() { 644 return CmsFormHandler.ACTION_CONFIRMED.equals(m_formAction); 645 } 646 647 652 public boolean isConfirmationMailEnabled() { 653 654 return m_confirmationMailEnabled; 655 } 656 657 662 public boolean isConfirmationMailOptional() { 663 664 return m_confirmationMailOptional; 665 } 666 667 672 public boolean isInputFormSubmitted() { 673 return CmsFormHandler.ACTION_SUBMIT.equals(m_formAction); 674 } 675 676 681 public I_CmsField removeCaptchaField() { 682 683 for (int i = 0, n = m_fields.size(); i < n; i++) { 684 685 I_CmsField field = (I_CmsField)m_fields.get(i); 686 if (field != null && CmsCaptchaField.class.isAssignableFrom(getClass())) { 687 688 removeField(field); 689 return field; 690 } 691 } 692 693 return null; 694 } 695 696 701 protected void addField(I_CmsField field) { 702 703 m_fields.add(field); 704 705 m_fieldsByName.put(field.getName(), field); 707 } 708 709 718 protected String readSelectedFromRequest(HttpServletRequest request, I_CmsField field, String value) { 719 720 String result = ""; 721 if (CmsCheckboxField.class.isAssignableFrom(field.getClass())) { 722 String [] values = request.getParameterValues(field.getName()); 724 if (values != null) { 725 for (int i = 0; i < values.length; i++) { 726 if (value.equals(values[i])) { 727 return Boolean.toString(true); 728 } 729 } 730 } 731 } else if (CmsSelectionField.class.isAssignableFrom(field.getClass()) || CmsRadioButtonField.class.isAssignableFrom(field.getClass())) { 732 String fieldValue = request.getParameter(field.getName()); 734 if (CmsStringUtil.isNotEmpty(fieldValue) && fieldValue.equals(value) && !"".equals(value)) { 735 result = Boolean.toString(true); 737 } else { 738 result = ""; 740 } 741 } else { 742 result = Boolean.toString(true); 744 } 745 return result; 746 } 747 748 753 protected void removeField(I_CmsField field) { 754 755 m_fields.remove(field); 756 757 m_fieldsByName.remove(field); 759 } 760 761 766 protected void setConfigurationErrors(List configurationErrors) { 767 768 m_configurationErrors = configurationErrors; 769 } 770 771 776 protected void setConfirmationMailCheckboxLabel(String confirmationMailCheckboxLabel) { 777 778 m_confirmationMailCheckboxLabel = confirmationMailCheckboxLabel; 779 } 780 781 786 protected void setConfirmationMailEnabled(boolean confirmationMailEnabled) { 787 788 m_confirmationMailEnabled = confirmationMailEnabled; 789 } 790 791 796 protected void setConfirmationMailField(int confirmationMailFieldName) { 797 798 m_confirmationMailField = confirmationMailFieldName; 799 } 800 801 806 protected void setConfirmationMailOptional(boolean confirmationMailOptional) { 807 808 m_confirmationMailOptional = confirmationMailOptional; 809 } 810 811 816 protected void setConfirmationMailSubject(String confirmationMailSubject) { 817 818 m_confirmationMailSubject = confirmationMailSubject; 819 } 820 821 826 protected void setConfirmationMailText(String confirmationMailText) { 827 828 m_confirmationMailText = confirmationMailText; 829 } 830 831 836 protected void setConfirmationMailTextPlain(String confirmationMailTextPlain) { 837 838 m_confirmationMailTextPlain = confirmationMailTextPlain; 839 } 840 841 846 protected void setFormAttributes(String formAttributes) { 847 848 m_formAttributes = formAttributes; 849 } 850 851 856 protected void setFormCheckText(String formCheckText) { 857 858 m_formCheckText = formCheckText; 859 } 860 861 866 protected void setFormConfirmationText(String formConfirmationText) { 867 868 m_formConfirmationText = formConfirmationText; 869 } 870 871 876 protected void setFormFieldAttributes(String formFieldAttributes) { 877 878 m_formFieldAttributes = formFieldAttributes; 879 } 880 881 886 protected void setFormText(String formText) { 887 888 m_formText = formText; 889 } 890 891 896 protected void setHasMandatoryFields(boolean hasMandatoryFields) { 897 898 m_hasMandatoryFields = hasMandatoryFields; 899 } 900 901 906 protected void setMailBCC(String mailBCC) { 907 908 m_mailBCC = mailBCC; 909 } 910 911 916 protected void setMailCC(String mailCC) { 917 918 m_mailCC = mailCC; 919 } 920 921 926 protected void setMailFrom(String mailFrom) { 927 928 m_mailFrom = mailFrom; 929 } 930 931 936 protected void setMailSubject(String mailSubject) { 937 938 m_mailSubject = mailSubject; 939 } 940 941 946 protected void setMailSubjectPrefix(String mailSubjectPrefix) { 947 948 m_mailSubjectPrefix = mailSubjectPrefix; 949 } 950 951 956 protected void setMailText(String mailText) { 957 958 m_mailText = mailText; 959 } 960 961 966 protected void setMailTextPlain(String mailTextPlain) { 967 968 m_mailTextPlain = mailTextPlain; 969 } 970 971 976 protected void setMailTo(String mailTo) { 977 978 m_mailTo = mailTo; 979 } 980 981 986 protected void setMailType(String mailType) { 987 988 m_mailType = mailType; 989 } 990 991 996 protected void setShowCheck(boolean showCheck) { 997 998 m_showCheck = showCheck; 999 } 1000 1001 1009 protected void setTargetUri(String targetUri) { 1010 m_targetUri = targetUri; 1011 } 1012 1013 1021 private I_CmsField createConfirmationMailCheckbox(CmsJspActionElement jsp, CmsMessages messages, boolean initial) { 1022 1023 A_CmsField field = new CmsCheckboxField(); 1024 field.setName(PARAM_SENDCONFIRMATION); 1025 field.setLabel(messages.key("form.confirmation.label")); 1026 boolean isChecked = false; 1028 if (!initial && Boolean.valueOf(jsp.getRequest().getParameter(PARAM_SENDCONFIRMATION)).booleanValue()) { 1029 isChecked = true; 1031 } 1032 CmsFieldItem item = new CmsFieldItem(Boolean.toString(true), getConfirmationMailCheckboxLabel(), isChecked); 1034 List items = new ArrayList (1); 1035 items.add(item); 1036 field.setItems(items); 1037 return field; 1038 } 1039 1040 1047 private String getConfigurationValue(String value, String defaultValue) { 1048 1049 if (CmsStringUtil.isNotEmpty(value)) { 1050 return value; 1051 } 1052 return defaultValue; 1053 } 1054 1055 1063 private void initCaptchaField(CmsJspActionElement jsp, CmsXmlContent xmlContent, Locale locale, boolean initial) { 1064 1065 boolean captchaFieldIsOnInputPage = captchaFieldIsOnInputPage(); 1066 boolean displayCheckPage = captchaFieldIsOnCheckPage() && isInputFormSubmitted(); 1067 boolean submittedCheckPage = captchaFieldIsOnCheckPage() && isCheckPageSubmitted(); 1068 1069 if (captchaFieldIsOnInputPage || displayCheckPage || submittedCheckPage) { 1071 1072 CmsObject cms = jsp.getCmsObject(); 1073 1074 I_CmsXmlContentValue xmlValueCaptcha = xmlContent.getValue(NODE_CAPTCHA, locale); 1075 if (xmlValueCaptcha != null) { 1076 1077 String xPathCaptcha = xmlValueCaptcha.getPath() + "/"; 1079 String stringValue = xmlContent.getStringValue(cms, xPathCaptcha + NODE_FIELDLABEL, locale); 1080 String fieldLabel = getConfigurationValue(stringValue, ""); 1081 1082 String fieldValue = ""; 1084 if (!initial) { 1085 fieldValue = jsp.getRequest().getParameter(CmsCaptchaField.C_PARAM_CAPTCHA_PHRASE); 1086 if (fieldValue == null) { 1087 fieldValue = ""; 1088 } 1089 } 1090 1091 CmsCaptchaSettings captchaSettings = CmsCaptchaSettings.getInstance(jsp); 1093 captchaSettings.init(cms, xmlContent, locale); 1094 m_captchaField = new CmsCaptchaField(captchaSettings, fieldLabel, fieldValue); 1095 } 1096 } 1097 } 1098 1099 1108 private void initFormGlobalConfiguration(CmsXmlContent content, CmsObject cms, Locale locale, CmsMessages messages) 1109 throws Exception { 1110 1111 String stringValue = content.getStringValue(cms, NODE_FORMTEXT, locale); 1113 setFormText(getConfigurationValue(stringValue, "")); 1114 stringValue = content.getStringValue(cms, NODE_FORMCONFIRMATION, locale); 1116 setFormConfirmationText(getConfigurationValue(stringValue, "")); 1117 stringValue = content.getStringValue(cms, NODE_TARGET_URI, locale); 1119 setTargetUri(getConfigurationValue(stringValue, "")); 1120 stringValue = content.getStringValue(cms, NODE_MAILFROM, locale); 1122 setMailFrom(getConfigurationValue(stringValue, "")); 1123 stringValue = content.getStringValue(cms, NODE_MAILTO, locale); 1125 setMailTo(getConfigurationValue(stringValue, "")); 1126 stringValue = content.getStringValue(cms, NODE_MAILSUBJECT, locale); 1128 setMailSubject(getConfigurationValue(stringValue, "")); 1129 stringValue = messages.key("form.mailsubject.prefix"); 1131 if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(stringValue)) { 1132 setMailSubjectPrefix(stringValue + " "); 1134 } else { 1135 setMailSubjectPrefix(""); 1137 } 1138 1139 CmsXmlHtmlValue mailTextValue = (CmsXmlHtmlValue)content.getValue(NODE_MAILTEXT, locale); 1140 if (mailTextValue != null) { 1141 stringValue = mailTextValue.getPlainText(cms); 1143 setMailTextPlain(getConfigurationValue(stringValue, "")); 1144 stringValue = mailTextValue.getStringValue(cms); 1146 setMailText(getConfigurationValue(stringValue, "")); 1147 } else { 1148 setMailTextPlain(""); 1149 setMailText(""); 1150 } 1151 1152 String pathPrefix = NODE_OPTIONALCONFIGURATION + "/"; 1154 1155 stringValue = content.getStringValue(cms, pathPrefix + NODE_MAILTYPE, locale); 1157 setMailType(getConfigurationValue(stringValue, MAILTYPE_HTML)); 1158 stringValue = content.getStringValue(cms, pathPrefix + NODE_MAILCC, locale); 1160 setMailCC(getConfigurationValue(stringValue, "")); 1161 stringValue = content.getStringValue(cms, pathPrefix + NODE_MAILBCC, locale); 1163 setMailBCC(getConfigurationValue(stringValue, "")); 1164 stringValue = content.getStringValue(cms, pathPrefix + NODE_SHOWCHECK, locale); 1166 setShowCheck(Boolean.valueOf(stringValue).booleanValue()); 1167 stringValue = content.getStringValue(cms, pathPrefix + NODE_FORMCHECKTEXT, locale); 1169 setFormCheckText(getConfigurationValue(stringValue, "")); 1170 stringValue = content.getStringValue(cms, pathPrefix + NODE_FORMATTRIBUTES, locale); 1172 if (CmsStringUtil.isNotEmpty(stringValue)) { 1173 setFormAttributes(" " + stringValue); 1174 } 1175 stringValue = content.getStringValue(cms, pathPrefix + NODE_FORMFIELDATTRIBUTES, locale); 1177 if (CmsStringUtil.isNotEmpty(stringValue)) { 1178 setFormFieldAttributes(" " + stringValue); 1179 } else { 1180 String defaultAttributes = messages.key("form.field.default.attributes"); 1182 if (CmsStringUtil.isNotEmpty(defaultAttributes)) { 1183 setFormFieldAttributes(" " + defaultAttributes); 1184 } 1185 } 1186 1187 pathPrefix = NODE_OPTIONALCONFIRMATION + "/"; 1189 1190 stringValue = content.getStringValue(cms, pathPrefix + NODE_CONFIRMATIONMAILENABLED, locale); 1192 setConfirmationMailEnabled(Boolean.valueOf(stringValue).booleanValue()); 1193 if (isConfirmationMailEnabled()) { 1195 stringValue = content.getStringValue(cms, pathPrefix + NODE_CONFIRMATIONMAILSUBJECT, locale); 1197 setConfirmationMailSubject(getConfigurationValue(stringValue, "")); 1198 1199 mailTextValue = (CmsXmlHtmlValue)content.getValue(pathPrefix + NODE_CONFIRMATIONMAILTEXT, locale); 1200 if (mailTextValue != null) { 1201 stringValue = mailTextValue.getPlainText(cms); 1203 setConfirmationMailTextPlain(getConfigurationValue(stringValue, "")); 1204 stringValue = mailTextValue.getStringValue(cms); 1205 setConfirmationMailText(getConfigurationValue(stringValue, "")); 1206 } else { 1207 setConfirmationMailTextPlain(""); 1208 setConfirmationMailText(""); 1209 } 1210 1211 stringValue = content.getStringValue(cms, pathPrefix + NODE_CONFIRMATIONMAILFIELD, locale); 1213 int fieldIndex = 1; 1214 try { 1215 fieldIndex = Integer.parseInt(getConfigurationValue(stringValue, "1")) - 1; 1216 } catch (Exception e) { 1217 } 1219 setConfirmationMailField(fieldIndex); 1220 stringValue = content.getStringValue(cms, pathPrefix + NODE_CONFIRMATIONMAILOPTIONAL, locale); 1222 setConfirmationMailOptional(Boolean.valueOf(stringValue).booleanValue()); 1223 stringValue = content.getStringValue(cms, pathPrefix + NODE_CONFIRMATIONMAILCHECKBOXLABEL, locale); 1225 setConfirmationMailCheckboxLabel(getConfigurationValue( 1226 stringValue, 1227 messages.key("form.confirmation.checkbox"))); 1228 } 1229 } 1230 1231 1241 private void initInputFields( 1242 CmsXmlContent content, 1243 CmsJspActionElement jsp, 1244 Locale locale, 1245 CmsMessages messages, 1246 boolean initial) throws CmsConfigurationException { 1247 1248 CmsObject cms = jsp.getCmsObject(); 1249 List fieldValues = content.getValues(NODE_INPUTFIELD, locale); 1250 int fieldValueSize = fieldValues.size(); 1251 CmsFieldFactory fieldFactory = CmsFieldFactory.getSharedInstance(); 1252 1253 for (int i = 0; i < fieldValueSize; i++) { 1254 I_CmsXmlContentValue inputField = (I_CmsXmlContentValue)fieldValues.get(i); 1255 String inputFieldPath = inputField.getPath() + "/"; 1256 A_CmsField field = null; 1257 1258 String stringValue = content.getStringValue(cms, inputFieldPath + NODE_FIELDTYPE, locale); 1260 field = fieldFactory.getField(stringValue); 1261 1262 field.setName(inputFieldPath.substring(0, inputFieldPath.length() - 1)); 1264 stringValue = content.getStringValue(cms, inputFieldPath + NODE_FIELDLABEL, locale); 1266 field.setLabel(getConfigurationValue(stringValue, "")); 1267 stringValue = content.getStringValue(cms, inputFieldPath + NODE_FIELDERRORMESSAGE, locale); 1269 field.setErrorMessage(stringValue); 1270 if (initial && CmsStringUtil.isEmpty(jsp.getRequest().getParameter(field.getName()))) { 1272 String fieldValue = content.getStringValue(cms, inputFieldPath + NODE_FIELDDEFAULTVALUE, locale); 1274 if (CmsStringUtil.isNotEmpty(fieldValue)) { 1275 CmsMacroResolver resolver = CmsMacroResolver.newInstance().setCmsObject(cms).setJspPageContext( 1276 jsp.getJspContext()); 1277 field.setValue(resolver.resolveMacros(fieldValue)); 1278 } 1279 } else { 1280 if (!CmsCheckboxField.class.isAssignableFrom(field.getClass())) { 1282 String [] parameterValues = jsp.getRequest().getParameterValues(field.getName()); 1283 StringBuffer value = new StringBuffer (); 1284 if (parameterValues != null) { 1285 for (int j = 0; j < parameterValues.length; j++) { 1286 if (j != 0) { 1287 value.append(", "); 1288 } 1289 value.append(parameterValues[j]); 1290 } 1291 } 1292 field.setValue(value.toString()); 1293 } 1294 } 1295 1296 if (!CmsHiddenField.class.isAssignableFrom(field.getClass())) { 1298 stringValue = content.getStringValue(cms, inputFieldPath + NODE_FIELDVALIDATION, locale); 1300 if (CmsEmailField.class.isAssignableFrom(field.getClass()) && CmsStringUtil.isEmpty(stringValue)) { 1301 field.setValidationExpression(CmsEmailField.VALIDATION_REGEX); 1303 } else { 1304 field.setValidationExpression(getConfigurationValue(stringValue, "")); 1305 } 1306 stringValue = content.getStringValue(cms, inputFieldPath + NODE_FIELDMANDATORY, locale); 1308 boolean isMandatory = Boolean.valueOf(stringValue).booleanValue(); 1309 field.setMandatory(isMandatory); 1310 if (isMandatory) { 1311 setHasMandatoryFields(true); 1313 } 1314 1315 if (field.needsItems()) { 1316 String fieldValue = content.getStringValue(cms, inputFieldPath + NODE_FIELDDEFAULTVALUE, locale); 1318 if (CmsStringUtil.isNotEmpty(fieldValue)) { 1319 StringTokenizer T = new StringTokenizer (fieldValue, "|"); 1321 List items = new ArrayList (T.countTokens()); 1322 while (T.hasMoreTokens()) { 1323 String part = T.nextToken(); 1324 boolean isPreselected = part.indexOf('*') != -1; 1326 String value = ""; 1327 String label = ""; 1328 String selected = ""; 1329 int delimPos = part.indexOf(':'); 1330 if (delimPos != -1) { 1331 value = part.substring(0, delimPos); 1333 label = part.substring(delimPos + 1); 1334 } else { 1335 value = part; 1337 label = value; 1338 } 1339 1340 if (isPreselected) { 1341 value = CmsStringUtil.substitute(value, "*", ""); 1343 label = CmsStringUtil.substitute(label, "*", ""); 1344 } 1345 1346 if (initial) { 1347 if (isPreselected) { 1349 selected = Boolean.toString(true); 1350 } 1351 } else { 1352 selected = readSelectedFromRequest( 1354 jsp.getRequest(), 1355 field, 1356 value); 1357 } 1358 items.add(new CmsFieldItem(value, label, Boolean.valueOf(selected).booleanValue())); 1360 } 1361 field.setItems(items); 1362 } else { 1363 throw new CmsConfigurationException(Messages.get().container( 1365 Messages.ERR_INIT_INPUT_FIELD_MISSING_ITEM_2, 1366 field.getName(), 1367 field.getType())); 1368 } 1369 } 1370 } 1371 1372 addField(field); 1373 } 1374 1375 validateFormConfiguration(messages); 1377 1378 if (isConfirmationMailEnabled() && isConfirmationMailOptional()) { 1379 1380 I_CmsField confirmationMailCheckbox = createConfirmationMailCheckbox(jsp, messages, initial); 1382 addField(confirmationMailCheckbox); 1383 } 1384 } 1385 1386 1389 private void initMembers() { 1390 1391 setConfigurationErrors(new ArrayList ()); 1392 setFormAttributes(""); 1393 setFormCheckText(""); 1394 setFormConfirmationText(""); 1395 setFormFieldAttributes(""); 1396 setFormText(""); 1397 setMailBCC(""); 1398 setMailCC(""); 1399 setMailFrom(""); 1400 setMailSubject(""); 1401 setMailText(""); 1402 setMailTextPlain(""); 1403 setMailTo(""); 1404 setMailType(MAILTYPE_HTML); 1405 setConfirmationMailSubject(""); 1406 setConfirmationMailText(""); 1407 setConfirmationMailTextPlain(""); 1408 } 1409 1410 1415 private void validateFormConfiguration(CmsMessages messages) { 1416 1417 if (isConfirmationMailEnabled()) { 1418 I_CmsField confirmField = new CmsTextField(); 1420 try { 1421 confirmField = (I_CmsField)getFields().get(getConfirmationMailField()); 1423 } catch (IndexOutOfBoundsException e) { 1424 getConfigurationErrors().add(messages.key("form.configuration.error.emailfield.notfound")); 1426 setConfirmationMailEnabled(false); 1427 return; 1428 } 1429 if (!CmsEmailField.class.isAssignableFrom(confirmField.getClass())) { 1430 getConfigurationErrors().add(messages.key("form.configuration.error.emailfield.type")); 1432 } 1433 } 1434 } 1435 1436} 1437 | Popular Tags |