You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ha...@apache.org on 2010/12/24 05:37:20 UTC

svn commit: r1052447 - in /ofbiz/trunk: applications/marketing/script/org/ofbiz/marketing/contact/ applications/marketing/servicedef/ applications/marketing/src/org/ofbiz/marketing/marketing/ applications/marketing/webapp/marketing/WEB-INF/ application...

Author: hansbak
Date: Fri Dec 24 04:37:20 2010
New Revision: 1052447

URL: http://svn.apache.org/viewvc?rev=1052447&view=rev
Log:
several improvements and completion of the email contactlist subscribe and unsubscribe functions.

Modified:
    ofbiz/trunk/applications/marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml
    ofbiz/trunk/applications/marketing/servicedef/secas.xml
    ofbiz/trunk/applications/marketing/servicedef/services.xml
    ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/marketing/MarketingServices.java
    ofbiz/trunk/applications/marketing/webapp/marketing/WEB-INF/controller.xml
    ofbiz/trunk/applications/party/data/PartyTypeData.xml
    ofbiz/trunk/applications/party/src/org/ofbiz/party/communication/CommunicationEventServices.java
    ofbiz/trunk/framework/images/webapp/images/ecommain.css
    ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml
    ofbiz/trunk/specialpurpose/ecommerce/templates/email/ContactListVerifyEmail.ftl
    ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml
    ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/miniSignUpForContactList.ftl
    ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/viewprofile.ftl
    ofbiz/trunk/specialpurpose/ecommerce/widget/EmailContactListScreens.xml

Modified: ofbiz/trunk/applications/marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml (original)
+++ ofbiz/trunk/applications/marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml Fri Dec 24 04:37:20 2010
@@ -182,6 +182,65 @@ under the License.
         <field-to-result field="parameters.productStoreId" result-name="productStoreId" />
         <field-to-result field="parameters.contactListId" result-name="contactListId" />
     </simple-method>
+    <simple-method method-name="updateContactListPartyNoUserLogin" short-description="Update Add Party To ContactList No User Login" login-required="false">
+        <entity-one value-field="contactList" entity-name="ContactList"/>
+        <entity-and list="contactListPartyStatusList" entity-name="ContactListPartyStatus">
+            <field-map field-name="contactListId" from-field="parameters.contactListId"/>
+            <field-map field-name="partyId" from-field="parameters.partyId"/>
+            <field-map field-name="optInVerifyCode" from-field="parameters.optInVerifyCode"/>
+            <field-map field-name="fromDate" from-field="parameters.fromDate"/>
+        </entity-and>
+        <if-not-empty field="contactListPartyStatusList">
+            <set-service-fields service-name="updateContactListParty" map="parameters" to-map="updateContactListPartyMap"/>
+            <entity-one value-field="systemUserLogin" entity-name="UserLogin">
+                <field-map field-name="userLoginId" value="system"/>
+            </entity-one>
+            <set field="updateContactListPartyMap.userLogin" from-field="systemUserLogin"/>
+            <call-service service-name="updateContactListParty" in-map-name="updateContactListPartyMap"/>
+            <else>
+                <add-error><fail-message message="Invalid verify code for the ${contactList.contactListName}"/></add-error>
+                <check-errors/>
+            </else>
+        </if-not-empty>
+    </simple-method>
+    <simple-method method-name="unsubscribeContactListParty" short-description="Unsubscribe for contact list" login-required="false">
+        <!-- check valid email -->
+        <call-class-method method-name="isEmail" class-name="org.ofbiz.base.util.UtilValidate" ret-field="isEmail">
+            <field field="parameters.email"/>
+        </call-class-method>
+        <if-compare operator="equals" value="false" field="isEmail" type="Boolean">
+            <add-error><fail-property resource="MarketingUiLabels" property="MarketingCampaignInvalidEmailInput"/></add-error>
+            <check-errors/>
+        </if-compare>
+        
+        <entity-one value-field="userLogin" entity-name="UserLogin">
+            <field-map field-name="userLoginId" value="system"/>
+        </entity-one>
+        <if-empty field="parameters.partyId">
+            <set field="parameters.partyId" value="_NA_"/>
+        </if-empty>
+        <entity-and list="partyContactWithPurposes" entity-name="PartyContactWithPurpose">
+            <field-map field-name="partyId" from-field="parameters.partyId"/>
+            <field-map field-name="infoString" from-field="parameters.email"/>
+            <field-map field-name="contactMechTypeId" value="EMAIL_ADDRESS"/>
+            <field-map field-name="contactMechPurposeTypeId" value="OTHER_EMAIL"/>
+        </entity-and>
+        <filter-list-by-date list="partyContactWithPurposes" from-field-name="contactFromDate" thru-field-name="contactThruDate"/>
+        <filter-list-by-date list="partyContactWithPurposes" from-field-name="purposeFromDate" thru-field-name="purposeThruDate"/>
+        <!-- if there is email contact mech for party then update contact list party's status to CLPT_UNSUBS_PENDING -->
+        <if-not-empty field="partyContactWithPurposes">
+            <set field="updateContactListPartyMap.contactListId" from-field="parameters.contactListId"/>
+            <set field="updateContactListPartyMap.partyId" from-field="parameters.partyId"/>
+            <set field="updateContactListPartyMap.preferredContactMechId" from-field="partyContactWithPurposes[0].contactMechId"/>
+            <set field="updateContactListPartyMap.statusId" value="CLPT_UNSUBS_PENDING"/>
+            <set field="updateContactListPartyMap.userLogin" from-field="userLogin"/>
+            <call-service service-name="updateContactListParty" in-map-name="updateContactListPartyMap"/>
+            <else>
+                <add-error><fail-message message="The email address (${parameters.email}) does not have the Other Email Address as contact purpose."/></add-error>
+                <check-errors/>
+            </else>
+        </if-not-empty>
+    </simple-method>
     <simple-method method-name="updatePartyEmailContactListParty" short-description="Update ContactList Party Contact Mech">
         <set field="lookupMap.preferredContactMechId" from-field="parameters.oldContactMechId"/>
         <find-by-and entity-name="ContactListParty" map="lookupMap" list="ContactListParties"/>
