Moved all static functions in authorize class to localfuncs.php as normal function.

Removed abaval.php and ccval.php, because functions in these files moved to localfuncs.php.
This commit is contained in:
ethem 2006-09-02 11:49:02 +00:00
parent 86a1ba04fd
commit e3949d06af
7 changed files with 354 additions and 452 deletions

View File

@ -1,26 +0,0 @@
<?php // $Id$
/**
* Validates the supplied ABA number
* using a simple mod 10 check digit routine.
*
* @param string $aba Bank ID
* @return bool true ABA is valid, false otherwise
*/
function ABAVal($aba)
{
if (ereg("^[0-9]{9}$", $aba)) {
$n = 0;
for($i = 0; $i < 9; $i += 3) {
$n += (substr($aba, $i, 1) * 3) +
(substr($aba, $i + 1, 1) * 7) +
(substr($aba, $i + 2, 1));
}
if ($n != 0 and $n % 10 == 0) {
return true;
}
}
return false;
}
?>

View File

@ -18,6 +18,7 @@ define('AN_REASON_NOACHTYPE', 245);
define('AN_REASON_NOACHTYPE2', 246);
require_once($CFG->dirroot.'/enrol/authorize/const.php');
require_once($CFG->dirroot.'/enrol/authorize/localfuncs.php');
require_once($CFG->dirroot.'/enrol/authorize/enrol.php');
/**
@ -330,7 +331,7 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $
$order->settletime = authorize_getsettletime(time());
}
if (! update_record('enrol_authorize', $order)) {
enrolment_plugin_authorize::email_to_admin("Error while trying to update data " .
email_to_admin("Error while trying to update data " .
"in table enrol_authorize. Please edit manually this record: ID=$order->id.", $order);
}
break;
@ -344,7 +345,7 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $
$extra->settletime = authorize_getsettletime(time());
unset($extra->sum); // this is not used in refunds table.
if (! $extra->id = insert_record('enrol_authorize_refunds', $extra)) {
enrolment_plugin_authorize::email_to_admin("Error while trying to insert data " .
email_to_admin("Error while trying to insert data " .
"into table enrol_authorize_refunds. Please add manually this record:", $extra);
}
break;
@ -359,7 +360,7 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $
$order->status = AN_STATUS_VOID;
// don't update order->settletime
if (! update_record($tableupdate, $order)) {
enrolment_plugin_authorize::email_to_admin("Error while trying to update data " .
email_to_admin("Error while trying to update data " .
"in table $tableupdate. Please edit manually this record: ID=$order->id.", $order);
}
break;
@ -388,10 +389,10 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $
case AN_REASON_NOCCTYPE2:
{
if (!empty($cctype)) {
$ccaccepts = enrolment_plugin_authorize::get_list_of_creditcards();
$ccaccepts = get_list_of_creditcards();
unset($ccaccepts[$cctype]);
set_config('an_acceptccs', implode(',', array_keys($ccaccepts)));
enrolment_plugin_authorize::email_to_admin("$message ($cctype)" .
email_to_admin("$message ($cctype)" .
"This is new config(an_acceptccs):", $ccaccepts);
}
break;
@ -400,7 +401,7 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $
case AN_REASON_NOACH:
{
set_config('an_acceptmethods', AN_METHOD_CC);
enrolment_plugin_authorize::email_to_admin("$message " .
email_to_admin("$message " .
"This is new config(an_acceptmethods):", array(AN_METHOD_CC));
break;
}

View File

@ -1,126 +0,0 @@
<?php // $Id$
/************************************************************************
*
* CCVal - Credit Card Validation function.
*
* Copyright (c) 1999, 2003 Holotech Enterprises. All rights reserved.
* You may freely modify and use this function for your own purposes. You
* may freely distribute it, without modification and with this notice
* and entire header intact.
*
* This function accepts a credit card number and, optionally, a code for
* a credit card name. If a Name code is specified, the number is checked
* against card-specific criteria, then validated with the Luhn Mod 10
* formula. Otherwise it is only checked against the formula. Valid name
* codes are:
*
* mcd - Master Card
* vis - Visa
* amx - American Express
* dsc - Discover
* dnc - Diners Club
* jcb - JCB
* swi - Switch
* dlt - Delta
* enr - EnRoute
*
* You can also optionally specify an expiration date in the formay mmyy.
* If the validation fails on the date, the function returns 0. If it
* fails on the number validation, it returns false.
*
* A description of the criteria used in this function can be found at
* http://www.paylib.net/ccval.html. If you have any questions or
* comments, please direct them to ccval@holotech.net
*
* Alan Little
* Holotech Enterprises
* http://www.holotech.net/
* August 2003
*
************************************************************************/
function CCVal($Num, $Name = "n/a", $Exp = "")
{
// Check the expiration date first
if (strlen($Exp))
{
$Month = substr($Exp, 0, 2);
$Year = substr($Exp, -2);
$WorkDate = "$Month/01/$Year";
$WorkDate = strtotime($WorkDate);
$LastDay = date("t", $WorkDate);
$Expires = strtotime("$Month/$LastDay/$Year 11:59:59");
if ($Expires < time()) return 0;
}
// Innocent until proven guilty
$GoodCard = true;
// Get rid of any non-digits
$Num = ereg_replace("[^0-9]", "", $Num);
// Perform card-specific checks, if applicable
switch ($Name)
{
case "mcd" :
$GoodCard = ereg("^5[1-5].{14}$", $Num);
break;
case "vis" :
$GoodCard = ereg("^4.{15}$|^4.{12}$", $Num);
break;
case "amx" :
$GoodCard = ereg("^3[47].{13}$", $Num);
break;
case "dsc" :
$GoodCard = ereg("^6011.{12}$", $Num);
break;
case "dnc" :
$GoodCard = ereg("^30[0-5].{11}$|^3[68].{12}$", $Num);
break;
case "jcb" :
$GoodCard = ereg("^3.{15}$|^2131|1800.{11}$", $Num);
break;
case "dlt" :
$GoodCard = ereg("^4.{15}$", $Num);
break;
case "swi" :
$GoodCard = ereg("^[456].{15}$|^[456].{17,18}$", $Num);
break;
case "enr" :
$GoodCard = ereg("^2014.{11}$|^2149.{11}$", $Num);
break;
}
// The Luhn formula works right to left, so reverse the number.
$Num = strrev($Num);
$Total = 0;
for ($x=0; $x < strlen($Num); $x++)
{
$digit = substr($Num, $x, 1);
// If it's an odd digit, double it
if ($x/2 != floor($x/2)) {
$digit *= 2;
// If the result is two digits, add them
if (strlen($digit) == 2)
$digit = substr($digit, 0, 1) + substr($digit, 1, 1);
}
// Add the current digit, doubled and added if applicable, to the Total
$Total += $digit;
}
// If it passed (or bypassed) the card-specific check and the Total is
// evenly divisible by 10, it's cool!
return ($GoodCard && $Total % 10 == 0);
}
?>

