svn commit: r815734 - in /ofbiz/trunk/framework: common/config/ example/widget/example/ widget/dtd/ widget/src/org/ofbiz/widget/ widget/src/org/ofbiz/widget/form/ widget/src/org/ofbiz/widget/html/ widget/src/org/ofbiz/widget/menu/ widget/templates/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r815734 - in /ofbiz/trunk/framework: common/config/ example/widget/example/ widget/dtd/ widget/src/org/ofbiz/widget/ widget/src/org/ofbiz/widget/form/ widget/src/org/ofbiz/widget/html/ widget/src/org/ofbiz/widget/menu/ widget/templates/

jleroux@apache.org
Author: jleroux
Date: Wed Sep 16 12:16:03 2009
New Revision: 815734

URL: http://svn.apache.org/viewvc?rev=815734&view=rev
Log:
A patch from Nicolas Malin "Add confirm action before do submit action." (https://issues.apache.org/jira/browse/OFBIZ-2916) - OFBIZ-2916
Add this feature to forms in a consistent way with existing feature in menu (enhancing this previous feature)

Modified:
    ofbiz/trunk/framework/common/config/CommonUiLabels.xml
    ofbiz/trunk/framework/example/widget/example/ExampleForms.xml
    ofbiz/trunk/framework/widget/dtd/widget-form.xsd
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java
    ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl

Modified: ofbiz/trunk/framework/common/config/CommonUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/config/CommonUiLabels.xml?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/config/CommonUiLabels.xml (original)
+++ ofbiz/trunk/framework/common/config/CommonUiLabels.xml Wed Sep 16 12:16:03 2009
@@ -1408,7 +1408,7 @@
         <value xml:lang="de">Bestätigen</value>
         <value xml:lang="en">Confirm</value>
         <value xml:lang="es">Confirmar</value>
-        <value xml:lang="fr">Confirmer</value>
+        <value xml:lang="fr">Vous confirmez ?</value>
         <value xml:lang="hi_IN">पुष्टि</value>
         <value xml:lang="it">Conferma</value>
         <value xml:lang="pt">Confirmar</value>
@@ -1417,6 +1417,62 @@
         <value xml:lang="th">ยืนยัน</value>
         <value xml:lang="zh">确认</value>
     </property>
+    <property key="CommonConfirmAdd">
+        <value xml:lang="ar">تأكيد</value>
+        <value xml:lang="de">Bestätigen</value>
+        <value xml:lang="en">Confirm</value>
+        <value xml:lang="es">Confirmar</value>
+        <value xml:lang="fr">Confirmez-vous l'ajout ?</value>
+        <value xml:lang="hi_IN">पुष्टि</value>
+        <value xml:lang="it">Conferma</value>
+        <value xml:lang="pt">Confirmar</value>
+        <value xml:lang="ro">Confirma</value>
+        <value xml:lang="ru">Подтвердить</value>
+        <value xml:lang="th">ยืนยัน</value>
+        <value xml:lang="zh">确认</value>
+    </property>
+    <property key="CommonConfirmDelete">
+        <value xml:lang="ar">تأكيد</value>
+        <value xml:lang="de">Bestätigen</value>
+        <value xml:lang="en">Confirm Delete</value>
+        <value xml:lang="es">Confirmar</value>
+        <value xml:lang="fr">Confirmez-vous la suppression ?</value>
+        <value xml:lang="hi_IN">पुष्टि</value>
+        <value xml:lang="it">Conferma</value>
+        <value xml:lang="pt">Confirmar</value>
+        <value xml:lang="ro">Confirma</value>
+        <value xml:lang="ru">Подтвердить</value>
+        <value xml:lang="th">ยืนยัน</value>
+        <value xml:lang="zh">确认</value>
+    </property>
+    <property key="CommonConfirmAdd">
+        <value xml:lang="ar">تأكيد</value>
+        <value xml:lang="de">Bestätigen</value>
+        <value xml:lang="en">Confirm adding ?</value>
+        <value xml:lang="es">Confirmar</value>
+        <value xml:lang="fr">Confirmez-vous l'ajout ?</value>
+        <value xml:lang="hi_IN">पुष्टि</value>
+        <value xml:lang="it">Conferma</value>
+        <value xml:lang="pt">Confirmar</value>
+        <value xml:lang="ro">Confirma</value>
+        <value xml:lang="ru">Подтвердить</value>
+        <value xml:lang="th">ยืนยัน</value>
+        <value xml:lang="zh">确认</value>
+    </property>
+    <property key="CommonConfirmDelete">
+        <value xml:lang="ar">تأكيد</value>
+        <value xml:lang="de">Bestätigen</value>
+        <value xml:lang="en">Confirm Delete</value>
+        <value xml:lang="es">Confirmar</value>
+        <value xml:lang="fr">Confirmez vous la suppression ?</value>
+        <value xml:lang="hi_IN">पुष्टि</value>
+        <value xml:lang="it">Conferma</value>
+        <value xml:lang="pt">Confirmar</value>
+        <value xml:lang="ro">Confirma</value>
+        <value xml:lang="ru">Подтвердить</value>
+        <value xml:lang="th">ยืนยัน</value>
+        <value xml:lang="zh">确认</value>
+    </property>
     <property key="CommonContactMechID">
         <value xml:lang="ar">إحداثيات</value>
         <value xml:lang="de">KontaktMechId</value>
@@ -1438,7 +1494,7 @@
         <value xml:lang="de">Kontakt Zweck</value>
         <value xml:lang="en">Contact Purpose</value>
         <value xml:lang="es">Propósito del contacto</value>
-        <value xml:lang="fr">Objet du contact</value>
+        <value xml:lang="fr">But du contact</value>
         <value xml:lang="hi_IN">संपर्क प्रयोजन</value>
         <value xml:lang="it">Funzione contatto</value>
         <value xml:lang="nl">Kontact reden</value>

Modified: ofbiz/trunk/framework/example/widget/example/ExampleForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/example/widget/example/ExampleForms.xml?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/example/widget/example/ExampleForms.xml (original)
+++ ofbiz/trunk/framework/example/widget/example/ExampleForms.xml Wed Sep 16 12:16:03 2009
@@ -175,7 +175,7 @@
             </drop-down>
         </field>
         <field name="deleteLink" title="" widget-style="buttontext">
-            <hyperlink target="deleteExampleItem" description="${uiLabelMap.CommonDelete}" also-hidden="false">
+            <hyperlink target="deleteExampleItem" description="${uiLabelMap.CommonDelete}" also-hidden="false" confirmation-message="${uiLabelMap.CommonConfirmDelete}">
                 <parameter param-name="exampleId"/>
                 <parameter param-name="exampleItemSeqId"/>
             </hyperlink>
@@ -195,7 +195,7 @@
                 </entity-options>
             </drop-down>
         </field>
-        <field name="submitButton" title="${uiLabelMap.CommonAdd}"><submit button-type="button"/></field>
+        <field name="submitButton" title="${uiLabelMap.CommonAdd}"><submit button-type="button" request-confirmation="true"/></field>
     </form>
 
     <!-- ExampleFeatureAppl -->

Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-form.xsd?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/dtd/widget-form.xsd (original)
+++ ofbiz/trunk/framework/widget/dtd/widget-form.xsd Wed Sep 16 12:16:03 2009
@@ -832,6 +832,16 @@
         </xs:attribute>
         <xs:attribute type="xs:string" name="target-window"/>
         <xs:attribute type="xs:string" name="image-location"/>
+        <xs:attribute name="request-confirmation" default="false">
+            <xs:annotation><xs:documentation>If true then the user is presented with a dialog box, if confirmation-message is empty, use default</xs:documentation></xs:annotation>
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="confirmation-message" type="xs:string"><xs:annotation><xs:documentation>The message displayed in confirmation box</xs:documentation></xs:annotation></xs:attribute>
     </xs:attributeGroup>
     <xs:element name="parameter">
         <xs:complexType>
@@ -982,6 +992,16 @@
             <xs:annotation><xs:documentation>Deprecated. Use the on-event-update-area element
                 instead.</xs:documentation></xs:annotation>
         </xs:attribute>
+        <xs:attribute name="request-confirmation" default="false">
+            <xs:annotation><xs:documentation>If true then the user is presented with a dialog box, if confirmation-message is empty, use default</xs:documentation></xs:annotation>
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute name="confirmation-message" type="xs:string"><xs:annotation><xs:documentation>The message displayed in confirmation box</xs:documentation></xs:annotation></xs:attribute>
     </xs:attributeGroup>
     <xs:element name="text" substitutionGroup="AllFields">
         <xs:complexType>

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java Wed Sep 16 12:16:03 2009
@@ -119,14 +119,13 @@
         writer.append(buffer.toString());
         writer.append(location);
     }