@@ -395,29 +454,158 @@ under the License.
         </if-not-empty>                                       
     </simple-method>       
     
+    <simple-method method-name="sendContactListPartySubscribeEmail" short-description="Send contact list party subscribe email" login-required="true">
+        <set field="productStoreId" type="String" from-field="parameters.productStoreId"/>
+        <entity-one value-field="contactList" entity-name="ContactList"/>
+        <entity-one value-field="contactListParty" entity-name="ContactListParty"/>
+        <!-- get the latest accepted status -->
+        <!-- look up the last ContactListPartyStatus with statusId=CLPT_ACCEPTED -->
+        <entity-condition entity-name="ContactListPartyStatus" list="lastContactListPartyStatusList">
+            <condition-list combine="and">
+                <condition-expr field-name="contactListId" from-field="parameters.contactListId"/>
+                <condition-expr field-name="partyId" from-field="parameters.partyId"/>
+                <condition-expr field-name="fromDate" from-field="parameters.fromDate"/>
+                <condition-expr field-name="statusId" value="CLPT_ACCEPTED"/>
+            </condition-list>
+            <order-by field-name="-statusDate"/>
+        </entity-condition>
+        <first-from-list entry="contactListPartyStatus" list="lastContactListPartyStatusList"/>
+                
+        <if-empty field="productStoreId">
+            <entity-one value-field="webSite" entity-name="WebSite">
+                <field-map field-name="webSiteId" from-field="contactList.verifyEmailWebSiteId"/>
+            </entity-one>
+            <set field="productStoreId" from-field="webSite.productStoreId"/>
+        </if-empty>
+        <entity-one entity-name="ProductStoreEmailSetting" value-field="storeEmail" auto-field-map="false">
+            <field-map field-name="productStoreId" from-field="productStoreId"/>
+            <field-map field-name="emailType" value="SUB_CONT_LIST_NOTI"/>
+        </entity-one>
+        <entity-one entity-name="ContactMech" value-field="contactMech" auto-field-map="false">
+            <field-map field-name="contactMechId" from-field="parameters.preferredContactMechId"/>
+        </entity-one>
+        <if-not-empty field="storeEmail.bodyScreenLocation">
+            <!-- send email from screen -->
+            <set field="bodyParameters.contactListId" from-field="parameters.contactListId"/>
+            <set field="bodyParameters.partyId" from-field="parameters.partyId"/>
+            <set field="bodyParameters.contactList" from-field="contactList"/>
+            <set field="bodyParameters.contactListParty" from-field="contactListParty"/>
+            <set field="bodyParameters.contactListPartyStatus" from-field="contactListPartyStatus"/>
+            
+            <set field="emailParams.bodyParameters" from-field="bodyParameters"/>
+            <set field="emailParams.userLogin" from-field="userLogin"/>
+            <set field="emailParams.webSiteId" from-field="contactList.verifyEmailWebSiteId"/>
+            <set field="emailParams.sendTo" from-field="contactMech.infoString"/>
+            <set field="emailParams.sendFrom" from-field="storeEmail.fromAddress"/>
+            <set field="emailParams.subject" value="${storeEmail.subject} ${contactList.contactListName}"/>
+            <set field="emailParams.bodyScreenUri" from-field="storeEmail.bodyScreenLocation"/>
+            <set field="emailParams.contentType" value="text/html"/>
+            <call-service service-name="sendMailFromScreen" in-map-name="emailParams"/>
+        </if-not-empty>
+    </simple-method>
+    
+    <simple-method method-name="sendContactListPartyUnSubscribeVerifyEmail" short-description="Send contact list party unsubscribe verify email" login-required="true">
+        <if>
+            <condition>
+                <and>
+                    <not><if-has-permission permission="MARKETING" action="_VIEW"/></not>
+                </and>
+            </condition>
+            <then><add-error><fail-message message="Security Error: to run sendContactListPartyVerifyEmail you must have the MARKETING_VIEW or MARKETING_ADMIN permissions."/></add-error></then>
+        </if>
+        <check-errors/>
+
+        <entity-one entity-name="ContactList" value-field="contactList"/>
+        <entity-one entity-name="ContactListParty" value-field="contactListParty"/>
+        <get-related-one value-field="contactListParty" relation-name="PreferredContactMech" to-value-field="preferredContactMech"/>
+        
+        <!-- get the latest accepted status -->
+        <!-- look up the last ContactListPartyStatus with statusId=CLPT_ACCEPTED -->
+        <entity-condition entity-name="ContactListPartyStatus" list="lastContactListPartyStatusList">
+            <condition-list combine="and">
+                <condition-expr field-name="contactListId" from-field="parameters.contactListId"/>
+                <condition-expr field-name="partyId" from-field="parameters.partyId"/>
+                <condition-expr field-name="fromDate" from-field="parameters.fromDate"/>
+                <condition-expr field-name="statusId" value="CLPT_ACCEPTED"/>
+            </condition-list>
+            <order-by field-name="-statusDate"/>
+        </entity-condition>
+        <first-from-list entry="contactListPartyStatus" list="lastContactListPartyStatusList"/>
+        
+        <set field="productStoreId" type="String" from-field="parameters.productStoreId"/>
+        <entity-one value-field="contactList" entity-name="ContactList"/>
+        <if-empty field="productStoreId">
+            <entity-one value-field="webSite" entity-name="WebSite">
+                <field-map field-name="webSiteId" from-field="contactList.verifyEmailWebSiteId"/>
+            </entity-one>
+            <set field="productStoreId" from-field="webSite.productStoreId"/>
+        </if-empty>
+        <entity-one entity-name="ProductStoreEmailSetting" value-field="storeEmail" auto-field-map="false">
+            <field-map field-name="productStoreId" from-field="productStoreId"/>
+            <field-map field-name="emailType" value="UNSUB_CONT_LIST_VERI"/>
+        </entity-one>
+        <entity-one entity-name="ContactMech" value-field="contactMech" auto-field-map="false">
+            <field-map field-name="contactMechId" from-field="parameters.preferredContactMechId"/>
+        </entity-one>
+        <if-not-empty field="storeEmail.bodyScreenLocation">
+            <!-- create communication event -->
+            <set field="createCommunicationEventInMap.contactListId" from-field="contactList.contactListId"/>
+            <set field="createCommunicationEventInMap.partyIdTo" from-field="contactListParty.partyId"/>
+            <set field="createCommunicationEventInMap.contactMechIdTo" from-field="contactListParty.preferredContactMechId"/>
+            <set field="createCommunicationEventInMap.fromString" from-field="storeEmail.fromAddress"/>
+            <set field="createCommunicationEventInMap.toString" from-field="contactMech.infoString"/>
+            <set field="createCommunicationEventInMap.userLogin" from-field="contactMech.userLogin"/>
+            <set field="createCommunicationEventInMap.subject" value="${storeEmail.subject} ${contactList.contactListName}"/>
+            <call-service service-name="createCommunicationEvent" in-map-name="createCommunicationEventInMap">
+                <result-to-field result-name="communicationEventId"/>
+            </call-service>
+            
+            <!-- send email from screen -->
+            <set field="bodyParameters.contactListId" from-field="parameters.contactListId"/>
+            <set field="bodyParameters.partyId" from-field="parameters.partyId"/>
+            <set field="bodyParameters.contactList" from-field="contactList"/>
+            <set field="bodyParameters.contactListParty" from-field="contactListParty"/>
+            <set field="bodyParameters.contactListPartyStatus" from-field="contactListPartyStatus"/>
+            
+            <set field="emailParams.webSiteId" from-field="contactList.verifyEmailWebSiteId"/>
+            <set field="emailParams.bodyParameters" from-field="bodyParameters"/>
+            <set field="emailParams.communicationEventId" from-field="communicationEventId"/>
+            <set field="emailParams.userLogin" from-field="userLogin"/>
+            <set field="emailParams.sendTo" from-field="contactMech.infoString"/>
+            <set field="emailParams.sendFrom" from-field="storeEmail.fromAddress"/>
+            <set field="emailParams.subject" value="${storeEmail.subject} ${contactList.contactListName}"/>
+            <set field="emailParams.bodyScreenUri" from-field="storeEmail.bodyScreenLocation"/>
+            <set field="emailParams.contentType" value="text/html"/>
+            <call-service service-name="sendMailFromScreen" in-map-name="emailParams"/>
+        </if-not-empty>
+    </simple-method>
     <simple-method method-name="sendContactListPartyUnSubscribeEmail" short-description="Send contact list party unsubscribe email" login-required="true">
         <set field="productStoreId" type="String" from-field="parameters.productStoreId"/>
