svn commit: r731663 - in /ofbiz/trunk/applications/marketing: data/MarketingTypeData.xml src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java

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

svn commit: r731663 - in /ofbiz/trunk/applications/marketing: data/MarketingTypeData.xml src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java

jaz-3
Author: jaz
Date: Mon Jan  5 11:49:05 2009
New Revision: 731663

URL: http://svn.apache.org/viewvc?rev=731663&view=rev
Log:
tracking codes now support -1 lifetime (just for the session), which will create a session cookie, instead of a persistent cookie. Remove setVersion(1) when setting cookies since this is "experimental" and 1) is not used for other cookies in OFbiz 2) does not work with Safari

Added new TrackingCodeType 'ACCESS' to represent an access code.

Added new preprocessor event to restrict access to an application to users with a valid ACCESS tracking code.

Modified:
    ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml
    ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java

Modified: ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml?rev=731663&r1=731662&r2=731663&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml (original)
+++ ofbiz/trunk/applications/marketing/data/MarketingTypeData.xml Mon Jan  5 11:49:05 2009
@@ -50,7 +50,8 @@
     
     <SegmentGroupType segmentGroupTypeId="MARKET_SEGMENT" description="Market Segment"/>
     <SegmentGroupType segmentGroupTypeId="SALES_SEGMENT" description="Sales Segment"/>
-    
+
+    <TrackingCodeType trackingCodeTypeId="ACCESS" description="Access Code"/>
     <TrackingCodeType trackingCodeTypeId="INTERNAL" description="Internal"/>
     <TrackingCodeType trackingCodeTypeId="EXTERNAL" description="External"/>
     <TrackingCodeType trackingCodeTypeId="PARTNER_MGD" description="Partner Managed"/>

Modified: ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java?rev=731663&r1=731662&r2=731663&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java (original)
+++ ofbiz/trunk/applications/marketing/src/org/ofbiz/marketing/tracking/TrackingCodeEvents.java Mon Jan  5 11:49:05 2009
@@ -225,22 +225,20 @@
 
         // if trackingCode.trackableLifetime not null and is > 0 write a trackable cookie with name in the form: TKCDT_{trackingCode.trackingCodeTypeId} and timeout will be trackingCode.trackableLifetime
         Long trackableLifetime = trackingCode.getLong("trackableLifetime");
-        if (trackableLifetime != null && trackableLifetime.longValue() > 0) {
+        if (trackableLifetime != null && (trackableLifetime.longValue() > 0 || trackableLifetime.longValue() == -1)) {
             Cookie trackableCookie = new Cookie("TKCDT_" + trackingCode.getString("trackingCodeTypeId"), trackingCode.getString("trackingCodeId"));
-            trackableCookie.setMaxAge(trackableLifetime.intValue());
+            if (trackableLifetime.longValue() > 0) trackableCookie.setMaxAge(trackableLifetime.intValue());
             trackableCookie.setPath("/");
-            trackableCookie.setVersion(1);
             if (cookieDomain.length() > 0) trackableCookie.setDomain(cookieDomain);
             response.addCookie(trackableCookie);
         }
         
         // if trackingCode.billableLifetime not null and is > 0 write a billable cookie with name in the form: TKCDB_{trackingCode.trackingCodeTypeId} and timeout will be trackingCode.billableLifetime
         Long billableLifetime = trackingCode.getLong("billableLifetime");
-        if (billableLifetime != null && billableLifetime.longValue() > 0) {
+        if (billableLifetime != null && (billableLifetime.longValue() > 0 || billableLifetime.longValue() == -1)) {
             Cookie billableCookie = new Cookie("TKCDB_" + trackingCode.getString("trackingCodeTypeId"), trackingCode.getString("trackingCodeId"));
-            billableCookie.setMaxAge(billableLifetime.intValue());
+            if (billableLifetime.longValue() > 0) billableCookie.setMaxAge(billableLifetime.intValue());
             billableCookie.setPath("/");
-            billableCookie.setVersion(1);
             if (cookieDomain.length() > 0) billableCookie.setDomain(cookieDomain);
             response.addCookie(billableCookie);
         }
@@ -367,6 +365,62 @@
         
         return "success";
     }
+
+    public static String checkAccessTrackingCode(HttpServletRequest request, HttpServletResponse response) {
+        GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
+        java.sql.Timestamp nowStamp = UtilDateTime.nowTimestamp();
+
+        String trackingCodeId = request.getParameter("autoTrackingCode");
+        if (UtilValidate.isEmpty(trackingCodeId)) trackingCodeId = request.getParameter("atc");
+        if (UtilValidate.isEmpty(trackingCodeId)) {
+            Cookie[] cookies = request.getCookies();
+            if (cookies != null) {
+                for (Cookie cookie : cookies) {
+                    if ("TKCDT_ACCESS".equals(cookie.getName())) {
+                        trackingCodeId = cookie.getValue();                        
+                    }
+                }
+            }
+        }
+
+        if (UtilValidate.isNotEmpty(trackingCodeId)) {
+            // find the tracking code object
+            GenericValue trackingCode = null;
+            try {
+                trackingCode = delegator.findByPrimaryKeyCache("TrackingCode", UtilMisc.toMap("trackingCodeId", trackingCodeId));
+            } catch (GenericEntityException e) {
+                Debug.logError(e, "Error looking up TrackingCode with trackingCodeId [" + trackingCodeId + "], ignoring this trackingCodeId", module);
+            }
+            if (trackingCode != null) {
+                // verify the tracking code type
+                if ("ACCESS".equals(trackingCode.getString("trackingCodeTypeId"))) {
+                    // verify the effective date
+                    if (trackingCode.get("fromDate") != null && nowStamp.after(trackingCode.getTimestamp("fromDate"))) {
+                        if (trackingCode.get("thruDate") != null && nowStamp.before(trackingCode.getTimestamp("thruDate"))) {
+                            // tracking code is valid
+                            return "success";
+                        } else {
+                            if (Debug.infoOn())
+                                Debug.logInfo("The TrackingCode with ID [" + trackingCodeId + "] has expired, ignoring this trackingCodeId", module);
+                            request.setAttribute("_ERROR_MESSAGE_", "Access code [" + trackingCodeId + "], is not valid.");
+                        }
+                    } else {
+                        if (Debug.infoOn())
+                            Debug.logInfo("The TrackingCode with ID [" + trackingCodeId + "] has not yet gone into effect, ignoring this trackingCodeId", module);
+                        request.setAttribute("_ERROR_MESSAGE_", "Access code [" + trackingCodeId + "], is not valid.");
+                    }
+                } else {
+                    Debug.logWarning("Tracking code found [" + trackingCodeId + "] but was not of the type ACCESS; access denied", module);
+                    request.setAttribute("_ERROR_MESSAGE_", "Access code [" + trackingCodeId + "] not found.");
+                }
+            } else {
+                request.setAttribute("_ERROR_MESSAGE_", "Access code [" + trackingCodeId + "] not found.");
+            }
+        }
+
+        // no tracking code or tracking code invalid; redirect to the access page (i.e. request named 'protect')  
+        return ":_protect_:";
+    }
     
     /** Makes a list of TrackingCodeOrder entities to be attached to the current order; called by the createOrder event; the values in the returned List will not have the orderId set */
     public static List makeTrackingCodeOrders(HttpServletRequest request) {