Author: jaz
Date: Sat Oct 6 15:25:35 2007
New Revision: 582539
URL: http://svn.apache.org/viewvc?rev=582539&view=rev
Log:
implemented feature to allow setting default values for survey questions;
response can be generated by setting v
alues (via a map) in the wrapper before rendering
implemented GEO and ENUMERATION types for Survey Questions; now ANY Geo Group
or Enumeration Type can be listed
as survey option lists
Modified:
ofbiz/trunk/applications/content/data/ContentTypeData.xml
ofbiz/trunk/applications/content/entitydef/entitymodel.xml
ofbiz/trunk/applications/content/script/org/ofbiz/content/survey/SurveyServices.xml
ofbiz/trunk/applications/content/src/org/ofbiz/content/survey/SurveyWrapper.java
ofbiz/trunk/applications/content/template/survey/genericsurvey.ftl
ofbiz/trunk/applications/product/src/org/ofbiz/product/store/ProductStoreSurveyWrapper.java
Modified: ofbiz/trunk/applications/content/data/ContentTypeData.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/data/ContentTypeData.xml?rev=582539&r1=582538&r2=582539&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/data/ContentTypeData.xml (original)
+++ ofbiz/trunk/applications/content/data/ContentTypeData.xml Sat Oct 6
15:25:35 2007
@@ -251,9 +251,11 @@
<SurveyQuestionType surveyQuestionTypeId="CONTENT" description="Content
Record"/>
<SurveyQuestionType surveyQuestionTypeId="COUNTRY" description="Country"/>
<SurveyQuestionType surveyQuestionTypeId="CREDIT_CARD" description="Credit
Card Number"/>
+ <SurveyQuestionType surveyQuestionTypeId="GEO" description="Geo List"/>
<SurveyQuestionType surveyQuestionTypeId="GIFT_CARD" description="Gift
Card Number"/>
<SurveyQuestionType surveyQuestionTypeId="DATE" description="Date String
(mm/dd/yyyy)"/>
<SurveyQuestionType surveyQuestionTypeId="EMAIL" description="Email
Address"/>
+ <SurveyQuestionType surveyQuestionTypeId="ENUMERATION"
description="Enumeration"/>
<SurveyQuestionType surveyQuestionTypeId="NUMBER_CURRENCY"
description="Numeric (Currency)"/>
<SurveyQuestionType surveyQuestionTypeId="NUMBER_FLOAT"
description="Numeric (Float)"/>
<SurveyQuestionType surveyQuestionTypeId="NUMBER_LONG"
description="Numeric (Long)"/>
Modified: ofbiz/trunk/applications/content/entitydef/entitymodel.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/entitydef/entitymodel.xml?rev=582539&r1=582538&r2=582539&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/applications/content/entitydef/entitymodel.xml Sat Oct 6
15:25:35 2007
@@ -1301,6 +1301,9 @@
<field name="description" type="description"/>
<field name="question" type="very-long"/>
<field name="hint" type="very-long"/>
+ <field name="enumTypeId" type="id"></field>
+ <field name="geoId" type="id"></field>
+ <field name="formatString" type="value"></field>
<prim-key field="surveyQuestionId"/>
<relation type="one" fk-name="SRVYQST_SRVYQTP"
rel-entity-name="SurveyQuestionType">
<key-map field-name="surveyQuestionTypeId"/>
@@ -1308,6 +1311,13 @@
<relation type="one" fk-name="SRVYQST_SRVYQTCT"
rel-entity-name="SurveyQuestionCategory">
<key-map field-name="surveyQuestionCategoryId"/>
</relation>
+ <relation type="one" fk-name="SRVYQST_GEO" rel-entity-name="Geo">
+ <key-map field-name="geoId"/>
+ </relation>
+ <relation type="many" fk-name="SRVYQST_ENUM"
rel-entity-name="Enumeration">
+ <key-map field-name="enumTypeId"/>
+ </relation>
+
</entity>
<view-entity entity-name="SurveyQuestionAndAppl"
package-name="org.ofbiz.content.survey"
@@ -1331,19 +1341,25 @@
<relation type="many" rel-entity-name="SurveyQuestionOption">
<key-map field-name="surveyQuestionId"/>
</relation>
- <relation type="one-nofk" rel-entity-name="SurveyPage">
- <key-map field-name="surveyId"/>
- <key-map field-name="surveyPageSeqId"/>
- </relation>
- <relation type="one-nofk" rel-entity-name="SurveyMultiResp">
- <key-map field-name="surveyId"/>
- <key-map field-name="surveyMultiRespId"/>
- </relation>
- <relation type="one-nofk" rel-entity-name="SurveyMultiRespColumn">
- <key-map field-name="surveyId"/>
- <key-map field-name="surveyMultiRespId"/>
- <key-map field-name="surveyMultiRespColId"/>
- </relation>
+ <relation type="many" rel-entity-name="Enumeration">
+ <key-map field-name="enumTypeId"/>
+ </relation>
+ <relation type="one-nofk" rel-entity-name="Geo">
+ <key-map field-name="geoId"/>
+ </relation>
+ <relation type="one-nofk" rel-entity-name="SurveyPage">
+ <key-map field-name="surveyId"/>
+ <key-map field-name="surveyPageSeqId"/>
+ </relation>
+ <relation type="one-nofk" rel-entity-name="SurveyMultiResp">
+ <key-map field-name="surveyId"/>
+ <key-map field-name="surveyMultiRespId"/>
+ </relation>
+ <relation type="one-nofk" rel-entity-name="SurveyMultiRespColumn">
+ <key-map field-name="surveyId"/>
+ <key-map field-name="surveyMultiRespId"/>
+ <key-map field-name="surveyMultiRespColId"/>
+ </relation>
</view-entity>
<entity entity-name="SurveyQuestionAppl"
package-name="org.ofbiz.content.survey"
Modified:
ofbiz/trunk/applications/content/script/org/ofbiz/content/survey/SurveyServices.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/script/org/ofbiz/content/survey/SurveyServices.xml?rev=582539&r1=582538&r2=582539&view=diff
==============================================================================
---
ofbiz/trunk/applications/content/script/org/ofbiz/content/survey/SurveyServices.xml
(original)
+++
ofbiz/trunk/applications/content/script/org/ofbiz/content/survey/SurveyServices.xml
Sat Oct 6 15:25:35 2007
@@ -191,7 +191,31 @@
<check-permission action="_CREATE" permission="CONTENTMGR">
<fail-message message="Security Error: to run createSurveyQuestion
you must have the CONTENTMGR_CREATE or CONTENTMGR_ADMIN permission"/>
</check-permission>
+ <if>
+ <condition>
+
+ <and>
+ <if-compare field-name="surveyQuestionTypeId"
value="ENUMERATION" operator="equals"/>
+ <if-empty field-name="enumTypeId"/>
+ </and>
+ </condition>
+ <then>
+ <add-error><fail-message message="Question type ENUMERATION
requires enumTypeId to be set"/></add-error>
+ </then>
+ </if>
+ <if>
+ <condition>
+ <and>
+ <if-compare field-name="surveyQuestionTypeId" value="GEO"
operator="equals"/>
+ <if-empty field-name="geoId"/>
+ </and>
+ </condition>
+ <then>
+ <add-error><fail-message message="Question type GEO requires
geoId to be set"/></add-error>
+ </then>
+ </if>
<check-errors/>
+
<make-value entity-name="SurveyQuestion" value-name="newEntity"/>
<set-nonpk-fields map-name="parameters" value-name="newEntity"/>
<sequenced-id-to-env sequence-name="SurveyQuestion"
env-name="newEntity.surveyQuestionId"/>
@@ -202,7 +226,30 @@
<check-permission action="_UPDATE" permission="CONTENTMGR">
<fail-message message="Security Error: to run updateSurveyQuestion
you must have the CONTENTMGR_UPDATE or CONTENTMGR_ADMIN permission"/>
</check-permission>
+ <if>
+ <condition>
+ <and>
+ <if-compare field-name="parameters.surveyQuestionTypeId"
value="ENUMERATION" operator="equals"/>
+ <if-empty field-name="parameters.enumTypeId"/>
+ </and>
+ </condition>
+ <then>
+ <add-error><fail-message message="Question type ENUMERATION
requires enumTypeId to be set"/></add-error>
+ </then>
+ </if>
+ <if>
+ <condition>
+ <and>
+ <if-compare field-name="parameters.surveyQuestionTypeId"
value="GEO" operator="equals"/>
+ <if-empty field-name="parameters.geoId"/>
+ </and>
+ </condition>
+ <then>
+ <add-error><fail-message message="Question type GEO requires
geoId to be set"/></add-error>
+ </then>
+ </if>
<check-errors/>
+
<make-value entity-name="SurveyQuestion" value-name="lookupKeyValue"/>
<set-pk-fields map-name="parameters" value-name="lookupKeyValue"/>
<find-by-primary-key map-name="lookupKeyValue"
value-name="lookedUpValue"/>
@@ -695,6 +742,12 @@
</if-compare>
<if-compare
field-name="surveyQuestionAndAppl.surveyQuestionTypeId" operator="equals"
value="OPTION">
<set from-field="answers.${currentFieldName}"
field="responseAnswer.surveyOptionSeqId"/>
+ </if-compare>
+ <if-compare
field-name="surveyQuestionAndAppl.surveyQuestionTypeId" operator="equals"
value="GEO">
+ <set field="responseAnswer.textResponse"
from-field="answers.${currentFieldName}"/>
+ </if-compare>
+ <if-compare
field-name="surveyQuestionAndAppl.surveyQuestionTypeId" operator="equals"
value="ENUMERATION">
+ <set field="responseAnswer.textResponse"
from-field="answers.${currentFieldName}"/>
</if-compare>
<if-compare
field-name="surveyQuestionAndAppl.surveyQuestionTypeId" operator="equals"
value="CONTENT">
<!-- <log level="always" message="Found CONTENT type
question"/> -->
Modified:
ofbiz/trunk/applications/content/src/org/ofbiz/content/survey/SurveyWrapper.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/survey/SurveyWrapper.java?rev=582539&r1=582538&r2=582539&view=diff
==============================================================================
---
ofbiz/trunk/applications/content/src/org/ofbiz/content/survey/SurveyWrapper.java
(original)
+++
ofbiz/trunk/applications/content/src/org/ofbiz/content/survey/SurveyWrapper.java
Sat Oct 6 15:25:35 2007
@@ -68,21 +68,25 @@
protected String partyId = null;
protected String surveyId = null;
protected Map passThru = null;
+ protected Map defaultValues = null;
protected boolean edit = false;
protected SurveyWrapper() {}
- public SurveyWrapper(GenericDelegator delegator, String responseId, String
partyId, String surveyId, Map passThru) {
+ public SurveyWrapper(GenericDelegator delegator, String responseId, String
partyId, String surveyId, Map passThru, Map defaultValues) {
this.delegator = delegator;
this.responseId = responseId;
this.partyId = partyId;
this.surveyId = surveyId;
- if (passThru != null) {
- this.passThru = new HashMap(passThru);
- }
+ this.setPassThru(passThru);
+ this.setDefaultValues(defaultValues);
this.checkParameters();
}
+ public SurveyWrapper(GenericDelegator delegator, String responseId,
String partyId, String surveyId, Map passThru) {
+ this(delegator, responseId, partyId, surveyId, passThru, null);
+ }
+
public SurveyWrapper(GenericDelegator delegator, String surveyId) {
this(delegator, null, null, surveyId, null);
}
@@ -94,6 +98,28 @@
}
/**
+ * Sets the pass-thru values (hidden form fields)
+ * @param passThru
+ */
+ public void setPassThru(Map passThru) {
+ if (passThru != null) {
+ this.passThru = FastMap.newInstance();
+ this.passThru.putAll(passThru);
+ }
+ }
+
+ /**
+ * Sets the default values
+ * @param defaultValues
+ */
+ public void setDefaultValues(Map defaultValues) {
+ if (defaultValues != null) {
+ this.defaultValues = FastMap.newInstance();
+ this.defaultValues.putAll(defaultValues);
+ }
+ }
+
+ /**
* Renders the Survey
* @return Writer object from the parsed Freemarker Template
* @throws SurveyWrapperException
@@ -149,6 +175,7 @@
templateContext.put("surveyResponseId", responseId);
templateContext.put("sequenceSort", UtilMisc.toList("sequenceNum"));
templateContext.put("additionalFields", passThru);
+ templateContext.put("defaultValues", defaultValues);
templateContext.put("delegator", this.delegator);
Template template = this.getTemplate(templateUrl);
Modified: ofbiz/trunk/applications/content/template/survey/genericsurvey.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/template/survey/genericsurvey.ftl?rev=582539&r1=582538&r2=582539&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/template/survey/genericsurvey.ftl
(original)
+++ ofbiz/trunk/applications/content/template/survey/genericsurvey.ftl Sat Oct
6 15:25:35 2007
@@ -45,27 +45,27 @@
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "TEXTAREA"/>
<textarea class="textAreaBox" cols="40" rows="5"
name="${questionFieldName}">${(answer.textResponse)?if_exists}</textarea>
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "TEXT_SHORT"/>
- <input type="text" size="15" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?if_exists}">
+ <input type="text" size="15" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "TEXT_LONG"/>
- <input type="text" size="35" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?if_exists}">
+ <input type="text" size="35" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "EMAIL"/>
- <input type="text" size="30" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?if_exists}">
+ <input type="text" size="30" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "URL"/>
- <input type="text" size="40" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?if_exists}">
+ <input type="text" size="40" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "DATE"/>
- <input type="text" size="12" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?if_exists}">
+ <input type="text" size="12" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "CREDIT_CARD"/>
- <input type="text" size="20" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?if_exists}">
+ <input type="text" size="20" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "GIFT_CARD"/>
- <input type="text" size="20" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?if_exists}">
+ <input type="text" size="20" class="inputBox" name="${questionFieldName}"
value="${(answer.textResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "NUMBER_CURRENCY"/>
- <input type="text" size="6" class="inputBox" name="${questionFieldName}"
value="${(answer.currencyResponse)?if_exists}">
+ <input type="text" size="6" class="inputBox" name="${questionFieldName}"
value="${(answer.currencyResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "NUMBER_FLOAT"/>
- <input type="text" size="6" class="inputBox" name="${questionFieldName}"
value="${(answer.floatResponse)?if_exists}">
+ <input type="text" size="6" class="inputBox" name="${questionFieldName}"
value="${(answer.floatResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "NUMBER_LONG"/>
- <input type="text" size="6" class="inputBox" name="${questionFieldName}"
value="${(answer.numericResponse?string("#"))?if_exists}">
+ <input type="text" size="6" class="inputBox" name="${questionFieldName}"
value="${(answer.numericResponse?default(defValue)?string("#"))?if_exists}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "PASSWORD"/>
- <input type="password" size="30" class="textBox"
name="${questionFieldName}" value="${(answer.textResponse)?if_exists}">
+ <input type="password" size="30" class="textBox"
name="${questionFieldName}"
value="${(answer.textResponse)?default(defValue?if_exists)}">
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "CONTENT"/>
<#if (answer.contentId)?has_content>
<#assign content = answer.getRelatedOne("Content")>
@@ -87,6 +87,43 @@
<option value="">Nothing to choose</option>
</#if>
</select>
+ <#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "ENUMERATION"/>
+ <select class="selectBox" name="${questionFieldName}">
+ <#assign formatString =
surveyQuestionAndAppl.get("formatString")?if_exists/>
+ <#assign enums = surveyQuestionAndAppl.getRelated("Enumeration")/>
+ <#list enums as enum>
+ <#if (((answer.textResponse)?has_content && answer.textResponse ==
enum.enumId) || (defValue == enum.enumId))>
+ <#assign selected = 'selected'/>
+ <#else>
+ <#assign selected = ''/>
+ </#if>
+ <#if (formatString?has_content)>
+ <#assign description =
Static["org.ofbiz.base.util.string.FlexibleStringExpander"].expandString(formatString,
enum)/>
+ <#else>
+ <#assign description = geo.getString("description")/>
+ </#if>
+ <option value='${enum.enumId}' ${selected}>${description}</option>
+ </#list>
+ </select>
+ <#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "GEO"/>
+ <select class="selectBox" name="${questionFieldName}">
+ <#assign formatString =
surveyQuestionAndAppl.get("formatString")?if_exists/>
+ <#assign parentGeoId = surveyQuestionAndAppl.get("geoId")?if_exists/>
+ <#assign geos =
Static["org.ofbiz.common.geo.GeoWorker"].expandGeoGroup(parentGeoId, delegator)>
+ <#list geos as geo>
+ <#if (((answer.textResponse)?has_content && answer.textResponse ==
geo.geoId) || (defValue == geo.geoId))>
+ <#assign selected = 'selected'/>
+ <#else>
+ <#assign selected = ''/>
+ </#if>
+ <#if (formatString?has_content)>
+ <#assign description =
Static["org.ofbiz.base.util.string.FlexibleStringExpander"].expandString(formatString,
geo)/>
+ <#else>
+ <#assign description = geo.getString("geoName")/>
+ </#if>
+ <option value='${geo.geoId}' ${selected}>${description}</option>
+ </#list>
+ </select>
<#elseif surveyQuestionAndAppl.surveyQuestionTypeId == "STATE_PROVINCE"/>
<select class="selectBox" name="${questionFieldName}">
<#assign states =
Static["org.ofbiz.common.CommonWorkers"].getStateList(delegator)>
@@ -222,9 +259,15 @@
<#assign align = "right"/>
</#if>
</#if>
+
<#-- get an answer from the answerMap -->
<#if surveyAnswers?has_content>
<#assign answer =
surveyAnswers.get(surveyQuestionAndAppl.surveyQuestionId)?if_exists/>
+ </#if>
+
+ <#-- get the default value from value map -->
+ <#if defaultValues?has_content>
+ <#assign defValue =
defaultValues.get(surveyQuestionAndAppl.surveyQuestionId)?if_exists/>
</#if>
<tr>
Modified:
ofbiz/trunk/applications/product/src/org/ofbiz/product/store/ProductStoreSurveyWrapper.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/store/ProductStoreSurveyWrapper.java?rev=582539&r1=582538&r2=582539&view=diff
==============================================================================
---
ofbiz/trunk/applications/product/src/org/ofbiz/product/store/ProductStoreSurveyWrapper.java
(original)
+++
ofbiz/trunk/applications/product/src/org/ofbiz/product/store/ProductStoreSurveyWrapper.java
Sat Oct 6 15:25:35 2007
@@ -39,10 +39,9 @@
protected ProductStoreSurveyWrapper() {}
- public ProductStoreSurveyWrapper(GenericValue productStoreSurveyAppl,
String partyId, Map passThru) {
+ public ProductStoreSurveyWrapper(GenericValue productStoreSurveyAppl,
String partyId, Map passThru, Map defaultValues) {
this.productStoreSurveyAppl = productStoreSurveyAppl;
- this.passThru = passThru;
if (this.productStoreSurveyAppl != null) {
this.partyId = partyId;
this.delegator = productStoreSurveyAppl.getDelegator();
@@ -52,7 +51,13 @@
} else {
throw new IllegalArgumentException("Required parameter
productStoreSurveyAppl missing");
}
+ this.setDefaultValues(defaultValues);
+ this.setPassThru(passThru);
this.checkParameters();
+ }
+
+ public ProductStoreSurveyWrapper(GenericValue productStoreSurveyAppl,
String partyId, Map passThru) {
+ this(productStoreSurveyAppl, partyId, passThru, null);
}
public void callResult(boolean b) {