+        <entity-one value-field="contactList" entity-name="ContactList"/>
+        <if-empty field="productStoreId">
+            <entity-one value-field="webSite" entity-name="WebSite">
+                <field-map field-name="webSiteId" from-field="contactList.verifyEmailWebSiteId"/>
+            </entity-one>
+            <set field="productStoreId" from-field="webSite.productStoreId"/>
+        </if-empty>
         <entity-one entity-name="ProductStoreEmailSetting" value-field="storeEmail" auto-field-map="false">
             <field-map field-name="productStoreId" from-field="productStoreId"/>
             <field-map field-name="emailType" value="UNSUB_CONT_LIST_NOTI"/>
         </entity-one>
-        <entity-and entity-name="PartyContactMechPurpose" list="partyContactMechPurposes">
-            <field-map field-name="partyId" from-field="userLogin.partyId"/>
-            <field-map field-name="contactMechPurposeTypeId" value="PRIMARY_EMAIL"/>
-        </entity-and>
-        <first-from-list list="partyContactMechPurposes" entry="partyContactMechPurpose"/>
         <entity-one entity-name="ContactMech" value-field="contactMech" auto-field-map="false">
-            <field-map field-name="contactMechId" from-field="partyContactMechPurpose.contactMechId"/>
+            <field-map field-name="contactMechId" from-field="parameters.preferredContactMechId"/>
         </entity-one>
         <if-not-empty field="storeEmail.bodyScreenLocation">
             <set field="bodyParameters.contactListId" from-field="parameters.contactListId"/>
-            <set field="bodyParameters.partyId" from-field="userLogin.partyId"/>
+            <set field="bodyParameters.partyId" from-field="parameters.partyId"/>
+            <set field="emailParams.webSiteId" from-field="contactList.verifyEmailWebSiteId"/>
             <set field="emailParams.bodyParameters" from-field="bodyParameters"/>
             <set field="emailParams.userLogin" from-field="userLogin"/>
             <set field="emailParams.sendTo" from-field="contactMech.infoString"/>
             <set field="emailParams.sendFrom" from-field="storeEmail.fromAddress"/>
-            <set field="emailParams.subject" from-field="storeEmail.subject"/>
+            <set field="emailParams.subject" value="${storeEmail.subject} ${contactList.contactListName}"/>
             <set field="emailParams.bodyScreenUri" from-field="storeEmail.bodyScreenLocation"/>
+            <set field="emailParams.contentType" value="text/html"/>
             <call-service service-name="sendMailFromScreen" in-map-name="emailParams"/>
         </if-not-empty>
     </simple-method>

Modified: ofbiz/trunk/applications/marketing/servicedef/secas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/servicedef/secas.xml?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/servicedef/secas.xml (original)
+++ ofbiz/trunk/applications/marketing/servicedef/secas.xml Fri Dec 24 04:37:20 2010
@@ -24,6 +24,10 @@ under the License.
         <condition field-name="statusId" operator="equals" value="CLPT_PENDING"/>
         <action service="sendContactListPartyVerifyEmail" mode="async" persist="true"/>
     </eca>