View File

@ -31,12 +31,12 @@ if (!isset($frm->an_cutoff_hour)) {
}
if (!isset($frm->acceptmethods)) {
$frm->acceptmethods = enrolment_plugin_authorize::get_list_of_payment_methods();
$frm->acceptmethods = get_list_of_payment_methods();
$CFG->an_acceptmethods = implode(',', $frm->acceptmethods);
}
if (!isset($frm->acceptccs)) {
$frm->acceptccs = array_keys(enrolment_plugin_authorize::get_list_of_creditcards());
$frm->acceptccs = array_keys(get_list_of_creditcards());
$CFG->an_acceptccs = implode(',', $frm->acceptccs);
}
@ -133,8 +133,8 @@ if (!isset($frm->acceptccs)) {
<tr valign="top">
<td align="right">an_acceptmethods:</td>
<td><?php print_string("adminacceptmethods", "enrol_authorize") ?><br /><?php
$allpaymentmethods = enrolment_plugin_authorize::get_list_of_payment_methods(true);
$paymentmethodsenabled = enrolment_plugin_authorize::get_list_of_payment_methods();
$allpaymentmethods = get_list_of_payment_methods(true);
$paymentmethodsenabled = get_list_of_payment_methods();
foreach ($allpaymentmethods as $key) {
print_checkbox('acceptmethods[]', $key, in_array($key, $paymentmethodsenabled), get_string('method'.strtolower($key),'enrol_authorize')); echo "<br />\n";
}
@ -144,7 +144,7 @@ if (!isset($frm->acceptccs)) {
<tr valign="top">
<td align="right">an_acceptccs:</td>
<td><?php print_string("adminacceptccs", "enrol_authorize") ?><br /><?php
$allccs = enrolment_plugin_authorize::get_list_of_creditcards(true);
$allccs = get_list_of_creditcards(true);
foreach ($allccs as $key => $val) {
print_checkbox('acceptccs[]', $key, stristr($CFG->an_acceptccs, $key) !== false, $val); echo "<br />\n";
}

View File

@ -1,10 +1,10 @@
<?php // $Id$
/// Prevent double paid
enrolment_plugin_authorize::prevent_double_paid($course);
prevent_double_paid($course);
/// Get payment methods enabled and use the first method as default payment method
$paymentmethodsenabled = enrolment_plugin_authorize::get_list_of_payment_methods(); // methods enabled
$paymentmethodsenabled = get_list_of_payment_methods(); // methods enabled
$paymentmethod = optional_param('paymentmethod', $paymentmethodsenabled[0], PARAM_ALPHA); // user's payment preference
if (!in_array($paymentmethod, $paymentmethodsenabled)) {
@ -41,7 +41,7 @@ function print_cc_form($classreference)
}
}
$curcost = enrolment_plugin_authorize::get_course_cost($course);
$curcost = get_course_cost($course);
$userfirstname = empty($form->ccfirstname) ? $USER->firstname : $form->ccfirstname;
$userlastname = empty($form->cclastname) ? $USER->lastname : $form->cclastname;
$useraddress = empty($form->ccaddress) ? $USER->address : $form->ccaddress;
@ -91,7 +91,7 @@ function print_cc_form($classreference)
<tr>
<td align="right"><?php print_string("cctype", "enrol_authorize") ?>: </td>
<td align="left"><?php
choose_from_menu(enrolment_plugin_authorize::get_list_of_creditcards(), 'cctype', $form->cctype);
choose_from_menu(get_list_of_creditcards(), 'cctype', $form->cctype);
if (!empty($classreference->authorizeerrors['cctype'])) { formerr($classreference->authorizeerrors['cctype']); }
?>
</td>
@ -154,7 +154,7 @@ function print_echeck_form($classreference)
}
}
$curcost = enrolment_plugin_authorize::get_course_cost($course);
$curcost = get_course_cost($course);
$userfirstname = empty($form->firstname) ? $USER->firstname : $form->firstname;
$userlastname = empty($form->lastname) ? $USER->lastname : $form->lastname;
?>
@ -218,12 +218,12 @@ function print_other_method($currentmethod)
global $course;
if ($currentmethod == AN_METHOD_CC) {
$otheravailable = in_array(AN_METHOD_ECHECK, enrolment_plugin_authorize::get_list_of_payment_methods());
$otheravailable = in_array(AN_METHOD_ECHECK, get_list_of_payment_methods());
$url = 'enrol.php?id='.$course->id.'&amp;paymentmethod='.AN_METHOD_ECHECK;
$stringtofetch = 'usingecheckmethod';
}
else {
$otheravailable = in_array(AN_METHOD_CC, enrolment_plugin_authorize::get_list_of_payment_methods());
$otheravailable = in_array(AN_METHOD_CC, get_list_of_payment_methods());
$url = 'enrol.php?id='.$course->id.'&amp;paymentmethod='.AN_METHOD_CC;
$stringtofetch = 'usingccmethod';
}