-
     public static void makeHyperlinkByType(Appendable writer, String linkType, String linkStyle, String targetType, String target,
-            List<WidgetWorker.Parameter> parameterList, String description, String targetWindow, ModelFormField modelFormField,
+            List<WidgetWorker.Parameter> parameterList, String description, String targetWindow, String confirmation, ModelFormField modelFormField,
             HttpServletRequest request, HttpServletResponse response, Map<String, Object> context) throws IOException {
         String realLinkType = WidgetWorker.determineAutoLinkType(linkType, target, targetType, request);
         if ("hidden-form".equals(realLinkType)) {
             if (modelFormField != null && "multi".equals(modelFormField.getModelForm().getType())) {
-                WidgetWorker.makeHiddenFormLinkAnchor(writer, linkStyle, description, modelFormField, request, response, context);
+                WidgetWorker.makeHiddenFormLinkAnchor(writer, linkStyle, description, confirmation, modelFormField, request, response, context);
 
                 // this is a bit trickier, since we can't do a nested form we'll have to put the link to submit the form in place, but put the actual form def elsewhere, ie after the big form is closed
                 Map<String, Object> wholeFormContext = UtilGenerics.checkMap(context.get("wholeFormContext"));
@@ -138,16 +137,15 @@
                 WidgetWorker.makeHiddenFormLinkForm(postMultiFormWriter, target, targetType, targetWindow, parameterList, modelFormField, request, response, context);
             } else {
                 WidgetWorker.makeHiddenFormLinkForm(writer, target, targetType, targetWindow, parameterList, modelFormField, request, response, context);
-                WidgetWorker.makeHiddenFormLinkAnchor(writer, linkStyle, description, modelFormField, request, response, context);
+                WidgetWorker.makeHiddenFormLinkAnchor(writer, linkStyle, description, confirmation, modelFormField, request, response, context);
             }
         } else {
-            WidgetWorker.makeHyperlinkString(writer, linkStyle, targetType, target, parameterList, description, modelFormField, request, response, context, targetWindow);
+            WidgetWorker.makeHyperlinkString(writer, linkStyle, targetType, target, parameterList, description, confirmation, modelFormField, request, response, context, targetWindow);
         }
 
     }