+    <eca service="createContactListPartyStatus" event="commit">
+        <condition field-name="statusId" operator="equals" value="CLPT_ACCEPTED"/>
+        <action service="sendContactListPartySubscribeEmail" mode="async" persist="true"/>
+    </eca>
     <eca service="updatePartyEmailAddress" event="return">
         <action service="updatePartyEmailContactListParty" mode="sync"/>
     </eca>
@@ -31,6 +35,14 @@ under the License.
         <condition field-name="statusId" operator="equals" value="CLPT_REJECTED"/>
         <action service="sendContactListPartyUnSubscribeEmail" mode="sync" persist="true"/>
     </eca>
+    <eca service="createContactListPartyStatus" event="commit">
+        <condition field-name="statusId" operator="equals" value="CLPT_UNSUBSCRIBED"/>
+        <action service="sendContactListPartyUnSubscribeEmail" mode="async" persist="true"/>
+    </eca>
+    <eca service="createContactListPartyStatus" event="commit">
+        <condition field-name="statusId" operator="equals" value="CLPT_UNSUBS_PENDING"/>
+        <action service="sendContactListPartyUnSubscribeVerifyEmail" mode="async" persist="true"/>
+    </eca>
     
     <!--  update contact list communication status -->
     <eca service="updateCommunicationEvent" event="commit">

Modified: ofbiz/trunk/applications/marketing/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/servicedef/services.xml?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/marketing/servicedef/services.xml Fri Dec 24 04:37:20 2010
@@ -78,6 +78,14 @@ under the License.
         <attribute name="email" type="String" mode="IN" optional="false"/>
         <attribute name="partyId" type="String" mode="IN" optional="true"/>
     </service>
+    <service name="unsubscribeContactListParty" engine="simple"
+            location="component://marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml" invoke="unsubscribeContactListParty" auth="false">
+        <description>Unsubscribe an input email for a ContactList with _NA_ party using the system userLogin.
+            The intent is for anonymous unsubscribe to email lists.  Also validates email format.</description>
+        <attribute name="contactListId" type="String" mode="IN" optional="false"/>
+        <attribute name="email" type="String" mode="IN" optional="false"/>
+        <attribute name="partyId" type="String" mode="IN" optional="true"/>
+    </service>
 
     <!-- MarketingCampaignRole Services -->
     <service name="addRoleToMarketingCampaign" default-entity-name="MarketingCampaignRole" engine="simple"
@@ -149,6 +157,19 @@ under the License.
         <attribute name="optInVerifyCode" type="String" mode="IN" optional="true"/>
         <override name="fromDate" optional="true"/>
     </service>
+    <service name="updateContactListPartyNoUserLogin" default-entity-name="ContactListParty" engine="simple"
+            location="component://marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml" invoke="updateContactListPartyNoUserLogin" auth="false">
+        <description>Update Party to ContactList Join</description>
+        <auto-attributes include="pk" mode="IN" optional="false"/>
+        <auto-attributes include="nonpk" mode="IN" optional="true"/>
+        <attribute name="webSiteId" type="String" mode="IN" optional="true"/>
+        <attribute name="productStoreId" type="String" mode="INOUT" optional="true"/>
+        <attribute name="contactListId" type="String" mode="INOUT" optional="true"/>
+        <attribute name="optInVerifyCode" type="String" mode="IN" optional="true"/>
+        <attribute name="email" type="String" mode="IN" optional="true"/>
+        <override name="partyId" optional="true"/>
+        <override name="fromDate" optional="true"/>
+    </service>
     <service name="updatePartyEmailContactListParty" engine="simple"
             location="component://marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml" invoke="updatePartyEmailContactListParty" auth="true">
         <description>Update ContactList Party Contact Mech</description>
@@ -169,6 +190,7 @@ under the License.
         <auto-attributes include="nonpk" mode="IN" optional="true">
             <exclude field-name="setByUserLoginId"/>
         </auto-attributes>
+        <attribute name="preferredContactMechId" mode="IN" type="String" optional="false"/>
         <override name="statusId" optional="false"/>
         <override name="fromDate" optional="true"/>
     </service>
@@ -183,12 +205,31 @@ under the License.
         <attribute name="communicationEventId" type="String" mode="IN" optional="false"/>
         <attribute name="contactListId" type="String" mode="OUT" optional="true"/>
     </service>
+    <service name="sendContactListPartySubscribeEmail" engine="simple"
+        location="component://marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml" invoke="sendContactListPartySubscribeEmail" auth="false">
+        <attribute name="productStoreId" mode="IN" type="String" optional="true"/>
+        <attribute name="partyId" mode="IN" type="String" optional="true"/>
+        <attribute name="contactListId" mode="IN" type="String" optional="true"/>
+        <attribute name="preferredContactMechId" mode="IN" type="String" optional="false"/>
+        <attribute name="fromDate" mode="IN" type="Timestamp" optional="true"/>
+        <attribute name="statusId" mode="IN" type="String" optional="true"/>
+    </service>
+    <service name="sendContactListPartyUnSubscribeVerifyEmail" engine="simple"
+        location="component://marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml" invoke="sendContactListPartyUnSubscribeVerifyEmail" auth="false">
+        <attribute name="productStoreId" mode="IN" type="String" optional="true"/>
+        <attribute name="partyId" mode="IN" type="String" optional="true"/>
+        <attribute name="contactListId" mode="IN" type="String" optional="true"/>
+        <attribute name="preferredContactMechId" mode="IN" type="String" optional="false"/>
+        <attribute name="fromDate" mode="IN" type="Timestamp" optional="true"/>
+        <attribute name="statusId" mode="IN" type="String" optional="true"/>
+    </service>
     <service name="sendContactListPartyUnSubscribeEmail" engine="simple"
         location="component://marketing/script/org/ofbiz/marketing/contact/ContactListServices.xml" invoke="sendContactListPartyUnSubscribeEmail" auth="false">
         <attribute name="productStoreId" mode="IN" type="String" optional="true"/>
         <attribute name="partyId" mode="IN" type="String" optional="true"/>
         <attribute name="contactListId" mode="IN" type="String" optional="true"/>
