here is full code:
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Payment
* @copyright Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
class Mage_Payment_Model_Method_Cc extends Mage_Payment_Model_Method_Abstract
{
protected $_formBlockType = 'payment/form_cc';
protected $_infoBlockType = 'payment/info_cc';
protected $_canSaveCc = false;
/**
* Assign data to info model instance
*
* @param mixed $data
* @return Mage_Payment_Model_Info
*/
public function assignData($data)
{
if (!($data instanceof Varien_Object)) {
$data = new Varien_Object($data);
}
$info = $this->getInfoInstance();
$info->setCcType($data->getCcType())
->setCcOwner($data->getCcOwner())
->setCcLast4(substr($data->getCcNumber(), -4))
->setCcNumber($data->getCcNumber())
->setCcCid($data->getCcCid())
->setCcExpMonth($data->getCcExpMonth())
->setCcExpYear($data->getCcExpYear());
return $this;
}
/**
* Prepare info instance for save
*
* @return Mage_Payment_Model_Abstract
*/
public function prepareSave()
{
$info = $this->getInfoInstance();
if ($this->_canSaveCc) {
$info->setCcNumberEnc($info->encrypt($info->getCcNumber()));
$info->setCcCidEnc($info->encrypt($info->getCcCid()));
}
$info->setCcNumber(null)
->setCcCid(null);
return $this;
}
/**
* Validate payment method information object
*
* @param Mage_Payment_Model_Info $info
* @return Mage_Payment_Model_Abstract
*/
public function validate()
{
/*
* calling parent validate function
*/
parent::validate();
$info = $this->getInfoInstance();
$errorMsg = false;
$availableTypes = explode(',',$this->getConfigData('cctypes'));
$ccNumber = $info->getCcNumber();
// remove credit card number delimiters such as "-" and space
$ccNumber = preg_replace('/[\-\s]+/', '', $ccNumber);
$info->setCcNumber($ccNumber);
$ccType = '';
if (!$this->_validateExpDate($info->getCcExpYear(), $info->getCcExpMonth())) {
$errorCode = 'ccsave_expiration,ccsave_expiration_yr';
$errorMsg = $this->_getHelper()->__('Incorrect credit card expiration date');
}
if (in_array($info->getCcType(), $availableTypes)){
if ($this->validateCcNum($ccNumber)
// Other credit card type number validation
|| ($this->OtherCcType($info->getCcType()) && $this->validateCcNumOther($ccNumber))) {
$ccType = 'OT';
$ccTypeRegExpList = array(
'VI' => '/^4[0-9]{12}([0-9]{3})?$/', // Visa
'MC' => '/^5[1-5][0-9]{14}$/', // Master Card
'AE' => '/^3[47][0-9]{13}$/', // American Express
'DI' => '/^6011[0-9]{12}$/', // Discovery
'SS' => '/^((6759[0-9]{12})|(49[013][1356][0-9]{13})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$/'
);
foreach ($ccTypeRegExpList as $ccTypeMatch=>$ccTypeRegExp) {
if (preg_match($ccTypeRegExp, $ccNumber)) {
$ccType = $ccTypeMatch;
break;
}
}
if (!$this->OtherCcType($info->getCcType()) && $ccType!=$info->getCcType()) {
$errorCode = 'ccsave_cc_type,ccsave_cc_number';
$errorMsg = $this->_getHelper()->__('Credit card number mismatch with credit card type');
}
}
else {
$errorCode = 'ccsave_cc_number';
$errorMsg = $this->_getHelper()->__('Invalid Credit Card Number');
}
}
else {
$errorCode = 'ccsave_cc_type';
$errorMsg = $this->_getHelper()->__('Credit card type is not allowed for this payment method');
}
//validate credit card verification number
if ($errorMsg === false && $this->hasVerification()) {
$verifcationRegEx = $this->getVerificationRegEx();
$regExp = isset($verifcationRegEx[$info->getCcType()]) ? $verifcationRegEx[$info->getCcType()] : '';
if (!$info->getCcCid() || !$regExp || !preg_match($regExp ,$info->getCcCid())){
$errorMsg = $this->_getHelper()->__('Please enter a valid credit card verification number.');
}
}
if($errorMsg){
Mage::throwException($errorMsg);
//throw Mage::exception('Mage_Payment', $errorMsg, $errorCode);
}
return $this;
}
public function hasVerification()
{
$configData = $this->getConfigData('useccv');
if(is_null($configData)){
return true;
}
return (bool) $configData;
}
public function getVerificationRegEx()
{
$verificationExpList = array(
'VI' => '/^[0-9]{3}$/', // Visa
'MC' => '/^[0-9]{3}$/', // Master Card
'AE' => '/^[0-9]{4}$/', // American Express
'DI' => '/^[0-9]{3}$/', // Discovery
'SS' => '/^[0-9]{4}$/',
'OT' => '/^[0-9]{3,4}$/'
);
return $verificationExpList;
}
protected function _validateExpDate($expYear, $expMonth)
{
$date = Mage::app()->getLocale()->date();
if (!$expYear || !$expMonth || ($date->compareYear($expYear)==1) || ($date->compareYear($expYear) == 0 && ($date->compareMonth($expMonth)==1 ) )) {
return false;
}
return true;
}
public function OtherCcType($type)
{
return $type=='OT';
}
/**
* Validate credit card number
*
* @param string $cc_number
* @return bool
*/
public function validateCcNum($ccNumber)
{
$cardNumber = strrev($ccNumber);
$numSum = 0;
for ($i=0; $i<strlen($cardNumber); $i++) {
$currentNum = substr($cardNumber, $i, 1);
/**
* Double every second digit
*/
if ($i % 2 == 1) {
$currentNum *= 2;
}
/**
* Add digits of 2-digit numbers together
*/
if ($currentNum > 9) {
$firstNum = $currentNum % 10;
$secondNum = ($currentNum - $firstNum) / 10;
$currentNum = $firstNum + $secondNum;
}
$numSum += $currentNum;
}
/**
* If the total has no remainder it's OK
*/
return ($numSum % 10 == 0);
}
/**
* Other credit cart type number validation
*
* @param string $ccNumber
* @return boolean
*/
public function validateCcNumOther($ccNumber)
{
return preg_match('/^\\d+$/', $ccNumber);
}
}
ny client using magento, this code is for save creditcard information for offline process , my client want to send creditcard information to his email address while user submit their data. you can see there is code for save data in mysql, its possible to send same mysql data to any email address?