-
     public static void makeHyperlinkString(Appendable writer, String linkStyle, String targetType, String target, List<WidgetWorker.Parameter> parameterList,
-            String description, ModelFormField modelFormField, HttpServletRequest request, HttpServletResponse response, Map<String, Object> context, String targetWindow)
+            String description, String confirmation, ModelFormField modelFormField, HttpServletRequest request, HttpServletResponse response, Map<String, Object> context, String targetWindow)
             throws IOException {
         if (UtilValidate.isNotEmpty(description) || UtilValidate.isNotEmpty(request.getAttribute("image"))) {
             writer.append("<a");
@@ -177,7 +175,11 @@
                 writer.append(modelFormField.getAction(context));
                 writer.append('"');
             }
-
+            if (UtilValidate.isNotEmpty(confirmation)){
+                writer.append(" onClick=\"return confirm('");
+                writer.append(confirmation);
+                writer.append("')\"");
+            }
             writer.append('>');
 
             if (UtilValidate.isNotEmpty(request.getAttribute("image"))) {
@@ -190,8 +192,8 @@
             writer.append("</a>");
         }
     }
-
-    public static void makeHiddenFormLinkAnchor(Appendable writer, String linkStyle, String description, ModelFormField modelFormField, HttpServletRequest request, HttpServletResponse response, Map<String, Object> context) throws IOException {
+    
+    public static void makeHiddenFormLinkAnchor(Appendable writer, String linkStyle, String description, String confirmation, ModelFormField modelFormField, HttpServletRequest request, HttpServletResponse response, Map<String, Object> context) throws IOException {
         if (UtilValidate.isNotEmpty(description) || UtilValidate.isNotEmpty(request.getAttribute("image"))) {
             writer.append("<a");
 
@@ -212,6 +214,12 @@
                 writer.append(modelFormField.getAction(context));
                 writer.append('"');
             }
+            
+            if (UtilValidate.isNotEmpty(confirmation)){
+                writer.append(" onClick=\"return confirm('");
+                writer.append(confirmation);
+                writer.append("')\"");
+            }
 
             writer.append('>');
 

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java Wed Sep 16 12:16:03 2009
@@ -320,7 +320,7 @@
         ModelFormField modelFormField = hyperlinkField.getModelFormField();
 
         makeHyperlinkByType(writer, hyperlinkField.getLinkType(), modelFormField.getWidgetStyle(), hyperlinkField.getTargetType(), hyperlinkField.getTarget(context),
-                hyperlinkField.getParameterList(), hyperlinkField.getDescription(context), hyperlinkField.getTargetWindow(context), modelFormField,
+                hyperlinkField.getParameterList(), hyperlinkField.getDescription(context), hyperlinkField.getTargetWindow(context), hyperlinkField.getConfirmation(context), modelFormField,
                 this.request, this.response, context);
 
         this.appendTooltip(writer, context, modelFormField);
@@ -996,6 +996,7 @@
         String buttonType =  submitField.getButtonType();
         String formName = modelForm.getCurrentFormName(context);
         String imgSrc = submitField.getImageLocation();
+        String confirmation = submitField.getConfirmation(context);
         String className = "";
         String alert = "false";
         if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) {
@@ -1050,6 +1051,8 @@
         if (ajaxEnabled) {
             sr.append(formId);
         }
+        sr.append("\" confirmation =\"");
+        sr.append(confirmation );
         sr.append("\" ajaxUrl=\"");
         if (ajaxEnabled) {
             sr.append(ajaxUrl);
@@ -2478,8 +2481,8 @@
                 targetType="plain";
             }
             StringWriter sr = new StringWriter();
-            WidgetWorker.makeHyperlinkString(sr, modelFormField.getHeaderLinkStyle(), targetType, targetBuffer.toString(), null, titleText, modelFormField, this.request, this.response, null, null);
-            String title = sr.toString().replace("\"", "\'");
+            WidgetWorker.makeHyperlinkString(sr, modelFormField.getHeaderLinkStyle(), targetType, targetBuffer.toString(), null, titleText, null, modelFormField, this.request, this.response, null, null);
+            String title = sr.toString().replace("\"", "\'");            
             sr = new StringWriter();
             sr.append("<@renderHyperlinkTitle ");
             sr.append(" name=\"");
@@ -2652,7 +2655,7 @@
         if (subHyperlink.shouldUse(context)) {
             writer.append(' ');
             WidgetWorker.makeHyperlinkByType(writer, subHyperlink.getLinkType(), subHyperlink.getLinkStyle(), subHyperlink.getTargetType(), subHyperlink.getTarget(context),
-                    subHyperlink.getParameterList(), subHyperlink.getDescription(context), subHyperlink.getTargetWindow(context), subHyperlink.getModelFormField(),
+                    subHyperlink.getParameterList(), subHyperlink.getDescription(context), subHyperlink.getTargetWindow(context), subHyperlink.getConfirmation(context), subHyperlink.getModelFormField(),
                     this.request, this.response, context);
         }
     }
@@ -2680,12 +2683,12 @@
     }
 
     public void makeHyperlinkByType(Appendable writer, String linkType, String linkStyle, String targetType, String target,
-            List<WidgetWorker.Parameter> parameterList, String description, String targetWindow, ModelFormField modelFormField,
+            List<WidgetWorker.Parameter> parameterList, String description, String targetWindow, String confirmation , ModelFormField modelFormField,
             HttpServletRequest request, HttpServletResponse response, Map<String, Object> context) throws IOException {
         String realLinkType = WidgetWorker.determineAutoLinkType(linkType, target, targetType, request);
         if ("hidden-form".equals(realLinkType)) {
             if (modelFormField != null && "multi".equals(modelFormField.getModelForm().getType())) {
-                WidgetWorker.makeHiddenFormLinkAnchor(writer, linkStyle, description, modelFormField, request, response, context);
+                WidgetWorker.makeHiddenFormLinkAnchor(writer, linkStyle, description, confirmation , modelFormField, request, response, context);
 
                 // this is a bit trickier, since we can't do a nested form we'll have to put the link to submit the form in place, but put the actual form def elsewhere, ie after the big form is closed
                 Map<String, Object> wholeFormContext = UtilGenerics.checkMap(context.get("wholeFormContext"));
@@ -2697,16 +2700,16 @@
                 WidgetWorker.makeHiddenFormLinkForm(postMultiFormWriter, target, targetType, targetWindow, parameterList, modelFormField, request, response, context);
             } else {
                 WidgetWorker.makeHiddenFormLinkForm(writer, target, targetType, targetWindow, parameterList, modelFormField, request, response, context);
-                WidgetWorker.makeHiddenFormLinkAnchor(writer, linkStyle, description, modelFormField, request, response, context);
+                WidgetWorker.makeHiddenFormLinkAnchor(writer, linkStyle, description, confirmation , modelFormField, request, response, context);
             }
         } else {
-            WidgetWorker.makeHyperlinkString(writer, linkStyle, targetType, target, parameterList, description, modelFormField, request, response, context, targetWindow);
+            WidgetWorker.makeHyperlinkString(writer, linkStyle, targetType, target, parameterList, description, confirmation , modelFormField, request, response, context, targetWindow);
         }
 
     }
 
     public void makeHyperlinkString(Appendable writer, String linkStyle, String targetType, String target, List<WidgetWorker.Parameter> parameterList,
-            String description, ModelFormField modelFormField, HttpServletRequest request, HttpServletResponse response, Map<String, Object> context, String targetWindow)
+            String description, String confirmation , ModelFormField modelFormField, HttpServletRequest request, HttpServletResponse response, Map<String, Object> context, String targetWindow)
             throws IOException {
         if (UtilValidate.isNotEmpty(description) || UtilValidate.isNotEmpty(request.getAttribute("image"))) {
             StringBuilder linkUrl = new StringBuilder();
@@ -2745,12 +2748,14 @@
             sr.append(targetWindow);
             sr.append("\" description=\"");
             sr.append(description);
+            sr.append("\" confirmation =\"");
+            sr.append(confirmation );            
             sr.append("\" />");
             executeMacro(sr.toString());
         }
     }