-        <attribute name="fromDate" mode="IN" type="String" optional="true"/>
+        <attribute name="preferredContactMechId" mode="IN" type="String" optional="false"/>
+        <attribute name="fromDate" mode="IN" type="Timestamp" optional="true"/>
         <attribute name="statusId" mode="IN" type="String" optional="true"/>
     </service>
 

Modified: ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/marketing/MarketingServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/marketing/MarketingServices.java?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/marketing/MarketingServices.java (original)
+++ ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/marketing/MarketingServices.java Fri Dec 24 04:37:20 2010
@@ -85,7 +85,7 @@ public class MarketingServices {
             String contactMechId = (String) serviceResults.get("contactMechId");
             // create a new association at this fromDate to the anonymous party with status accepted
             input = UtilMisc.toMap("userLogin", userLogin, "contactListId", contactList.get("contactListId"),
-                    "partyId", partyId, "fromDate", fromDate, "statusId", "CLPT_ACCEPTED", "preferredContactMechId", contactMechId);
+                    "partyId", partyId, "fromDate", fromDate, "statusId", "CLPT_PENDING", "preferredContactMechId", contactMechId);
             serviceResults = dispatcher.runSync("createContactListParty", input);
             if (ServiceUtil.isError(serviceResults)) {
                 throw new GenericServiceException(ServiceUtil.getErrorMessage(serviceResults));

Modified: ofbiz/trunk/applications/marketing/webapp/marketing/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/webapp/marketing/WEB-INF/controller.xml?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/webapp/marketing/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/applications/marketing/webapp/marketing/WEB-INF/controller.xml Fri Dec 24 04:37:20 2010
@@ -329,6 +329,7 @@ under the License.
     </request-map>
     <request-map uri="contactListOptOut" track-serverhit="false" track-visit="false">
         <security https="true" auth="false"/>        
+        <event type="service" invoke="updateContactListPartyNoUserLogin"/>
         <response name="success" type="view" value="ContactListOptOut"/>
     </request-map>   
 

Modified: ofbiz/trunk/applications/party/data/PartyTypeData.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/data/PartyTypeData.xml?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/applications/party/data/PartyTypeData.xml (original)
+++ ofbiz/trunk/applications/party/data/PartyTypeData.xml Fri Dec 24 04:37:20 2010
@@ -154,6 +154,9 @@ under the License.
     <Enumeration description="Party Invitation" enumCode="INVITE_EMAIL" enumId="PRDS_PARTYINV_EMAIL" sequenceId="04" enumTypeId="PARTY_EMAIL"/>
     <Enumeration description="Contact-Us Notification" enumCode="CONT_EMAIL" enumId="CONT_NOTI_EMAIL" sequenceId="05" enumTypeId="PARTY_EMAIL"/>
     <Enumeration description="Unsubscribe Contact List Notification" enumCode="UNSUB_CONT_EMAIL" enumId="UNSUB_CONT_LIST_NOTI" sequenceId="01" enumTypeId="PARTY_EMAIL"/>
+    <Enumeration description="Subscribe Contact List Notification" enumCode="SUB_CONT_EMAIL" enumId="SUB_CONT_LIST_NOTI" sequenceId="02" enumTypeId="PARTY_EMAIL"/>
+    <Enumeration description="Unsubscribe Contact List Verify" enumCode="UNSUB_CONT_VERIFY_EMAIL" enumId="UNSUB_CONT_LIST_VERI" sequenceId="03" enumTypeId="PARTY_EMAIL"/>
+    <Enumeration description="Contact List E-mail Template" enumCode="CONT_EMAIL_TEMPLATE" enumId="CONT_EMAIL_TEMPLATE" sequenceId="04" enumTypeId="PARTY_EMAIL"/>
 
     <!-- the groups which are the main roles on he party listing -->
     <RoleType description="Main Role" hasTable="N" parentTypeId="" roleTypeId="MAIN_ROLE"/>

Modified: ofbiz/trunk/applications/party/src/org/ofbiz/party/communication/CommunicationEventServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/party/src/org/ofbiz/party/communication/CommunicationEventServices.java?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/applications/party/src/org/ofbiz/party/communication/CommunicationEventServices.java (original)
+++ ofbiz/trunk/applications/party/src/org/ofbiz/party/communication/CommunicationEventServices.java Fri Dec 24 04:37:20 2010
@@ -54,6 +54,7 @@ import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.common.email.NotificationServices;
 import org.ofbiz.content.data.DataResourceWorker;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.GenericEntityException;
@@ -292,7 +293,6 @@ public class CommunicationEventServices 
             Map<String, Object> sendMailParams = FastMap.newInstance();
             sendMailParams.put("sendFrom", communicationEvent.getRelatedOne("FromContactMech").getString("infoString"));
             sendMailParams.put("subject", communicationEvent.getString("subject"));
-            sendMailParams.put("body", communicationEvent.getString("content"));
             sendMailParams.put("contentType", communicationEvent.getString("contentMimeTypeId"));
             sendMailParams.put("userLogin", userLogin);
 
@@ -305,7 +305,7 @@ public class CommunicationEventServices 
                         EntityUtil.getFilterByDateExpr(), EntityUtil.getFilterByDateExpr("contactFromDate", "contactThruDate"));
 
             EntityConditionList<EntityCondition> conditions = EntityCondition.makeCondition(conditionList, EntityOperator.AND);
-            Set<String> fieldsToSelect = UtilMisc.toSet("infoString");
+            Set<String> fieldsToSelect = UtilMisc.toSet("partyId", "preferredContactMechId", "fromDate", "infoString");
 
             eli = delegator.find("ContactListPartyAndContactMech", conditions, null, fieldsToSelect, null,
                     new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true));
@@ -347,6 +347,7 @@ public class CommunicationEventServices 
 
                     sendMailParams.put("sendTo", emailAddress);
                     sendMailParams.put("partyId", partyId);