View File

@ -2,10 +2,10 @@
require_once($CFG->dirroot.'/enrol/enrol.class.php');
require_once($CFG->dirroot.'/enrol/authorize/const.php');
require_once($CFG->dirroot.'/enrol/authorize/localfuncs.php');
/**
* enrolment_plugin_authorize
*
* Authorize.net Payment Gateway plugin
*/
class enrolment_plugin_authorize
{
@ -64,7 +64,7 @@ class enrolment_plugin_authorize
function print_entry($course) {
global $CFG, $USER, $form;
$zerocost = enrolment_plugin_authorize::zero_cost($course);
$zerocost = zero_cost($course);
if ($zerocost) {
$manual = enrolment_factory::factory('manual');
if (!empty($this->errormsg)) {
@ -100,7 +100,7 @@ class enrolment_plugin_authorize
print_simple_box_start('center');
if (isguest()) {
$curcost = enrolment_plugin_authorize::get_course_cost($course);
$curcost = get_course_cost($course);
echo '<div align="center">';
echo '<p>'.get_string('paymentrequired').'</p>';
echo '<p><b>'.get_string('cost').": $curcost[currency] $curcost[cost]".'</b></p>';
@ -132,7 +132,7 @@ class enrolment_plugin_authorize
{
global $CFG;
if (enrolment_plugin_authorize::zero_cost($course) or
if (zero_cost($course) or
(!empty($course->password) and !empty($form->password))) { // MANUAL ENROLMENT
$manual = enrolment_factory::factory('manual');
$manual->check_entry($form, $course);
@ -141,15 +141,15 @@ class enrolment_plugin_authorize
}
}
else { // AUTHORIZE.NET ENROLMENT
$paymentmethodsenabled = enrolment_plugin_authorize::get_list_of_payment_methods();
$paymentmethodsenabled = get_list_of_payment_methods();
if (in_array(AN_METHOD_CC, $paymentmethodsenabled) and
!empty($form->ccsubmit) and
$this->validate_cc_form($form)) {
validate_cc_form($form, $this->authorizeerrors)) {
$this->cc_submit($form, $course);
}
elseif (in_array(AN_METHOD_ECHECK, $paymentmethodsenabled) and
!empty($form->echecksubmit) and
$this->validate_echeck_form($form)) {
validate_echeck_form($form, $this->authorizeerrors)) {
$this->echeck_submit($form, $course);
}
}
@ -169,10 +169,10 @@ class enrolment_plugin_authorize
global $CFG, $USER, $SESSION;
require_once('authorizenetlib.php');
enrolment_plugin_authorize::prevent_double_paid($course);
prevent_double_paid($course);
$useripno = getremoteaddr();
$curcost = enrolment_plugin_authorize::get_course_cost($course);
$curcost = get_course_cost($course);
$exp_date = sprintf("%02d", $form->ccexpiremm) . $form->ccexpireyyyy;
// NEW CC ORDER
@ -191,7 +191,7 @@ class enrolment_plugin_authorize
$order->currency = $curcost['currency'];
$order->id = insert_record("enrol_authorize", $order);
if (!$order->id) {
enrolment_plugin_authorize::email_to_admin("Error while trying to insert new data", $order);
email_to_admin("Error while trying to insert new data", $order);
$this->authorizeerrors['header'] = "Insert record error. Admin has been notified!";
return;
}
@ -225,7 +225,7 @@ class enrolment_plugin_authorize
$action = $an_review ? AN_ACTION_AUTH_ONLY : AN_ACTION_AUTH_CAPTURE;
$success = authorize_action($order, $message, $extra, $action, $form->cctype);
if (!$success) {
enrolment_plugin_authorize::email_to_admin($message, $order);
email_to_admin($message, $order);
$this->authorizeerrors['header'] = $message;
return;
}
@ -311,7 +311,7 @@ class enrolment_plugin_authorize
}
}
} else {
enrolment_plugin_authorize::email_to_admin("Error while trying to enrol " .
email_to_admin("Error while trying to enrol " .
fullname($USER) . " in '$course->fullname'", $order);
}
@ -328,10 +328,10 @@ class enrolment_plugin_authorize
global $CFG, $USER, $SESSION;
require_once('authorizenetlib.php');
enrolment_plugin_authorize::prevent_double_paid($course);
prevent_double_paid($course);
$useripno = getremoteaddr();
$curcost = enrolment_plugin_authorize::get_course_cost($course);
$curcost = get_course_cost($course);
// NEW ECHECK ORDER
$timenow = time();
@ -349,7 +349,7 @@ class enrolment_plugin_authorize
$order->currency = $curcost['currency'];
$order->id = insert_record("enrol_authorize", $order);
if (!$order->id) {
enrolment_plugin_authorize::email_to_admin("Error while trying to insert new data", $order);
email_to_admin("Error while trying to insert new data", $order);
$this->authorizeerrors['header'] = "Insert record error. Admin has been notified!";
return;
}
@ -382,7 +382,7 @@ class enrolment_plugin_authorize
$message = ''; // 2 actions only for echecks: auth_capture and credit
$success = authorize_action($order, $message, $extra, AN_ACTION_AUTH_CAPTURE);
if (!$success) {
enrolment_plugin_authorize::email_to_admin($message, $order);
email_to_admin($message, $order);
$this->authorizeerrors['header'] = $message;
return;
}
@ -436,7 +436,7 @@ class enrolment_plugin_authorize
}
}
} else {
enrolment_plugin_authorize::email_to_admin("Error while trying to enrol " .
email_to_admin("Error while trying to enrol " .
fullname($USER) . " in '$course->fullname'", $order);
}
@ -448,102 +448,6 @@ class enrolment_plugin_authorize
redirect($destination);
}
function validate_cc_form($form)
{
global $CFG;
require_once('ccval.php');
if (empty($form->cc)) {
$this->authorizeerrors['cc'] = get_string('missingcc', 'enrol_authorize');
}
if (empty($form->ccexpiremm) || empty($form->ccexpireyyyy)) {
$this->authorizeerrors['ccexpire'] = get_string('missingccexpire', 'enrol_authorize');
}
else {
$expdate = sprintf("%02d", intval($form->ccexpiremm)) . $form->ccexpireyyyy;
$validcc = CCVal($form->cc, $form->cctype, $expdate);
if (!$validcc) {
if ($validcc === 0) {
$this->authorizeerrors['ccexpire'] = get_string('ccexpired', 'enrol_authorize');
}
else {
$this->authorizeerrors['cc'] = get_string('ccinvalid', 'enrol_authorize');
}
}
}
if (empty($form->ccfirstname) || empty($form->cclastname)) {
$this->authorizeerrors['ccfirstlast'] = get_string('missingfullname');
}
if (empty($form->cvv) || !is_numeric($form->cvv)) {
$this->authorizeerrors['cvv'] = get_string('missingcvv', 'enrol_authorize');
}
if (empty($form->cctype) or
!in_array($form->cctype, array_keys(enrolment_plugin_authorize::get_list_of_creditcards()))) {
$this->authorizeerrors['cctype'] = get_string('missingcctype', 'enrol_authorize');
}
if (!empty($CFG->an_avs)) {
if (empty($form->ccaddress)) {
$this->authorizeerrors['ccaddress'] = get_string('missingaddress', 'enrol_authorize');
}
if (empty($form->cccity)) {
$this->authorizeerrors['cccity'] = get_string('missingcity');
}
if (empty($form->cccountry)) {
$this->authorizeerrors['cccountry'] = get_string('missingcountry');
}
}
if (empty($form->cczip) || !is_numeric($form->cczip)) {
$this->authorizeerrors['cczip'] = get_string('missingzip', 'enrol_authorize');
}
if (!empty($this->authorizeerrors)) {
$this->authorizeerrors['header'] = get_string('someerrorswerefound');
return false;
}
return true;
}
function validate_echeck_form($form)
{
global $CFG;
require_once('abaval.php');
if (empty($form->abacode) || !is_numeric($form->abacode)) {
$this->authorizeerrors['abacode'] = get_string('missingaba', 'enrol_authorize');
}
elseif (!ABAVal($form->abacode)) {
$this->authorizeerrors['abacode'] = get_string('invalidaba', 'enrol_authorize');
}
if (empty($form->accnum) || !is_numeric($form->accnum)) {
$this->authorizeerrors['accnum'] = get_string('invalidaccnum', 'enrol_authorize');
}
if (empty($form->acctype) || !in_array($form->acctype, array('CHECKING','BUSINESSCHECKING','SAVINGS'))) {
$this->authorizeerrors['acctype'] = get_string('invalidacctype', 'enrol_authorize');
}
if (empty($form->bankname)) {
$this->authorizeerrors['bankname'] = get_string('missingbankname', 'enrol_authorize');
}
if (empty($form->firstname) || empty($form->lastname)) {
$this->authorizeerrors['firstlast'] = get_string('missingfullname');
}
if (!empty($this->authorizeerrors)) {
$this->authorizeerrors['header'] = get_string('someerrorswerefound');
return false;
}
return true;
}
/**
* Gets access icons.
@ -556,7 +460,7 @@ class enrolment_plugin_authorize
$manual = enrolment_factory::factory('manual');
$str = $manual->get_access_icons($course);
$curcost = enrolment_plugin_authorize::get_course_cost($course);
$curcost = get_course_cost($course);
if (abs($curcost['cost']) > 0.00) {
$strrequirespayment = get_string("requirespayment");
@ -589,7 +493,7 @@ class enrolment_plugin_authorize
{
global $CFG;
if (! enrolment_plugin_authorize::check_openssl_loaded()) {
if (! check_openssl_loaded()) {
notify('PHP must be compiled with SSL support (--with-openssl)');
}
@ -653,14 +557,10 @@ class enrolment_plugin_authorize
set_config('an_test', optional_param('an_test', 0, PARAM_BOOL));
set_config('an_referer', optional_param('an_referer', 'http://', PARAM_URL));
$acceptmethods = optional_param('acceptmethods',
enrolment_plugin_authorize::get_list_of_payment_methods(),
PARAM_ALPHA);
$acceptmethods = optional_param('acceptmethods', get_list_of_payment_methods(), PARAM_ALPHA);
set_config('an_acceptmethods', implode(',', $acceptmethods));
$acceptccs = optional_param('acceptccs',
array_keys(enrolment_plugin_authorize::get_list_of_creditcards()),
PARAM_ALPHA);
$acceptccs = optional_param('acceptccs', array_keys(get_list_of_creditcards()), PARAM_ALPHA);
set_config('an_acceptccs', implode(',', $acceptccs));
$cutoff_hour = optional_param('an_cutoff_hour', 0, PARAM_INT);
@ -676,12 +576,12 @@ class enrolment_plugin_authorize
$captureday = ($captureday > 29) ? 29 : (($captureday < 0) ? 0 : $captureday);
$emailexpired = ($emailexpired > 5) ? 5 : (($emailexpired < 0) ? 0 : $emailexpired);
$mconfig = get_config('enrol/authorize');
if ((!empty($reviewval)) &&
($captureday > 0 || $emailexpired > 0) &&
(time() - intval($mconfig->an_lastcron) > 3600 * 24)) {
return false;
if (!empty($reviewval) && ($captureday > 0 || $emailexpired > 0)) {
$mconfig = get_config('enrol/authorize');
if (time() - intval($mconfig->an_lastcron) > 3600 * 24) {
return false;
}
}
set_config('an_review', $reviewval);
@ -692,7 +592,7 @@ class enrolment_plugin_authorize
// https and openssl library is required
if ((substr($CFG->wwwroot, 0, 5) !== 'https' and empty($CFG->loginhttps)) or
!enrolment_plugin_authorize::check_openssl_loaded()) {
!check_openssl_loaded()) {
return false;
}
@ -723,159 +623,6 @@ class enrolment_plugin_authorize
return true;
}
/**
* Whether a course cost is smaller than 0.01
*
* @param object $course Course information
* @return bool true if the course is free cost
* @static
*/
function zero_cost($course) {
$curcost = enrolment_plugin_authorize::get_course_cost($course);
return (abs($curcost['cost']) < 0.01);
}
/**
* Gets course cost
*
* @param object $course
* @return array cost=>'cost', currency=>'currency'
* @static
*/
function get_course_cost($course)
{
global $CFG;
$cost = (float)0;
$currency = (!empty($course->currency))
? $course->currency :( empty($CFG->enrol_currency)
? 'USD' : $CFG->enrol_currency );
if (!empty($course->cost)) {
$cost = (float)(((float)$course->cost) < 0) ? $CFG->enrol_cost : $course->cost;
}
$cost = format_float($cost, 2);
$ret = array('cost' => $cost, 'currency' => $currency);
return $ret;
}
/**
* Sends email to main admin.
* FIXME: Admin ROLES
*
* @param string $subject
* @param mixed $data
* @static
*/
function email_to_admin($subject, $data)
{
global $SITE;
$admin = get_admin();
$data = (array)$data;
$message = "$SITE->fullname: Transaction failed.\n\n$subject\n\n";
$message .= print_r($data, true);
email_to_user($admin, $admin, "$SITE->fullname: Authorize.net ERROR", $message);
}
/**
* prevent_double_paid (static method)
*
* @param object $course
* @static
*/
function prevent_double_paid($course)
{
global $CFG, $SESSION, $USER;
$status = empty($CFG->an_test) ? AN_STATUS_AUTH : AN_STATUS_NONE;
if ($rec=get_record('enrol_authorize','userid',$USER->id,'courseid',$course->id,'status',$status,'id')) {
$a = new stdClass;
$a->orderid = $rec->id;
$a->url = "$CFG->wwwroot/enrol/authorize/index.php?order=$a->orderid";
redirect($a->url, get_string("paymentpending", "enrol_authorize", $a), '10');
return;
}
if (isset($SESSION->ccpaid)) {
unset($SESSION->ccpaid);
redirect($CFG->wwwroot . '/login/logout.php');
return;
}
}
/**
* check_openssl_loaded (static method)
*
* @return bool
* @static
*/
function check_openssl_loaded() {
return extension_loaded('openssl');
}
/**
* Gets list of credits cards
*
* @param bool $getall, true get all of types, false config values
* @return array, Key => Value
* @static
*/
function get_list_of_creditcards($getall = false)
{
global $CFG;
$alltypes = array(
'mcd' => 'Master Card',
'vis' => 'Visa',
'amx' => 'American Express',
'dsc' => 'Discover',
'dnc' => 'Diners Club',
'jcb' => 'JCB',
'swi' => 'Switch',
'dlt' => 'Delta',
'enr' => 'EnRoute'
);
if ($getall or empty($CFG->an_acceptccs)) {
return $alltypes;
}
$ret = array();
$ccs = explode(',', $CFG->an_acceptccs);
foreach ($ccs as $key) {
$ret[$key] = $alltypes[$key];
}
return $ret;
}
/**
* Gets lists of payment methods (CC,ECHECK)
*
* @param bool $getall, get all of types, false config values
* @return array, Key only
* @static
*/
function get_list_of_payment_methods($getall = false)
{
global $CFG;
if ($getall) {
return array(AN_METHOD_CC, AN_METHOD_ECHECK);
}
elseif (empty($CFG->an_acceptmethods)) {
return array(AN_METHOD_CC); // default
}
else {
return explode(',', $CFG->an_acceptmethods);
}
}
/**
* This function is run by admin/cron.php every time if admin has enabled this plugin.
*
@ -911,7 +658,7 @@ class enrolment_plugin_authorize
if (empty($CFG->an_review) or
(!empty($CFG->an_test)) or
(intval($CFG->an_capture_day) < 1) or
(!enrolment_plugin_authorize::check_openssl_loaded())) {
(!check_openssl_loaded())) {
mtrace("disabled");
return; // order review disabled or test mode or manual capture or openssl wasn't loaded.
}

View File

@ -0,0 +1,306 @@
<?php // $Id$
function get_course_cost($course)
{
global $CFG;
$cost = (float)0;
$currency = (!empty($course->currency))
? $course->currency :( empty($CFG->enrol_currency)
? 'USD' : $CFG->enrol_currency );
if (!empty($course->cost)) {
$cost = (float)(((float)$course->cost) < 0) ? $CFG->enrol_cost : $course->cost;
}
$cost = format_float($cost, 2);
$ret = array(
'cost' => $cost,
'currency' => $currency
);
return $ret;
}
function zero_cost($course) {
$curcost = get_course_cost($course);
return (abs($curcost['cost']) < 0.01);
}
function prevent_double_paid($course)
{
global $CFG, $SESSION, $USER;
$status = empty($CFG->an_test) ? AN_STATUS_AUTH : AN_STATUS_NONE;
if ($rec=get_record('enrol_authorize','userid',$USER->id,'courseid',$course->id,'status',$status,'id')) {
$a = new stdClass;
$a->orderid = $rec->id;
$a->url = "$CFG->wwwroot/enrol/authorize/index.php?order=$a->orderid";
redirect($a->url, get_string("paymentpending", "enrol_authorize", $a), '10');
return;
}
if (isset($SESSION->ccpaid)) {
unset($SESSION->ccpaid);
redirect($CFG->wwwroot . '/login/logout.php');
return;
}
}
function get_list_of_creditcards($getall = false)
{
global $CFG;
$alltypes = array(
'mcd' => 'Master Card',
'vis' => 'Visa',
'amx' => 'American Express',
'dsc' => 'Discover',
'dnc' => 'Diners Club',
'jcb' => 'JCB',
'swi' => 'Switch',
'dlt' => 'Delta',
'enr' => 'EnRoute'
);
if ($getall or empty($CFG->an_acceptccs)) {
return $alltypes;
}
$ret = array();
$ccs = explode(',', $CFG->an_acceptccs);
foreach ($ccs as $key) {
$ret[$key] = $alltypes[$key];
}
return $ret;
}
function get_list_of_payment_methods($getall = false)
{
global $CFG;
if ($getall) {
return array(AN_METHOD_CC, AN_METHOD_ECHECK);
}
elseif (empty($CFG->an_acceptmethods)) {
return array(AN_METHOD_CC); // default
}
else {
return explode(',', $CFG->an_acceptmethods);
}
}
function ABAVal($aba)
{
if (ereg("^[0-9]{9}$", $aba)) {
$n = 0;
for($i = 0; $i < 9; $i += 3) {
$n += (substr($aba, $i, 1) * 3) +
(substr($aba, $i + 1, 1) * 7) +
(substr($aba, $i + 2, 1));
}
if ($n != 0 and $n % 10 == 0) {
return true;
}
}
return false;
}
function CCVal($Num, $Name = "n/a", $Exp = "")
{
// Check the expiration date first
if (strlen($Exp))
{
$Month = substr($Exp, 0, 2);
$Year = substr($Exp, -2);
$WorkDate = "$Month/01/$Year";
$WorkDate = strtotime($WorkDate);
$LastDay = date("t", $WorkDate);
$Expires = strtotime("$Month/$LastDay/$Year 11:59:59");
if ($Expires < time()) return 0;
}
// Innocent until proven guilty
$GoodCard = true;
// Get rid of any non-digits
$Num = ereg_replace("[^0-9]", "", $Num);
// Perform card-specific checks, if applicable
switch ($Name)
{
case "mcd" :
$GoodCard = ereg("^5[1-5].{14}$", $Num);
break;
case "vis" :
$GoodCard = ereg("^4.{15}$|^4.{12}$", $Num);
break;
case "amx" :
$GoodCard = ereg("^3[47].{13}$", $Num);
break;
case "dsc" :
$GoodCard = ereg("^6011.{12}$", $Num);
break;
case "dnc" :
$GoodCard = ereg("^30[0-5].{11}$|^3[68].{12}$", $Num);
break;
case "jcb" :
$GoodCard = ereg("^3.{15}$|^2131|1800.{11}$", $Num);
break;
case "dlt" :
$GoodCard = ereg("^4.{15}$", $Num);
break;
case "swi" :
$GoodCard = ereg("^[456].{15}$|^[456].{17,18}$", $Num);
break;
case "enr" :
$GoodCard = ereg("^2014.{11}$|^2149.{11}$", $Num);
break;
}
// The Luhn formula works right to left, so reverse the number.
$Num = strrev($Num);
$Total = 0;
for ($x=0; $x < strlen($Num); $x++)
{
$digit = substr($Num, $x, 1);
// If it's an odd digit, double it
if ($x/2 != floor($x/2)) {
$digit *= 2;
// If the result is two digits, add them
if (strlen($digit) == 2)
$digit = substr($digit, 0, 1) + substr($digit, 1, 1);
}
// Add the current digit, doubled and added if applicable, to the Total
$Total += $digit;
}
// If it passed (or bypassed) the card-specific check and the Total is
// evenly divisible by 10, it's cool!
return ($GoodCard && $Total % 10 == 0);
}
function validate_cc_form($form, &$err)
{
global $CFG;
if (empty($form->cc)) {
$err['cc'] = get_string('missingcc', 'enrol_authorize');
}
if (empty($form->ccexpiremm) || empty($form->ccexpireyyyy)) {
$err['ccexpire'] = get_string('missingccexpire', 'enrol_authorize');
}
else {
$expdate = sprintf("%02d", intval($form->ccexpiremm)) . $form->ccexpireyyyy;
$validcc = CCVal($form->cc, $form->cctype, $expdate);
if (!$validcc) {
if ($validcc === 0) {
$err['ccexpire'] = get_string('ccexpired', 'enrol_authorize');
}
else {
$err['cc'] = get_string('ccinvalid', 'enrol_authorize');
}
}
}
if (empty($form->ccfirstname) || empty($form->cclastname)) {
$err['ccfirstlast'] = get_string('missingfullname');
}
if (empty($form->cvv) || !is_numeric($form->cvv)) {
$err['cvv'] = get_string('missingcvv', 'enrol_authorize');
}
if (empty($form->cctype) or !in_array($form->cctype, array_keys(get_list_of_creditcards()))) {
$err['cctype'] = get_string('missingcctype', 'enrol_authorize');
}
if (!empty($CFG->an_avs))
{
if (empty($form->ccaddress)) {
$err['ccaddress'] = get_string('missingaddress', 'enrol_authorize');
}
if (empty($form->cccity)) {
$err['cccity'] = get_string('missingcity');
}
if (empty($form->cccountry)) {
$err['cccountry'] = get_string('missingcountry');
}
}
if (empty($form->cczip) || !is_numeric($form->cczip)) {
$err['cczip'] = get_string('missingzip', 'enrol_authorize');
}
if (!empty($err)) {
$err['header'] = get_string('someerrorswerefound');
return false;
}
return true;
}
function validate_echeck_form($form, &$err)
{
global $CFG;
if (empty($form->abacode) || !is_numeric($form->abacode)) {
$err['abacode'] = get_string('missingaba', 'enrol_authorize');
}
elseif (!ABAVal($form->abacode)) {
$err['abacode'] = get_string('invalidaba', 'enrol_authorize');
}
if (empty($form->accnum) || !is_numeric($form->accnum)) {
$err['accnum'] = get_string('invalidaccnum', 'enrol_authorize');
}
if (empty($form->acctype) || !in_array($form->acctype, array('CHECKING', 'BUSINESSCHECKING', 'SAVINGS'))) {
$err['acctype'] = get_string('invalidacctype', 'enrol_authorize');
}
if (empty($form->bankname)) {
$err['bankname'] = get_string('missingbankname', 'enrol_authorize');
}
if (empty($form->firstname) || empty($form->lastname)) {
$err['firstlast'] = get_string('missingfullname');
}
if (!empty($err)) {
$err['header'] = get_string('someerrorswerefound');
return false;
}
return true;
}
function email_to_admin($subject, $data)
{
global $SITE;
$admin = get_admin();
$data = (array)$data;
$message = "$SITE->fullname: Transaction failed.\n\n$subject\n\n";
$message .= print_r($data, true);
email_to_user($admin, $admin, "$SITE->fullname: Authorize.net ERROR", $message);
}
function check_openssl_loaded()
{
return extension_loaded('openssl');
}
?>