-
-    public void makeHiddenFormLinkAnchor(Appendable writer, String linkStyle, String description, ModelFormField modelFormField, HttpServletRequest request, HttpServletResponse response, Map<String, Object> context) throws IOException {
+    
+    public void makeHiddenFormLinkAnchor(Appendable writer, String linkStyle, String description, String confirmation , ModelFormField modelFormField, HttpServletRequest request, HttpServletResponse response, Map<String, Object> context) throws IOException {
         if (UtilValidate.isNotEmpty(description) || UtilValidate.isNotEmpty(request.getAttribute("image"))) {
             String hiddenFormName = WidgetWorker.makeLinkHiddenFormName(context, modelFormField);
             String event = "";
@@ -2780,6 +2785,8 @@
             sr.append(imgSrc);
             sr.append("\" description=\"");
             sr.append(description);
+            sr.append("\" confirmation =\"");
+            sr.append(confirmation );            
             sr.append("\" />");
             executeMacro(sr.toString());
         }

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java Wed Sep 16 12:16:03 2009
@@ -42,6 +42,7 @@
 import org.ofbiz.base.util.UtilFormatOut;
 import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.collections.FlexibleMapAccessor;
@@ -2236,6 +2237,8 @@
         protected FlexibleStringExpander targetWindowExdr;
         protected List<WidgetWorker.Parameter> parameterList = FastList.newInstance();
 
+        protected boolean requestConfirmation = false;
+        protected FlexibleStringExpander confirmationMsgExdr;
         protected HyperlinkField() {
             super();
         }
@@ -2258,7 +2261,8 @@
             this.targetType = element.getAttribute("target-type");
             this.targetWindowExdr = FlexibleStringExpander.getInstance(element.getAttribute("target-window"));
             this.image = element.getAttribute("image-location");
-
+            this.setRequestConfirmation("true".equals(element.getAttribute("request-confirmation")));
+            this.setConfirmationMsg(element.getAttribute("confirmation-message"));
             List<? extends Element> parameterElementList = UtilXml.childElementList(element, "parameter");
             for (Element parameterElement: parameterElementList) {
                 this.parameterList.add(new WidgetWorker.Parameter(parameterElement));
@@ -2273,7 +2277,28 @@
         public boolean getAlsoHidden() {
             return this.alsoHidden;
         }
+        
+        public boolean getRequestConfirmation() {
+            return this.requestConfirmation;
+        }
 
+        public String getConfirmation(Map<String, Object> context) {
+            String message = getConfirmationMsg(context);
+            if (UtilValidate.isNotEmpty(message)) {
+                return message;
+            }
+            else if (getRequestConfirmation()) {
+                String defaultMessage = UtilProperties.getPropertyValue("general", "default.confirmation.message", "${uiLabelMap.CommonConfirm}");
+                setConfirmationMsg(defaultMessage);
+                return getConfirmationMsg(context);
+            }
+            return "";
+        }      
+        
+        public String getConfirmationMsg(Map<String, Object> context) {
+            return this.confirmationMsgExdr.expandString(context);
+        }      
+        
         public String getLinkType() {
             return this.linkType;
         }
@@ -2334,6 +2359,14 @@
         public void setTarget(String string) {
             this.target = FlexibleStringExpander.getInstance(string);
         }
+      
+        public void setRequestConfirmation(boolean val) {
+            this.requestConfirmation = val;
+        }
+        
+        public void setConfirmationMsg(String val) {
+            this.confirmationMsgExdr = FlexibleStringExpander.getInstance(val);
+        }
     }
 
     public static class SubHyperlink {
@@ -2345,6 +2378,8 @@
         protected FlexibleStringExpander description;
         protected FlexibleStringExpander targetWindowExdr;
         protected List<WidgetWorker.Parameter> parameterList = FastList.newInstance();
+        protected boolean requestConfirmation = false;
+        protected FlexibleStringExpander confirmationMsgExdr;
         protected ModelFormField modelFormField;
 
         public SubHyperlink(Element element, ModelFormField modelFormField) {
@@ -2355,15 +2390,16 @@
             this.linkStyle = element.getAttribute("link-style");
             this.targetType = element.getAttribute("target-type");
             this.targetWindowExdr = FlexibleStringExpander.getInstance(element.getAttribute("target-window"));
-
             List<? extends Element> parameterElementList = UtilXml.childElementList(element, "parameter");
             for (Element parameterElement: parameterElementList) {
                 this.parameterList.add(new WidgetWorker.Parameter(parameterElement));
             }
+            setRequestConfirmation("true".equals(element.getAttribute("request-confirmation")));
+            setConfirmationMsg(element.getAttribute("confirmation-message"));
 
             this.modelFormField = modelFormField;
         }
-
+        
         public String getLinkStyle() {
             return this.linkStyle;
         }
@@ -2412,7 +2448,28 @@
                 return "";
             }
         }
-
+        
+        public boolean getRequestConfirmation() {
+            return this.requestConfirmation;
+        }
+        
+        public String getConfirmationMsg(Map<String, Object> context) {
+            return this.confirmationMsgExdr.expandString(context);
+        }
+        
+        public String getConfirmation(Map<String, Object> context) {
+            String message = getConfirmationMsg(context);
+            if (UtilValidate.isNotEmpty(message)) {
+                return message;
+            }
+            else if (getRequestConfirmation()) {
+                String defaultMessage = UtilProperties.getPropertyValue("general", "default.confirmation.message", "${uiLabelMap.CommonConfirm}");
+                setConfirmationMsg(defaultMessage);
+                return getConfirmationMsg(context);
+            }
+            return "";
+        }      
+        
         public ModelFormField getModelFormField() {
             return this.modelFormField;
         }
@@ -2480,6 +2537,14 @@
          */
         public void setUseWhen(String string) {
             this.useWhen = FlexibleStringExpander.getInstance(string);
+        }
+        
+        public void setRequestConfirmation(boolean val) {
+            this.requestConfirmation = val;
+        }
+        
+        public void setConfirmationMsg(String val) {
+            this.confirmationMsgExdr = FlexibleStringExpander.getInstance(val);
         }
     }
 
