/*********************************************************************************
* The contents of this file are subject to the Common Public Attribution
* License Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.openemm.org/cpal1.html. The License is based on the Mozilla
* Public License Version 1.1 but Sections 14 and 15 have been added to cover
* use of software over a computer network and provide for limited attribution
* for the Original Developer. In addition, Exhibit A has been modified to be
* consistent with Exhibit B.
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is OpenEMM.
* The Original Developer is the Initial Developer.
* The Initial Developer of the Original Code is AGNITAS AG. All portions of
* the code written by AGNITAS AG are Copyright (c) 2007 AGNITAS AG. All Rights
* Reserved.
*
* Contributor(s): AGNITAS AG.
********************************************************************************/
package org.agnitas.actions.ops;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.agnitas.actions.ActionOperation;
import org.agnitas.beans.Company;
import org.agnitas.beans.Recipient;
import org.agnitas.dao.CompanyDao;
import org.agnitas.emm.core.commons.uid.ExtensibleUID;
import org.agnitas.emm.core.commons.uid.ExtensibleUIDConstants;
import org.agnitas.emm.core.commons.uid.ExtensibleUIDService;
import org.agnitas.util.AgnUtils;
import org.apache.commons.collections.map.CaseInsensitiveMap;
import org.springframework.context.ApplicationContext;
/**
*
* @author Martin Helff
*/
public class SubscribeCustomer extends ActionOperation implements Serializable {
static final long serialVersionUID = 3086814575002603882L;
/**
* Holds value of property doubleCheck.
*/
protected boolean doubleCheck=true;
/**
* Holds value of property keyColumn.
*/
protected String keyColumn="email";
/**
* Holds value of property doubleOptIn.
*/
protected boolean doubleOptIn=false;
/**
* Creates new ActionOperationUpdateCustomer
*/
public SubscribeCustomer() {
}
/**
* Reads an Object and puts the read fields into allFields
* Gets keyColumn, doubleCheck and doubleoptIn from allFields
* throws IOException or ClassNotFoundException
*
* @param in inputstream from Object
*/
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
ObjectInputStream.GetField allFields=null;
allFields=in.readFields();
this.keyColumn=(String)allFields.get("keyColumn", "email");
this.doubleCheck=allFields.get("doubleCheck", true);
this.doubleOptIn=allFields.get("doubleOptIn", false);
}
/**
* Checks if subscription of customer is blocked
* Checks customer
* Checks blacklist
* Creats user information
*
* @return true==sucess
* false=error
* @param con
* @param companyID
* @param params HashMap containing all available informations
*/
public boolean executeOperation(ApplicationContext con, int companyID, Map params) {
Integer tmpNum=null;
Recipient aCust=(Recipient)con.getBean("Recipient");
String keyVal=null;
boolean isNewCust=false;
boolean identifiedByUid=false;
if(params.get("subscribeCustomer")!=null && params.get("subscribeCustomer").equals("no")) {
return true; // do nothing, manually blocked
}
aCust.setCompanyID(companyID);
aCust.loadCustDBStructure();
if(params.get("customerID")!=null) {
tmpNum=(Integer)params.get("customerID");
aCust.setCustomerID(tmpNum.intValue());
identifiedByUid=true;
}
if(aCust.getCustomerID()==0) {
if(this.doubleCheck) {
Map req=new CaseInsensitiveMap((HashMap)params.get("requestParameters"));
keyVal=(String)(req).get(this.keyColumn);
aCust.findByKeyColumn(this.keyColumn, keyVal);
}
}
if(aCust.getCustomerID()!=0) {
aCust.getCustomerDataFromDb();
} else {
isNewCust=true;
}
/* copy the request parameters into the customer */
if(!aCust.importRequestParameters((HashMap)params.get("requestParameters"), null)) {
return false;
}
/* is the email valid and not blacklisted? */
if(!aCust.emailValid() || aCust.blacklistCheck()) {
return false; // abort, EMAIL is not allowed
}
if(!aCust.updateInDB()) { // return error on failure
return false;
}
aCust.loadAllListBindings();
aCust.updateBindingsFromRequest(params, this.doubleOptIn, identifiedByUid);
if(this.doubleOptIn) {
params.put("__agn_USER_STATUS", "5"); // next Event-Mailing goes to a user with status 5
}
params.put("customerID", new Integer(aCust.getCustomerID()));
if(isNewCust && aCust.getCustomerID()!=0) {
// generate new agnUID
try {
ExtensibleUIDService uidService = (ExtensibleUIDService) con.getBean( ExtensibleUIDConstants.SERVICE_BEAN_NAME);
ExtensibleUID uid = uidService.newUID();
uid.setCompanyID(companyID);
uid.setCustomerID(aCust.getCustomerID());
CompanyDao dao=(CompanyDao)con.getBean("CompanyDao");
Company company=dao.getCompany(companyID);
uid.setUrlID(0);
uid.setMailingID(0);
params.put("agnUID", uidService.buildUIDString( uid));
} catch (Exception e) {
AgnUtils.logger().error("executeOperation: "+e);
}
}
return true;
}
/**
* Getter for property doubleCheck.
*
* @return Value of property doubleCheck.
*/
public boolean isDoubleCheck() {
return this.doubleCheck;
}
/**
* Setter for property doubleCheck.
*
* @param doubleCheck New value of property doubleCheck.
*/
public void setDoubleCheck(boolean doubleCheck) {
this.doubleCheck = doubleCheck;
}
/**
* Getter for property keyColumn.
*
* @return Value of property keyColumn.
*/
public String getKeyColumn() {
return this.keyColumn;
}
/**
* Setter for property keyColumn.
*
* @param keyColumn New value of property keyColumn.
*/
public void setKeyColumn(String keyColumn) {
this.keyColumn = keyColumn;
}
/**
* Getter for property doubleOptIn.
*
* @return Value of property doubleOptIn.
*/
public boolean isDoubleOptIn() {
return this.doubleOptIn;
}
/**
* Setter for property doubleOptIn.
*
* @param doubleOptIn New value of property doubleOptIn.
*/
public void setDoubleOptIn(boolean doubleOptIn) {
this.doubleOptIn = doubleOptIn;
}
}