+                    
 
                     // if it is a NEWSLETTER then we do not want the outgoing emails stored, so put a communicationEventId in the sendMail context to prevent storeEmailAsCommunicationEvent from running
                     /*
@@ -371,10 +372,51 @@ public class CommunicationEventServices 
                         // There was a successful earlier attempt, so skip this address
                         continue;
                     }
-
+                    
+                    // Send e-mail
                     Debug.logInfo("Sending email to contact list [" + contactListId + "] party [" + partyId + "] : " + emailAddress, module);
                     // Make the attempt to send the email to the address
-                    Map<String, Object> tmpResult = dispatcher.runSync("sendMail", sendMailParams, 360, true);
+                    
+                    Map<String, Object> tmpResult = null;
+                    
+                    // Retrieve a contact list party status
+                    List<GenericValue> contactListPartyStatuses = delegator.findByAnd("ContactListPartyStatus", UtilMisc.toMap("contactListId", contactListId, "partyId", contactListPartyAndContactMech.getString("partyId"), "fromDate", contactListPartyAndContactMech.getTimestamp("fromDate"), "statusId", "CLPT_ACCEPTED"));
+                    GenericValue contactListPartyStatus = EntityUtil.getFirst(contactListPartyStatuses);
+                    if (UtilValidate.isNotEmpty(contactListPartyStatus)) {
+                        // prepare body parameters
+                        Map<String, Object> bodyParameters = FastMap.newInstance();
+                        bodyParameters.put("contactListId", contactListId);
+                        bodyParameters.put("partyId", contactListPartyAndContactMech.getString("partyId"));
+                        bodyParameters.put("preferredContactMechId", contactListPartyAndContactMech.getString("preferredContactMechId"));
+                        bodyParameters.put("emailAddress", emailAddress);
+                        bodyParameters.put("fromDate", contactListPartyAndContactMech.getTimestamp("fromDate"));
+                        bodyParameters.put("optInVerifyCode", contactListPartyStatus.getString("optInVerifyCode"));
+                        bodyParameters.put("content", communicationEvent.getString("content"));
+                        NotificationServices.setBaseUrl(delegator, contactList.getString("verifyEmailWebSiteId"), bodyParameters);
+
+                        GenericValue webSite = delegator.findOne("WebSite", UtilMisc.toMap("webSiteId", contactList.getString("verifyEmailWebSiteId")), false);
+                        if (UtilValidate.isNotEmpty(webSite)) {
+                            GenericValue productStore = webSite.getRelatedOne("ProductStore");
+                            if (UtilValidate.isNotEmpty(productStore)) {
+                                List<GenericValue> productStoreEmailSettings = productStore.getRelatedByAnd("ProductStoreEmailSetting", UtilMisc.toMap("emailType", "CONT_EMAIL_TEMPLATE"));
+                                GenericValue productStoreEmailSetting = EntityUtil.getFirst(productStoreEmailSettings);
+                                if (UtilValidate.isNotEmpty(productStoreEmailSetting)) {
+                                    // send e-mail using screen template
+                                    sendMailParams.put("bodyScreenUri", productStoreEmailSetting.getString("bodyScreenLocation"));
+                                    sendMailParams.put("bodyParameters", bodyParameters);
+                                    sendMailParams.remove("body");
+                                    tmpResult = dispatcher.runSync("sendMailFromScreen", sendMailParams, 360, true);
+                                }
+                            }
+                        }
+                    }
+                    
+                    // If the e-mail does not be sent then send normal e-mail
+                    if (UtilValidate.isEmpty(tmpResult)) {
+                        sendMailParams.put("body", communicationEvent.getString("content"));
+                        tmpResult = dispatcher.runSync("sendMail", sendMailParams, 360, true);
+                    }
+
                     if (tmpResult == null || ServiceUtil.isError(tmpResult)) {
                         if (ServiceUtil.getErrorMessage(tmpResult).startsWith("[ADDRERR]")) {
                             // address error; mark the communication event as BOUNCED

Modified: ofbiz/trunk/framework/images/webapp/images/ecommain.css
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/ecommain.css?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/ecommain.css (original)
+++ ofbiz/trunk/framework/images/webapp/images/ecommain.css Fri Dec 24 04:37:20 2010
@@ -124,7 +124,8 @@ font-weight:700;
 margin:2px;
 }
 
-input[type=submit]:hover {
+input[type=submit]:hover,
+input[type=button]:hover {
 color:red;
 cursor:pointer;
 text-decoration:underline;

Modified: ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/data/DemoProduct.xml Fri Dec 24 04:37:20 2010
@@ -124,7 +124,10 @@ under the License.
 
     <ProductStoreEmailSetting productStoreId="9000" emailType="CONT_NOTI_EMAIL" bodyScreenLocation="component://ecommerce/widget/EmailContactListScreens.xml#ContactUsEmailNotification" subject="Contact-us Information Notification" fromAddress="ofbiztest@example.com" />
     
+    <ProductStoreEmailSetting productStoreId="9000" emailType="SUB_CONT_LIST_NOTI" bodyScreenLocation="component://ecommerce/widget/EmailContactListScreens.xml#ContactListSubscribeEmail" subject="Subscribe Contact List" fromAddress="ofbiztest@example.com"/>
+    <ProductStoreEmailSetting productStoreId="9000" emailType="UNSUB_CONT_LIST_VERI" bodyScreenLocation="component://ecommerce/widget/EmailContactListScreens.xml#ContactListUnsubscribeVerifyEmail" subject="Verify Unsubscribe Contact List" fromAddress="ofbiztest@example.com"/>
     <ProductStoreEmailSetting productStoreId="9000" emailType="UNSUB_CONT_LIST_NOTI" bodyScreenLocation="component://ecommerce/widget/EmailContactListScreens.xml#ContactListUnsubscribeEmail" subject="Unsubscribe Contact List" fromAddress="ofbiztest@example.com"/>
+    <ProductStoreEmailSetting productStoreId="9000" emailType="CONT_EMAIL_TEMPLATE" bodyScreenLocation="component://ecommerce/widget/EmailContactListScreens.xml#ContactListEmailTemplate"/>
 
     <WebAnalyticsConfig productStoreId="9000" webAnalyticsTypeId="GOOGLE_ANALYTICS" webAnalyticsCode="123456" isEnabled="Y" description="This is code provided from google analytics" contentId="GOOGLE_ANA_CNT"/>
     <WebAnalyticsConfig productStoreId="9000" webAnalyticsTypeId="BING_ANALYTICS" webAnalyticsCode="123456" isEnabled="Y" description="This is code provided from bing analytics" contentId="BING_ANA_CNT"/>

Modified: ofbiz/trunk/specialpurpose/ecommerce/templates/email/ContactListVerifyEmail.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/templates/email/ContactListVerifyEmail.ftl?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/templates/email/ContactListVerifyEmail.ftl (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/templates/email/ContactListVerifyEmail.ftl Fri Dec 24 04:37:20 2010
@@ -35,11 +35,12 @@ under the License.
 <p class="tabletext">To complete your subscription use the verify form in your <a href="${baseEcommerceSecureUrl}viewprofile">online profile</a>, or use the following link:</p>
 <#if (contactListPartyStatus.optInVerifyCode)?has_content><p class="tabletext">Your verify code is: ${contactListPartyStatus.optInVerifyCode}</p></#if>
 
-<#assign verifyUrl = baseEcommerceSecureUrl + "updateContactListParty" />
-<form method="post" id="updateContactListParty" action="${verifyUrl}">
+<#assign verifyUrl = baseEcommerceSecureUrl + "updateContactListPartyNoUserLogin" />
+<form method="post" id="updateContactListPartyNoUserLogin" action="${verifyUrl}">
   <fieldset>
     <input type="hidden" name="contactListId" value="${contactListParty.contactListId}" />
     <input type="hidden" name="partyId" value="${contactListParty.partyId}" />
+    <input type="hidden" name="preferredContactMechId" value="${contactListParty.preferredContactMechId?if_exists}" />
     <input type="hidden" name="fromDate" value="${contactListParty.fromDate}" />
     <input type="hidden" name="statusId" value="CLPT_ACCEPTED" />
     <input type="hidden" name="optInVerifyCode" value="${contactListPartyStatus.optInVerifyCode?if_exists}" />

Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml Fri Dec 24 04:37:20 2010
@@ -1316,6 +1316,17 @@ under the License.
         <response name="success" type="view" value="main"/>
         <response name="error" type="view" value="main"/>
     </request-map>
+    <request-map uri="unsubscribeContactListParty">
+        <security https="false" auth="false"/>
+        <event type="service" invoke="unsubscribeContactListParty"/>
+        <response name="success" type="view" value="main"/>
+        <response name="error" type="view" value="main"/>
+    </request-map>
+    <request-map uri="contactListOptOut" track-serverhit="false" track-visit="false">
+        <security https="true" auth="false"/>
+        <event type="service" invoke="updateContactListPartyNoUserLogin"/>
+        <response name="success" type="view" value="ContactListOptOut"/>
+    </request-map>
 
     <!-- ======================= Content Requests: Forums/Content/Articles ======================= -->
 
@@ -1566,6 +1577,12 @@ under the License.
         <response name="success" type="view" value="viewprofile"/>
         <response name="error" type="view" value="viewprofile"/>
     </request-map>
+    <request-map uri="updateContactListPartyNoUserLogin">
+        <security https="true" auth="false"/>
+        <event type="service" invoke="updateContactListPartyNoUserLogin"/>
+        <response name="success" type="view" value="main"/>
+        <response name="error" type="view" value="main"/>
+    </request-map>
 
     <request-map uri="choosecatalog">
         <security https="true" auth="false"/>
@@ -2051,5 +2068,8 @@ under the License.
     
     <!-- Product in the different UOM -->
     <view-map name="ProductUomDropDownOnly" type="screen" page="component://order/widget/ordermgr/OrderEntryCatalogScreens.xml#ProductUomDropDownOnly"/>
+    
+    <!-- Contact List -->
+    <view-map name="ContactListOptOut" type="screen" page="component://marketing/widget/ContactListScreens.xml#OptOutResponse"/>
     <!-- End of View Mappings -->
 </site-conf>

Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/miniSignUpForContactList.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/miniSignUpForContactList.ftl?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/miniSignUpForContactList.ftl (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/miniSignUpForContactList.ftl Fri Dec 24 04:37:20 2010
@@ -27,6 +27,15 @@ under the License.
   </select>
 </#macro>
 
+<script type="text/javascript" language="JavaScript">
+    function unsubscribe() {
+        var form = document.getElementById("signUpForContactListForm");
+        form.action = "<@o...@ofbizUrl>"
+        document.getElementById("statusId").value = "CLPT_UNSUBS_PENDING";
+        form.submit();
+    }
+</script>
+
 <div id="miniSignUpForContactList" class="screenlet">
   <div class="screenlet-title-bar">
     <ul>
@@ -39,10 +48,10 @@ under the License.
   <#-- The visitor potentially has an account and party id -->
     <#if userLogin?has_content && userLogin.userLoginId != "anonymous">
     <#-- They are logged in so lets present the form to sign up with their email address -->
-      <form method="post" action="<@o...@ofbizUrl>" name="signUpForContactListForm">
+      <form method="post" action="<@o...@ofbizUrl>" name="signUpForContactListForm" id="signUpForContactListForm">
         <fieldset>
           <input type="hidden" name="partyId" value="${partyId}"/>
-          <input type="hidden" name="statusId" value="CLPT_PENDING"/>
+          <input type="hidden" id="statusId" name="statusId" value="CLPT_PENDING"/>
           <p>${uiLabelMap.EcommerceSignUpForContactListComments}</p>
           <div>
             <@contactList publicEmailContactLists=publicEmailContactLists/>
@@ -56,6 +65,7 @@ under the License.
           </div>
           <div>
             <input type="submit" value="${uiLabelMap.EcommerceSubscribe}"/>
+            <input type="button" value="${uiLabelMap.EcommerceUnsubscribe}" onclick="javascript:unsubscribe();"/>
           </div>
         </fieldset>
       </form>
@@ -69,6 +79,7 @@ under the License.
   <#-- There is no party info so just offer an anonymous (non-partyId) related newsletter sign up -->
     <form method="post" action="<@o...@ofbizUrl>" name="signUpForContactListForm" id="signUpForContactListForm">
       <fieldset>
+        <input type="hidden" id="statusId" name="statusId"/>
         <div>
           <label>${uiLabelMap.EcommerceSignUpForContactListComments}</label>
           <@contactList publicEmailContactLists=publicEmailContactLists/>
@@ -78,6 +89,7 @@ under the License.
         </div>
         <div>
           <input type="submit" value="${uiLabelMap.EcommerceSubscribe}"/>
+          <input type="button" value="${uiLabelMap.EcommerceUnsubscribe}" onclick="javascript:unsubscribe();"/>
         </div>
       </fieldset>
     </form>

Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/viewprofile.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/viewprofile.ftl?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/viewprofile.ftl (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/viewprofile.ftl Fri Dec 24 04:37:20 2010
@@ -491,6 +491,7 @@ under the License.
               <input type="hidden" name="productStoreId" value="${productStoreId?if_exists}" />
               <input type="hidden" name="partyId" value="${party.partyId}"/>
               <input type="hidden" name="contactListId" value="${contactListParty.contactListId}"/>
+              <input type="hidden" name="preferredContactMechId" value="${contactListParty.preferredContactMechId}"/>
               <input type="hidden" name="fromDate" value="${contactListParty.fromDate}"/>
               <input type="hidden" name="statusId" value="CLPT_REJECTED"/>
               <input type="submit" value="${uiLabelMap.EcommerceUnsubscribe}" class="smallSubmit"/>
@@ -501,6 +502,7 @@ under the License.
             <div>
               <input type="hidden" name="partyId" value="${party.partyId}"/>
               <input type="hidden" name="contactListId" value="${contactListParty.contactListId}"/>
+              <input type="hidden" name="preferredContactMechId" value="${contactListParty.preferredContactMechId}"/>
               <input type="hidden" name="fromDate" value="${contactListParty.fromDate}"/>
               <input type="hidden" name="statusId" value="CLPT_ACCEPTED"/>
               <input type="text" size="10" name="optInVerifyCode" value="" class="inputBox"/>
@@ -512,6 +514,7 @@ under the License.
             <div>
               <input type="hidden" name="partyId" value="${party.partyId}"/>
               <input type="hidden" name="contactListId" value="${contactListParty.contactListId}"/>
+              <input type="hidden" name="preferredContactMechId" value="${contactListParty.preferredContactMechId}"/>
               <input type="hidden" name="fromDate" value="${contactListParty.fromDate}"/>
               <input type="hidden" name="statusId" value="CLPT_PENDING"/>
               <input type="submit" value="${uiLabelMap.EcommerceSubscribe}" class="smallSubmit"/>

Modified: ofbiz/trunk/specialpurpose/ecommerce/widget/EmailContactListScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/widget/EmailContactListScreens.xml?rev=1052447&r1=1052446&r2=1052447&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/widget/EmailContactListScreens.xml (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/widget/EmailContactListScreens.xml Fri Dec 24 04:37:20 2010
@@ -62,15 +62,55 @@ under the License.
         </section>
     </screen>
 
+    <screen name="ContactListSubscribeEmail">
+        <section>
+            <actions>
+                <entity-one entity-name="ContactList" value-field="contactList"/>
+                <entity-one entity-name="PartyNameView" value-field="partyName"/>
+                <set field="baseEcommerceSecureUrl" value="${baseSecureUrl}/ecommerce/control/"/>
+            </actions>
+            <widgets>
+                <platform-specific><html><html-template location="component://ecommerce/templates/email/ContactListSubscribeEmail.ftl"/></html></platform-specific>
+            </widgets>
+        </section>
+    </screen>
+
+    <screen name="ContactListUnsubscribeVerifyEmail">
+        <section>
+            <actions>
+                <entity-one entity-name="ContactList" value-field="contactList"/>
+                <entity-one entity-name="PartyNameView" value-field="partyName"/>
+                <set field="baseEcommerceSecureUrl" value="${baseSecureUrl}/ecommerce/control/"/>
+            </actions>
+            <widgets>
+                <platform-specific><html><html-template location="component://ecommerce/templates/email/ContactListUnsubscribeVerifyEmail.ftl"/></html></platform-specific>
+            </widgets>
+        </section>
+    </screen>
+
     <screen name="ContactListUnsubscribeEmail">
         <section>
             <actions>
                 <entity-one entity-name="ContactList" value-field="contactList"/>
                 <entity-one entity-name="PartyNameView" value-field="partyName"/>
+                <set field="baseEcommerceSecureUrl" value="${baseSecureUrl}/ecommerce/control/"/>
             </actions>
             <widgets>
                 <platform-specific><html><html-template location="component://ecommerce/templates/email/ContactListUnsubscribeEmail.ftl"/></html></platform-specific>
             </widgets>
         </section>
     </screen>
+
+    <screen name="ContactListEmailTemplate">
+        <section>
+            <actions>
+                <entity-one entity-name="ContactList" value-field="contactList"/>
+                <entity-one entity-name="PartyNameView" value-field="partyName"/>
+                <set field="baseEcommerceSecureUrl" value="${baseSecureUrl}/ecommerce/control/"/>
+            </actions>
+            <widgets>
+                <platform-specific><html><html-template location="component://ecommerce/templates/email/ContactListEmailTemplate.ftl"/></html></platform-specific>
+            </widgets>
+        </section>
+    </screen>
 </screens>