@@ -3112,6 +3177,8 @@
         protected String buttonType;
         protected String imageLocation;
         protected FlexibleStringExpander backgroundSubmitRefreshTargetExdr;
+        protected boolean requestConfirmation = false;
+        protected FlexibleStringExpander confirmationMsgExdr;
 
         protected SubmitField() {
             super();
@@ -3130,7 +3197,9 @@
             this.buttonType = element.getAttribute("button-type");
             this.imageLocation = element.getAttribute("image-location");
             this.backgroundSubmitRefreshTargetExdr = FlexibleStringExpander.getInstance(element.getAttribute("background-submit-refresh-target"));
-        }
+            setRequestConfirmation("true".equals(element.getAttribute("request-confirmation")));
+            setConfirmationMsg(element.getAttribute("confirmation-message"));
+        }        
 
         @Override
         public void renderFieldString(Appendable writer, Map<String, Object> context, FormStringRenderer formStringRenderer) throws IOException {
@@ -3143,8 +3212,29 @@
 
         public String getImageLocation() {
             return imageLocation;
-        }
+        }        
 
+        public boolean getRequestConfirmation() {
+            return this.requestConfirmation;
+        }
+        
+        public String getConfirmationMsg(Map<String, Object> context) {
+            return this.confirmationMsgExdr.expandString(context);
+        }
+        
+        public String getConfirmation(Map<String, Object> context) {
+            String message = getConfirmationMsg(context);
+            if (UtilValidate.isNotEmpty(message)) {
+                return message;
+            }
+            else if (getRequestConfirmation()) {
+                String defaultMessage = UtilProperties.getPropertyValue("general", "default.confirmation.message", "${uiLabelMap.CommonConfirm}");
+                setConfirmationMsg(defaultMessage);
+                return getConfirmationMsg(context);
+            }
+            return "";
+        }      
+        
         /**
          * @param string
          */
@@ -3161,7 +3251,16 @@
 
         public String getBackgroundSubmitRefreshTarget(Map<String, Object> context) {
             return this.backgroundSubmitRefreshTargetExdr.expandString(context);
+        }        
+        
+        public void setRequestConfirmation(boolean val) {
+            this.requestConfirmation = val;
+        }
+        
+        public void setConfirmationMsg(String val) {
+            this.confirmationMsgExdr = FlexibleStringExpander.getInstance(val);
         }
+
     }
 
     public static class ResetField extends FieldInfo {

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java Wed Sep 16 12:16:03 2009
@@ -331,11 +331,9 @@
     public void renderHyperlinkField(Appendable writer, Map<String, Object> context, HyperlinkField hyperlinkField) throws IOException {
         this.request.setAttribute("image", hyperlinkField.getImage());
         ModelFormField modelFormField = hyperlinkField.getModelFormField();
-
         WidgetWorker.makeHyperlinkByType(writer, hyperlinkField.getLinkType(), modelFormField.getWidgetStyle(), hyperlinkField.getTargetType(), hyperlinkField.getTarget(context),
-                hyperlinkField.getParameterList(), hyperlinkField.getDescription(context), hyperlinkField.getTargetWindow(context), modelFormField,
-                this.request, this.response, context);
-
+                hyperlinkField.getParameterList(), hyperlinkField.getDescription(context), hyperlinkField.getTargetWindow(context), hyperlinkField.getConfirmation(context), modelFormField,
+                this.request, this.response, context);              
         this.appendTooltip(writer, context, modelFormField);
         //appendWhitespace(writer);
     }
@@ -343,12 +341,12 @@
     public void makeHyperlinkString(Appendable writer, ModelFormField.SubHyperlink subHyperlink, Map<String, Object> context) throws IOException {
         if (subHyperlink == null) {
             return;
-        }
+        }        
         if (subHyperlink.shouldUse(context)) {
             writer.append(' ');
             WidgetWorker.makeHyperlinkByType(writer, subHyperlink.getLinkType(), subHyperlink.getLinkStyle(), subHyperlink.getTargetType(), subHyperlink.getTarget(context),
-                    subHyperlink.getParameterList(), subHyperlink.getDescription(context), subHyperlink.getTargetWindow(context), subHyperlink.getModelFormField(),
-                    this.request, this.response, context);
+                    subHyperlink.getParameterList(), subHyperlink.getDescription(context), subHyperlink.getTargetWindow(context), subHyperlink.getConfirmation(context), subHyperlink.getModelFormField(),
+                    this.request, this.response, context);            
         }
     }
 
@@ -1041,12 +1039,18 @@
         ModelForm modelForm = modelFormField.getModelForm();
         String event = null;
         String action = null;
+        String confirmation =  submitField.getConfirmation(context);
 
         if ("text-link".equals(submitField.getButtonType())) {
             writer.append("<a");
 
             appendClassNames(writer, context, modelFormField);
-
+            if (UtilValidate.isNotEmpty(confirmation)) {
+                writer.append("onClick=\" return confirm('");
+                writer.append(confirmation);
+                writer.append("); \" ");
+            }
+            
             writer.append(" href=\"javascript:document.");
             writer.append(modelForm.getCurrentFormName(context));
             writer.append(".submit()\">");
@@ -1083,6 +1087,12 @@
                 writer.append(action);
                 writer.append('"');
             }
+            
+            if (UtilValidate.isNotEmpty(confirmation)) {
+                writer.append("onClick=\" return confirm('");
+                writer.append(confirmation);
+                writer.append("); \" ");
+            }
 
             writer.append("/>");
         } else {
@@ -1136,6 +1146,11 @@
 
             if (ajaxEnabled) {
                 writer.append(" onclick=\"");
+                if (UtilValidate.isNotEmpty(confirmation)) {
+                    writer.append("if  (confirm('");
+                    writer.append(confirmation);
+                    writer.append(");) ");
+                }
                 writer.append("ajaxSubmitFormUpdateAreas('");
                 writer.append(formId);
                 writer.append("', '").append(createAjaxParamsFromUpdateAreas(updateAreas, null, context));
@@ -2855,7 +2870,7 @@
             if (UtilValidate.isNotEmpty(targetBuffer.toString()) && targetBuffer.toString().toLowerCase().startsWith("javascript:")) {
                 targetType="plain";
             }
-            WidgetWorker.makeHyperlinkString(writer, modelFormField.getHeaderLinkStyle(), targetType, targetBuffer.toString(), null, titleText, modelFormField, this.request, this.response, null, null);
+            WidgetWorker.makeHyperlinkString(writer, modelFormField.getHeaderLinkStyle(), targetType, targetBuffer.toString(), null, titleText, null, modelFormField, this.request, this.response, null, null);
         } else if (modelFormField.isSortField()) {
             renderSortField (writer, context, modelFormField, titleText);
         } else if (modelFormField.isRowSubmit()) {

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java Wed Sep 16 12:16:03 2009
@@ -450,10 +450,11 @@
             }
 
             writer.append(" href=\"");
+            String confirmationMsg = link.getConfirmation(context);
             if ("hidden-form".equals(linkType)) {
-                if (link.getRequestConfirmation()) {
+                if (UtilValidate.isNotEmpty(confirmationMsg)) {
                     writer.append("javascript:confirmActionFormLink('");
-                    writer.append(link.getConfirmationMsg(context));
+                    writer.append(confirmationMsg);
                     writer.append("', '");
                     writer.append(uniqueItemName);
                     writer.append("')");
@@ -463,9 +464,9 @@
                     writer.append(".submit()");
                 }
             } else {
-                if (link.getRequestConfirmation()) {
+                if (UtilValidate.isNotEmpty(confirmationMsg)) {
                     writer.append("javascript:confirmActionLink('");
-                    writer.append(link.getConfirmationMsg(context));
+                    writer.append(confirmationMsg);
                     writer.append("', '");
                     WidgetWorker.buildHyperlinkUrl(writer, target, link.getUrlMode(), link.getParameterList(), link.getPrefix(context),
                             link.getFullPath(), link.getSecure(), link.getEncode(), request, response, context);

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java Wed Sep 16 12:16:03 2009
@@ -32,6 +32,7 @@
 import org.ofbiz.base.util.StringUtil;
 import org.ofbiz.base.util.UtilFormatOut;
 import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.string.FlexibleStringExpander;
@@ -724,6 +725,19 @@
             return this.parameterList;
         }
         
+        public String getConfirmation(Map<String, Object> context) {
+            String message = getConfirmationMsg(context);
+            if (UtilValidate.isNotEmpty(message)) {
+                return message;
+            }
+            else if (getRequestConfirmation()) {
+                String defaultMessage = UtilProperties.getPropertyValue("general", "default.confirmation.message", "${uiLabelMap.CommonConfirm}");
+                setConfirmationMsg(defaultMessage);
+                return getConfirmationMsg(context);
+            }
+            return "";
+        }
+        
         public boolean getRequestConfirmation() {
             return this.requestConfirmation;
         }

Modified: ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl?rev=815734&r1=815733&r2=815734&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl (original)
+++ ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl Wed Sep 16 12:16:03 2009
@@ -170,13 +170,13 @@
 </#list>
 </#macro>
 
-<#macro renderSubmitField buttonType className alert formName title name event action imgSrc containerId ajaxUrl>
+<#macro renderSubmitField buttonType className alert formName title name event action imgSrc confirmation containerId ajaxUrl>
 <#if buttonType=="text-link">
- <a <@renderClass className alert /> href="javascript:document.${formName}.submit()"><#if title?has_content>${title}</#if> </a>
+ <a <@renderClass className alert /> href="javascript:document.${formName}.submit()" <#if confirmation?has_content>onclick="return confirm('${confirmation}');"</#if>><#if title?has_content>${title}</#if> </a>
 <#elseif buttonType=="image">
- <input type="image" src="${imgSrc}" <@renderClass className alert /><#if name?has_content> name="${name}"</#if><#if title?has_content> alt="${title}"</#if><#if event?has_content> ${event}="${action}"</#if> />
+ <input type="image" src="${imgSrc}" <@renderClass className alert /><#if name?has_content> name="${name}"</#if><#if title?has_content> alt="${title}"</#if><#if event?has_content> ${event}="${action}"</#if> <#if confirmation?has_content>onclick="return confirm('${confirmation}');"</#if>/>
 <#else>
-<input type="<#if containerId?has_content>button<#else>submit</#if>" <@renderClass className alert /><#if name?exists> name="${name}"</#if><#if title?has_content> value="${title}"</#if><#if event?has_content> ${event}="${action}"</#if><#if containerId?has_content> onclick="ajaxSubmitFormUpdateAreas('${containerId}', '${ajaxUrl}')"</#if>/></#if>
+<input type="<#if containerId?has_content>button<#else>submit</#if>" <@renderClass className alert /><#if name?exists> name="${name}"</#if><#if title?has_content> value="${title}"</#if><#if event?has_content> ${event}="${action}"</#if><#if containerId?has_content> onclick="<#if confirmation?has_content>if (confirm('${confirmation}')) </#if>ajaxSubmitFormUpdateAreas('${containerId}', '${ajaxUrl}')"<#else><#if confirmation?has_content> onclick="return confirm('${confirmation}');"</#if></#if>/></#if>
 </#macro>
 
 <#macro renderResetField className alert name title>
@@ -469,5 +469,5 @@
 <#if requiredField=="true"><#if requiredStyle?has_content>*</#if></#if>
 </#macro>
 <#macro makeHiddenFormLinkForm actionUrl name parameters targetWindow><form method="post" action="${actionUrl}" <#if targetWindow?has_content>target="${targetWindow}"</#if> onsubmit="javascript:submitFormDisableSubmits(this)" name="${name}"><#list parameters as parameter><input name="${parameter.name}" value="${parameter.value}" type="hidden"/></#list></form></#macro>
-<#macro makeHiddenFormLinkAnchor linkStyle hiddenFormName event action imgSrc description><a <#if linkStyle?has_content>class="${linkStyle}"</#if> href="javascript:document.${hiddenFormName}.submit()"<#if action?has_content && event?has_content> ${event}="${action}"</#if>><#if imgSrc?has_content><img src="${imgSrc}"/></#if>${description}</a></#macro>
-<#macro makeHyperlinkString linkStyle hiddenFormName event action imgSrc linkUrl targetWindow description><a <#if linkStyle?has_content>class="${linkStyle}"</#if> href="${linkUrl}"<#if targetWindow?has_content> target="${targetWindow}"</#if><#if action?has_content && event?has_content> ${event}="${action}"</#if>><#if imgSrc?has_content><img src="${imgSrc}"/></#if>${description}</a></#macro>
+<#macro makeHiddenFormLinkAnchor linkStyle hiddenFormName event action imgSrc description confirmation><a <#if linkStyle?has_content>class="${linkStyle}"</#if> href="javascript:document.${hiddenFormName}.submit()"<#if action?has_content && event?has_content> ${event}="${action}"</#if><#if confirmation?has_content> onclick="return confirm('${confirmation}')"</#if>><#if imgSrc?has_content><img src="${imgSrc}"/></#if>${description}</a></#macro>
+<#macro makeHyperlinkString linkStyle hiddenFormName event action imgSrc linkUrl targetWindow description confirmation><a <#if linkStyle?has_content>class="${linkStyle}"</#if> href="${linkUrl}"<#if targetWindow?has_content> target="${targetWindow}"</#if><#if action?has_content && event?has_content> ${event}="${action}"</#if><#if confirmation?has_content> onclick="return confirm('${confirmation}')"</#if>><#if imgSrc?has_content><img src="${imgSrc}"/></#if>${description}</a></#macro>